From 1c3a616c2f7c447845e1b68fa226687152e73282 Mon Sep 17 00:00:00 2001 From: Derek Roberts Date: Sat, 23 Sep 2023 11:37:48 -0700 Subject: [PATCH] Leave Cypress to main quickstart --- .github/workflows/merge.yml | 465 ++++++++++++++++-------------------- 1 file changed, 212 insertions(+), 253 deletions(-) diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml index dec9aa6..0921a81 100644 --- a/.github/workflows/merge.yml +++ b/.github/workflows/merge.yml @@ -12,117 +12,82 @@ concurrency: 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 - - cypress-e2e: - name: Cypress end to end test - # needs: [deploys-test] + 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: frontend + working-directory: integration-tests + runs-on: ubuntu-22.04 strategy: matrix: - browser: [chrome, firefox, edge] + 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 @@ -131,7 +96,8 @@ jobs: uses: actions/cache@v3 env: cache-name: cache-node-modules - with: # npm cache files are stored in `~/.npm` on Linux/macOS + 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: | @@ -142,153 +108,146 @@ jobs: name: List the state of node modules continue-on-error: true run: npm list - - uses: cypress-io/github-action@v6 - name: Cypress run - with: - config: pageLoadTimeout=10000,baseUrl=https://quickstart-openshift-test-frontend.apps.silver.devops.gov.bc.ca/ - browser: ${{ matrix.browser }} - - uses: actions/upload-artifact@v3 - if: failure() - with: - name: cypress-screenshots - path: ./cypress/screenshots - if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn` + - 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)$" + 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, cypress-e2e] - # 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 }} + 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 - # - database - # - frontend - # - 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 + image-promotions: + name: Promote images to PROD + needs: [deploys-prod] + runs-on: ubuntu-22.04 + permissions: + packages: write + strategy: + matrix: + component: + - backend + - database + - frontend + - 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 + 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