02 - Powerpipe: Release #3
This file contains 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: "02 - Powerpipe: Release" | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: "The version to release (must be prefixed with 'v')" | |
required: true | |
env: | |
PROJECT_ID: steampipe | |
ORG: turbot | |
CORE_REPO: us-docker.pkg.dev/steampipe/steampipe | |
ASSET_IMAGE_NAME: assets | |
GH_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} | |
VERSION: ${{ github.event.inputs.version }} | |
jobs: | |
verify_input: | |
name: Verify Inputs | |
runs-on: ubuntu-latest | |
steps: | |
- name: Trim asset version prefix and Validate | |
run: |- | |
echo $VERSION | |
trim=${VERSION#"v"} | |
echo $trim | |
if [[ $trim =~ ^[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]]; then | |
echo "Version OK: $trim" | |
else | |
echo "Invalid version: $trim" | |
exit 1 | |
fi | |
echo "VERSION=${trim}" >> $GITHUB_ENV | |
- name: Validate Branch | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.ref }} | |
acceptance_tests: | |
name: Run Acceptance Tests | |
needs: [verify_input] | |
uses: turbot/powerpipe/.github/workflows/11-test-acceptance.yaml@main | |
build_assets: | |
name: Build and Release Dashboard Assets | |
needs: [acceptance_tests] | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.set_version.outputs.version }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
path: powerpipe | |
ref: ${{ github.event.ref }} | |
- name: Set VERSION as output | |
run: echo "::set-output name=version::$VERSION" | |
id: set_version | |
- name: Trim asset version prefix and Validate | |
run: |- | |
echo $VERSION | |
trim=${VERSION#"v"} | |
echo $trim | |
if [[ $trim =~ ^[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]]; then | |
echo "Version OK: $trim" | |
else | |
echo "Invalid version: $trim" | |
exit 1 | |
fi | |
echo "VERSION=${trim}" >> $GITHUB_ENV | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ">=18.12.0" | |
- name: Setup Yarn | |
working-directory: ./powerpipe/ui/dashboard | |
run: |- | |
rm -rf ./build | |
# Cache node modules to speed up builds | |
- name: Cache node modules | |
id: cache-npm | |
uses: actions/cache@v4 | |
env: | |
cache-name: cache-node-modules | |
with: | |
# npm cache files are stored in `~/.npm` on Linux/macOS | |
path: ~/.npm | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | |
- name: YARN Install | |
working-directory: ./powerpipe/ui/dashboard | |
run: |- | |
unset CI | |
yarn install | |
- name: Generate dashboard UI icons | |
working-directory: ./powerpipe/ui/dashboard | |
run: |- | |
make setup-icons | |
- name: Run Unit Tests | |
working-directory: ./powerpipe/ui/dashboard | |
run: | | |
yarn install | |
CI=true yarn test | |
- name: YARN Build | |
working-directory: ./powerpipe/ui/dashboard | |
run: |- | |
unset CI | |
yarn build | |
env: | |
REACT_APP_HEAP_ID: ${{ secrets.HEAP_ANALYTICS_PRODUCTION_ID }} | |
REACT_APP_VERSION: ${{ env.VERSION }} | |
- name: Move Build Assets | |
run: |- | |
mkdir -p dashboard_ui_build | |
mv ./powerpipe/ui/dashboard/build/* dashboard_ui_build/ | |
ls -la dashboard_ui_build | |
- name: Create a version file | |
run: |- | |
JSON_STRING=$( jq -n \ | |
--arg version "$VERSION" \ | |
'{ | |
"version":$version, | |
}' ) | |
echo $JSON_STRING > ./dashboard_ui_build/version.json | |
- name: Archive built dashboard assets | |
run: | | |
cd dashboard_ui_build | |
tar -czvf ../dashboard_ui_assets.tar.gz * | |
- name: Upload dashboard assets artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dashboard-ui-assets-archive | |
path: dashboard_ui_assets.tar.gz | |
ensure_branch_in_homebrew: | |
name: Ensure branch exists in homebrew-tap | |
needs: [build_assets] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: turbot/homebrew-tap | |
token: ${{ secrets.GH_ACCESS_TOKEN }} | |
ref: main | |
- name: Delete base branch if exists | |
run: | | |
git fetch --all | |
git push origin --delete powerpipe-brew | |
git push origin --delete $VERSION | |
continue-on-error: true | |
- name: Create base branch | |
run: | | |
git checkout -b powerpipe-brew | |
git push --set-upstream origin powerpipe-brew | |
build_and_release: | |
name: Build and Release Powerpipe | |
needs: [build_assets] | |
runs-on: ubuntu-latest | |
env: | |
VERSION: ${{ needs.build_assets.outputs.version }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
path: powerpipe | |
ref: ${{ github.event.ref }} | |
- name: Checkout Pipe Fittings Components repository | |
uses: actions/checkout@v4 | |
with: | |
repository: turbot/pipe-fittings | |
path: pipe-fittings | |
- name: Tag Release | |
run: | | |
cd powerpipe | |
git config user.name "Powerpipe GitHub Actions Bot" | |
git config user.email [email protected] | |
git tag $VERSION | |
git push origin $VERSION | |
# this is required, check golangci-lint-action docs | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: "1.21" | |
cache: false # setup-go v4 caches by default, do not change this parameter, check golangci-lint-action doc: https://github.com/golangci/golangci-lint-action/pull/704 | |
- name: Download Dashboard UI Assets Artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: dashboard-ui-assets-archive | |
path: powerpipe/internal/dashboardassets | |
- name: Check assets location | |
run: | | |
ls -la powerpipe/internal/dashboardassets | |
mv powerpipe/internal/dashboardassets/dashboard_ui_assets.tar.gz powerpipe/internal/dashboardassets/assets.tar.gz | |
ls -la powerpipe/internal/dashboardassets | |
- name: Setup release environment | |
run: |- | |
cd powerpipe | |
echo 'GITHUB_TOKEN=${{secrets.GH_ACCESS_TOKEN}}' > .release-env | |
- name: Release publish | |
run: |- | |
cd powerpipe | |
make release | |
create_pr_in_homebrew: | |
name: Create PR in homebrew-tap | |
needs: [ensure_branch_in_homebrew, build_and_release] | |
runs-on: ubuntu-latest | |
env: | |
Version: ${{ github.event.inputs.version }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: turbot/homebrew-tap | |
token: ${{ secrets.GH_ACCESS_TOKEN }} | |
ref: main | |
- name: Create a new branch off the base branch | |
run: | | |
git fetch --all | |
git checkout powerpipe-brew | |
git checkout -b $VERSION | |
git push --set-upstream origin $VERSION | |
- name: Close pull request if already exists | |
run: | | |
gh pr close $VERSION | |
continue-on-error: true | |
- name: Create pull request | |
run: | | |
gh pr create --base main --head $VERSION --title "$Version" --body "Update formula" | |
update_pr_for_versioning: | |
name: Update PR | |
needs: [create_pr_in_homebrew] | |
runs-on: ubuntu-latest | |
env: | |
Version: ${{ github.event.inputs.version }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: turbot/homebrew-tap | |
token: ${{ secrets.GH_ACCESS_TOKEN }} | |
ref: ${{ github.event.inputs.version }} | |
- name: Update live version | |
run: | | |
scripts/formula_versioning_powerpipe.sh | |
git config --global user.email "[email protected]" | |
git config --global user.name "Powerpipe GitHub Actions Bot" | |
git add . | |
git commit -m "Versioning brew formulas" | |
git push origin $VERSION | |
update_homebrew_tap: | |
name: Update homebrew-tap formula | |
needs: [update_pr_for_versioning] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: turbot/homebrew-tap | |
token: ${{ secrets.GH_ACCESS_TOKEN }} | |
ref: main | |
- name: Get pull request title | |
id: pr_title | |
run: >- | |
echo "PR_TITLE=$( | |
gh pr view $VERSION --json title | jq .title | tr -d '"' | |
)" >> $GITHUB_OUTPUT | |
- name: Output | |
run: | | |
echo ${{ steps.pr_title.outputs.PR_TITLE }} | |
echo ${{ env.VERSION }} | |
- name: Fail if PR title does not match with version | |
run: | | |
if ${{ (steps.pr_title.outputs.PR_TITLE == env.VERSION) }} == 'true';then | |
echo "Correct version" | |
else | |
echo "Incorrect version" | |
exit 1 | |
fi | |
- name: Merge pull request to update brew formula | |
run: | | |
git fetch --all | |
gh pr merge $VERSION --squash --delete-branch | |
git push origin --delete powerpipe-brew |