Release @latest #1008
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/**' | |
concurrency: | |
group: pr-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
NODE_AUTH_TOKEN: nothing | |
jobs: | |
test: | |
name: Runtime | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
nodeVersion: | |
- 14 | |
- 16 | |
- 18 | |
- lts | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-and-build | |
- run: volta run --node ${{ matrix.nodeVersion }} yarn test | |
types: | |
name: Types | |
runs-on: ubuntu-latest | |
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: yarn prelink | |
- run: yarn add -D typescript@${{ matrix.tsVersion }} | |
- run: yarn test:types | |
api_diff: | |
name: Local API diff | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-and-build | |
- run: yarn run api-extractor run | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-and-build | |
- run: yarn lint | |
examples: | |
name: Test examples | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
repo: | |
# - inngest/sdk-example-cloudflare-workers - BROKEN | |
- inngest/sdk-example-nextjs-vercel | |
# - inngest/sdk-example-redwoodjs-vercel - BROKEN | |
- inngest/sdk-example-nextjs-cloudflare | |
- inngest/sdk-example-nextjs-netlify | |
- inngest/sdk-example-remix-vercel | |
- inngest/sdk-example-nuxt-vercel | |
steps: | |
# Checkout the repo | |
- name: Checkout SDK | |
uses: actions/checkout@v3 | |
with: | |
path: sdk | |
- uses: ./sdk/.github/actions/setup-and-build | |
with: | |
working-directory: sdk | |
# Checkout the example repo | |
- name: Checkout example | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ matrix.repo }} | |
path: examples/${{ matrix.repo }} | |
ref: main | |
# Get the SDK ready and link it locally | |
- name: Prepare SDK for linking | |
run: yarn prelink | |
working-directory: sdk | |
- name: Create link to SDK | |
run: yarn link | |
working-directory: sdk/dist | |
# 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/${{ matrix.repo }} | |
- name: If Deno is used, install it | |
uses: denoland/setup-deno@v1 | |
if: ${{ steps.deno-check.outputs.isDeno == 'true' }} | |
with: | |
deno-version: vx.x.x | |
# Install dependencies in the example repo | |
- name: Install example dependencies | |
if: ${{ steps.deno-check.outputs.isDeno != 'true' }} | |
run: | | |
if test -f yarn.lock; then | |
yarn install --frozen-lockfile | |
elif test -f package-lock.json; then | |
npm ci | |
fi | |
working-directory: examples/${{ matrix.repo }} | |
# 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/${{ matrix.repo }} | |
- name: Remove any existing inngest functions | |
run: rm -rf ${{ steps.inngest-functions-path.outputs.dir }} | |
working-directory: examples/${{ matrix.repo }} | |
- name: Copy functions to test to example | |
run: cp -Tr ../../../sdk/src/examples/ ${{ steps.inngest-functions-path.outputs.dir }} | |
working-directory: examples/${{ matrix.repo }} | |
# 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: If not Deno, build the example | |
if: ${{ steps.deno-check.outputs.isDeno != 'true' }} | |
run: | | |
if test -f yarn.lock; then | |
yarn build | |
elif test -f package-lock.json; then | |
npm run build | |
fi | |
working-directory: examples/${{ matrix.repo }} | |
- name: Run the Inngest dev server | |
run: npx inngest-cli@latest dev > cli.log 2>&1 & | |
working-directory: examples/${{ matrix.repo }} | |
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 test -f yarn.lock; then | |
(yarn dev > dev.log 2>&1 &) | |
elif test -f package-lock.json; then | |
(npm run dev > dev.log 2>&1 &) | |
else | |
(deno task start > dev.log 2>&1 &) | |
fi | |
working-directory: examples/${{ matrix.repo }} | |
# 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: yarn test:examples | |
working-directory: sdk | |
- if: ${{ always() }} | |
run: cat dev.log | |
working-directory: examples/${{ matrix.repo }} | |
- if: ${{ always() }} | |
run: cat cli.log | |
working-directory: examples/${{ matrix.repo }} |