Skip to content

cache node_modules to reduce build time #3335

cache node_modules to reduce build time

cache node_modules to reduce build time #3335

Workflow file for this run

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