mirror of
https://github.com/kemko/nomad.git
synced 2026-01-03 17:05:43 +03:00
This change creates a reusable workflow for notifying Slack on CI failures. The message will include useful links and information about the failure, so product engineers can investigate and fix any problems. The new workflow is used by selected workflows which trigger on merges to main or release/* branches. The notification is only sent on failure and when the event was a push (PR merge) meaning the number of notifications should be minimal. The aim is to help identify and draw attention to failure across our release branches, in particular when automated processes happen.
144 lines
5.0 KiB
YAML
144 lines
5.0 KiB
YAML
name: test-ui
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- "ui/**"
|
|
push:
|
|
branches:
|
|
- main
|
|
- release/**
|
|
- test-ui
|
|
paths:
|
|
- "ui/**"
|
|
|
|
jobs:
|
|
pre-test:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
defaults:
|
|
run:
|
|
working-directory: ui
|
|
outputs:
|
|
nonce: ${{ steps.nonce.outputs.nonce }}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
- uses: ./.github/actions/setup-js
|
|
- name: lint:js
|
|
run: yarn run lint:js
|
|
- name: lint:hbs
|
|
run: yarn run lint:hbs
|
|
- id: nonce
|
|
name: nonce
|
|
run: echo "nonce=${{ github.run_id }}-$(date +%s)" >> "$GITHUB_OUTPUT"
|
|
|
|
tests:
|
|
needs:
|
|
- pre-test
|
|
runs-on: ${{ endsWith(github.repository, '-enterprise') && fromJSON('["self-hosted", "ondemand", "linux", "type=m7a.2xlarge;m6a.2xlarge"]') || 'ubuntu-latest' }}
|
|
timeout-minutes: 30
|
|
defaults:
|
|
run:
|
|
working-directory: ui
|
|
strategy:
|
|
matrix:
|
|
partition: [1, 2, 3, 4]
|
|
split: [4]
|
|
# Note: If we ever change the number of partitions, we'll need to update the
|
|
# finalize.combine step to match
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
- uses: ./.github/actions/setup-js
|
|
- uses: browser-actions/setup-chrome@facf10a55b9caf92e0cc749b4f82bf8220989148 # v1.7.2
|
|
- name: Retrieve Vault-hosted Secrets
|
|
if: endsWith(github.repository, '-enterprise')
|
|
id: vault
|
|
uses: hashicorp/vault-action@d1720f055e0635fd932a1d2a48f87a666a57906c # v3.0.0
|
|
with:
|
|
url: ${{ vars.CI_VAULT_URL }}
|
|
method: ${{ vars.CI_VAULT_METHOD }}
|
|
path: ${{ vars.CI_VAULT_PATH }}
|
|
jwtGithubAudience: ${{ vars.CI_VAULT_AUD }}
|
|
secrets: |-
|
|
kv/data/teams/nomad/ui PERCY_TOKEN ;
|
|
- name: ember exam
|
|
env:
|
|
PERCY_TOKEN: ${{ env.PERCY_TOKEN || secrets.PERCY_TOKEN }}
|
|
PERCY_PARALLEL_NONCE: ${{ needs.pre-test.outputs.nonce }}
|
|
run: |
|
|
yarn exam:parallel --split=${{ matrix.split }} --partition=${{ matrix.partition }} --json-report=test-results/test-results.json
|
|
continue-on-error: true
|
|
- name: Express timeout failure
|
|
if: ${{ failure() }}
|
|
run: exit 1
|
|
- name: Upload partition test results
|
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
|
with:
|
|
name: test-results-${{ matrix.partition }}
|
|
path: ui/test-results/test-results.json
|
|
retention-days: 90
|
|
finalize:
|
|
needs:
|
|
- pre-test
|
|
- tests
|
|
runs-on: ${{ endsWith(github.repository, '-enterprise') && fromJSON('["self-hosted", "ondemand", "linux", "type=m7a.2xlarge;m6a.2xlarge"]') || 'ubuntu-latest' }}
|
|
timeout-minutes: 30
|
|
defaults:
|
|
run:
|
|
working-directory: ui
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
- uses: ./.github/actions/setup-js
|
|
- name: Retrieve Vault-hosted Secrets
|
|
if: endsWith(github.repository, '-enterprise')
|
|
id: vault
|
|
uses: hashicorp/vault-action@d1720f055e0635fd932a1d2a48f87a666a57906c # v3.0.0
|
|
with:
|
|
url: ${{ vars.CI_VAULT_URL }}
|
|
method: ${{ vars.CI_VAULT_METHOD }}
|
|
path: ${{ vars.CI_VAULT_PATH }}
|
|
jwtGithubAudience: ${{ vars.CI_VAULT_AUD }}
|
|
secrets: |-
|
|
kv/data/teams/nomad/ui PERCY_TOKEN ;
|
|
- name: Download all test results
|
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
|
|
with:
|
|
pattern: test-results-*
|
|
path: test-results
|
|
|
|
- name: Combine test results for comparison
|
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
run: node ../scripts/combine-ui-test-results.js
|
|
- name: Upload combined results for comparison
|
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
|
|
with:
|
|
name: test-results-${{ github.sha }}
|
|
path: ui/combined-test-results.json
|
|
retention-days: 90
|
|
|
|
- name: finalize
|
|
env:
|
|
PERCY_TOKEN: ${{ env.PERCY_TOKEN || secrets.PERCY_TOKEN }}
|
|
PERCY_PARALLEL_NONCE: ${{ needs.pre-test.outputs.nonce }}
|
|
run: yarn percy build:finalize
|
|
|
|
handle-failure:
|
|
needs:
|
|
- pre-test
|
|
- tests
|
|
- finalize
|
|
if: always() && github.event_name == 'push' && contains(needs.*.result, 'failure')
|
|
uses: ./.github/workflows/test-failure-notification.yml
|
|
secrets: inherit
|
|
with:
|
|
actor: ${{ github.triggering_actor }}
|
|
git-branch: ${{ github.ref_name }}
|
|
workflow-run-id: ${{ github.run_id }}
|
|
workflow-name: ${{ github.workflow }}
|
|
|
|
permissions:
|
|
contents: read
|
|
id-token: write
|