Skip to content

Add GetStepTools<typeof inngest> type for getting generic tooling type #1373

Add GetStepTools<typeof inngest> type for getting generic tooling type

Add GetStepTools<typeof inngest> type for getting generic tooling type #1373

Workflow file for this run

name: PR checks
on:
pull_request:
workflow_dispatch:
workflow_call:
push:
branches:
- 'renovate/**'
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
- 20
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-and-build
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.nodeVersion }}
# Uses npm as pnpm doesn't support Node < 16
- run: node --version && npm --version && npm run test
types:
name: Types
runs-on: ubuntu-latest
defaults:
run:
working-directory: packages/inngest
strategy:
fail-fast: false
matrix:
tsVersion:
- 'latest'
- 'next'
- 'beta'
- '~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 -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
- name: Download pre-built SDK
uses: actions/download-artifact@v3
with:
name: inngestpkg
path: examples/${{ matrix.example }}
# Install dependencies in the example repo
# Don't use "npm ci", "--immutable" etc., as example repos won't be
# shipped with lock files.
- name: Install example dependencies
run: npm install
working-directory: examples/${{ matrix.example }}
- name: Add local SDK to example
working-directory: examples/${{ matrix.example }}
run: npm install ./inngest.tgz
# 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/${{ matrix.example }}
- name: Remove any existing inngest functions
run: rm -rf ${{ steps.inngest-functions-path.outputs.dir }}
working-directory: examples/${{ matrix.example }}
- name: Copy functions to test to example
run: cp -Tr ../../packages/inngest/src/test/functions/ ${{ steps.inngest-functions-path.outputs.dir }}
working-directory: examples/${{ matrix.example }}
# Rules for every project can be different; ignore the example functions
# we've just added.
- name: Ignore ESLint in example functions
run: echo '**/inngest/**' >> .eslintignore
working-directory: examples/${{ matrix.example }}
# This also covers projects not using ESLint.
- name: Ignore TS checks in examples functions
run: find ${{ steps.inngest-functions-path.outputs.dir }} -type f -name "*.ts" -exec sed -i '1i // @ts-nocheck' {} \;
working-directory: examples/${{ matrix.example }}
# Try to build the example
- name: Build the example
run: npm run build
working-directory: examples/${{ matrix.example }}
- name: Run the Inngest dev server
run: npx inngest-cli@latest dev > cli.log 2>&1 &
working-directory: examples/${{ 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: |
if [[ $(jq '.scripts["start"]' < package.json;) != null ]]; then
(npm run start > dev.log 2>&1 &)
else
(npm run dev > dev.log 2>&1 &)
fi
working-directory: examples/${{ matrix.example }}
# Provide the example any env vars it might need
env:
HOST: "0.0.0.0"
PORT: 3000
DO_NOT_TRACK: 1
NODE_ENV: "development"
INNGEST_BASE_URL: "http://127.0.0.1:8288/"
INNGEST_DEVSERVER_URL: "http://127.0.0.1:8288/"
- 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/${{ matrix.example }}
- if: ${{ always() }}
run: cat cli.log
working-directory: examples/${{ matrix.example }}