diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d1f2c23 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,56 @@ +name: Release + +on: + push: + tags: + - 'v*' + workflow_dispatch: + inputs: + version: + description: 'Version to release (e.g. 1.0.1)' + required: true + type: string + +permissions: + id-token: write + contents: write + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: '24' + registry-url: 'https://registry.npmjs.org' + - run: npm ci + - run: npm run lint + - run: npm run build + - run: npm test + - name: Set version from workflow input (patch release) + if: github.event_name == 'workflow_dispatch' + run: | + current=$(node -p "require('./package.json').version") + if [ "$current" != "${{ inputs.version }}" ]; then + npm version ${{ inputs.version }} --no-git-tag-version + fi + - run: npm publish --access public --provenance + + github-release: + needs: publish + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - name: Determine version + id: version + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "tag=v${{ inputs.version }}" >> "$GITHUB_OUTPUT" + else + echo "tag=${{ github.ref_name }}" >> "$GITHUB_OUTPUT" + fi + - uses: softprops/action-gh-release@v3 + with: + tag_name: ${{ steps.version.outputs.tag }} + generate_release_notes: true