Skip to content

Commit 9f4a3c0

Browse files
committed
feat: schema first draft
1 parent 2a95bce commit 9f4a3c0

File tree

6 files changed

+162
-0
lines changed

6 files changed

+162
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
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!"
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: SQL review on pull request using bytebase-action image
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
paths:
8+
- "schema/*.sql"
9+
10+
jobs:
11+
check-release-on-prod:
12+
permissions:
13+
pull-requests: write # write permission required to allow the action writes the check results to the comment.
14+
# runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks.
15+
runs-on: self-hosted
16+
container:
17+
# image: docker://bytebase/bytebase-action:latest
18+
image: docker://bytebase/bytebase-action:3.12.0
19+
steps:
20+
- name: Checkout
21+
uses: actions/checkout@v4
22+
- name: Check release
23+
env:
24+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # set GITHUB_TOKEN because the 'Check release' step needs it to comment the pull request with check results.
25+
BYTEBASE_URL: http://localhost:8080
26+
BYTEBASE_SERVICE_ACCOUNT: [email protected] # set service account via environment variable
27+
BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable
28+
BYTEBASE_PROJECT: "projects/project-test"
29+
BYTEBASE_TARGETS: "instances/prod-sample-instance/databases/school_prod"
30+
FILE_PATTERN: "schema/*.sql"
31+
run: |
32+
bytebase-action check --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --targets=${{ env.BYTEBASE_TARGETS }} --file-pattern=${{ env.FILE_PATTERN }}

schema/class.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CREATE TABLE "public"."class" (
2+
"class_no" integer DEFAULT nextval('public.class_no_seq'::regclass) NOT NULL,
3+
"class_name" text NOT NULL,
4+
"grade" integer NOT NULL,
5+
CONSTRAINT "class_pkey" PRIMARY KEY (class_no),
6+
CONSTRAINT "class_grade_check" CHECK (grade > 0 AND grade <= 12)
7+
);
8+

schema/class_student.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
CREATE TABLE "public"."class_student" (
2+
"class_no" integer NOT NULL,
3+
"student_no" integer NOT NULL,
4+
"from_date" date NOT NULL,
5+
"to_date" date NOT NULL,
6+
CONSTRAINT "class_student_pkey" PRIMARY KEY (class_no, student_no),
7+
CONSTRAINT "class_student_class_no_fkey" FOREIGN KEY ("class_no") REFERENCES "public"."class" ("class_no") ON DELETE CASCADE,
8+
CONSTRAINT "class_student_student_no_fkey" FOREIGN KEY ("student_no") REFERENCES "public"."student" ("student_no") ON DELETE CASCADE
9+
);
10+

schema/sequences.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
CREATE SEQUENCE "public"."class_no_seq" AS bigint START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 NO CYCLE CACHE 1;
2+
3+
CREATE SEQUENCE "public"."student_no_seq" AS bigint START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 NO CYCLE CACHE 1;

schema/student.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
CREATE TABLE "public"."student" (
2+
"student_no" integer DEFAULT nextval('public.student_no_seq'::regclass) NOT NULL,
3+
"birth_date" date NOT NULL,
4+
"first_name" text NOT NULL,
5+
"last_name" text NOT NULL,
6+
"gender" text NOT NULL,
7+
CONSTRAINT "student_pkey" PRIMARY KEY (student_no),
8+
CONSTRAINT "student_gender_check" CHECK (gender = ANY (ARRAY['M'::text, 'F'::text]))
9+
);
10+

0 commit comments

Comments
 (0)