Still add pnpm
for running integration tests
#1010
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |