1+ name : Declarative rollout using bytebase-action image
2+
3+ on :
4+ push :
5+ branches :
6+ - main
7+ paths :
8+ - " schema/*.sql"
9+
10+ # cancel previous workflow run if a new workflow run is triggered
11+ # to prevent multiple rollout
12+ concurrency :
13+ group : ${{ github.workflow }}
14+ cancel-in-progress : true
15+
16+ env :
17+ BYTEBASE_URL : http://localhost:8080
18+ BYTEBASE_SERVICE_ACCOUNT :
[email protected] # set service account via environment variable 19+ BYTEBASE_SERVICE_ACCOUNT_SECRET : ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable
20+ BYTEBASE_PROJECT : " projects/project-test"
21+
22+ jobs :
23+ build :
24+ runs-on : self-hosted
25+ steps :
26+ - name : Checkout
27+ uses : actions/checkout@v4
28+ - name : Build app and upload
29+ run : |
30+ echo "Building..."
31+ echo "Build done!"
32+ echo "Uploading..."
33+ echo "Upload done!"
34+ create-rollout :
35+ needs : build
36+ # runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks.
37+ runs-on : self-hosted
38+ container :
39+ image : bytebase/bytebase-action:latest
40+ outputs :
41+ bytebase-plan : ${{ steps.set-output.outputs.plan }}
42+ steps :
43+ - name : Checkout
44+ uses : actions/checkout@v4
45+ - name : Roll out database change
46+ env :
47+ BYTEBASE_TARGETS : " instances/test-sample-instance/databases/school_test,instances/prod-sample-instance/databases/school_prod"
48+ FILE_PATTERN : " schema/*.sql"
49+ BYTEBASE_OUTPUT : ${{ runner.temp }}/bytebase-metadata.json
50+ run : |
51+ bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --file-pattern=${{ env.FILE_PATTERN }} --targets=${{ env.BYTEBASE_TARGETS }} --declarative --output=${{ env.BYTEBASE_OUTPUT }}
52+ - name : Set output
53+ id : set-output
54+ run : |
55+ PLAN=$(jq -r .plan ${{ runner.temp }}/bytebase-metadata.json)
56+ echo "plan=$PLAN" >> $GITHUB_OUTPUT
57+ deploy-to-test :
58+ needs : create-rollout
59+ # runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks.
60+ runs-on : self-hosted
61+ environment : test
62+ container :
63+ image : bytebase/bytebase-action:latest
64+ steps :
65+ - name : Checkout
66+ uses : actions/checkout@v4
67+ - name : Roll out database change
68+ env :
69+ BYTEBASE_TARGET_STAGE : environments/test
70+ run : |
71+ bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }}
72+ - name : Deploy app
73+ run : |
74+ echo "Deploying app to test environment..."
75+ echo "Deploy app to test environment done!"
76+ deploy-to-prod :
77+ needs :
78+ - deploy-to-test
79+ - create-rollout
80+ # runs-on: ubuntu-latest
81+ runs-on : self-hosted
82+ environment : prod
83+ container :
84+ image : bytebase/bytebase-action:latest
85+ steps :
86+ - name : Checkout
87+ uses : actions/checkout@v4
88+ - name : rollout
89+ env :
90+ BYTEBASE_TARGET_STAGE : environments/prod
91+ run : |
92+ bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }}
93+ - name : Deploy app
94+ run : |
95+ echo "Deploying app to prod environment..."
96+ echo "Deploy app to prod environment done!"
0 commit comments