Skip to content

Commit e06c495

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

File tree

5 files changed

+127
-0
lines changed

5 files changed

+127
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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!"

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)