Release 1.1.0 #11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| run-name: "Release ${{ inputs.version }}" | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version (e.g., 1.0.0 for full release, or 1.0.0-beta.1/1.0.0-rc.1 for tag-only)' | |
| required: true | |
| type: string | |
| jobs: | |
| determine-release-type: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| is_stable_version: ${{ steps.check.outputs.is_stable_version }} | |
| steps: | |
| - name: Determine release type | |
| id: check | |
| run: | | |
| VERSION="${{ github.event.inputs.version }}" | |
| BRANCH="${{ github.ref }}" | |
| # Stable version (x.y.z) - full release | |
| if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | |
| if [[ "$BRANCH" != "refs/heads/master" ]]; then | |
| echo "Error: Stable version releases can only be triggered from master branch" | |
| exit 1 | |
| fi | |
| echo "is_stable_version=true" >> $GITHUB_OUTPUT | |
| # Beta or RC version - tag only | |
| elif [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+-(beta|rc)\.[0-9]+$ ]]; then | |
| echo "is_stable_version=false" >> $GITHUB_OUTPUT | |
| # Anything else - reject | |
| else | |
| echo "Error: Invalid version format '$VERSION'" | |
| echo "Accepted formats:" | |
| echo " - x.y.z (stable release)" | |
| echo " - x.y.z-beta.N (tag only)" | |
| echo " - x.y.z-rc.N (tag only)" | |
| exit 1 | |
| fi | |
| release: | |
| needs: determine-release-type | |
| if: needs.determine-release-type.outputs.is_stable_version == 'true' | |
| runs-on: ubuntu-latest | |
| environment: release | |
| permissions: | |
| contents: write | |
| id-token: write | |
| steps: | |
| - name: Generate a token | |
| id: generate_token | |
| uses: actions/create-github-app-token@v1 | |
| with: | |
| app-id: ${{ secrets.RELEASER_APP_ID }} | |
| private-key: ${{ secrets.RELEASER_APP_KEY }} | |
| - uses: actions/checkout@v4 | |
| with: | |
| token: ${{ steps.generate_token.outputs.token }} | |
| - run: | | |
| git config --global user.email "releaser-bot" | |
| git config --global user.name "releaser-bot" | |
| - name: Log release info | |
| run: | | |
| echo "Releasing stable version: ${{ github.event.inputs.version }}" | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22' | |
| registry-url: 'https://registry.npmjs.org' | |
| - name: Update npm | |
| run: npm install -g npm@latest | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Release | |
| run: npx release-it ${{ github.event.inputs.version }} --ci --config .release-it.stable.json | |
| env: | |
| GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} | |
| tag-only: | |
| needs: determine-release-type | |
| if: needs.determine-release-type.outputs.is_stable_version == 'false' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Generate a token | |
| id: generate_token | |
| uses: actions/create-github-app-token@v1 | |
| with: | |
| app-id: ${{ secrets.RELEASER_APP_ID }} | |
| private-key: ${{ secrets.RELEASER_APP_KEY }} | |
| - uses: actions/checkout@v4 | |
| with: | |
| token: ${{ steps.generate_token.outputs.token }} | |
| - name: Create tag | |
| run: | | |
| git config --global user.email "releaser-bot" | |
| git config --global user.name "releaser-bot" | |
| VERSION="${{ github.event.inputs.version }}" | |
| git tag -a "$VERSION" -m "Tag $VERSION" | |
| git push origin "$VERSION" | |
| echo "Created tag: $VERSION" |