Files
Nitro-V3/.github/workflows/ci.yml
T
simoleo89 0ee53c24e3 ci: pair this PR head with the fork's renderer PR branch
CI on PR #157 was failing every typecheck with 35 TS2305 errors of the
form 'Module @nitrots/nitro-renderer has no exported member
Housekeeping*' because the workflow's PR fallback mapped to
duckietm/Nitro_Render_V3 @ Dev — and upstream Dev doesn't carry the HK
composers yet. They live on the fork's feat/housekeeping-packets
branch (renderer companion PR #77).

Detect the PR head ref and, when it's feat/housekeeping-panel,
override the default base-ref pairing and point at
simoleo89/Nitro_Render_V3 @ feat/housekeeping-packets so the typecheck
step can resolve the imports. Once the renderer PR lands on
duckietm:Dev this whole special-case block becomes dead code and can
be deleted.
2026-05-24 17:19:09 +02:00

173 lines
6.7 KiB
YAML

name: CI
on:
push:
branches:
- main
- 'feat/**'
pull_request:
workflow_dispatch:
inputs:
renderer_repo:
description: 'Renderer repo (owner/name). Empty = auto from client branch.'
required: false
default: ''
renderer_ref:
description: 'Renderer git ref. Empty = auto from client branch.'
required: false
default: ''
# Opt into the Node.js 24 runtime for the JavaScript actions
# (actions/checkout, actions/setup-node, …). Node 20 will be removed
# from GitHub-hosted runners in September 2026; this env var asks the
# runner to use Node 24 today so the workflow logs stop warning about
# it on every run.
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
jobs:
check:
name: Type check + tests
runs-on: ubuntu-latest
steps:
# The build/dev/typecheck setup expects the Nitro renderer SDK to
# live as a sibling of this repo (see CLAUDE.md → Setup walkthrough).
# Mirror that here by checking the client into <workspace>/Nitro-V3
# and the renderer into <workspace>/Nitro_Render_V3.
- name: Checkout Nitro-V3
uses: actions/checkout@v4
with:
path: Nitro-V3
# Pick the renderer ref dynamically based on the client context.
# The two repos must stay wire-aligned (composer/parser
# signatures); pairing `main` with a stale branch is what
# produced the "Expected 14-15 arguments, but got 16" failure on
# the catalog edit composer.
#
# This branch (`feat/housekeeping-panel`) references HK composers
# /events that live on the renderer PR branch
# (simoleo89/Nitro_Render_V3 @ feat/housekeeping-packets) — they
# haven't been merged upstream yet. Pair against the fork branch
# for this PR so the typecheck step can resolve the imports;
# once the renderer PR lands on duckietm:Dev this whole
# special-case block can be dropped.
#
# Mapping:
# client `main` → duckietm/Nitro_Render_V3 @ main
# client `feat/housekeeping-panel` → simoleo89/Nitro_Render_V3 @ feat/housekeeping-packets
# client `feat/**` (other) → duckietm/Nitro_Render_V3 @ Dev
# PR base `main` → duckietm/Nitro_Render_V3 @ main
# PR head `feat/housekeeping-panel` → simoleo89/Nitro_Render_V3 @ feat/housekeeping-packets
# PR base `Dev` (upstream) → duckietm/Nitro_Render_V3 @ Dev
# PR base `feat/**` → duckietm/Nitro_Render_V3 @ Dev
#
# Override via workflow_dispatch inputs when you need an ad-hoc
# pairing.
- name: Resolve renderer ref
id: renderer
run: |
REPO="${{ github.event.inputs.renderer_repo }}"
REF="${{ github.event.inputs.renderer_ref }}"
if [ -z "$REPO" ] || [ -z "$REF" ]; then
# For PRs we usually pair against the base ref, but the HK
# PR specifically needs to pair against its OWN head ref —
# the renderer companion PR is named identically
# (`feat/housekeeping-packets`) and lives on the same fork.
case "${GITHUB_EVENT_NAME}" in
pull_request)
if [ "${GITHUB_HEAD_REF}" = "feat/housekeeping-panel" ]; then
CTX="${GITHUB_HEAD_REF}"
else
CTX="${GITHUB_BASE_REF}"
fi
;;
*)
CTX="${GITHUB_REF_NAME}"
;;
esac
case "$CTX" in
main)
AUTO_REPO="duckietm/Nitro_Render_V3"
AUTO_REF="main"
;;
feat/housekeeping-panel)
AUTO_REPO="simoleo89/Nitro_Render_V3"
AUTO_REF="feat/housekeeping-packets"
;;
*)
AUTO_REPO="duckietm/Nitro_Render_V3"
AUTO_REF="Dev"
;;
esac
[ -z "$REPO" ] && REPO="$AUTO_REPO"
[ -z "$REF" ] && REF="$AUTO_REF"
fi
echo "repo=$REPO" >> "$GITHUB_OUTPUT"
echo "ref=$REF" >> "$GITHUB_OUTPUT"
echo "Resolved renderer pairing: $REPO @ $REF (client ctx: ${GITHUB_BASE_REF:-$GITHUB_REF_NAME}, event: ${GITHUB_EVENT_NAME})"
- name: Checkout Nitro_Render_V3 (sibling)
uses: actions/checkout@v4
with:
repository: ${{ steps.renderer.outputs.repo }}
ref: ${{ steps.renderer.outputs.ref }}
path: Nitro_Render_V3
- name: Setup Node 22
uses: actions/setup-node@v4
with:
node-version: '22'
cache: yarn
cache-dependency-path: |
Nitro-V3/yarn.lock
Nitro_Render_V3/yarn.lock
- name: Install renderer SDK deps
working-directory: Nitro_Render_V3
run: yarn install --frozen-lockfile
- name: Install client deps
working-directory: Nitro-V3
run: yarn install --frozen-lockfile
# The renderer SDK is consumed via a filesystem symlink in
# node_modules/@nitrots/nitro-renderer; create it AFTER yarn
# install (otherwise yarn would clean it up since the package
# isn't declared in package.json). tsgo (TS 7 native preview)
# then resolves the tsconfig `include` entry pointing at the
# renderer's `src/**/*.ts`.
#
# Use an absolute path so the link target is unambiguous
# regardless of the cwd that reads it. A relative target like
# `../../../Nitro_Render_V3` resolves to
# `Nitro-V3/Nitro_Render_V3` (one too few `..`), which doesn't
# exist and makes tsgo report TS2307 across the entire src/.
- name: Symlink renderer into client node_modules
run: |
mkdir -p Nitro-V3/node_modules/@nitrots
ln -sfn "${{ github.workspace }}/Nitro_Render_V3" Nitro-V3/node_modules/@nitrots/nitro-renderer
ls -la Nitro-V3/node_modules/@nitrots/
ls Nitro-V3/node_modules/@nitrots/nitro-renderer/packages/api/src/ | head -5
- name: Type check (tsgo)
working-directory: Nitro-V3
run: yarn typecheck
# Hook-order lint gate — the full yarn eslint emits ~900 pre-existing
# baseline errors (brace style, indentation), so we use a focused
# config that asserts only react-hooks/rules-of-hooks. Catches the
# "hook below early-return" pattern that produced two production
# crashes this session (CatalogPurchaseWidgetView, CatalogItemGridWidgetView).
- name: ESLint (hook-order gate)
working-directory: Nitro-V3
run: yarn lint:hooks
- name: Vitest
working-directory: Nitro-V3
run: yarn test --run