Skip to content

Commit 32c7729

Browse files
authored
ci: manual release trigger (#130)
* chore(ci): manual release trigger * chore(ci): remove unsupported semantic-release args * fix(ci): only flag release when nextRelease exists
1 parent 865e0a5 commit 32c7729

File tree

2 files changed

+78
-28
lines changed

2 files changed

+78
-28
lines changed

.github/workflows/release.yml

Lines changed: 78 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,100 @@
11
name: Release
2+
23
on:
3-
push:
4-
branches:
5-
- master
4+
workflow_dispatch:
5+
inputs:
6+
dryRun:
7+
description: 'Dry run (no actual release)'
8+
required: false
9+
default: false
10+
type: boolean
11+
repository_dispatch:
12+
types: [release-trigger]
13+
614
jobs:
715
release:
816
name: Release
917
runs-on: ubuntu-latest
18+
strategy:
19+
matrix:
20+
node-version: [22]
21+
outputs:
22+
released: ${{ steps.release.outputs.released }}
23+
version: ${{ steps.extract-version.outputs.version }}
1024
steps:
1125
- name: Checkout
12-
uses: actions/checkout@v2
26+
uses: actions/checkout@v4
1327
with:
1428
fetch-depth: 0
29+
token: ${{ secrets.GITHUB_TOKEN }}
30+
1531
- name: Setup Node
1632
uses: actions/setup-node@v4
1733
with:
18-
node-version: 22
19-
cache: 'npm'
34+
node-version: ${{ matrix.node-version }}
35+
cache: npm
36+
2037
- name: Setup Deno
2138
uses: denolib/setup-deno@v2
2239
with:
23-
deno-version: v1.x
24-
- name: Install dependencies
40+
deno-version: v1.x
41+
42+
- name: Validate trigger
43+
id: validate
2544
run: |
26-
npm install
27-
npm run build --if-present
45+
if [[ "${{ github.event_name }}" == "workflow_dispatch" || "${{ github.event_name }}" == "repository_dispatch" ]]; then
46+
echo "valid=true" >> "$GITHUB_OUTPUT"
47+
else
48+
echo "valid=false" >> "$GITHUB_OUTPUT"
49+
fi
50+
51+
- name: Install dependencies
52+
if: steps.validate.outputs.valid == 'true'
53+
run: npm install
54+
55+
- name: Build
56+
if: steps.validate.outputs.valid == 'true'
57+
run: npm run build --if-present
58+
2859
- name: Run tests
29-
run: |
30-
npm run test
60+
if: steps.validate.outputs.valid == 'true'
61+
run: npm run test
62+
3163
- name: Release
64+
id: release
65+
if: steps.validate.outputs.valid == 'true'
3266
env:
3367
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3468
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
35-
run: npx semantic-release
69+
DRY_RUN: ${{ github.event.inputs.dryRun || 'false' }}
70+
run: |
71+
node - <<'NODE'
72+
import fs from 'node:fs';
73+
74+
(async () => {
75+
try {
76+
const { default: semanticRelease } = await import('semantic-release');
77+
const result = await semanticRelease({
78+
dryRun: process.env.DRY_RUN === 'true',
79+
});
80+
81+
if (!result || process.env.DRY_RUN === 'true') {
82+
fs.appendFileSync(process.env.GITHUB_OUTPUT, 'released=false\n');
83+
process.exit(0);
84+
}
85+
86+
fs.appendFileSync(process.env.GITHUB_OUTPUT, 'released=true\n');
87+
fs.appendFileSync(process.env.GITHUB_OUTPUT, `version=${result.nextRelease.version}\n`);
88+
} catch (error) {
89+
console.error(error);
90+
process.exit(1);
91+
}
92+
})();
93+
NODE
94+
95+
- name: Extract version
96+
id: extract-version
97+
if: steps.release.outputs.released == 'true'
98+
run: |
99+
VERSION=$(node -p "require('./package.json').version")
100+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"

package-lock.json

Lines changed: 0 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)