Skip to content

Properly use process spawn and simplify in nextjs-app integration test #9224

Properly use process spawn and simplify in nextjs-app integration test

Properly use process spawn and simplify in nextjs-app integration test #9224

Workflow file for this run

name: Tests and Checks
env:
NODE_NO_WARNINGS: true
on:
push:
branches:
- 'main'
pull_request:
paths-ignore:
- 'website/**'
jobs:
typecheck:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup env
uses: the-guild-org/shared-config/setup@v1
with:
node-version-file: .node-version
- name: Setup Bun Runtime
uses: antongolub/action-setup-bun@v1
- name: Setup Deno Runtime
uses: denoland/setup-deno@v1
with:
deno-version: v1.x
- name: Build Packages
run: pnpm build
- name: Typecheck
run: pnpm run check
- name: Test ESM & CJS exports integrity
run: pnpm bob check
- name: Prettier
run: pnpm prettier:check
- name: eslint
run: pnpm lint
unit:
needs: [typecheck]
name: unit / nodejs v${{ matrix.node-version }} / graphql v${{ matrix.graphql-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [18, 20, 22]
graphql-version: ['15.8.0', '16.6.0']
steps:
- name: Checkout Repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install pnpm
uses: pnpm/[email protected]
- name: Get pnpm store path
id: pnpm-store
run: echo "PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Cache pnpm
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-store.outputs.PATH }}
key:
${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-${{
hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-
- name: Set GraphQL Version
run: node scripts/override-graphql-version.js ${{ matrix.graphql-version }}
- name: Install Dependencies
run: pnpm i --no-frozen-lockfile # no frozen-lockfile because we change the resolutions
- name: Build Packages
run: pnpm build
- name: Run Tests
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
max_attempts: 3
command: pnpm run test --ci
integration:
needs: [typecheck, unit]
name: integration / nodejs v${{ matrix.node-version }} / graphql v${{ matrix.graphql-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [18, 20, 22]
graphql-version: ['15.8.0', '16.6.0']
steps:
- name: Checkout Repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install pnpm
uses: pnpm/[email protected]
- name: Get pnpm store path
id: pnpm-store
run: echo "PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Cache pnpm
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-store.outputs.PATH }}
key:
${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-${{
hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-
- name: Set GraphQL Version
run: node scripts/override-graphql-version.js ${{ matrix.graphql-version }}
- name: Install Dependencies
run: pnpm i --no-frozen-lockfile # no frozen-lockfile because we change the resolutions
- name: Build Packages
run: pnpm build
- name: Run Tests
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
max_attempts: 3
command: pnpm test:integration --ci
leaks:
needs: [typecheck, unit, integration]
name: leaks / nodejs v${{ matrix.node-version }} / graphql v${{ matrix.graphql-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [18, 22]
graphql-version: ['15.8.0', '16.6.0']
steps:
- name: Checkout Repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install pnpm
uses: pnpm/[email protected]
- name: Get pnpm store path
id: pnpm-store
run: echo "PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Cache pnpm
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-store.outputs.PATH }}
key:
${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-${{
hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-
- name: Set GraphQL Version
run: node scripts/override-graphql-version.js ${{ matrix.graphql-version }}
- name: Install Dependencies
run: pnpm i --no-frozen-lockfile # no frozen-lockfile because we change the resolutions
- name: Build Packages
run: pnpm build
- name: Run Tests
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
max_attempts: 3
command: pnpm test:leaks --ci
esm:
needs: [typecheck]
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup env
uses: the-guild-org/shared-config/setup@v1
with:
node-version-file: .node-version
- name: Build Packages
run: pnpm build
- name: Run Tests
run: pnpm --filter example-node-esm run test
apollo-federation-compatibility:
needs: [typecheck]
strategy:
fail-fast: false
matrix:
node-version: [18, 20, 22]
graphql-version: ['15.8.0', '16.6.0']
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install pnpm
uses: pnpm/[email protected]
- name: Get pnpm store path
id: pnpm-store
run: echo "PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Cache pnpm
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-store.outputs.PATH }}
key:
${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-${{
hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-
- name: Install Dependencies
run: pnpm i --no-frozen-lockfile
- name: Build Packages
run: pnpm build
- name: Bundle Apollo Federation Subgraph Example
run: pnpm --filter=example-apollo-federation-compatibility build
- name: Install Rover
run: curl -sSL https://rover.apollo.dev/nix/latest | sh
- name: Add Rover to PATH
run: echo "$HOME/.rover/bin" >> $GITHUB_PATH
- name: Apollo Federation Subgraph Compatibility
uses: apollographql/federation-subgraph-compatibility@v2
with:
workingDirectory: examples/apollo-federation-compatibility
compose: docker-compose.yaml
schema: schema.graphql
path: /graphql
token: ${{ secrets.GITHUB_TOKEN }}
failOnWarning: true
failOnRequired: true
debug: true
# TODO: have the example and packages use singleton nestjs dependencies
# but without using .pnpmfile.cjs because it causes issues with renovate: https://github.com/dotansimha/graphql-yoga/pull/2622
# nestjs-apollo-federation-compatibility:
# runs-on: ubuntu-latest
# steps:
# - name: Checkout Repository
# uses: actions/checkout@v3
# - name: Install Node
# uses: actions/setup-node@v3
# with:
# node-version: ${{ matrix.node-version }}
# - name: Install pnpm
# uses: pnpm/[email protected]
# - name: Get pnpm store path
# id: pnpm-store
# run: echo "PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
# - name: Cache pnpm
# uses: actions/cache@v3
# with:
# path: ${{ steps.pnpm-store.outputs.PATH }}
# key: ${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-${{ hashFiles('**/pnpm-lock.yaml') }}
# restore-keys: |
# ${{ runner.os }}-pnpm-store-graphql-v${{ matrix.graphql-version }}-
# - name: Install Dependencies
# run: pnpm i
# - name: Build Packages
# run: pnpm build
# - name: Bundle NestJS Apollo Federation Subgraph Example
# run: pnpm --filter=example-nestjs-apollo-federation-compatibility build
# - name: Install Rover
# run: curl -sSL https://rover.apollo.dev/nix/v0.11.1 | sh
# - name: Add Rover to PATH
# run: echo "$HOME/.rover/bin" >> $GITHUB_PATH
# - name: Apollo Federation Subgraph Compatibility
# uses: apollographql/federation-subgraph-compatibility@v1
# with:
# workingDirectory: examples/nestjs-apollo-federation-compatibility
# compose: docker-compose.yaml
# schema: schema.graphql
# path: /graphql
# # no token = no comment
# # token: ${{ secrets.GITHUB_TOKEN }}
# failOnWarning: true
# failOnRequired: true
# debug: true
e2e:
needs: [unit, integration, leaks, esm]
strategy:
fail-fast: false
matrix:
plan:
- 'cf-worker'
- 'cf-modules'
- 'azure-function'
- 'aws-lambda'
# - 'vercel-function' # Disabled because vercel API is not actually documented
- 'docker-node'
name: e2e / ${{ matrix.plan }}
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == github.repository
steps:
- name: Checkout Repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Setup env
uses: the-guild-org/shared-config/setup@v1
with:
node-version-file: .node-version
- name: Build Packages
run: pnpm build
- name: Install pulumi
uses: pulumi/setup-pulumi@v2
- name: Set outputs
id: vars
run: |
echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "docker_host=$(docker context inspect --format '{{.Endpoints.docker.Host}}')" >> $GITHUB_OUTPUT
- name: Provision & Test
run: pnpm start
working-directory: e2e
env:
# General
TEST_PLAN_NAME: ${{ matrix.plan }}
COMMIT_ID: ${{ steps.vars.outputs.sha_short }}
# CloudFlare
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_ZONE_ID: ${{ secrets.CLOUDFLARE_ZONE_ID }}
# Azure
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
# AWS
AWS_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_KEY: ${{ secrets.AWS_SECRET_KEY }}
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
AWS_REGION: ${{ secrets.AWS_REGION }}
# Vercel
VERCEL_AUTH_TOKEN: ${{ secrets.VERCEL_AUTH_TOKEN }}