Merge #5
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Merge | |
on: | |
pull_request: | |
workflow_run: | |
workflows: [PR Closed] | |
types: [completed] | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }} | |
cancel-in-progress: true | |
jobs: | |
deploys-test: | |
name: TEST Deploys | |
environment: test | |
permissions: | |
issues: write | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
package: [init, database, backend-go, backend-java, backend-py, frontend] | |
include: | |
- name: init | |
file: common/openshift.init.yml | |
overwrite: false | |
repository: bcgov/quickstart-openshift | |
- name: database | |
file: database/openshift.deploy.yml | |
overwrite: false | |
repository: bcgov/quickstart-openshift | |
triggers: ('backend-go' 'backend-java' 'backend-py') | |
- name: backend-go | |
file: backend-go/openshift.deploy.yml | |
overwrite: true | |
parameters: -p MIN_REPLICAS=1 -p MAX_REPLICAS=2 | |
-p PROMOTE_MIGRATION=${{ github.repository }}/migrations-go:test | |
triggers: ('backend-go/') | |
- name: backend-java | |
file: backend-java/openshift.deploy.yml | |
overwrite: true | |
parameters: -p MIN_REPLICAS=1 -p MAX_REPLICAS=2 | |
triggers: ('backend-java/') | |
- name: backend-py | |
file: backend-py/openshift.deploy.yml | |
overwrite: true | |
parameters: -p MIN_REPLICAS=1 -p MAX_REPLICAS=2 | |
-p PROMOTE_MIGRATION=${{ github.repository }}/migrations-py:test | |
triggers: ('backend-py/') | |
- name: frontend | |
file: frontend/openshift.deploy.yml | |
overwrite: true | |
parameters: -p MIN_REPLICAS=1 -p MAX_REPLICAS=2 | |
repository: bcgov/quickstart-openshift | |
triggers: ('database/' 'backend/' 'frontend/') | |
steps: | |
- uses: bcgov-nr/action-deployer-openshift@v1.4.0 | |
with: | |
file: ${{ matrix.file }} | |
oc_namespace: ${{ vars.OC_NAMESPACE }} | |
oc_server: ${{ vars.OC_SERVER }} | |
oc_token: ${{ secrets.OC_TOKEN }} | |
overwrite: ${{ matrix.overwrite }} | |
penetration_test: false | |
parameters: | |
-p ZONE=test -p NAME=${{ github.event.repository.name }} | |
-p PROMOTE=${{ github.repository }}/${{ matrix.name }}:test | |
${{ matrix.parameters }} | |
repository: ${{ matrix.repository }} | |
triggers: ${{ matrix.triggers }} | |
verification_path: ${{ matrix.verification_path }} | |
integration-tests: | |
needs: [deploys-test] | |
name: Integration Tests for APIs | |
defaults: | |
run: | |
working-directory: integration-tests | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
name: [quarkus, fiber, fastapi] | |
include: | |
- name: quarkus | |
baseUrl: https://quickstart-openshift-test-backend-java.apps.silver.devops.gov.bc.ca | |
- name: fiber | |
baseUrl: https://quickstart-openshift-test-backend-go.apps.silver.devops.gov.bc.ca | |
- name: fastapi | |
baseUrl: https://quickstart-openshift-test-backend-py.apps.silver.devops.gov.bc.ca | |
steps: | |
- uses: actions/checkout@v4 | |
name: Checkout | |
- name: Cache node modules | |
id: cache-npm | |
uses: actions/cache@v3 | |
env: | |
cache-name: cache-node-modules | |
with: | |
# npm cache files are stored in `~/.npm` on Linux/macOS | |
path: ~/.npm | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-build-${{ env.cache-name }}- | |
${{ runner.os }}-build- | |
${{ runner.os }}- | |
- if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }} | |
name: List the state of node modules | |
continue-on-error: true | |
run: npm list | |
- name: Install dependencies | |
run: npm ci | |
- name: Run integration tests | |
run: BASE_URL=${{ matrix.baseUrl }} API_NAME=${{ matrix.name }} node src/main.js | |
ghcr-cleanup: | |
name: GHCR Cleanup | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
name: [backend-go, backend-py, backend-java, migrations-go, migrations-py] | |
steps: | |
- name: Keep last 50 | |
uses: actions/delete-package-versions@v4 | |
with: | |
package-name: "${{ github.event.repository.name }}/${{ matrix.name }}" | |
package-type: "container" | |
min-versions-to-keep: 50 | |
ignore-versions: "^(prod|test)$" | |
deploys-prod: | |
name: PROD Deploys | |
environment: prod | |
needs: [integration-tests] | |
permissions: | |
issues: write | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
package: [init, database, backend-go, backend-java, backend-py, frontend] | |
include: | |
- name: init | |
file: common/openshift.init.yml | |
overwrite: false | |
repository: bcgov/quickstart-openshift | |
- name: database | |
file: database/openshift.deploy.yml | |
overwrite: false | |
repository: bcgov/quickstart-openshift | |
triggers: ('backend-go' 'backend-java' 'backend-py') | |
- name: backend-go | |
file: backend-go/openshift.deploy.yml | |
overwrite: true | |
parameters: -p MIN_REPLICAS=1 -p MAX_REPLICAS=2 | |
-p PROMOTE_MIGRATION=${{ github.repository }}/migrations-go:prod | |
triggers: ('backend-go/') | |
- name: backend-java | |
file: backend-java/openshift.deploy.yml | |
overwrite: true | |
parameters: -p MIN_REPLICAS=1 -p MAX_REPLICAS=2 | |
triggers: ('backend-java/') | |
- name: backend-py | |
file: backend-py/openshift.deploy.yml | |
overwrite: true | |
parameters: -p MIN_REPLICAS=1 -p MAX_REPLICAS=2 | |
-p PROMOTE_MIGRATION=${{ github.repository }}/migrations-py:prod | |
triggers: ('backend-py/') | |
- name: frontend | |
file: frontend/openshift.deploy.yml | |
overwrite: true | |
parameters: -p MIN_REPLICAS=1 -p MAX_REPLICAS=2 | |
repository: bcgov/quickstart-openshift | |
triggers: ('database/' 'backend/' 'frontend/') | |
steps: | |
- uses: bcgov-nr/action-deployer-openshift@v1.4.0 | |
with: | |
file: ${{ matrix.file }} | |
oc_namespace: ${{ vars.OC_NAMESPACE }} | |
oc_server: ${{ vars.OC_SERVER }} | |
oc_token: ${{ secrets.OC_TOKEN }} | |
overwrite: ${{ matrix.overwrite }} | |
penetration_test: false | |
parameters: | |
-p ZONE=prod -p NAME=${{ github.event.repository.name }} | |
-p PROMOTE=${{ github.repository }}/${{ matrix.name }}:prod | |
${{ matrix.parameters }} | |
repository: ${{ matrix.repository }} | |
triggers: ${{ matrix.triggers }} | |
verification_path: ${{ matrix.verification_path }} | |
image-promotions: | |
name: Promote images to PROD | |
needs: [deploys-prod] | |
runs-on: ubuntu-22.04 | |
permissions: | |
packages: write | |
strategy: | |
matrix: | |
component: [backend-py, backend-java, backend-go] | |
steps: | |
- uses: shrink/actions-docker-registry-tag@v3 | |
with: | |
registry: ghcr.io | |
repository: ${{ github.repository }}/${{ matrix.component }} | |
target: test | |
tags: prod | |
generate-schema-spy: | |
name: Generate SchemaSpy Documentation | |
runs-on: ubuntu-22.04 | |
services: | |
postgres: | |
image: postgres | |
env: | |
POSTGRES_DB: default | |
POSTGRES_USER: default | |
POSTGRES_PASSWORD: default | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
ports: | |
- 5432:5432 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: joshuaavalon/flyway-action@v3.0.0 | |
name: Generate SchemaSpy docs for node backend | |
with: | |
url: jdbc:postgresql://postgres:5432/default | |
user: default | |
password: default | |
env: | |
FLYWAY_VALIDATE_MIGRATION_NAMING: true | |
FLYWAY_LOCATIONS: filesystem:./backend/db/migrations | |
FLYWAY_DEFAULT_SCHEMA: "users" | |
- name: Create Output Folder | |
run: | | |
mkdir output | |
chmod a+rwx -R output | |
- name: Run Schemaspy | |
run: docker run --network host -v "$PWD/output:/output" schemaspy/schemaspy:6.2.4 -t pgsql -db default -host 127.0.0.1 -port 5432 -u default -p default -schemas users | |
- name: Deploy to Pages | |
uses: JamesIves/github-pages-deploy-action@v4 | |
with: | |
folder: output | |
target-folder: schemaspy |