From f5191dd41b578856dc1cb8e480de7ab3960eb445 Mon Sep 17 00:00:00 2001 From: Krishna Bottla <40598480+kbottla@users.noreply.github.com> Date: Mon, 13 May 2024 11:14:36 +0100 Subject: [PATCH] PP-12573 Run pacts on PRs with GitHub actions - Runs pact tests on PRs with GitHub actions and uses reusable workflows in pay-ci --- .github/workflows/_run-tests.yml | 59 +++++++++++++ .github/workflows/post-merge.yml | 48 +---------- .github/workflows/pr.yml | 14 ++++ .github/workflows/run-tests.yml | 140 ------------------------------- 4 files changed, 75 insertions(+), 186 deletions(-) create mode 100644 .github/workflows/_run-tests.yml create mode 100644 .github/workflows/pr.yml delete mode 100644 .github/workflows/run-tests.yml diff --git a/.github/workflows/_run-tests.yml b/.github/workflows/_run-tests.yml new file mode 100644 index 000000000..cfd05bdc4 --- /dev/null +++ b/.github/workflows/_run-tests.yml @@ -0,0 +1,59 @@ +name: Github Actions Tests + +on: + workflow_call: + secrets: + pact_broker_username: + required: true + pact_broker_password: + required: true + +permissions: + contents: read + +jobs: + detect-secrets: + runs-on: ubuntu-latest + steps: + - name: Git checkout + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + - name: Detect secrets + uses: alphagov/pay-ci/actions/detect-secrets@master + + install-and-compile: + name: "Install and compile" + uses: alphagov/pay-ci/.github/workflows/_run-node-install-and-compile.yml@master + with: + has_cypress_tests: true + + tests: + name: "Unit tests and pacts" + needs: [ install-and-compile ] + uses: alphagov/pay-ci/.github/workflows/_run-node-unit-tests-and-publish-pacts.yml@master + with: + publish_pacts: true + secrets: + pact_broker_username: ${{ secrets.pact_broker_username }} + pact_broker_password: ${{ secrets.pact_broker_password }} + + cypress-tests: + name: "Cypress" + needs: [ install-and-compile ] + uses: alphagov/pay-ci/.github/workflows/_run-node-cypress-tests.yml@master + + pact-providers-contract-tests: + name: "Provider tests" + needs: tests + uses: alphagov/pay-ci/.github/workflows/_run-provider-pact-tests-for-consumer.yml@master + strategy: + matrix: + provider: [ 'connector' ] + with: + consumer: "frontend" + provider: ${{ matrix.provider }} + secrets: + pact_broker_username: ${{ secrets.pact_broker_username }} + pact_broker_password: ${{ secrets.pact_broker_password }} + + check-docker-base-images-are-manifests: + uses: alphagov/pay-ci/.github/workflows/_validate_docker_image_is_manifest.yml@master diff --git a/.github/workflows/post-merge.yml b/.github/workflows/post-merge.yml index 343f0f0a2..8e920bbf7 100644 --- a/.github/workflows/post-merge.yml +++ b/.github/workflows/post-merge.yml @@ -14,58 +14,14 @@ concurrency: frontend-post-merge jobs: tests: - uses: ./.github/workflows/run-tests.yml - - publish-frontend-consumer-contract-tests: - needs: tests - runs-on: ubuntu-latest - - name: Publish and tag frontend consumer pact - steps: - - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - - name: Parse Node version - run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)" - id: parse-node-version - - name: Setup - uses: actions/setup-node@bea5baf987ba7aa777a8a0b4ace377a21c45c381 - with: - node-version: "${{ steps.parse-node-version.outputs.NVMRC }}" - - name: Cache build directories - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: | - node_modules - govuk_modules - public - key: ${{ runner.os }}-build-id-${{ github.head_ref }}-${{ github.sha }} - - name: Cache pacts directory - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: pacts - key: ${{ runner.os }}-build-id-${{ github.head_ref }}-${{ github.sha }}-pacts - - name: Publish and tag frontend consumer pact - env: - PACT_BROKER_URL: https://pact-broker.deploy.payments.service.gov.uk - PACT_CONSUMER_VERSION: ${{ github.sha }} - PACT_BROKER_USERNAME: ${{ secrets.pact_broker_username }} - PACT_BROKER_PASSWORD: ${{ secrets.pact_broker_password }} - PACT_CONSUMER_TAG: master - run: npm run publish-pacts - - connector-provider-contract-tests: - needs: publish-frontend-consumer-contract-tests - uses: alphagov/pay-connector/.github/workflows/_run-pact-provider-tests.yml@master - with: - consumer: frontend - consumer_tag: master + uses: ./.github/workflows/_run-tests.yml secrets: pact_broker_username: ${{ secrets.pact_broker_username }} pact_broker_password: ${{ secrets.pact_broker_password }} tag-release: needs: - - connector-provider-contract-tests + - tests permissions: contents: write uses: alphagov/pay-ci/.github/workflows/_create-alpha-release-tag.yml@master diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 000000000..e7b575005 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,14 @@ +name: PR + +on: + pull_request: + +permissions: + contents: read + +jobs: + tests: + uses: ./.github/workflows/_run-tests.yml + secrets: + pact_broker_username: ${{ secrets.pact_broker_username }} + pact_broker_password: ${{ secrets.pact_broker_password }} diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml deleted file mode 100644 index 000e95507..000000000 --- a/.github/workflows/run-tests.yml +++ /dev/null @@ -1,140 +0,0 @@ -name: Github Actions Tests - -on: - workflow_dispatch: - workflow_call: - pull_request: - -permissions: - contents: read - -jobs: - detect-secrets: - runs-on: ubuntu-latest - steps: - - name: Git checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - - name: Detect secrets - uses: alphagov/pay-ci/actions/detect-secrets@master - version: - runs-on: ubuntu-latest - name: Parse versions - outputs: - node-version: ${{ steps.parse-node-version.outputs.nvmrc }} - steps: - - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - - name: Parse Node version - id: parse-node-version - run: echo "nvmrc=$(cat .nvmrc)" >> $GITHUB_OUTPUT - install-and-compile: - runs-on: ubuntu-latest - name: Install and compile - needs: version - - steps: - - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - - name: Setup - uses: actions/setup-node@bea5baf987ba7aa777a8a0b4ace377a21c45c381 - with: - node-version: ${{ needs.version.outputs.node-version }} - - name: Cache build directories - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: | - node_modules - govuk_modules - public - key: ${{ runner.os }}-build-id-${{ github.head_ref }}-${{ github.sha }} - - name: Cache NPM packages - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.os }}-node- - - name: Parse Cypress version - id: parse-cypress-version - run: echo "CYPRESS_VERSION=$(jq -r '.devDependencies.cypress' package.json)" >> $GITHUB_OUTPUT - - name: Cache Cypress - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: ~/.cache/Cypress - key: ${{ runner.os }}-cypress-${{ steps.parse-cypress-version.outputs.CYPRESS_VERSION }} - - name: Install dependencies - run: npm ci - - name: Compile - run: npm run compile - - name: Run lint - run: npm run lint - - unit-tests: - runs-on: ubuntu-latest - name: Unit tests - needs: [version, install-and-compile] - - steps: - - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - - name: Setup - uses: actions/setup-node@bea5baf987ba7aa777a8a0b4ace377a21c45c381 - with: - node-version: ${{ needs.version.outputs.node-version }} - - name: Cache build directories - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: | - node_modules - govuk_modules - public - key: ${{ runner.os }}-build-id-${{ github.head_ref }}-${{ github.sha }} - - name: Cache pacts directory - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: pacts - key: ${{ runner.os }}-build-id-${{ github.head_ref }}-${{ github.sha }}-pacts - - name: Run unit tests - run: npm test -- --forbid-only --forbid-pending - - name: Check for generated pacts - run: | - if [ ! -d pacts ]; then - echo "The pact files were not generated, this means that no pact results will be published and this build will fail to deploy" - exit 1 - fi - - cypress-tests: - runs-on: ubuntu-latest - name: Cypress tests - needs: [version, install-and-compile] - - steps: - - name: Checkout - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - - name: Setup - uses: actions/setup-node@bea5baf987ba7aa777a8a0b4ace377a21c45c381 - with: - node-version: ${{ needs.version.outputs.node-version }} - - name: Cache build directories - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: | - node_modules - govuk_modules - public - key: ${{ runner.os }}-build-id-${{ github.head_ref }}-${{ github.sha }} - - name: Parse Cypress version - id: parse-cypress-version - run: echo "CYPRESS_VERSION=$(jq -r '.devDependencies.cypress' package.json)" >> $GITHUB_OUTPUT - - name: Cache Cypress - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: ~/.cache/Cypress - key: ${{ runner.os }}-cypress-${{ steps.parse-cypress-version.outputs.CYPRESS_VERSION }} - - name: Run cypress tests - run: | - npm run cypress:server > /dev/null 2>&1 & - sleep 5 - npm run cypress:test - - check-docker-base-images-are-manifests: - uses: alphagov/pay-ci/.github/workflows/_validate_docker_image_is_manifest.yml@master