diff --git a/.github/workflows/chatops-migrate.yml b/.github/workflows/chatops-migrate.yml index 04bb4ce..3e0f679 100644 --- a/.github/workflows/chatops-migrate.yml +++ b/.github/workflows/chatops-migrate.yml @@ -5,16 +5,18 @@ on: types: [created] env: - BYTEBASE_URL: https://demo.bytebase.com - BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable - BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable - BYTEBASE_PROJECT: "projects/hr" +env: + G_TOKEN: ${{ secrets.G_TOKEN }} + BYTEBASE_URL: ${{ secrets.BYTEBASE_URL }} + BYTEBASE_SERVICE_ACCOUNT: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT }} + BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} + BYTEBASE_PROJECT: "projects/bcas-dev" FILE_PATTERN: "migrations-semver/*.sql" jobs: parse-command: if: github.event.issue.pull_request && startsWith(github.event.comment.body, '/migrate') - runs-on: ubuntu-latest + runs-on: runs-on: [self-hosted, k8s, bytebase] outputs: environment: ${{ steps.parse.outputs.environment }} valid-command: ${{ steps.parse.outputs.valid-command }} diff --git a/.github/workflows/declarative-release-action.yml b/.github/workflows/declarative-release-action.yml index e5e1c54..ed1ecd6 100644 --- a/.github/workflows/declarative-release-action.yml +++ b/.github/workflows/declarative-release-action.yml @@ -14,11 +14,11 @@ concurrency: cancel-in-progress: true env: - BYTEBASE_URL: https://demo.bytebase.com - BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable - BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable - BYTEBASE_PROJECT: "projects/hr" - + G_TOKEN: ${{ secrets.G_TOKEN }} + BYTEBASE_URL: ${{ secrets.BYTEBASE_URL }} + BYTEBASE_SERVICE_ACCOUNT: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT }} + BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} + BYTEBASE_PROJECT: "projects/bcas-dev" # ganti sesuai ID projectmu jobs: build: runs-on: ubuntu-latest @@ -43,7 +43,7 @@ jobs: uses: actions/checkout@v4 - name: Roll out database change env: - BYTEBASE_TARGETS: "instances/test-sample-instance/databases/hr_test,instances/prod-sample-instance/databases/hr_prod" + BYTEBASE_TARGETS: "instances/dbdev-1b-bcas/databases/dbdev-vkyc-1b-bcas" FILE_PATTERN: "schema/*.sql" BYTEBASE_OUTPUT: ${{ runner.temp }}/bytebase-metadata.json run: | diff --git a/.github/workflows/release-action.yml b/.github/workflows/release-action.yml index 3270f27..840f36c 100644 --- a/.github/workflows/release-action.yml +++ b/.github/workflows/release-action.yml @@ -8,14 +8,15 @@ on: - "migrations-semver/*.sql" env: - BYTEBASE_URL: https://demo.bytebase.com - BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable - BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable - BYTEBASE_PROJECT: "projects/hr" + G_TOKEN: ${{ secrets.G_TOKEN }} + BYTEBASE_URL: ${{ secrets.BYTEBASE_URL }} + BYTEBASE_SERVICE_ACCOUNT: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT }} + BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} + BYTEBASE_PROJECT: "projects/bcas-dev" jobs: build: - runs-on: ubuntu-latest + runs-on: [self-hosted, k8s, bytebase] steps: - name: Checkout uses: actions/checkout@v4 @@ -27,7 +28,7 @@ jobs: echo "Upload done!" create-rollout: needs: build - runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks. + runs-on: [self-hosted, k8s, bytebase] container: image: docker://bytebase/bytebase-action:latest outputs: @@ -37,7 +38,7 @@ jobs: uses: actions/checkout@v4 - name: Roll out database change env: - BYTEBASE_TARGETS: "instances/test-sample-instance/databases/hr_test,instances/prod-sample-instance/databases/hr_prod" + BYTEBASE_TARGETS: "instances/dbdev-1b-bcas/databases/dbdev-vkyc-1b-bcas" FILE_PATTERN: "migrations-semver/*.sql" BYTEBASE_OUTPUT: ${{ runner.temp }}/bytebase-metadata.json run: | @@ -47,10 +48,10 @@ jobs: run: | PLAN=$(jq -r .plan ${{ runner.temp }}/bytebase-metadata.json) echo "plan=$PLAN" >> $GITHUB_OUTPUT - deploy-to-test: + deploy-to-dev: needs: create-rollout - runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks. - environment: test + runs-on: [self-hosted, k8s, bytebase] + environment: dev container: image: docker://bytebase/bytebase-action:latest steps: @@ -67,9 +68,9 @@ jobs: echo "Deploy app to test environment done!" deploy-to-prod: needs: - - deploy-to-test + - deploy-to-dev - create-rollout - runs-on: ubuntu-latest + runs-on: [self-hosted, k8s, bytebase] environment: prod container: image: docker://bytebase/bytebase-action:latest diff --git a/.github/workflows/sql-review-action.yml b/.github/workflows/sql-review-action.yml index d377bab..c78f680 100644 --- a/.github/workflows/sql-review-action.yml +++ b/.github/workflows/sql-review-action.yml @@ -11,7 +11,7 @@ jobs: check-release-on-prod: permissions: pull-requests: write # write permission required to allow the action writes the check results to the comment. - runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks. + runs-on: [self-hosted, k8s, bytebase] container: image: docker://bytebase/bytebase-action:latest steps: @@ -19,12 +19,12 @@ jobs: uses: actions/checkout@v4 - name: Check release env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # set GITHUB_TOKEN because the 'Check release' step needs it to comment the pull request with check results. - BYTEBASE_URL: https://demo.bytebase.com - BYTEBASE_SERVICE_ACCOUNT: api@service.bytebase.com # set service account via environment variable - BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} # set service account secret via environment variable - BYTEBASE_PROJECT: "projects/hr" - BYTEBASE_TARGETS: "instances/prod-sample-instance/databases/hr_prod" + G_TOKEN: ${{ secrets.G_TOKEN }} + BYTEBASE_URL: ${{ secrets.BYTEBASE_URL }} + BYTEBASE_SERVICE_ACCOUNT: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT }} + BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{ secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET }} + BYTEBASE_PROJECT: "projects/bcas-dev" + BYTEBASE_TARGETS: "instances/dbdev-1b-bcas/databases/dbdev-vkyc-1b-bcas" FILE_PATTERN: "migrations-semver/*.sql" run: | bytebase-action check --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --targets=${{ env.BYTEBASE_TARGETS }} --file-pattern=${{ env.FILE_PATTERN }} diff --git a/README.md b/README.md index 9e97711..f2cedec 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Modify the environment variables to match your setup. ```yml env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # set GITHUB_TOKEN because the 'Check release' step needs it to comment the pull request with check results. + G_TOKEN: ${{ secrets.G_TOKEN }} # set G_TOKEN because the 'Check release' step needs it to comment the pull request with check results. BYTEBASE_URL: https://demo.bytebase.com BYTEBASE_SERVICE_ACCOUNT: ci@service.bytebase.com BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET}} @@ -45,7 +45,7 @@ You need to edit both deploy-to-test and deploy-to-prod jobs. ```yml env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + G_TOKEN: ${{ secrets.G_TOKEN }} BYTEBASE_URL: https://demo.bytebase.com BYTEBASE_SERVICE_ACCOUNT: ci@service.bytebase.com BYTEBASE_SERVICE_ACCOUNT_SECRET: ${{secrets.BYTEBASE_SERVICE_ACCOUNT_SECRET}} diff --git a/migrations-semver/1.0.0_init.sql b/migrations-semver/1.0.0_init.sql index 3d49b78..0aad14b 100644 --- a/migrations-semver/1.0.0_init.sql +++ b/migrations-semver/1.0.0_init.sql @@ -1,4 +1,4 @@ -CREATE TABLE IF NOT EXISTS users ( +CREATE TABLE IF NOT EXISTS users_test_bytebase ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE diff --git a/migrations-semver/1.0.1_init_data_dml.sql b/migrations-semver/1.0.1_init_data_dml.sql index 075b74f..1879f44 100644 --- a/migrations-semver/1.0.1_init_data_dml.sql +++ b/migrations-semver/1.0.1_init_data_dml.sql @@ -1,4 +1,4 @@ -INSERT INTO users ( +INSERT INTO users_test_bytebase ( id, name, email ) VALUES ( 1, 'me', 'me@me.com' diff --git a/migrations-semver/1.1.1_comment.sql b/migrations-semver/1.1.1_comment.sql index c7fca96..7307152 100644 --- a/migrations-semver/1.1.1_comment.sql +++ b/migrations-semver/1.1.1_comment.sql @@ -1 +1 @@ -ALTER TABLE IF EXISTS users ADD COLUMN IF NOT EXISTS comment VARCHAR(255) NOT NULL DEFAULT ''; \ No newline at end of file +ALTER TABLE IF EXISTS users_test_bytebase ADD COLUMN IF NOT EXISTS comment VARCHAR(255) NOT NULL DEFAULT ''; \ No newline at end of file diff --git a/migrations-semver/1.13.0_phone.sql b/migrations-semver/1.13.0_phone.sql index e8de331..9cfa86d 100644 --- a/migrations-semver/1.13.0_phone.sql +++ b/migrations-semver/1.13.0_phone.sql @@ -1 +1 @@ -ALTER TABLE IF EXISTS users ADD COLUMN IF NOT EXISTS phone VARCHAR(255) NOT NULL DEFAULT ''; +ALTER TABLE IF EXISTS users_test_bytebase ADD COLUMN IF NOT EXISTS phone VARCHAR(255) NOT NULL DEFAULT ''; diff --git a/migrations-semver/1.14.0_email.sql b/migrations-semver/1.14.0_email.sql index aefd24d..7084756 100644 --- a/migrations-semver/1.14.0_email.sql +++ b/migrations-semver/1.14.0_email.sql @@ -1 +1 @@ -ALTER TABLE IF EXISTS users ADD COLUMN IF NOT EXISTS email VARCHAR(255) NOT NULL DEFAULT ''; +ALTER TABLE IF EXISTS users_test_bytebase ADD COLUMN IF NOT EXISTS email VARCHAR(255) NOT NULL DEFAULT ''; diff --git a/migrations-semver/1.3.5_nickname.sql b/migrations-semver/1.3.5_nickname.sql index 09eed38..d375a2c 100644 --- a/migrations-semver/1.3.5_nickname.sql +++ b/migrations-semver/1.3.5_nickname.sql @@ -1,2 +1,2 @@ --- add nickname column for users -ALTER TABLE IF EXISTS users ADD COLUMN IF NOT EXISTS nickname VARCHAR(255) NOT NULL DEFAULT ''; +-- add nickname column for users_test_bytebase +ALTER TABLE IF EXISTS users_test_bytebase ADD COLUMN IF NOT EXISTS nickname VARCHAR(255) NOT NULL DEFAULT ''; diff --git a/schema/schema.sql b/schema/schema.sql deleted file mode 100644 index 98d0a02..0000000 --- a/schema/schema.sql +++ /dev/null @@ -1,120 +0,0 @@ -CREATE TABLE public.employee ( - emp_no SERIAL NOT NULL, - birth_date DATE NOT NULL, - first_name TEXT NOT NULL, - last_name TEXT NOT NULL, - gender TEXT NOT NULL CHECK (gender IN('M', 'F')) NOT NULL, - hire_date DATE NOT NULL, - PRIMARY KEY (emp_no) -); - -CREATE INDEX idx_employee_hire_date ON public.employee (hire_date); - -CREATE TABLE public.department ( - dept_no TEXT NOT NULL, - dept_name TEXT NOT NULL, - PRIMARY KEY (dept_no), - UNIQUE (dept_name) -); - -CREATE TABLE public.dept_manager ( - emp_no INT NOT NULL, - dept_no TEXT NOT NULL, - from_date DATE NOT NULL, - to_date DATE NOT NULL, - FOREIGN KEY (emp_no) REFERENCES employee (emp_no) ON DELETE CASCADE, - FOREIGN KEY (dept_no) REFERENCES department (dept_no) ON DELETE CASCADE, - PRIMARY KEY (emp_no, dept_no) -); - -CREATE TABLE public.dept_emp ( - emp_no INT NOT NULL, - dept_no TEXT NOT NULL, - from_date DATE NOT NULL, - to_date DATE NOT NULL, - FOREIGN KEY (emp_no) REFERENCES employee (emp_no) ON DELETE CASCADE, - FOREIGN KEY (dept_no) REFERENCES department (dept_no) ON DELETE CASCADE, - PRIMARY KEY (emp_no, dept_no) -); - -CREATE TABLE public.title ( - emp_no INT NOT NULL, - title TEXT NOT NULL, - from_date DATE NOT NULL, - to_date DATE, - FOREIGN KEY (emp_no) REFERENCES employee (emp_no) ON DELETE CASCADE, - PRIMARY KEY (emp_no, title, from_date) -); - -CREATE TABLE public.salary ( - emp_no INT NOT NULL, - amount INT NOT NULL, - from_date DATE NOT NULL, - to_date DATE NOT NULL, - FOREIGN KEY (emp_no) REFERENCES employee (emp_no) ON DELETE CASCADE, - PRIMARY KEY (emp_no, from_date) -); - -CREATE INDEX idx_salary_amount ON public.salary (amount); - -CREATE TABLE public.audit ( - id SERIAL PRIMARY KEY, - operation TEXT NOT NULL, - query TEXT, - user_name TEXT NOT NULL, - changed_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP -); - -CREATE INDEX idx_audit_operation ON public.audit (operation); -CREATE INDEX idx_audit_username ON public.audit (user_name); -CREATE INDEX idx_audit_changed_at ON public.audit (changed_at); - -CREATE OR REPLACE FUNCTION public.log_dml_operations() RETURNS TRIGGER AS $$ -BEGIN - IF (TG_OP = 'INSERT') THEN - INSERT INTO public.audit (operation, query, user_name) - VALUES ('INSERT', current_query(), current_user); - RETURN NEW; - ELSIF (TG_OP = 'UPDATE') THEN - INSERT INTO public.audit (operation, query, user_name) - VALUES ('UPDATE', current_query(), current_user); - RETURN NEW; - ELSIF (TG_OP = 'DELETE') THEN - INSERT INTO public.audit (operation, query, user_name) - VALUES ('DELETE', current_query(), current_user); - RETURN OLD; - END IF; - RETURN NULL; -END; -$$ LANGUAGE plpgsql; - --- only log update and delete, otherwise, it will cause too much change. -CREATE TRIGGER salary_log_trigger -AFTER UPDATE OR DELETE ON public.salary -FOR EACH ROW -EXECUTE FUNCTION public.log_dml_operations(); - -CREATE OR REPLACE VIEW public.dept_emp_latest_date AS -SELECT - emp_no, - MAX( - from_date) AS from_date, - MAX( - to_date) AS to_date -FROM - public.dept_emp -GROUP BY - emp_no; - --- shows only the current department for each employee -CREATE OR REPLACE VIEW public.current_dept_emp AS -SELECT - l.emp_no, - dept_no, - l.from_date, - l.to_date -FROM - public.dept_emp d - INNER JOIN public.dept_emp_latest_date l ON d.emp_no = l.emp_no - AND d.from_date = l.from_date - AND l.to_date = d.to_date; diff --git a/schema/users.sql b/schema/users_test_bytebase.sql similarity index 70% rename from schema/users.sql rename to schema/users_test_bytebase.sql index b66be12..2e415c9 100644 --- a/schema/users.sql +++ b/schema/users_test_bytebase.sql @@ -1,4 +1,4 @@ -CREATE TABLE public.users ( +CREATE TABLE public.users_test_bytebase ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE