1+ name : Build and push release image
2+
3+ on :
4+ push :
5+ branches :
6+ - test
7+ - prod
8+
9+ jobs :
10+ build :
11+ runs-on : ubuntu-latest
12+ steps :
13+ - name : Checkout
14+ uses : actions/checkout@v4
15+ - name : Build app and upload
16+ run : |
17+ echo "Building..."
18+ echo "Build done!"
19+ echo "Uploading..."
20+ echo "Upload done!"
21+ deploy-to-test :
22+ needs : build
23+ runs-on : ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks.
24+ environment : test
25+ env :
26+ BYTEBASE_URL : https://demo.bytebase.com
27+ BYTEBASE_SERVICE_ACCOUNT :
[email protected] 28+ BYTEBASE_PROJECT : " projects/project-sample"
29+ BYTEBASE_TARGETS : " instances/test-sample-instance/databases/hr_test"
30+ FILE_PATTERN : " migrations/*.sql"
31+ if : github.ref == 'refs/heads/test'
32+ steps :
33+ - name : Checkout
34+ uses : actions/checkout@v4
35+ - name : Login to Bytebase
36+ id : login
37+ uses : bytebase/login-action@v1
38+ with :
39+ bytebase-url : ${{ env.BYTEBASE_URL }}
40+ service-key : ${{ env.BYTEBASE_SERVICE_ACCOUNT }}
41+ service-secret : ${{secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET}} # Please use secrets for sensitive data in production.
42+ - name : Create release
43+ id : create-release
44+ uses : bytebase/create-release-action@v1
45+ with :
46+ url : ${{ env.BYTEBASE_URL }}
47+ token : ${{ steps.login.outputs.token }}
48+ file-pattern : ${{ env.FILE_PATTERN }}
49+ # fail the action if release checks report any error.
50+ check-release : " FAIL_ON_ERROR"
51+ project : ${{ env.BYTEBASE_PROJECT }}
52+ targets : ${{ env.BYTEBASE_TARGETS }}
53+ validate-only : false
54+ - name : Create plan
55+ id : create-plan
56+ uses : bytebase/create-plan-from-release-action@v1
57+ with :
58+ url : ${{ env.BYTEBASE_URL }}
59+ token : ${{ steps.login.outputs.token }}
60+ project : ${{ env.BYTEBASE_PROJECT }}
61+ release : ${{ steps.create-release.outputs.release }}
62+ targets : ${{ env.BYTEBASE_TARGETS }}
63+ check-plan : " SKIP"
64+ - name : Rollout
65+ id : rollout
66+ uses : bytebase/rollout-action@v2
67+ if : ${{ steps.create-plan.outputs.deployment-required == 'true' }}
68+ with :
69+ url : ${{ env.BYTEBASE_URL }}
70+ token : ${{ steps.login.outputs.token }}
71+ plan : ${{ steps.create-plan.outputs.plan }}
72+ target-stage : ' environments/test'
73+ - name : Deploy app
74+ run : |
75+ echo "Deploying app to test environment..."
76+ echo "Deploy app to test environment done!"
77+ deploy-to-prod :
78+ needs : build
79+ runs-on : ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks.
80+ environment : prod
81+ env :
82+ BYTEBASE_URL : https://demo.bytebase.com
83+ BYTEBASE_SERVICE_ACCOUNT :
[email protected] 84+ BYTEBASE_PROJECT : " projects/project-sample"
85+ BYTEBASE_TARGETS : " instances/prod-sample-instance/databases/hr_prod"
86+ FILE_PATTERN : " migrations/*.sql"
87+ if : github.ref == 'refs/heads/prod'
88+ steps :
89+ - name : Checkout
90+ uses : actions/checkout@v4
91+ - name : Login to Bytebase
92+ id : login
93+ uses : bytebase/login-action@v1
94+ with :
95+ bytebase-url : ${{ env.BYTEBASE_URL }}
96+ service-key : ${{ env.BYTEBASE_SERVICE_ACCOUNT }}
97+ service-secret : ${{secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET}} # Please use secrets for sensitive data in production.
98+ - name : Create release
99+ id : create-release
100+ uses : bytebase/create-release-action@v1
101+ with :
102+ url : ${{ env.BYTEBASE_URL }}
103+ token : ${{ steps.login.outputs.token }}
104+ file-pattern : ${{ env.FILE_PATTERN }}
105+ # fail the action if release checks report any error.
106+ check-release : " FAIL_ON_ERROR"
107+ project : ${{ env.BYTEBASE_PROJECT }}
108+ targets : ${{ env.BYTEBASE_TARGETS }}
109+ validate-only : false
110+ - name : Create plan
111+ id : create-plan
112+ uses : bytebase/create-plan-from-release-action@v1
113+ with :
114+ url : ${{ env.BYTEBASE_URL }}
115+ token : ${{ steps.login.outputs.token }}
116+ project : ${{ env.BYTEBASE_PROJECT }}
117+ release : ${{ steps.create-release.outputs.release }}
118+ targets : ${{ env.BYTEBASE_TARGETS }}
119+ check-plan : " SKIP"
120+ - name : Rollout
121+ id : rollout
122+ uses : bytebase/rollout-action@v2
123+ if : ${{ steps.create-plan.outputs.deployment-required == 'true' }}
124+ with :
125+ url : ${{ env.BYTEBASE_URL }}
126+ token : ${{ steps.login.outputs.token }}
127+ plan : ${{ steps.create-plan.outputs.plan }}
128+ target-stage : ' environments/prod'
129+ - name : Deploy app
130+ run : |
131+ echo "Deploying app to prod environment..."
132+ echo "Deploy app to prod environment done!"
0 commit comments