fix(ci): remove broken lint step from release workflow (exit 127)

Merged
YA
2mo ago
+16-9

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 across src/ — neither belongs in a release-unblock
    change.
  • package.json's scripts.lint entry was left in place. Per
    git grep -n "npm run lint" origin/main, TESTING.md's machine-executed
    test-contract (testmd run) still declares a lint suite
    (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.14 API-surface drift: dozens of
    src/commands/**/index.ts files 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.


View with [code]smith Autofix with [code]smith
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.