name: CI on: push: branches: [main] pull_request: branches: [main] jobs: build: strategy: matrix: node-version: [20.x, 22.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ name: Build with ${{ matrix.node-version }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: npm - run: npm ci - run: npm run build test: strategy: matrix: node-version: [20.x] name: Run all tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 # Retrieve Git history, needed to verify commits - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: npm - run: npm ci - name: Build Next.js for E2E tests run: npm run build env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - if: github.event_name == 'pull_request' name: Validate all commits from PR run: npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose - name: Linter run: npm run lint - name: Type checking run: npm run check-types - name: Run unit tests run: npm run test -- --coverage - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v5 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - name: Install Playwright (used for Storybook and E2E tests) run: npx playwright install --with-deps - name: Run storybook tests run: npm run test-storybook:ci - name: Run E2E tests run: npx percy exec -- npm run test:e2e env: PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }} - uses: actions/upload-artifact@v4 if: always() with: name: test-results path: test-results/ retention-days: 7 synchronize-with-crowdin: name: GitHub PR synchronize with Crowdin runs-on: ubuntu-latest needs: [build, test] if: github.event_name == 'pull_request' steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} # Crowdin Actions needs to push commits to the PR branch, checkout HEAD commit instead of merge commit fetch-depth: 0 - name: crowdin action uses: crowdin/github-action@v2 with: upload_sources: true upload_translations: true download_translations: true create_pull_request: false localization_branch_name: ${{ github.head_ref || github.ref_name }} # explanation here: https://stackoverflow.com/a/71158878 commit_message: 'chore: new Crowdin translations by GitHub Action' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}