Skip to content
name: Test & Deploy
on: [push]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install dependencies
uses: ./.github/actions/install-dependencies
- name: Current timestamp
uses: ./.github/actions/now
- name: Build
env:
REACT_APP_COMMIT_SHA: ${{ github.sha }}
REACT_APP_BUILD_TIMESTAMP: ${{ env.NOW }}
REACT_APP_ROLLBAR_TOKEN: ${{ secrets.ROLLBAR_CLIENT_ACCESS_TOKEN }}
run: npm run build
- name: Upload build artifact
uses: actions/upload-artifact@master
with:
name: build
path: build/
test:
name: Test
needs: build
timeout-minutes: 60
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/playwright:v1.40.0-focal
strategy:
fail-fast: false
matrix:
shardIndex: [1,2,3,4,5,6,7,8,9,10]
shardTotal: [10]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '14'
- name: Install dependencies
uses: ./.github/actions/install-dependencies
- name: Download build artifact
uses: actions/download-artifact@master
with:
name: build
path: build
- name: Start app
run: npm run start:test &
- name: Run Playwright Tests
run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
- name: Upload test screenshots artifact
uses: actions/upload-artifact@v3
if: always()
with:
name: test-screenshots
path: test/screenshots
retention-days: 14
- name: Upload test report artifact
uses: actions/upload-artifact@v3
if: always()
with:
name: test-blob-reports
path: test/report/
retention-days: 14
test-report:
name: Test report
needs: test
if: always()
environment:
name: test-report
url: ${{ steps.pages.outputs.url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install dependencies
uses: ./.github/actions/install-dependencies
- name: Download test screenshots artifact
uses: actions/download-artifact@master
with:
name: test-screenshots
path: test/screenshots
- name: Download test report artifact
uses: actions/download-artifact@master
with:
name: test-blob-reports
path: test/blob-reports
- name: Merge blob reports into HTML report
run: npx playwright merge-reports --config playwright.merge-reports.config.ts ./test/blob-reports
- name: Upload Argos screenshots
continue-on-error: true
env:
ARGOS_TOKEN: ${{ secrets.ARGOS_TOKEN }}
run: npx argos upload test/screenshots
- name: Deploy test report to Cloudflare Pages
id: pages
uses: ./.github/actions/deploy-cloudflare-pages
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
project: calamar-test-reports
branch: ${{ github.ref_name }}
path: test/report
preview:
name: Deploy / Preview
needs: test
environment:
name: development
url: ${{ steps.pages.outputs.url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download build artifact
uses: actions/download-artifact@master
with:
name: build
path: build
- name: Current timestamp
uses: ./.github/actions/now
- name: Generate client environment
uses: ./.github/actions/generate-client-env
env:
REACT_APP_PUBLISH_TIMESTAMP: ${{ env.NOW }}
REACT_APP_ROLLBAR_ENV: development
REACT_APP_ROLLBAR_ENABLED: ${{ github.ref_name == 'master' && 'true' || 'false' }}
with:
file: build/env.js
- name: Deploy to Cloudflare Pages
id: pages
uses: ./.github/actions/deploy-cloudflare-pages
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
project: calamar
branch: ${{ github.ref_name }}
path: build
- name: Deploy to Rollbar
if: github.ref_name == 'master'
uses: ./.github/actions/deploy-rollbar
with:
accessToken: ${{ secrets.ROLLBAR_SERVER_ACCESS_TOKEN }}
environment: development
urls: ${{ steps.pages.outputs.url }} ${{ steps.pages.outputs.aliases }}
path: build
deploy:
name: Deploy / Production
needs: test
if: github.ref_name == 'master' || github.ref_name == 'production-hotfix'
environment:
name: production
url: ${{ steps.pages.outputs.url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download build artifact
uses: actions/download-artifact@master
with:
name: build
path: build
- name: Current timestamp
uses: ./.github/actions/now
- name: Generate client environment
uses: ./.github/actions/generate-client-env
env:
REACT_APP_PUBLISH_TIMESTAMP: ${{ env.NOW }}
REACT_APP_ROLLBAR_ENV: production
REACT_APP_ROLLBAR_ENABLED: true
with:
file: build/env.js
- name: Deploy to Cloudflare Pages
id: pages
uses: ./.github/actions/deploy-cloudflare-pages
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
project: calamar
branch: production
path: build
- name: Deploy to Rollbar
uses: ./.github/actions/deploy-rollbar
with:
accessToken: ${{ secrets.ROLLBAR_SERVER_ACCESS_TOKEN }}
environment: production
urls: ${{ steps.pages.outputs.url }} ${{ steps.pages.outputs.aliases }}
path: build