fix(ci): remove broken lint step from release workflow (exit 127)
Root cause
Release run 33826226004 on tag v1.0.9 failed at the Lint step of the
Build + e2e-smoke job:
> @wave-av/cli@1.0.9 lint
> eslint src/
sh: 1: eslint: not found
##[error]Process completed with exit code 127
package.json's scripts.lint is "eslint src/", but eslint is not
declared in devDependencies (which holds only @sentry/node,
@types/inquirer, @types/node, @types/ws, tsup, typescript,
vitest), and there is no eslint config file anywhere in the repo
(git ls-tree -r origin/main --name-only | grep -i eslint returns nothing).
The install step is npm ci --include=dev, so this is not a stripped-dev-deps
problem — the binary genuinely was never declared. npm run lint has never
been runnable on this repo; it only surfaced now because PR #17's new release
workflow is the first thing that actually invokes it.
The fix
Removed the broken Lint step from .github/workflows/release.yml's
verify job. The workflow already runs a separate Type-check step
(npm run type-check -> tsc --noEmit) immediately after where Lint used
to be, using the real typescript devDependency and tsconfig.json that
already exist. Coverage is not reduced by this change — the type-check
gate was already present in the job; only the step that could never pass
(exit 127, always) is gone. Comment references to "lint" elsewhere in the
workflow file (job-level summary comments) were updated to match.
This is not weakening a gate. The removed step could never pass under any
circumstance — it was a wall, not a gate, since the binary it invoked did not
exist and never has. No continue-on-error was added, nothing is skipped,
and the step was not left in place with a fake pass condition. The one gate
that remains where Lint was — Type-check — is a check that can genuinely
pass or fail, so removing the dead step makes gate 2 real rather than
weaker.
What was NOT done, on purpose
- eslint was not added as a dependency. Introducing a linter with no
config would either lint nothing (a fake gate) or surface a large unknown
set of violations acrosssrc/— neither belongs in a release-unblock
change. package.json'sscripts.lintentry was left in place. Per
git grep -n "npm run lint" origin/main,TESTING.md's machine-executed
test-contract (testmd run) still declares alintsuite
(cmd: npm run lint,required: false). Since something else still calls
it, it was not removed, only the workflow step that called it was changed.- tsconfig.json was not touched, even though
npm run type-check
currently fails (see below) — silencing those errors by loosening
tsconfig would hide a real defect instead of fixing it.
Verification (in an isolated worktree, not the shared checkout)
git fetch origin
git worktree add -b fix/release-lint-step /tmp/cli-lintfix origin/main
cd /tmp/cli-lintfix && npm ci --include=dev && npm run type-check
npm ci --include=dev succeeded (288 packages, 17 pre-existing audit
findings unrelated to this change). npm run type-check FAILED with
exit code 2 and 148 tsc errors — this is a real, separate, pre-existing
defect and is reported here rather than hidden:
- ~145 errors are
@wave-av/sdk@2.0.14API-surface drift: dozens of
src/commands/**/index.tsfiles call SDK methods/properties
(PrismAPI.create,QrAPI.scan,SearchAPI.query,PipelineAPI.status,
VaultAPI.recordings,ZoomAPI.*, etc.) that no longer exist on the
current SDK types, plus several request-shape mismatches
(CreateQRRequest,CreateClipRequest,SynthesizeRequest, ...). - 3 errors are
TS2307: Cannot find module '../../types/index.js'from
src/lib/auth/device-flow.ts,src/lib/config/manager.ts, and
src/lib/output/index.ts.
This is out of scope for this PR (a release-CI-unblock change) and is not
touched here. It means: after this PR merges, the release workflow will
still fail — it will fail at Type-check with real, actionable errors
instead of failing at Lint with an infrastructure error. That is strictly
better (a real signal instead of a permanent wall) but the release is not
yet green; the SDK-drift/missing-module errors need their own fix before
v1.0.9 can ship.
Operator action required after merge
Once this merges to main, the v1.0.9 tag must be re-cut against the
new main for the release workflow to retry (tags are immutable pointers;
pushing this fix alone does not re-trigger the tag-push-triggered release).
That is the repo operator's action, not something this PR does — no git tag
was created, moved, or deleted as part of this change.
[!NOTE]
Low Risk
CI-only change that removes a step that could never pass; release verification still runs type-check, tests, build, and e2e-smoke.
Overview
Unblocks the tag-triggered release pipeline by removing the Lint step (npm run lint / eslint src/) from the verify job in .github/workflows/release.yml, which was failing with exit 127 because eslint is not installed and there is no ESLint config in the repo.
Workflow comments and gate summaries are updated so Gate 2 is described as install → type-check → test → build → e2e-smoke (no lint). An inline NOTE documents why the step was deleted instead of using continue-on-error or adding ESLint as a dependency.
Type-check, unit tests, build, and the tarball e2e-smoke remain unchanged; package.json's lint script is untouched.
Reviewed by Cursor Bugbot for commit 7dfb276556134ef5ae83ce701042020d9981d79c. Bugbot is set up for automated code reviews on this repo. Configure here.
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.
Summary by Sourcery
Remove the non-functional lint gate from the release workflow so releases proceed to the existing type-check, test, build, and smoke-test verification steps.
Bug Fixes:
- Remove the release workflow’s broken ESLint step, which always failed because ESLint is not available in the project.
Enhancements:
- Keep type-checking as the release verification gate in place of the unusable lint check and update workflow descriptions accordingly.
CI:
- Update release workflow gate documentation to reflect the removal of linting.