Feat/search fe #3370
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
name: CI | |
on: | |
push: | |
branches: | |
- main | |
- staging | |
- production | |
pull_request: | |
types: [opened, synchronize] | |
env: | |
LOG_LEVEL: silent | |
jobs: | |
optimize_ci: | |
runs-on: ubuntu-latest # or whichever runner you use for your CI | |
outputs: | |
skip: ${{ steps.check_skip.outputs.skip }} | |
steps: | |
- name: Optimize CI | |
id: check_skip | |
uses: withgraphite/graphite-ci-action@main | |
with: | |
graphite_token: ${{ secrets.GRAPHITE_CI_OPTIMIZER_TOKEN }} | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup | |
uses: ./.github/actions/setup | |
- name: Build | |
run: npm run build | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup | |
uses: ./.github/actions/setup | |
- name: Lint | |
run: npm run lint && npm run lint:ws | |
format: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup | |
uses: ./.github/actions/setup | |
- name: Format | |
run: npm run format | |
typecheck: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup | |
uses: ./.github/actions/setup | |
- name: Typecheck | |
run: npm run typecheck | |
unit-integration-tests: | |
name: Unit & integration tests | |
needs: optimize_ci | |
runs-on: ubuntu-latest | |
if: needs.optimize_ci.outputs.skip == 'false' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup | |
uses: ./.github/actions/setup | |
- name: Install dependencies | |
# Not using test:unit dependency in Turbo because Datadog Test Visibility requires only the test suite to be run | |
run: turbo run generate --filter=isomer-studio | |
- name: Configure Datadog Test Visibility | |
uses: datadog/test-visibility-github-action@v2 | |
with: | |
languages: js | |
service: isomer-studio | |
api_key: ${{ secrets.DD_API_KEY }} | |
- name: Test Studio | |
# Loose env mode required for env vars to be passed to the run | |
run: turbo test-ci:unit --filter=isomer-studio --env-mode=loose | |
env: | |
# Required to allow Datadog to trace Vitest tests | |
NODE_OPTIONS: -r ${{ env.DD_TRACE_PACKAGE }} --import ${{ env.DD_TRACE_ESM_IMPORT }} | |
- name: Test Components | |
run: turbo test-ci:unit --filter=@opengovsg/isomer-components --env-mode=loose | |
env: | |
# Required to allow Datadog to trace Vitest tests | |
NODE_OPTIONS: -r ${{ env.DD_TRACE_PACKAGE }} --import ${{ env.DD_TRACE_ESM_IMPORT }} | |
end-to-end-tests: | |
name: End-to-end tests | |
needs: optimize_ci | |
runs-on: ubuntu-latest | |
if: needs.optimize_ci.outputs.skip == 'false' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup | |
uses: ./.github/actions/setup | |
- name: Install Playwright (Chromium) | |
run: npx playwright install chromium | |
- name: Load .env file | |
uses: xom9ikk/dotenv@v2 | |
with: | |
path: apps/studio | |
mode: test | |
- name: Next.js cache | |
uses: actions/cache@v4 | |
with: | |
# See here for caching with `yarn` https://github.com/actions/cache/blob/main/examples.md#node---yarn or you can leverage caching with actions/setup-node https://github.com/actions/setup-node | |
path: | | |
~/.npm | |
${{ github.workspace }}/.next/cache | |
# Generate a new cache whenever packages or source files change. | |
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }} | |
# If source files changed but packages didn't, rebuild from a prior cache. | |
restore-keys: | | |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}- | |
- name: Build Studio app | |
# Loose env mode required for env vars to be passed to the run | |
run: turbo build --filter=isomer-studio --env-mode=loose | |
- name: Start test containers | |
run: npm run setup:test | |
- name: Configure Datadog Test Visibility | |
uses: datadog/test-visibility-github-action@v2 | |
with: | |
languages: js | |
service: isomer-studio | |
api_key: ${{ secrets.DD_API_KEY }} | |
- name: Run Playwright tests | |
run: turbo test-ci:e2e --filter=isomer-studio --env-mode=loose | |
env: | |
# Required to allow Datadog to trace Playwright tests | |
NODE_OPTIONS: -r ${{ env.DD_TRACE_PACKAGE }} | |
- name: Stop test containers | |
run: npm run teardown | |
- name: Upload test results | |
if: ${{ !cancelled() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test results | |
path: apps/studio/playwright/test-results | |
retention-days: 7 |