Release Sourcebot #1
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 Sourcebot | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| bump_type: | |
| description: "Type of version bump to apply" | |
| required: true | |
| type: choice | |
| options: | |
| - patch | |
| - minor | |
| - major | |
| concurrency: | |
| group: release-sourcebot | |
| cancel-in-progress: false | |
| jobs: | |
| release: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| outputs: | |
| version: ${{ steps.calculate_version.outputs.version }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: main | |
| fetch-depth: 0 | |
| - name: Calculate new version | |
| id: calculate_version | |
| run: | | |
| # Extract current version from CHANGELOG.md | |
| CURRENT_VERSION=$(grep -oP '## \[\K[0-9]+\.[0-9]+\.[0-9]+' CHANGELOG.md | head -n 1) | |
| if [ -z "$CURRENT_VERSION" ]; then | |
| echo "Error: Could not extract current version from CHANGELOG.md" | |
| exit 1 | |
| fi | |
| echo "Current version: $CURRENT_VERSION" | |
| # Parse version components | |
| IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION" | |
| # Apply bump based on input | |
| BUMP_TYPE="${{ inputs.bump_type }}" | |
| case "$BUMP_TYPE" in | |
| major) | |
| MAJOR=$((MAJOR + 1)) | |
| MINOR=0 | |
| PATCH=0 | |
| ;; | |
| minor) | |
| MINOR=$((MINOR + 1)) | |
| PATCH=0 | |
| ;; | |
| patch) | |
| PATCH=$((PATCH + 1)) | |
| ;; | |
| *) | |
| echo "Error: Invalid bump type: $BUMP_TYPE" | |
| exit 1 | |
| ;; | |
| esac | |
| NEW_VERSION="$MAJOR.$MINOR.$PATCH" | |
| echo "New version: $NEW_VERSION" | |
| # Export to GITHUB_ENV for use in subsequent steps within this job | |
| echo "VERSION=$NEW_VERSION" >> $GITHUB_ENV | |
| # Export to GITHUB_OUTPUT for use in other jobs | |
| echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT | |
| - name: Check if version already exists | |
| run: | | |
| if grep -q "## \[$VERSION\]" CHANGELOG.md; then | |
| echo "Error: Version $VERSION already exists in CHANGELOG.md" | |
| exit 1 | |
| fi | |
| if git tag | grep -q "^v$VERSION$"; then | |
| echo "Error: Tag v$VERSION already exists" | |
| exit 1 | |
| fi | |
| - name: Update CHANGELOG.md and version.ts | |
| run: | | |
| DATE=$(date +%Y-%m-%d) | |
| # Insert the new version header after the [Unreleased] line | |
| sed -i "/## \[Unreleased\]/a\\ | |
| \\ | |
| ## [$VERSION] - $DATE" CHANGELOG.md | |
| echo "Updated CHANGELOG.md with version $VERSION" | |
| cat CHANGELOG.md | head -n 15 | |
| # Update version.ts | |
| cat > packages/shared/src/version.ts << EOF | |
| // This file is auto-generated by .github/workflows/release-sourcebot.yml | |
| export const SOURCEBOT_VERSION = "v$VERSION"; | |
| EOF | |
| echo "Updated version.ts with version v$VERSION" | |
| cat packages/shared/src/version.ts | |
| - name: Configure git | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| - name: Commit changes | |
| run: | | |
| git add CHANGELOG.md packages/shared/src/version.ts | |
| git commit -m "Release v$VERSION" | |
| - name: Create annotated tag | |
| run: | | |
| git tag -a "v$VERSION" -m "sourcebot v$VERSION" | |
| - name: Push changes | |
| run: | | |
| git push origin main | |
| git push origin --tags | |
| - name: Create GitHub release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh release create "v$VERSION" \ | |
| --verify-tag \ | |
| --generate-notes \ | |
| --latest | |
| publish: | |
| needs: release | |
| uses: ./.github/workflows/ghcr-publish.yml | |
| with: | |
| version: v${{ needs.release.outputs.version }} | |
| permissions: | |
| contents: read | |
| packages: write | |
| id-token: write |