From 6fed0b163d98219c0237fb8b841049d2d992f69e Mon Sep 17 00:00:00 2001 From: zchpeter Date: Tue, 11 Nov 2025 04:31:47 -0500 Subject: [PATCH 1/4] fix: index --- .github/workflows/declarative-release-action.yml | 3 +++ .github/workflows/sql-review-action.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/.github/workflows/declarative-release-action.yml b/.github/workflows/declarative-release-action.yml index 0dcad3c..d41b70d 100644 --- a/.github/workflows/declarative-release-action.yml +++ b/.github/workflows/declarative-release-action.yml @@ -56,6 +56,7 @@ jobs: -e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \ -e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \ -e BYTEBASE_TARGETS="${{ env.BYTEBASE_TARGETS }}" \ + -e GITHUB_ACTIONS=true \ -w /workspace \ bytebase/bytebase-action:3.13.1 \ sh -c "ls -la /workspace/schema/ && bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --file-pattern=${{ env.FILE_PATTERN }} --targets=${{ env.BYTEBASE_TARGETS }} --declarative --output=/temp/bytebase-metadata.json" @@ -84,6 +85,7 @@ jobs: -e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \ -e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \ -e BYTEBASE_TARGET_STAGE="${{ env.BYTEBASE_TARGET_STAGE }}" \ + -e GITHUB_ACTIONS=true \ -w /workspace \ bytebase/bytebase-action:3.13.1 \ bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }} @@ -113,6 +115,7 @@ jobs: -e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \ -e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \ -e BYTEBASE_TARGET_STAGE="${{ env.BYTEBASE_TARGET_STAGE }}" \ + -e GITHUB_ACTIONS=true \ -w /workspace \ bytebase/bytebase-action:3.13.1 \ bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }} diff --git a/.github/workflows/sql-review-action.yml b/.github/workflows/sql-review-action.yml index 89d0a22..08b8e6a 100644 --- a/.github/workflows/sql-review-action.yml +++ b/.github/workflows/sql-review-action.yml @@ -39,6 +39,7 @@ jobs: -e GITHUB_REPOSITORY="${{ github.repository }}" \ -e GITHUB_EVENT_NUMBER="${{ github.event.number }}" \ -e GITHUB_API_URL="${{ github.api_url }}" \ + -e GITHUB_ACTIONS=true \ -w /workspace \ bytebase/bytebase-action:3.13.1 \ sh -c "ls -la /workspace/schema/ && bytebase-action check --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --targets=${{ env.BYTEBASE_TARGETS }} --file-pattern=${{ env.FILE_PATTERN }} --declarative" From 7802556a74548cf319635d34e3784b75d24ce934 Mon Sep 17 00:00:00 2001 From: zchpeter Date: Mon, 7 Sep 2026 05:17:44 -0400 Subject: [PATCH 2/4] feat: add migration-based --- ....yml => declarative-sql-review-action.yml} | 0 .../workflows/migration-release-action.yml | 126 ++++++++++++++++++ .../workflows/migration-sql-review-action.yml | 46 +++++++ .../2026090701_add_employee_address.sql | 1 + 4 files changed, 173 insertions(+) rename .github/workflows/{sql-review-action.yml => declarative-sql-review-action.yml} (100%) create mode 100644 .github/workflows/migration-release-action.yml create mode 100644 .github/workflows/migration-sql-review-action.yml create mode 100644 migrations/2026090701_add_employee_address.sql diff --git a/.github/workflows/sql-review-action.yml b/.github/workflows/declarative-sql-review-action.yml similarity index 100% rename from .github/workflows/sql-review-action.yml rename to .github/workflows/declarative-sql-review-action.yml diff --git a/.github/workflows/migration-release-action.yml b/.github/workflows/migration-release-action.yml new file mode 100644 index 0000000..0b8320d --- /dev/null +++ b/.github/workflows/migration-release-action.yml @@ -0,0 +1,126 @@ +name: Migration rollout using bytebase-action image + +on: + push: + branches: + - main + paths: + - "migrations/*.sql" + +# cancel previous workflow run if a new workflow run is triggered +# to prevent multiple rollout +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: true + +env: + BYTEBASE_URL: http://host.docker.internal:8080 + BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable + BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable + BYTEBASE_PROJECT: "projects/project-sample" + BYTEBASE_VERSION: "3.14.0" + +jobs: + build: + runs-on: self-hosted + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Build app and upload + run: | + echo "Building..." + echo "Build done!" + echo "Uploading..." + echo "Upload done!" + create-rollout: + needs: build + # runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks. + runs-on: self-hosted + outputs: + bytebase-plan: ${{ steps.set-output.outputs.plan }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Roll out database change + env: + BYTEBASE_TARGETS: "instances/test-sample-instance/databases/hr_test,instances/prod-sample-instance/databases/hr_prod" + FILE_PATTERN: "migrations/*.sql" + BYTEBASE_OUTPUT: ${{ runner.temp }}/bytebase-metadata.json + run: | + ls -la migrations/ + docker run --rm \ + --add-host=host.docker.internal:host-gateway \ + -v "${{ github.workspace }}":/workspace \ + -v "${{ runner.temp }}":/temp \ + -e BYTEBASE_URL="${{ env.BYTEBASE_URL }}" \ + -e BYTEBASE_SERVICE_ACCOUNT="${{ env.BYTEBASE_SERVICE_ACCOUNT }}" \ + -e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \ + -e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \ + -e BYTEBASE_TARGETS="${{ env.BYTEBASE_TARGETS }}" \ + -e GITHUB_ACTIONS=true \ + -w /workspace \ + bytebase/bytebase-action:"${{ env.BYTEBASE_VERSION }}" \ + sh -c "ls -la /workspace/migrations/ && bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --file-pattern=${{ env.FILE_PATTERN }} --targets=${{ env.BYTEBASE_TARGETS }} --output=/temp/bytebase-metadata.json" + - name: Set output + id: set-output + run: | + PLAN=$(jq -r .plan ${{ runner.temp }}/bytebase-metadata.json) + echo "plan=$PLAN" >> $GITHUB_OUTPUT + deploy-to-test: + needs: create-rollout + # runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks. + runs-on: self-hosted + environment: test + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Roll out database change + env: + BYTEBASE_TARGET_STAGE: environments/test + run: | + docker run --rm \ + --add-host=host.docker.internal:host-gateway \ + -v "${{ github.workspace }}":/workspace \ + -e BYTEBASE_URL="${{ env.BYTEBASE_URL }}" \ + -e BYTEBASE_SERVICE_ACCOUNT="${{ env.BYTEBASE_SERVICE_ACCOUNT }}" \ + -e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \ + -e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \ + -e BYTEBASE_TARGET_STAGE="${{ env.BYTEBASE_TARGET_STAGE }}" \ + -e GITHUB_ACTIONS=true \ + -w /workspace \ + bytebase/bytebase-action:"${{ env.BYTEBASE_VERSION }}" \ + bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }} + - name: Deploy app + run: | + echo "Deploying app to test environment..." + echo "Deploy app to test environment done!" + deploy-to-prod: + needs: + - deploy-to-test + - create-rollout + # runs-on: ubuntu-latest + runs-on: self-hosted + environment: prod + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: rollout + env: + BYTEBASE_TARGET_STAGE: environments/prod + run: | + docker run --rm \ + --add-host=host.docker.internal:host-gateway \ + -v "${{ github.workspace }}":/workspace \ + -e BYTEBASE_URL="${{ env.BYTEBASE_URL }}" \ + -e BYTEBASE_SERVICE_ACCOUNT="${{ env.BYTEBASE_SERVICE_ACCOUNT }}" \ + -e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \ + -e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \ + -e BYTEBASE_TARGET_STAGE="${{ env.BYTEBASE_TARGET_STAGE }}" \ + -e GITHUB_ACTIONS=true \ + -w /workspace \ + bytebase/bytebase-action:"${{ env.BYTEBASE_VERSION }}" \ + bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }} + - name: Deploy app + run: | + echo "Deploying app to prod environment..." + echo "Deploy app to prod environment done!" \ No newline at end of file diff --git a/.github/workflows/migration-sql-review-action.yml b/.github/workflows/migration-sql-review-action.yml new file mode 100644 index 0000000..9be0f27 --- /dev/null +++ b/.github/workflows/migration-sql-review-action.yml @@ -0,0 +1,46 @@ +name: Migration SQL review on pull request using bytebase-action image + +on: + pull_request: + branches: + - main + paths: + - "migrations/*.sql" + +jobs: + check-release-on-prod: + permissions: + pull-requests: write # write permission required to allow the action writes the check results to the comment. + # runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks. + runs-on: self-hosted + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Check release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # set GITHUB_TOKEN because the 'Check release' step needs it to comment the pull request with check results. + BYTEBASE_URL: http://host.docker.internal:8080 + BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable + BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable + BYTEBASE_PROJECT: "projects/project-sample" + BYTEBASE_TARGETS: "instances/prod-sample-instance/databases/hr_prod" + BYTEBASE_VERSION: "3.14.0" + FILE_PATTERN: "migrations/*.sql" + run: | + ls -la migrations/ + docker run --rm \ + --add-host=host.docker.internal:host-gateway \ + -v "${{ github.workspace }}":/workspace \ + -e GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}" \ + -e BYTEBASE_URL="${{ env.BYTEBASE_URL }}" \ + -e BYTEBASE_SERVICE_ACCOUNT="${{ env.BYTEBASE_SERVICE_ACCOUNT }}" \ + -e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \ + -e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \ + -e BYTEBASE_TARGETS="${{ env.BYTEBASE_TARGETS }}" \ + -e GITHUB_REPOSITORY="${{ github.repository }}" \ + -e GITHUB_EVENT_NUMBER="${{ github.event.number }}" \ + -e GITHUB_API_URL="${{ github.api_url }}" \ + -e GITHUB_ACTIONS=true \ + -w /workspace \ + bytebase/bytebase-action:"${{ env.BYTEBASE_VERSION }}" \ + sh -c "ls -la /workspace/migrations/ && bytebase-action check --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --targets=${{ env.BYTEBASE_TARGETS }} --file-pattern=${{ env.FILE_PATTERN }}" \ No newline at end of file diff --git a/migrations/2026090701_add_employee_address.sql b/migrations/2026090701_add_employee_address.sql new file mode 100644 index 0000000..c523c7e --- /dev/null +++ b/migrations/2026090701_add_employee_address.sql @@ -0,0 +1 @@ +ALTER TABLE IF EXISTS employee ADD COLUMN IF NOT EXISTS address TEXT NOT NULL DEFAULT ''; \ No newline at end of file From fcdd177a79d36213a6053253cc412b2eefaedec8 Mon Sep 17 00:00:00 2001 From: zchpeter Date: Mon, 7 Sep 2026 05:21:42 -0400 Subject: [PATCH 3/4] fix: update port --- .github/workflows/declarative-release-action.yml | 2 +- .github/workflows/declarative-sql-review-action.yml | 2 +- .github/workflows/migration-release-action.yml | 2 +- .github/workflows/migration-sql-review-action.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/declarative-release-action.yml b/.github/workflows/declarative-release-action.yml index d41b70d..155386b 100644 --- a/.github/workflows/declarative-release-action.yml +++ b/.github/workflows/declarative-release-action.yml @@ -14,7 +14,7 @@ concurrency: cancel-in-progress: true env: - BYTEBASE_URL: http://host.docker.internal:8080 + BYTEBASE_URL: http://host.docker.internal:18080 BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable BYTEBASE_PROJECT: "projects/project-test" diff --git a/.github/workflows/declarative-sql-review-action.yml b/.github/workflows/declarative-sql-review-action.yml index 08b8e6a..114eb8a 100644 --- a/.github/workflows/declarative-sql-review-action.yml +++ b/.github/workflows/declarative-sql-review-action.yml @@ -19,7 +19,7 @@ jobs: - name: Check release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # set GITHUB_TOKEN because the 'Check release' step needs it to comment the pull request with check results. - BYTEBASE_URL: http://host.docker.internal:8080 + BYTEBASE_URL: http://host.docker.internal:18080 BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable BYTEBASE_PROJECT: "projects/project-test" diff --git a/.github/workflows/migration-release-action.yml b/.github/workflows/migration-release-action.yml index 0b8320d..16f4d6f 100644 --- a/.github/workflows/migration-release-action.yml +++ b/.github/workflows/migration-release-action.yml @@ -14,7 +14,7 @@ concurrency: cancel-in-progress: true env: - BYTEBASE_URL: http://host.docker.internal:8080 + BYTEBASE_URL: http://host.docker.internal:18080 BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable BYTEBASE_PROJECT: "projects/project-sample" diff --git a/.github/workflows/migration-sql-review-action.yml b/.github/workflows/migration-sql-review-action.yml index 9be0f27..856037d 100644 --- a/.github/workflows/migration-sql-review-action.yml +++ b/.github/workflows/migration-sql-review-action.yml @@ -19,7 +19,7 @@ jobs: - name: Check release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # set GITHUB_TOKEN because the 'Check release' step needs it to comment the pull request with check results. - BYTEBASE_URL: http://host.docker.internal:8080 + BYTEBASE_URL: http://host.docker.internal:18080 BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable BYTEBASE_PROJECT: "projects/project-sample" From e7b75115c94df30c64c6049f2a253124724f7b82 Mon Sep 17 00:00:00 2001 From: zchpeter Date: Mon, 7 Sep 2026 05:51:15 -0400 Subject: [PATCH 4/4] fix: pass GitHub event name and event payload into bytebase-action container The SQL review workflows run bytebase-action via a raw docker run, which only receives the env vars listed with -e. Passing GITHUB_ACTIONS=true enables the action's GitHub integration, which reads the PR number from the event payload file (GITHUB_EVENT_PATH) on pull_request events (GITHUB_EVENT_NAME). Neither was provided, so the check step failed with 'required environment variable GITHUB_EVENT_NAME is not set'. Mount the runner's event file into the container and pass both variables. Drop GITHUB_EVENT_NUMBER, which no version of the action reads. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/declarative-sql-review-action.yml | 4 +++- .github/workflows/migration-sql-review-action.yml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/declarative-sql-review-action.yml b/.github/workflows/declarative-sql-review-action.yml index 114eb8a..ac852cc 100644 --- a/.github/workflows/declarative-sql-review-action.yml +++ b/.github/workflows/declarative-sql-review-action.yml @@ -37,7 +37,9 @@ jobs: -e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \ -e BYTEBASE_TARGETS="${{ env.BYTEBASE_TARGETS }}" \ -e GITHUB_REPOSITORY="${{ github.repository }}" \ - -e GITHUB_EVENT_NUMBER="${{ github.event.number }}" \ + -e GITHUB_EVENT_NAME="${{ github.event_name }}" \ + -e GITHUB_EVENT_PATH=/github/workflow/event.json \ + -v "${{ github.event_path }}":/github/workflow/event.json:ro \ -e GITHUB_API_URL="${{ github.api_url }}" \ -e GITHUB_ACTIONS=true \ -w /workspace \ diff --git a/.github/workflows/migration-sql-review-action.yml b/.github/workflows/migration-sql-review-action.yml index 856037d..991ecb2 100644 --- a/.github/workflows/migration-sql-review-action.yml +++ b/.github/workflows/migration-sql-review-action.yml @@ -38,7 +38,9 @@ jobs: -e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \ -e BYTEBASE_TARGETS="${{ env.BYTEBASE_TARGETS }}" \ -e GITHUB_REPOSITORY="${{ github.repository }}" \ - -e GITHUB_EVENT_NUMBER="${{ github.event.number }}" \ + -e GITHUB_EVENT_NAME="${{ github.event_name }}" \ + -e GITHUB_EVENT_PATH=/github/workflow/event.json \ + -v "${{ github.event_path }}":/github/workflow/event.json:ro \ -e GITHUB_API_URL="${{ github.api_url }}" \ -e GITHUB_ACTIONS=true \ -w /workspace \