name: CI on: push: branches: - main pull_request: paths-ignore: - ".vscode/**" - "**/*.md" # Automatically cancel older in-progress jobs on the same branch concurrency: group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }} cancel-in-progress: true defaults: run: shell: bash env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} FORCE_COLOR: true ASTRO_TELEMETRY_DISABLED: true jobs: lint: name: Lint timeout-minutes: 3 runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v3 - name: Setup PNPM uses: pnpm/action-setup@v2.2.1 - name: Setup Node uses: actions/setup-node@v3 with: node-version: 16 cache: "pnpm" - name: Install dependencies run: pnpm install - name: Status run: git status # Lint autofix cannot run on forks, so just skip those! See https://github.com/wearerequired/lint-action/issues/13 - name: Lint (External) if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.owner.login != github.repository_owner }} run: pnpm run lint # Otherwise, run lint autofixer - name: Lint if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.owner.login == github.repository_owner }} uses: wearerequired/lint-action@v2.1.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: eslint: true eslint_extensions: js,ts,cts,mts,cjs,mjs prettier: false auto_fix: false git_name: fredkbot git_email: fred+astrobot@astro.build commit_message: "chore(lint): ${linter} fix" github_token: ${{ secrets.GITHUB_TOKEN }} neutral_check_on_warning: true # Checks that the formatter runs successfully on all files # In the future, we may have this fail PRs on unformatted code - name: Format Check run: pnpm run format --check # Build primes out build caches for Turbo build: name: "Build: ${{ matrix.os }}" runs-on: ${{ matrix.os }} timeout-minutes: 3 strategy: matrix: OS: [ubuntu-latest] NODE_VERSION: [14] fail-fast: true steps: - name: Checkout uses: actions/checkout@v3 - name: Setup PNPM uses: pnpm/action-setup@v2.2.1 - name: Setup node@${{ matrix.NODE_VERSION }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.NODE_VERSION }} cache: "pnpm" - name: Install dependencies run: pnpm install - name: Build Packages run: pnpm run build test: name: "Test: ${{ matrix.os }} (node@${{ matrix.NODE_VERSION }})" runs-on: ${{ matrix.os }} timeout-minutes: 25 needs: build strategy: matrix: OS: [ubuntu-latest, windows-latest] # TODO: Enable node@18! NODE_VERSION: [14, 16] include: - os: macos-latest NODE_VERSION: 14 fail-fast: false env: NODE_VERSION: ${{ matrix.NODE_VERSION }} steps: - name: Checkout uses: actions/checkout@v3 - name: Setup PNPM uses: pnpm/action-setup@v2.2.1 - name: Setup node@${{ matrix.NODE_VERSION }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.NODE_VERSION }} cache: "pnpm" - name: Use Deno uses: denoland/setup-deno@v1 with: deno-version: v1.26.1 - name: Install dependencies run: pnpm install - name: Build Packages run: pnpm run build - name: Test run: pnpm run test e2e: name: "Test (E2E): ${{ matrix.os }} (node@${{ matrix.NODE_VERSION }})" runs-on: ${{ matrix.os }} timeout-minutes: 25 needs: build strategy: matrix: OS: [ubuntu-latest, windows-latest] NODE_VERSION: [14] fail-fast: false env: NODE_VERSION: ${{ matrix.NODE_VERSION }} steps: - name: Checkout uses: actions/checkout@v3 - name: Setup PNPM uses: pnpm/action-setup@v2.2.1 - name: Setup node@${{ matrix.NODE_VERSION }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.NODE_VERSION }} cache: "pnpm" - name: Install dependencies run: pnpm install - name: Build Packages run: pnpm run build - name: Test run: pnpm run test:e2e smoke: name: "Test (Smoke): ${{ matrix.os }} (node@${{ matrix.NODE_VERSION }})" runs-on: ${{ matrix.os }} timeout-minutes: 25 needs: build strategy: matrix: OS: [ubuntu-latest, windows-latest] NODE_VERSION: [14] env: NODE_VERSION: ${{ matrix.NODE_VERSION }} steps: - name: Checkout uses: actions/checkout@v3 - name: Setup PNPM uses: pnpm/action-setup@v2.2.1 - name: Setup node@${{ matrix.NODE_VERSION }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.NODE_VERSION }} cache: "pnpm" - name: Checkout docs uses: actions/checkout@v3 with: repository: withastro/docs path: smoke/docs - name: Install dependencies run: pnpm install --no-frozen-lockfile - name: Build Packages run: pnpm run build - name: Test run: pnpm run test:smoke env: NODE_OPTIONS: "--max-old-space-size=4096"