Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a36ae77

Browse files
committed
chore: add chatops-migrate
1 parent 6ce22a8 commit a36ae77

File tree

1 file changed

+171
-0
lines changed

1 file changed

+171
-0
lines changed
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
name: ChatOps Migration Deployment
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
7+
env:
8+
BYTEBASE_URL: https://demo.bytebase.com
9+
BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com
10+
BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }}
11+
BYTEBASE_PROJECT: "projects/hr"
12+
13+
jobs:
14+
parse-command:
15+
if: github.event.issue.pull_request && startsWith(github.event.comment.body, '/migrate')
16+
runs-on: ubuntu-latest
17+
outputs:
18+
environment: ${{ steps.parse.outputs.environment }}
19+
valid-command: ${{ steps.parse.outputs.valid-command }}
20+
steps:
21+
- name: Parse migrate command
22+
id: parse
23+
run: |
24+
COMMENT="${{ github.event.comment.body }}"
25+
echo "Comment: $COMMENT"
26+
27+
# Extract environment from "/migrate <environment>"
28+
if [[ $COMMENT =~ ^/migrate[[:space:]]+([a-zA-Z]+) ]]; then
29+
ENVIRONMENT="${BASH_REMATCH[1]}"
30+
echo "Parsed environment: $ENVIRONMENT"
31+
32+
# Validate environment
33+
case $ENVIRONMENT in
34+
test|prod)
35+
echo "environment=$ENVIRONMENT" >> $GITHUB_OUTPUT
36+
echo "valid-command=true" >> $GITHUB_OUTPUT
37+
echo "✅ Valid environment: $ENVIRONMENT"
38+
;;
39+
*)
40+
echo "valid-command=false" >> $GITHUB_OUTPUT
41+
echo "❌ Invalid environment: $ENVIRONMENT"
42+
;;
43+
esac
44+
else
45+
echo "valid-command=false" >> $GITHUB_OUTPUT
46+
echo "❌ Invalid command format"
47+
fi
48+
49+
- name: Add reaction to comment
50+
if: steps.parse.outputs.valid-command == 'true'
51+
uses: peter-evans/create-or-update-comment@v3
52+
with:
53+
comment-id: ${{ github.event.comment.id }}
54+
reactions: rocket
55+
56+
- name: Comment on invalid command
57+
if: steps.parse.outputs.valid-command == 'false'
58+
uses: peter-evans/create-or-update-comment@v3
59+
with:
60+
issue-number: ${{ github.event.issue.number }}
61+
body: |
62+
❌ Invalid migrate command.
63+
64+
**Usage:** `/migrate <environment>`
65+
**Valid environments:** `test`, `prod`
66+
67+
**Example:** `/migrate test`
68+
reactions: confused
69+
70+
deploy:
71+
needs: parse-command
72+
if: needs.parse-command.outputs.valid-command == 'true'
73+
runs-on: ubuntu-latest
74+
environment: ${{ needs.parse-command.outputs.environment }}
75+
container:
76+
image: bytebase/bytebase-action:latest
77+
steps:
78+
- name: Checkout PR merge commit
79+
uses: actions/checkout@v4
80+
with:
81+
ref: refs/pull/${{ github.event.issue.number }}/merge
82+
83+
- name: Comment deployment started
84+
uses: peter-evans/create-or-update-comment@v3
85+
with:
86+
issue-number: ${{ github.event.issue.number }}
87+
body: |
88+
🚀 **Migration deployment started**
89+
90+
**Environment:** `${{ needs.parse-command.outputs.environment }}`
91+
**PR:** #${{ github.event.issue.number }}
92+
**Triggered by:** @${{ github.event.comment.user.login }}
93+
94+
Deploying database changes...
95+
96+
- name: Set environment-specific targets
97+
id: env-config
98+
run: |
99+
case "${{ needs.parse-command.outputs.environment }}" in
100+
test)
101+
echo "bytebase-targets=instances/test-sample-instance/databases/hr_test" >> $GITHUB_OUTPUT
102+
echo "bytebase-stage=environments/test" >> $GITHUB_OUTPUT
103+
;;
104+
prod)
105+
echo "bytebase-targets=instances/prod-sample-instance/databases/hr_prod" >> $GITHUB_OUTPUT
106+
echo "bytebase-stage=environments/prod" >> $GITHUB_OUTPUT
107+
;;
108+
esac
109+
110+
- name: Create rollout plan
111+
id: create-rollout
112+
env:
113+
BYTEBASE_TARGETS: ${{ steps.env-config.outputs.bytebase-targets }}
114+
FILE_PATTERN: "migrations-semver/*.sql"
115+
BYTEBASE_OUTPUT: ${{ runner.temp }}/bytebase-metadata.json
116+
run: |
117+
echo "Creating rollout plan for ${{ needs.parse-command.outputs.environment }}..."
118+
119+
bytebase-action rollout \
120+
--url=${{ env.BYTEBASE_URL }} \
121+
--service-account=${{ env.BYTEBASE_SERVICE_ACCOUNT }} \
122+
--service-account-secret=${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }} \
123+
--project=${{ env.BYTEBASE_PROJECT }} \
124+
--file-pattern=${{ env.FILE_PATTERN }} \
125+
--targets=${{ env.BYTEBASE_TARGETS }} \
126+
--output=${{ env.BYTEBASE_OUTPUT }}
127+
128+
PLAN=$(jq -r .plan ${{ runner.temp }}/bytebase-metadata.json)
129+
echo "plan=$PLAN" >> $GITHUB_OUTPUT
130+
131+
- name: Execute rollout
132+
env:
133+
BYTEBASE_TARGET_STAGE: ${{ steps.env-config.outputs.bytebase-stage }}
134+
run: |
135+
echo "Executing rollout to ${{ needs.parse-command.outputs.environment }}..."
136+
137+
bytebase-action rollout \
138+
--url=${{ env.BYTEBASE_URL }} \
139+
--service-account=${{ env.BYTEBASE_SERVICE_ACCOUNT }} \
140+
--service-account-secret=${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }} \
141+
--project=${{ env.BYTEBASE_PROJECT }} \
142+
--target-stage=${{ env.BYTEBASE_TARGET_STAGE }} \
143+
--plan=${{ steps.create-rollout.outputs.plan }}
144+
145+
- name: Comment deployment success
146+
if: success()
147+
uses: peter-evans/create-or-update-comment@v3
148+
with:
149+
issue-number: ${{ github.event.issue.number }}
150+
body: |
151+
✅ **Migration deployment completed successfully**
152+
153+
**Environment:** `${{ needs.parse-command.outputs.environment }}`
154+
**PR:** #${{ github.event.issue.number }}
155+
**Triggered by:** @${{ github.event.comment.user.login }}
156+
157+
Database schema has been updated in the `${{ needs.parse-command.outputs.environment }}` environment.
158+
159+
- name: Comment deployment failure
160+
if: failure()
161+
uses: peter-evans/create-or-update-comment@v3
162+
with:
163+
issue-number: ${{ github.event.issue.number }}
164+
body: |
165+
❌ **Migration deployment failed**
166+
167+
**Environment:** `${{ needs.parse-command.outputs.environment }}`
168+
**PR:** #${{ github.event.issue.number }}
169+
**Triggered by:** @${{ github.event.comment.user.login }}
170+
171+
Please check the [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /