tsc build exits 1 with no output under act/catthehacker, but passes in node:24-bookworm and on GitHub-hosted runners
Bug report info
- act version: 0.2.89
- Docker: 29.7.2
- Host OS: Linux (Manjaro), kernel 6.18, x86_64
- Runner image:
catthehacker/ubuntu:act-latest(exact:act-24.04-amd64, image version20260815, built 2026-08-15, Ubuntu 24.04.4 LTS, revisione2f8efe, digestsha256:c58e2b364da03b0c804c7d660f2ecbedf2f221a382b9baa0b344b0144780ff43) - Node in the job: v24.20.0 (installed via
actions/setup-node@v4,node-version: 24)
Command used with act
act workflow_dispatch -W .github/workflows/repro.yml -j build \
--network bridge --rm \
--container-options "-v /path/to/project:/src:ro --memory=12g"
Describe issue
A job builds a large TypeScript project (a NestJS backend, ~1,400 npm dependencies) with npm ci && npm run build, where the build script is tsc -p tsconfig.build.json.
npm cisucceeds (installs ~1,439 packages).tscthen exits with code 1 roughly 2–3 seconds after it starts, printing no diagnostics at all — noerror TS…lines, nothing on stdout or stderr. The step just goes from> tsc -p tsconfig.build.jsonstraight to failure.
The identical steps (same package-lock.json via npm ci, same npm run build) succeed with exit code 0 in both of these environments:
- A plain
docker run --rm node:24-bookwormcontainer (copy the source in,npm ci,npm run build→BUILD_EXIT=0). - GitHub-hosted
ubuntu-latestrunners (the same workflow run on GitHub).
It only fails when run under act with catthehacker/ubuntu:act-latest (act-24.04-amd64, version 20260815).
Things I ruled out:
- Memory — reproduces with
--container-options "--memory=12g"andNODE_OPTIONS=--max-old-space-size=6144; no OOM message appears. - Node version — act's job uses v24.20.0 (same major as the passing
node:24-bookwormtest). - Lockfile drift —
npm ciis used (lockfile is in sync; a full clean install succeeds).
A ~2.5 s silent non-zero exit from tsc on a project that normally takes ~20–30 s to type-check strongly suggests the process is being terminated early inside the container, but there is no diagnostic, no OOM/kill message, and it's specific to the act/catthehacker environment. It may be an image-environment issue (catthehacker/docker_images) rather than act core — happy to move it there if that's the right home.
Link to GitHub repository
Not available — this reproduces inside a private repository, so I can't share it. The failing project is a large NestJS/TypeScript backend; I have not yet reduced it to a minimal public repro (the behavior appears tied to project size / a large tsc build). I'm glad to run further diagnostics on request.
Workflow content
name: repro
on: workflow_dispatch
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- run: npm ci
- run: npm run build # -> "tsc -p tsconfig.build.json" (large NestJS project, ~1400 deps)
Relevant log output
[repro/build] ⭐ Run Main build
[repro/build] docker exec cmd=[bash -e /var/run/act/workflow/N] user= workdir=...
[repro/build] | added 1439 packages, and audited 1440 packages in 27s
[repro/build] | > [email protected] build
[repro/build] | > tsc -p tsconfig.build.json
[repro/build] ❌ Failure - Main build [~2.5s after tsc starts]
[repro/build] exitcode '1': failure
(No error TS…, no stderr, no OOM/kill message — the step ends immediately after > tsc ….)
Additional information
node:24-bookwormbuilds the exact same source cleanly (npm ci+npm run build→ exit 0), and GitHub-hostedubuntu-latestbuilds it cleanly too — so this is not a code/lockfile/Node-version problem; it's specific to running under act with thecatthehacker/ubuntu:act-latestimage (act-24.04-amd64, version20260815, digestsha256:c58e2b364da03b0c804c7d660f2ecbedf2f221a382b9baa0b344b0144780ff43).- Increasing container memory and the V8 heap did not change the outcome.
Source: nektos/act