01 - Steampipe: Release #39
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: "01 - Steampipe: Release" | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| environment: | |
| type: choice | |
| description: "Select Release Type" | |
| options: | |
| # to change the values in this option, we also need to update the condition test below in at least 3 location. Search for github.event.inputs.environment | |
| - Development (alpha) | |
| - Development (beta) | |
| - Final (RC and final release) | |
| required: true | |
| version: | |
| description: "Version (without 'v')" | |
| required: true | |
| default: 0.2.\invalid | |
| confirmDevelop: | |
| description: Confirm running on develop branch | |
| required: true | |
| type: boolean | |
| env: | |
| # Version number from user input, used throughout the workflow for tagging, branching, and release operations | |
| VERSION: ${{ github.event.inputs.version }} | |
| # GitHub personal access token for authenticated API operations like creating releases, managing PRs, and repository access | |
| GH_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} | |
| # PostgreSQL connection string used in acceptance tests (tests/acceptance/test_files/cloud.bats) | |
| SPIPETOOLS_PG_CONN_STRING: ${{ secrets.SPIPETOOLS_PG_CONN_STRING }} | |
| # Authentication token for Steampipe Cloud services used in acceptance tests (tests/acceptance/test_files/cloud.bats and snapshot.bats) | |
| SPIPETOOLS_TOKEN: ${{ secrets.SPIPETOOLS_TOKEN }} | |
| # Disable update checks during CI runs to avoid unnecessary network calls and delays | |
| STEAMPIPE_UPDATE_CHECK: false | |
| jobs: | |
| ensure_branch_in_homebrew: | |
| name: Ensure branch exists in homebrew-tap | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Calculate version | |
| id: calculate_version | |
| run: | | |
| echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV | |
| - name: Parse semver string | |
| id: semver_parser | |
| uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7 | |
| with: | |
| input_string: ${{ github.event.inputs.version }} | |
| - name: Checkout | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| repository: turbot/homebrew-tap | |
| token: ${{ secrets.GH_ACCESS_TOKEN }} | |
| ref: main | |
| - name: Delete base branch if exists | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| git fetch --all | |
| git push origin --delete bump-brew | |
| git push origin --delete $VERSION | |
| continue-on-error: true | |
| - name: Create base branch | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| git checkout -b bump-brew | |
| git push --set-upstream origin bump-brew | |
| build_and_release_cli: | |
| name: Release CLI | |
| needs: [ensure_branch_in_homebrew] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| path: steampipe | |
| ref: ${{ github.event.ref }} | |
| - name: Checkout Pipe Fittings Components repository | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| repository: turbot/pipe-fittings | |
| path: pipe-fittings | |
| ref: v1.6.x | |
| - name: Calculate version | |
| id: calculate_version | |
| run: | | |
| if [ "${{ github.event.inputs.environment }}" = "Development (alpha)" ]; then | |
| echo "VERSION=v${{ github.event.inputs.version }}-alpha.$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV | |
| elif [ "${{ github.event.inputs.environment }}" = "Development (beta)" ]; then | |
| echo "VERSION=v${{ github.event.inputs.version }}-beta.$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV | |
| else | |
| echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV | |
| fi | |
| - name: Tag Release | |
| run: | | |
| cd steampipe | |
| git config user.name "Steampipe GitHub Actions Bot" | |
| git config user.email [email protected] | |
| git tag $VERSION | |
| git push origin $VERSION | |
| - name: Set up Go | |
| uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0 | |
| with: | |
| go-version: 1.24 | |
| - name: Install GoReleaser | |
| uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a # v6.4.0 | |
| with: | |
| install-only: true | |
| - name: Run GoReleaser | |
| run: | | |
| cd steampipe | |
| goreleaser release --clean | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} | |
| create_pr_in_homebrew: | |
| name: Create PR in homebrew-tap | |
| if: ${{ github.event.inputs.environment == 'Final (RC and final release)' }} | |
| needs: [ensure_branch_in_homebrew, build_and_release_cli] | |
| runs-on: ubuntu-latest | |
| env: | |
| Version: ${{ github.event.inputs.version }} | |
| steps: | |
| - name: Calculate version | |
| id: calculate_version | |
| run: | | |
| echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV | |
| - name: Parse semver string | |
| id: semver_parser | |
| uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7 | |
| with: | |
| input_string: ${{ github.event.inputs.version }} | |
| - name: Checkout | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| repository: turbot/homebrew-tap | |
| token: ${{ secrets.GH_ACCESS_TOKEN }} | |
| ref: main | |
| - name: Create a new branch off the base branch | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| git fetch --all | |
| git checkout bump-brew | |
| git checkout -b $VERSION | |
| git push --set-upstream origin $VERSION | |
| - name: Close pull request if already exists | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| gh pr close $VERSION | |
| continue-on-error: true | |
| - name: Create pull request | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| gh pr create --base main --head $VERSION --title "Steampipe $Version" --body "Update formula" | |
| update_pr_for_versioning: | |
| name: Update PR | |
| if: ${{ github.event.inputs.environment == 'Final (RC and final release)' }} | |
| needs: [create_pr_in_homebrew] | |
| runs-on: ubuntu-latest | |
| env: | |
| Version: ${{ github.event.inputs.version }} | |
| steps: | |
| - name: Calculate version | |
| id: calculate_version | |
| run: | | |
| echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV | |
| - name: Parse semver string | |
| id: semver_parser | |
| uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7 | |
| with: | |
| input_string: ${{ github.event.inputs.version }} | |
| - name: Checkout | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| repository: turbot/homebrew-tap | |
| token: ${{ secrets.GH_ACCESS_TOKEN }} | |
| ref: v${{ github.event.inputs.version }} | |
| - name: Update live version | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| scripts/formula_versioning.sh | |
| git config --global user.email "[email protected]" | |
| git config --global user.name "Puskar Basu" | |
| git add . | |
| git commit -m "Versioning brew formulas" | |
| git push origin $VERSION | |
| update_homebrew_tap: | |
| name: Update homebrew-tap formula | |
| if: ${{ github.event.inputs.environment == 'Final (RC and final release)' }} | |
| needs: update_pr_for_versioning | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Calculate version | |
| id: calculate_version | |
| run: | | |
| echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV | |
| - name: Parse semver string | |
| id: semver_parser | |
| uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7 | |
| with: | |
| input_string: ${{ github.event.inputs.version }} | |
| - name: Checkout | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| repository: turbot/homebrew-tap | |
| token: ${{ secrets.GH_ACCESS_TOKEN }} | |
| ref: main | |
| - name: Get pull request title | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| id: pr_title | |
| run: >- | |
| echo "PR_TITLE=$( | |
| gh pr view $VERSION --json title | jq .title | tr -d '"' | |
| )" >> $GITHUB_OUTPUT | |
| - name: Output | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| echo ${{ steps.pr_title.outputs.PR_TITLE }} | |
| echo ${{ env.VERSION }} | |
| - name: Fail if PR title does not match with version | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| if [[ "${{ steps.pr_title.outputs.PR_TITLE }}" == "Steampipe ${{ env.VERSION }}" ]]; then | |
| echo "Correct version" | |
| else | |
| echo "Incorrect version" | |
| exit 1 | |
| fi | |
| - name: Merge pull request to update brew formula | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| git fetch --all | |
| gh pr merge $VERSION --squash --delete-branch | |
| git push origin --delete bump-brew | |
| trigger_smoke_tests: | |
| name: Trigger Smoke Tests | |
| if: ${{ github.event.inputs.environment == 'Final (RC and final release)' }} | |
| needs: update_homebrew_tap | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Calculate version | |
| id: calculate_version | |
| run: | | |
| echo "VERSION=v${{ github.event.inputs.version }}" >> $GITHUB_ENV | |
| - name: Parse semver string | |
| id: semver_parser | |
| uses: booxmedialtd/ws-action-parse-semver@7784200024d6b3fc01253e617ec0168daf603de3 # v1.4.7 | |
| with: | |
| input_string: ${{ github.event.inputs.version }} | |
| - name: Trigger smoke test workflow | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| gh workflow run "12-test-post-release-linux-distros.yaml" \ | |
| --ref ${{ github.ref }} \ | |
| --field version=$VERSION \ | |
| --repo ${{ github.repository }} | |
| env: | |
| GH_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} | |
| - name: Get smoke test workflow run URL | |
| if: steps.semver_parser.outputs.prerelease == '' | |
| run: | | |
| echo "Waiting for smoke test workflow to start..." | |
| sleep 10 | |
| # Get the most recent run of the smoke test workflow | |
| RUN_ID=$(gh run list \ | |
| --workflow="12-test-post-release-linux-distros.yaml" \ | |
| --repo ${{ github.repository }} \ | |
| --limit 1 \ | |
| --json databaseId \ | |
| --jq '.[0].databaseId') | |
| if [ -n "$RUN_ID" ]; then | |
| WORKFLOW_URL="https://github.com/${{ github.repository }}/actions/runs/$RUN_ID" | |
| echo "✅ Smoke test workflow triggered successfully!" | |
| echo "🔗 Monitor progress at: $WORKFLOW_URL" | |
| echo "" | |
| echo "Workflow details:" | |
| echo " - Version: $VERSION" | |
| echo " - Workflow: 12-test-post-release-linux-distros.yaml" | |
| echo " - Run ID: $RUN_ID" | |
| else | |
| echo "⚠️ Could not retrieve workflow run ID. Check manually at:" | |
| echo "https://github.com/${{ github.repository }}/actions/workflows/12-test-post-release-linux-distros.yaml" | |
| fi | |
| env: | |
| GH_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} |