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+ image : bytebase/bytebase-action:3.12.0
41+ outputs :
42+ bytebase-plan : ${{ steps.set-output.outputs.plan }}
43+ steps :
44+ - name : Checkout
45+ uses : actions/checkout@v4
46+ - name : Roll out database change
47+ env :
48+ BYTEBASE_TARGETS : " instances/test-sample-instance/databases/school_test,instances/prod-sample-instance/databases/school_prod"
49+ FILE_PATTERN : " schema/*.sql"
50+ BYTEBASE_OUTPUT : ${{ runner.temp }}/bytebase-metadata.json
51+ run : |
52+ 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 }}
53+ - name : Set output
54+ id : set-output
55+ run : |
56+ PLAN=$(jq -r .plan ${{ runner.temp }}/bytebase-metadata.json)
57+ echo "plan=$PLAN" >> $GITHUB_OUTPUT
58+ deploy-to-test :
59+ needs : create-rollout
60+ # runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks.
61+ runs-on : self-hosted
62+ environment : test
63+ container :
64+ # image: bytebase/bytebase-action:latest
65+ image : bytebase/bytebase-action:3.12.0
66+ steps :
67+ - name : Checkout
68+ uses : actions/checkout@v4
69+ - name : Roll out database change
70+ env :
71+ BYTEBASE_TARGET_STAGE : environments/test
72+ run : |
73+ bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }}
74+ - name : Deploy app
75+ run : |
76+ echo "Deploying app to test environment..."
77+ echo "Deploy app to test environment done!"
78+ deploy-to-prod :
79+ needs :
80+ - deploy-to-test
81+ - create-rollout
82+ # runs-on: ubuntu-latest
83+ runs-on : self-hosted
84+ environment : prod
85+ container :
86+ # image: bytebase/bytebase-action:latest
87+ image : bytebase/bytebase-action:3.12.0
88+ steps :
89+ - name : Checkout
90+ uses : actions/checkout@v4
91+ - name : rollout
92+ env :
93+ BYTEBASE_TARGET_STAGE : environments/prod
94+ run : |
95+ bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }}
96+ - name : Deploy app
97+ run : |
98+ echo "Deploying app to prod environment..."
99+ echo "Deploy app to prod environment done!"
0 commit comments