This repository has been archived by the owner on Nov 29, 2023. It is now read-only.
v2023.10.02 #144
Workflow file for this run
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
# Runs Cypress tests locally, deploys the doc site to an S3 bucket and runs post deployment cypress tests again | |
name: Publish Docsite | |
on: | |
release: | |
types: | |
- published | |
workflow_dispatch: | |
jobs: | |
cypress: | |
name: Cypress Tests | |
runs-on: ubuntu-latest | |
container: | |
image: cypress/browsers:node-18.16.0-chrome-114.0.5735.133-1-ff-114.0.2-edge-114.0.1823.51-1 | |
options: --user 1001 --shm-size=2g | |
strategy: | |
fail-fast: false | |
matrix: | |
node-version: [16, 18, 20.5.1] | |
browser: [chrome] | |
exclude: | |
- node-version: 16 | |
browser: firefox | |
steps: | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Cypress run | |
uses: cypress-io/[email protected] | |
timeout-minutes: 20 | |
with: | |
browser: ${{ matrix.browser }} | |
start: yarn start | |
wait-on: http://localhost:3000 | |
wait-on-timeout: 180 | |
working-directory: ./site | |
config-file: cypress.config.js | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
GOOGLE_ANALYTICS_TRACKING_ID: "12345" | |
GTAG_TRACKING_ID: "12345" | |
publish: | |
name: Publish Docsite | |
needs: cypress | |
runs-on: ubuntu-latest | |
if: ${{ !github.event.release.prerelease && github.event.release.target_commitish == 'main' }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Generate Static Site | |
run: | | |
cd site | |
yarn install --pure-lockfile | |
npm run build | |
env: | |
GOOGLE_ANALYTICS_TRACKING_ID: ${{ secrets.GOOGLE_ANALYTICS_TRACKING_ID }} | |
GTAG_TRACKING_ID: ${{ secrets. GTAG_TRACKING_ID}} | |
- name: Configure AWS Credentials | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: us-east-1 | |
- name: Sync zip to Bucket | |
run: | | |
aws s3 sync ./site/build s3://$BUCKET_NAME --acl public-read --delete | |
env: | |
BUCKET_NAME: ${{ secrets.BUCKET_NAME }} | |
- name: Invalidate Cloudfront Cache | |
id: invalidate1 | |
continue-on-error: true | |
run: aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID}} --paths "/" "/*" | |
- name: Invalidate Cloudfront Cache Attempt 2 | |
id: invalidate2 | |
if: steps.invalidate1.outcome=='failure' | |
continue-on-error: true | |
run: aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID}} --paths "/" "/*" | |
- name: Invalidate Cloudfront Cache Attempt 3 | |
continue-on-error: true | |
id: invalidate3 | |
if: steps.invalidate2.outcome=='failure' | |
run: aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID}} --paths "/" "/*" | |
- name: Cloudfront Cache Invalidation Status | |
if: always() | |
run: | | |
if ${{ steps.invalidate1.outcome=='success' || steps.invalidate2.outcome=='success' || steps.invalidate3.outcome=='success' }}; then | |
echo invalidation successful | |
else | |
exit 1 | |
fi | |
cypress_post_tests: | |
name: Cypress run on prod | |
needs: [cypress, publish] | |
runs-on: ubuntu-latest | |
container: | |
image: cypress/browsers:node-18.16.0-chrome-114.0.5735.133-1-ff-114.0.2-edge-114.0.1823.51-1 | |
options: --user 1001 --shm-size=2g | |
strategy: | |
fail-fast: false | |
matrix: | |
node-version: [16, 18, 20.5.1] | |
browser: [chrome] | |
exclude: | |
- node-version: 16 | |
browser: firefox | |
steps: | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Cypress Post Deployment Test | |
uses: cypress-io/[email protected] | |
timeout-minutes: 20 | |
with: | |
browser: ${{ matrix.browser }} | |
working-directory: ./site | |
config-file: prod-cypress.config.js | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
GOOGLE_ANALYTICS_TRACKING_ID: "12345" | |
GTAG_TRACKING_ID: "12345" | |
notify_for_failures: | |
name: Notify for Failures | |
needs: [cypress_post_tests] | |
if: failure() | |
runs-on: ubuntu-latest | |
steps: | |
- name: Notify Slack of Failures | |
uses: Bandwidth/[email protected] | |
with: | |
job-status: failure | |
slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }} | |
slack-channel: ${{ secrets.SLACK_CHANNEL }} | |
rollback_if_failed: | |
needs: [cypress, publish, cypress_post_tests] | |
name: Rollback Release | |
if: ${{ failure() && github.event_name != 'workflow_dispatch' }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Install Dependencies | |
run: | | |
cd ./.github/actions/rollback_release | |
npm install | |
- name: Rollback For Failed Cypress Tests | |
id: rollback | |
uses: ./.github/actions/rollback_release | |
env: | |
GITHUB_TOKEN: ${{ secrets.DX_GITHUB_TOKEN }} |