From 5cae26ad525f935102914183c1bd68753049dd45 Mon Sep 17 00:00:00 2001 From: Christian Bager Bach Houmann Date: Sun, 23 Nov 2025 21:24:32 +0100 Subject: [PATCH 1/3] chore(ci): manual release trigger --- .github/workflows/release.yml | 113 ++++++++++++++++++++++++++++++---- package-lock.json | 15 ----- 2 files changed, 100 insertions(+), 28 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 476b4bcf..5cfd4dad 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,35 +1,122 @@ name: Release + on: - push: - branches: - - master + workflow_dispatch: + inputs: + releaseType: + description: 'Release type (patch, minor, major)' + required: false + default: 'auto' + type: choice + options: + - auto + - patch + - minor + - major + dryRun: + description: 'Dry run (no actual release)' + required: false + default: false + type: boolean + preRelease: + description: 'Pre-release identifier (beta, alpha, rc, etc.)' + required: false + default: '' + type: string + repository_dispatch: + types: [release-trigger] + jobs: release: name: Release runs-on: ubuntu-latest + strategy: + matrix: + node-version: [22] + outputs: + released: ${{ steps.release.outputs.released }} + version: ${{ steps.extract-version.outputs.version }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 22 - cache: 'npm' + node-version: ${{ matrix.node-version }} + cache: npm + - name: Setup Deno uses: denolib/setup-deno@v2 with: - deno-version: v1.x - - name: Install dependencies + deno-version: v1.x + + - name: Validate trigger + id: validate run: | - npm install - npm run build --if-present + if [[ "${{ github.event_name }}" == "workflow_dispatch" || "${{ github.event_name }}" == "repository_dispatch" ]]; then + echo "valid=true" >> "$GITHUB_OUTPUT" + else + echo "valid=false" >> "$GITHUB_OUTPUT" + fi + + - name: Install dependencies + if: steps.validate.outputs.valid == 'true' + run: npm install + + - name: Build + if: steps.validate.outputs.valid == 'true' + run: npm run build --if-present + - name: Run tests - run: | - npm run test + if: steps.validate.outputs.valid == 'true' + run: npm run test + - name: Release + id: release + if: steps.validate.outputs.valid == 'true' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - run: npx semantic-release + RELEASE_TYPE: ${{ github.event.inputs.releaseType || 'auto' }} + DRY_RUN: ${{ github.event.inputs.dryRun || 'false' }} + PRE_RELEASE: ${{ github.event.inputs.preRelease || '' }} + run: | + EXTRA_ARGS="" + + if [ "$DRY_RUN" = "true" ]; then + echo "Running in dry-run mode" + EXTRA_ARGS="--dry-run" + fi + + if [ -n "$PRE_RELEASE" ]; then + echo "Running pre-release: $PRE_RELEASE" + npx semantic-release --prerelease "$PRE_RELEASE" $EXTRA_ARGS + EXIT_CODE=$? + elif [ "$RELEASE_TYPE" = "auto" ]; then + echo "Running auto release" + npx semantic-release $EXTRA_ARGS + EXIT_CODE=$? + else + echo "Running release with type: $RELEASE_TYPE" + npx semantic-release --release-as "$RELEASE_TYPE" $EXTRA_ARGS + EXIT_CODE=$? + fi + + if [ "$DRY_RUN" != "true" ] && [ $EXIT_CODE -eq 0 ]; then + echo "released=true" >> "$GITHUB_OUTPUT" + else + echo "released=false" >> "$GITHUB_OUTPUT" + fi + + exit $EXIT_CODE + + - name: Extract version + id: extract-version + if: steps.release.outputs.released == 'true' + run: | + VERSION=$(node -p "require('./package.json').version") + echo "version=$VERSION" >> "$GITHUB_OUTPUT" diff --git a/package-lock.json b/package-lock.json index faac06d9..240c252f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13046,21 +13046,6 @@ } } }, - "node_modules/svelte-check/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/svelte-preprocess": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz", From 707d97fd48f55c0307162cb9e9b842848562bd54 Mon Sep 17 00:00:00 2001 From: Christian Bager Bach Houmann Date: Sun, 23 Nov 2025 21:30:29 +0100 Subject: [PATCH 2/3] chore(ci): remove unsupported semantic-release args --- .github/workflows/release.yml | 32 ++------------------------------ 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5cfd4dad..0d032239 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,26 +3,11 @@ name: Release on: workflow_dispatch: inputs: - releaseType: - description: 'Release type (patch, minor, major)' - required: false - default: 'auto' - type: choice - options: - - auto - - patch - - minor - - major dryRun: description: 'Dry run (no actual release)' required: false default: false type: boolean - preRelease: - description: 'Pre-release identifier (beta, alpha, rc, etc.)' - required: false - default: '' - type: string repository_dispatch: types: [release-trigger] @@ -81,9 +66,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - RELEASE_TYPE: ${{ github.event.inputs.releaseType || 'auto' }} DRY_RUN: ${{ github.event.inputs.dryRun || 'false' }} - PRE_RELEASE: ${{ github.event.inputs.preRelease || '' }} run: | EXTRA_ARGS="" @@ -92,19 +75,8 @@ jobs: EXTRA_ARGS="--dry-run" fi - if [ -n "$PRE_RELEASE" ]; then - echo "Running pre-release: $PRE_RELEASE" - npx semantic-release --prerelease "$PRE_RELEASE" $EXTRA_ARGS - EXIT_CODE=$? - elif [ "$RELEASE_TYPE" = "auto" ]; then - echo "Running auto release" - npx semantic-release $EXTRA_ARGS - EXIT_CODE=$? - else - echo "Running release with type: $RELEASE_TYPE" - npx semantic-release --release-as "$RELEASE_TYPE" $EXTRA_ARGS - EXIT_CODE=$? - fi + npx semantic-release $EXTRA_ARGS + EXIT_CODE=$? if [ "$DRY_RUN" != "true" ] && [ $EXIT_CODE -eq 0 ]; then echo "released=true" >> "$GITHUB_OUTPUT" From 7ebf6428a808a3e92aa97e5ff2dd666cb42e5643 Mon Sep 17 00:00:00 2001 From: Christian Bager Bach Houmann Date: Sun, 23 Nov 2025 21:40:37 +0100 Subject: [PATCH 3/3] fix(ci): only flag release when nextRelease exists --- .github/workflows/release.yml | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0d032239..3d38a801 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -68,23 +68,29 @@ jobs: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} DRY_RUN: ${{ github.event.inputs.dryRun || 'false' }} run: | - EXTRA_ARGS="" + node - <<'NODE' + import fs from 'node:fs'; - if [ "$DRY_RUN" = "true" ]; then - echo "Running in dry-run mode" - EXTRA_ARGS="--dry-run" - fi - - npx semantic-release $EXTRA_ARGS - EXIT_CODE=$? + (async () => { + try { + const { default: semanticRelease } = await import('semantic-release'); + const result = await semanticRelease({ + dryRun: process.env.DRY_RUN === 'true', + }); - if [ "$DRY_RUN" != "true" ] && [ $EXIT_CODE -eq 0 ]; then - echo "released=true" >> "$GITHUB_OUTPUT" - else - echo "released=false" >> "$GITHUB_OUTPUT" - fi + if (!result || process.env.DRY_RUN === 'true') { + fs.appendFileSync(process.env.GITHUB_OUTPUT, 'released=false\n'); + process.exit(0); + } - exit $EXIT_CODE + fs.appendFileSync(process.env.GITHUB_OUTPUT, 'released=true\n'); + fs.appendFileSync(process.env.GITHUB_OUTPUT, `version=${result.nextRelease.version}\n`); + } catch (error) { + console.error(error); + process.exit(1); + } + })(); + NODE - name: Extract version id: extract-version