Skip to content

Commit 8f9d0cf

Browse files
committed
feat: Staged publishing, security scanning
+ Minimum package age
1 parent 167ff45 commit 8f9d0cf

9 files changed

Lines changed: 962 additions & 460 deletions

File tree

.github/workflows/docs.yml

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
name: 📚 Deploy docs
22
on:
33
push:
4-
branches: ['main']
5-
workflow_dispatch:
4+
branches:
5+
- 'main'
66

77
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
88
permissions:
@@ -24,25 +24,31 @@ jobs:
2424
url: ${{ steps.deployment.outputs.page_url }}
2525
runs-on: ubuntu-latest
2626
steps:
27-
- name: Checkout repository ⬇️
27+
- name: Checkout repository
2828
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2929
with:
3030
persist-credentials: false
31-
- name: Setup Node.js 24 ⚙️
31+
32+
- name: Setup Node.js 24
3233
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
3334
with:
3435
node-version: 24.x
3536
cache: 'npm'
36-
- name: Install dependencies 📦
37+
38+
- name: Install dependencies
3739
run: npm ci
38-
- name: Generate docs 📚
40+
41+
- name: Generate docs
3942
run: node --run build:docs
40-
- name: Setup Pages 📄
43+
44+
- name: Setup Pages
4145
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
42-
- name: Upload artifact ⬆️
46+
47+
- name: Upload artifact
4348
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
4449
with:
4550
path: './docs'
46-
- name: Deploy to GitHub Pages 🚀
51+
52+
- name: Deploy to GitHub Pages
4753
id: deployment
4854
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0

.github/workflows/publish.yml

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,29 @@ jobs:
88
permissions:
99
contents: read
1010
id-token: write
11+
1112
steps:
12-
- name: Checkout repository ⬇️
13+
- name: Checkout repository
1314
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
1415
with:
1516
persist-credentials: false
16-
- name: Setup Node.js 24 ⚙️
17+
18+
- name: Setup Node.js 24
1719
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
1820
with:
1921
node-version: 24.x
20-
cache: 'npm'
2122
registry-url: 'https://registry.npmjs.org'
22-
- name: Ensure latest npm version 📦
23+
# Disable caching to prevent cache poisoning attacks
24+
package-manager-cache: false
25+
26+
- name: Ensure latest npm version
2327
run: npm install -g npm@latest
24-
- name: Install dependencies 📦
28+
29+
- name: Install dependencies
2530
run: npm ci
26-
- name: Build package 🏗️
31+
32+
- name: Build package
2733
run: npm run build
28-
- name: Publish to npm 🚀
29-
run: npm publish --provenance --access public
34+
35+
- name: Publish to npm (staged)
36+
run: npm stage publish --provenance --access public

.github/workflows/quality.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ on:
55
branches:
66
- 'main'
77
pull_request:
8+
89
permissions:
910
contents: read
1011

@@ -13,25 +14,25 @@ jobs:
1314
runs-on: ubuntu-latest
1415
timeout-minutes: 5
1516
steps:
16-
- name: Checkout repository ⬇️
17+
- name: Checkout repository
1718
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
1819
with:
1920
persist-credentials: false
2021

21-
- name: Use Node.js 24.x ⚙️
22+
- name: Use Node.js 24.x
2223
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
2324
with:
2425
node-version: 24.x
2526
cache: 'npm'
2627

27-
- name: Install dependencies 📦
28+
- name: Install dependencies
2829
run: npm ci
2930

30-
- name: Run linter 🧹
31+
- name: Run linter
3132
run: node --run lint
3233

33-
- name: Check formatting
34+
- name: Check formatting
3435
run: node --run check:format
3536

36-
- name: Check types 🔍
37+
- name: Check types
3738
run: node --run check:types

.github/workflows/security.yml

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: Security
2+
3+
on:
4+
push:
5+
branches:
6+
- 'main'
7+
pull_request:
8+
schedule:
9+
- cron: '42 5 * * 2' # Every Tuesday at 5:42am
10+
11+
permissions: {}
12+
13+
jobs:
14+
zizmor:
15+
name: Check GitHub Actions
16+
runs-on: ubuntu-latest
17+
timeout-minutes: 15
18+
permissions:
19+
security-events: write # Required to upload results as security events
20+
contents: read
21+
steps:
22+
- name: Checkout repository
23+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
24+
with:
25+
persist-credentials: false
26+
27+
- name: Run zizmor
28+
uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6
29+
30+
codeql:
31+
name: CodeQL (${{ matrix.language }})
32+
runs-on: 'ubuntu-latest'
33+
permissions:
34+
security-events: write
35+
packages: read
36+
actions: read
37+
contents: read
38+
39+
strategy:
40+
fail-fast: false
41+
matrix:
42+
include:
43+
- language: actions
44+
build-mode: none
45+
- language: javascript-typescript
46+
build-mode: none
47+
48+
steps:
49+
- name: Checkout repository
50+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
51+
with:
52+
persist-credentials: false
53+
54+
- name: Initialize CodeQL
55+
uses: github/codeql-action/init@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
56+
with:
57+
languages: ${{ matrix.language }}
58+
build-mode: ${{ matrix.build-mode }}
59+
queries: security-and-quality
60+
61+
- name: Perform CodeQL Analysis
62+
uses: github/codeql-action/analyze@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
63+
with:
64+
category: '/language:${{matrix.language}}'

.github/workflows/test.yml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,33 @@ on:
44
push:
55
branches: ['main']
66
pull_request:
7+
78
permissions:
89
contents: read
910

1011
jobs:
1112
test:
1213
runs-on: ubuntu-latest
14+
timeout-minutes: 5
1315
steps:
14-
- name: Checkout repository ⬇️
16+
- name: Checkout repository
1517
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
1618
with:
1719
persist-credentials: false
18-
- name: Setup Node.js 24 ⚙️
20+
21+
- name: Setup Node.js 24
1922
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
2023
with:
2124
node-version: 24.x
2225
cache: 'npm'
23-
- name: Install dependencies 📦
26+
27+
- name: Install dependencies
2428
run: npm ci
25-
- name: Run tests 🧪
29+
30+
- name: Run tests
2631
run: node --run test:cov
32+
2733
- name: Upload coverage report to Codecov 📊
28-
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
34+
uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
2935
with:
3036
token: ${{ secrets.CODECOV_TOKEN }}

.npmignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ CODE_OF_CONDUCT.md
1414
CONTRIBUTING.md
1515
.prettierrc.mjs
1616
.oxlintrc.json
17+
.npmrc

.npmrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ignore-scripts = true
2+
min-release-age = 2

0 commit comments

Comments
 (0)