Create Release #151
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: Create Release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| dry_run: | |
| description: "Dry run (only show what would be created)" | |
| required: false | |
| type: boolean | |
| default: false | |
| workflow_run: | |
| workflows: ["CI All"] | |
| types: | |
| - completed | |
| branches: | |
| - main | |
| jobs: | |
| create-release: | |
| runs-on: ubuntu-latest | |
| # Run if: manual dispatch OR (CI All succeeded AND commit is a version bump) | |
| if: | | |
| github.event_name == 'workflow_dispatch' || | |
| (github.event.workflow_run.conclusion == 'success' && | |
| github.event.workflow_run.head_branch == 'main' && | |
| github.event.workflow_run.event == 'push' && | |
| startsWith(github.event.workflow_run.head_commit.message, 'chore: bump Claude Code to')) | |
| environment: production | |
| permissions: | |
| contents: write | |
| outputs: | |
| next_version: ${{ steps.next_version.outputs.next_version }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get latest tag | |
| id: get_latest_tag | |
| run: | | |
| # Get only version tags (v + number pattern) | |
| latest_tag=$(git tag -l 'v[0-9]*' | sort -V | tail -1 || echo "v0.0.0") | |
| if [ -z "$latest_tag" ]; then | |
| latest_tag="v0.0.0" | |
| fi | |
| echo "latest_tag=$latest_tag" >> $GITHUB_OUTPUT | |
| echo "Latest tag: $latest_tag" | |
| - name: Calculate next version | |
| id: next_version | |
| run: | | |
| latest_tag="${{ steps.get_latest_tag.outputs.latest_tag }}" | |
| # Remove 'v' prefix and split by dots | |
| version=${latest_tag#v} | |
| IFS='.' read -ra VERSION_PARTS <<< "$version" | |
| # Increment patch version | |
| major=${VERSION_PARTS[0]:-0} | |
| minor=${VERSION_PARTS[1]:-0} | |
| patch=${VERSION_PARTS[2]:-0} | |
| patch=$((patch + 1)) | |
| next_version="v${major}.${minor}.${patch}" | |
| echo "next_version=$next_version" >> $GITHUB_OUTPUT | |
| echo "Next version: $next_version" | |
| - name: Display dry run info | |
| if: ${{ inputs.dry_run }} | |
| run: | | |
| echo "🔍 DRY RUN MODE" | |
| echo "Would create tag: ${{ steps.next_version.outputs.next_version }}" | |
| echo "From commit: ${{ github.sha }}" | |
| echo "Previous tag: ${{ steps.get_latest_tag.outputs.latest_tag }}" | |
| - name: Create and push tag | |
| if: ${{ !inputs.dry_run }} | |
| run: | | |
| next_version="${{ steps.next_version.outputs.next_version }}" | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git tag -a "$next_version" -m "Release $next_version" | |
| git push origin "$next_version" | |
| - name: Create Release | |
| if: ${{ !inputs.dry_run }} | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| next_version="${{ steps.next_version.outputs.next_version }}" | |
| gh release create "$next_version" \ | |
| --title "$next_version" \ | |
| --generate-notes \ | |
| --latest=false # keep v1 as latest | |
| update-major-tag: | |
| needs: create-release | |
| # Skip for dry runs (workflow_run events are never dry runs) | |
| if: github.event_name == 'workflow_run' || !inputs.dry_run | |
| runs-on: ubuntu-latest | |
| environment: production | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Update major version tag | |
| run: | | |
| next_version="${{ needs.create-release.outputs.next_version }}" | |
| # Extract major version (e.g., v0 from v0.0.20) | |
| major_version=$(echo "$next_version" | cut -d. -f1) | |
| # Update the major version tag to point to this release | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git tag -fa "$major_version" -m "Update $major_version tag to $next_version" | |
| git push origin "$major_version" --force | |
| echo "Updated $major_version tag to point to $next_version" | |
| # release-base-action: | |
| # needs: create-release | |
| # if: ${{ !inputs.dry_run }} | |
| # runs-on: ubuntu-latest | |
| # environment: production | |
| # steps: | |
| # - name: Checkout base-action repo | |
| # uses: actions/checkout@v6 | |
| # with: | |
| # repository: anthropics/claude-code-base-action | |
| # token: ${{ secrets.CLAUDE_CODE_BASE_ACTION_PAT }} | |
| # fetch-depth: 0 | |
| # | |
| # - name: Create and push tag | |
| # run: | | |
| # next_version="${{ needs.create-release.outputs.next_version }}" | |
| # | |
| # git config user.name "github-actions[bot]" | |
| # git config user.email "github-actions[bot]@users.noreply.github.com" | |
| # | |
| # # Create the version tag | |
| # git tag -a "$next_version" -m "Release $next_version - synced from claude-code-action" | |
| # git push origin "$next_version" | |
| # | |
| # # Update the beta tag | |
| # git tag -fa beta -m "Update beta tag to ${next_version}" | |
| # git push origin beta --force | |
| # | |
| # - name: Create GitHub release | |
| # env: | |
| # GH_TOKEN: ${{ secrets.CLAUDE_CODE_BASE_ACTION_PAT }} | |
| # run: | | |
| # next_version="${{ needs.create-release.outputs.next_version }}" | |
| # | |
| # # Create the release | |
| # gh release create "$next_version" \ | |
| # --repo anthropics/claude-code-base-action \ | |
| # --title "$next_version" \ | |
| # --notes "Release $next_version - synced from anthropics/claude-code-action" \ | |
| # --latest=false | |
| # | |
| # # Update beta release to be latest | |
| # gh release edit beta \ | |
| # --repo anthropics/claude-code-base-action \ | |
| # --latest |