Skip to content

fix: column type (#3) #3

fix: column type (#3)

fix: column type (#3) #3

name: Declarative rollout using bytebase-action image
on:
push:
branches:
- main
paths:
- "schema/*.sql"
# cancel previous workflow run if a new workflow run is triggered
# to prevent multiple rollout
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: true
env:
BYTEBASE_URL: http://host.docker.internal:8080
BYTEBASE_SERVICE_ACCOUNT: [email protected] # 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/project-test"
jobs:
build:
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build app and upload
run: |
echo "Building..."
echo "Build done!"
echo "Uploading..."
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
outputs:
bytebase-plan: ${{ steps.set-output.outputs.plan }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Roll out database change
env:
BYTEBASE_TARGETS: "instances/test-sample-instance/databases/school_test,instances/prod-sample-instance/databases/school_prod"
FILE_PATTERN: "schema/*.sql"
BYTEBASE_OUTPUT: ${{ runner.temp }}/bytebase-metadata.json
run: |
ls -la schema/
docker run --rm \
--add-host=host.docker.internal:host-gateway \
-v "${{ github.workspace }}":/workspace \
-v "${{ runner.temp }}":/temp \
-e BYTEBASE_URL="${{ env.BYTEBASE_URL }}" \
-e BYTEBASE_SERVICE_ACCOUNT="${{ env.BYTEBASE_SERVICE_ACCOUNT }}" \
-e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \
-e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \
-e BYTEBASE_TARGETS="${{ env.BYTEBASE_TARGETS }}" \
-w /workspace \
bytebase/bytebase-action:3.12.0 \
sh -c "ls -la /workspace/schema/ && bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --file-pattern=${{ env.FILE_PATTERN }} --targets=${{ env.BYTEBASE_TARGETS }} --declarative --output=/temp/bytebase-metadata.json"
- name: Set output
id: set-output
run: |
PLAN=$(jq -r .plan ${{ runner.temp }}/bytebase-metadata.json)
echo "plan=$PLAN" >> $GITHUB_OUTPUT
deploy-to-test:
needs: create-rollout
# runs-on: ubuntu-latest # use self-hosted machines if your Bytebase runs in internal networks.
runs-on: self-hosted
environment: test
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Roll out database change
env:
BYTEBASE_TARGET_STAGE: environments/test
run: |
docker run --rm \
--add-host=host.docker.internal:host-gateway \
-v "${{ github.workspace }}":/workspace \
-e BYTEBASE_URL="${{ env.BYTEBASE_URL }}" \
-e BYTEBASE_SERVICE_ACCOUNT="${{ env.BYTEBASE_SERVICE_ACCOUNT }}" \
-e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \
-e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \
-e BYTEBASE_TARGET_STAGE="${{ env.BYTEBASE_TARGET_STAGE }}" \
-w /workspace \
bytebase/bytebase-action:3.12.0 \
bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }}
- name: Deploy app
run: |
echo "Deploying app to test environment..."
echo "Deploy app to test environment done!"
deploy-to-prod:
needs:
- deploy-to-test
- create-rollout
# runs-on: ubuntu-latest
runs-on: self-hosted
environment: prod
steps:
- name: Checkout
uses: actions/checkout@v4
- name: rollout
env:
BYTEBASE_TARGET_STAGE: environments/prod
run: |
docker run --rm \
--add-host=host.docker.internal:host-gateway \
-v "${{ github.workspace }}":/workspace \
-e BYTEBASE_URL="${{ env.BYTEBASE_URL }}" \
-e BYTEBASE_SERVICE_ACCOUNT="${{ env.BYTEBASE_SERVICE_ACCOUNT }}" \
-e BYTEBASE_SERVICE_ACCOUNT_SECRET="${{ env.BYTEBASE_SERVICE_ACCOUNT_SECRET }}" \
-e BYTEBASE_PROJECT="${{ env.BYTEBASE_PROJECT }}" \
-e BYTEBASE_TARGET_STAGE="${{ env.BYTEBASE_TARGET_STAGE }}" \
-w /workspace \
bytebase/bytebase-action:3.12.0 \
bytebase-action rollout --url=${{ env.BYTEBASE_URL }} --project=${{ env.BYTEBASE_PROJECT }} --target-stage=${{ env.BYTEBASE_TARGET_STAGE }} --plan=${{ needs.create-rollout.outputs.bytebase-plan }}
- name: Deploy app
run: |
echo "Deploying app to prod environment..."
echo "Deploy app to prod environment done!"