Skip to content

Still add pnpm for running integration tests #1010

Still add pnpm for running integration tests

Still add pnpm for running integration tests #1010

Workflow file for this run

name: PR checks
on:
pull_request:
workflow_dispatch:
workflow_call:
push:
branches:
- 'renovate/**'
- 'pnpm'
concurrency:
group: pr-${{ github.ref }}
cancel-in-progress: true
env:
NODE_AUTH_TOKEN: nothing
jobs:
test:
name: Runtime
runs-on: ubuntu-latest
defaults:
run:
working-directory: packages/inngest
strategy:
fail-fast: false
matrix:
nodeVersion:
- 14
- 16
- 18
- lts
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-and-build
# Uses npm as pnpm doesn't support Node < 16
- run: volta run --node ${{ matrix.nodeVersion }} npm run test
types:
name: Types
runs-on: ubuntu-latest
defaults:
run:
working-directory: packages/inngest
strategy:
fail-fast: false
matrix:
tsVersion:
- 'latest'
- 'next'
- '~5.1.0'
- '~5.0.0'
- '~4.9.0'
- '~4.8.0'
- "~4.7.0"
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-and-build
- run: pnpm add -D typescript@${{ matrix.tsVersion }}
- run: pnpm run test:types
api_diff:
name: Local API diff
runs-on: ubuntu-latest
defaults:
run:
working-directory: packages/inngest
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-and-build
- run: pnpm run api-extractor run
lint:
name: Lint
runs-on: ubuntu-latest
defaults:
run:
working-directory: packages/inngest
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-and-build
- run: pnpm run lint
package:
name: Package
runs-on: ubuntu-latest
defaults:
run:
working-directory: packages/inngest
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-and-build
- name: Package as tarball
run: pnpm run local:pack
- name: Archive package tarball
uses: actions/upload-artifact@v3
with:
name: inngestpkg
path: packages/inngest/inngest.tgz
examples-matrix:
name: Create examples test matrix
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v3
- id: matrix
run: |
echo "matrix=$(find examples/apps -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT
examples:
name: Test examples
runs-on: ubuntu-latest
defaults:
run:
working-directory: packages/inngest
needs: [examples-matrix, package]
strategy:
fail-fast: false
matrix:
example: ${{ fromJson(needs.examples-matrix.outputs.matrix) }}
steps:
# Checkout the repo
- name: Checkout SDK
uses: actions/checkout@v3
- uses: ./.github/actions/setup-and-build
with:
build: false
# If we find a deno.json file in the example repo, we need to pull Deno on
# to the toolchain.
- name: Check if Deno is used
id: deno-check
run: echo "isDeno=$(test -f deno.json && echo true || echo false)" >> $GITHUB_OUTPUT
working-directory: examples/apps/${{ matrix.example }}
# Add Deno integration support later
- name: If Deno is used, exit early
if: ${{ steps.deno-check.outputs.isDeno == 'true' }}
run: exit 1
# uses: denoland/setup-deno@v1
# with:
# deno-version: vx.x.x
- name: Download pre-built SDK
uses: actions/download-artifact@v3
with:
name: inngestpkg
path: examples/apps/${{ matrix.example }}
# Install dependencies in the example repo
- name: Install example dependencies
# if: ${{ steps.deno-check.outputs.isDeno != 'true' }}
run: nci
working-directory: examples/apps/${{ matrix.example }}
- name: Add local SDK to example
working-directory: examples/apps/${{ matrix.example }}
run: ni ./inngest.tgz
# # Link the SDK, making sure to use the same Yarn version that we used to
# # create the link.
# #
# # Because repos are always owner/repo with a slash, the directory will be
# # the same, therefore we must venture an extra level deep when searching
# # for package.json.
# #
# # Yarn v3 (berry) will override Volta's version control and always use
# # whatever version is specified and cached in the repo's `.yarnrc.yml`
# # file.
# # Because of this, we must instead link the SDK using a relative path, and
# # have the library's `dist/` directory appear as a separate package by
# # specifying an empty `yarn.lock` file within.
# #
# # Locally linking the lib to a Deno repo is harder, as Deno doesn't
# # support local linking between ESM and CJS. Instead, we run a manual
# # shim script to bend paths and adjust the target repo's import path.
# - name: Link local SDK to example
# run: |
# if test -f deno.json; then
# deno run --allow-read --allow-write ../../../sdk/deno_compat/link.ts
# else
# yarnv=$(volta run --yarn $(cat ../../../sdk/package.json | jq -r .volta.yarn) yarn -v)
# if [[ $yarnv == 3* ]]; then
# touch ../../../sdk/dist/yarn.lock
# yarn link ../../../sdk/dist
# else
# volta run --yarn $(cat ../../../sdk/package.json | jq -r .volta.yarn) yarn link inngest
# fi
# fi
# working-directory: examples/${{ matrix.repo }}
# Copy any SDK function examples to the example repo so that we're always
# testing many functions against many handlers.
- name: Find inngest functions path in example
id: inngest-functions-path
run: echo "dir=$(dirname $(echo \"$(git ls-files | grep inngest/index.ts)))\"" >> $GITHUB_OUTPUT
working-directory: examples/apps/${{ matrix.example }}
- name: Remove any existing inngest functions
run: rm -rf ${{ steps.inngest-functions-path.outputs.dir }}
working-directory: examples/apps/${{ matrix.example }}
- name: Copy functions to test to example
run: cp -Tr ../../../examples/functions/ ${{ steps.inngest-functions-path.outputs.dir }}
working-directory: examples/apps/${{ matrix.example }}
# # IF we're using Deno, also replace any "inngest..." imports with
# # "npm:inngest..." and any direct file imports in `inngest/index.ts` with
# # `.ts` suffixes.
# - name: If Deno, transform imports
# if: ${{ steps.deno-check.outputs.isDeno == 'true' }}
# run: |
# find ${{ steps.inngest-functions-path.outputs.dir }} -type f -name "*.ts" -exec sed -i 's/from "inngest/from "npm:inngest/g' {} \;
# find ${{ steps.inngest-functions-path.outputs.dir }} -type f -name "*.ts" -exec sed -i -E 's/from "\.(.+)"/from "\.\1\/index\.ts"/g' {} \;
# working-directory: examples/${{ matrix.repo }}
# Try to build the example
- name: Build the example
# if: ${{ steps.deno-check.outputs.isDeno != 'true' }}
run: nr build
working-directory: examples/apps/${{ matrix.example }}
- name: Run the Inngest dev server
run: npx inngest-cli@latest dev > cli.log 2>&1 &
working-directory: examples/apps/${{ matrix.example }}
env:
DO_NOT_TRACK: 1
- name: Wait for the Inngest dev server to start
uses: mydea/action-wait-for-api@v1
with:
url: "http://localhost:8288"
timeout: "60"
# Run the example
- name: Run the example's dev server
run: (nr dev > dev.log 2>&1 &)
working-directory: examples/apps/${{ matrix.example }}
# Provide the example any env vars it might need
env:
PORT: 3000
DO_NOT_TRACK: 1
- name: Wait for the example to start
uses: mydea/action-wait-for-api@v1
with:
url: "http://localhost:3000/api/inngest"
timeout: "60"
# Give the dev server 5 seconds to register with the example
# TODO Check logs instead of sleeping
- name: Wait 5 seconds for dev server registration
run: sleep 5
# Run the examples test suite against the dev server
- name: Run integration test suite
run: pnpm run test:examples
- if: ${{ always() }}
run: cat dev.log
working-directory: examples/apps/${{ matrix.example }}
- if: ${{ always() }}
run: cat cli.log
working-directory: examples/apps/${{ matrix.example }}