Skip to content

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

Merged
yakimoto merged 1 commit into
mainfrom
fix/release-lint-step
Sep 4, 2026
Merged

fix(ci): remove broken lint step from release workflow (exit 127)#48
yakimoto merged 1 commit into
mainfrom
fix/release-lint-step

Conversation

@yakimoto

@yakimoto yakimoto commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

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 7dfb276. 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.

Review in cubic

Release run 33826226004 on tag v1.0.9 failed at the "Lint" step in
"Build + e2e-smoke" with `sh: 1: eslint: not found` (exit 127).
`eslint` is not a devDependency and no eslint config exists anywhere
in the repo, so `npm run lint` (-> `eslint src/`) could never pass.

Remove the broken Lint step. Coverage is not reduced: the workflow
already runs a separate `Type-check` step (`npm run type-check` ->
`tsc --noEmit`) immediately after, using the real typescript
devDependency and tsconfig.json that already exist. That step can
genuinely pass or fail, unlike the eslint step it replaces.

package.json's `scripts.lint` entry is left in place: TESTING.md's
machine-executed test-contract still references `npm run lint` as an
optional (`required: false`) suite, so removing the script would
break that caller.

Verified in an isolated worktree: `npm ci --include=dev && npm run
type-check` currently FAILS with 148 pre-existing TS errors (mostly
@wave-av/sdk API surface drift plus 3 missing `../../types/index.js`
modules), unrelated to this change and out of scope for it.
@codeant-ai

codeant-ai Bot commented Sep 4, 2026

Copy link
Copy Markdown

Your free trial PR review limit of 300 PRs has been reached. Please upgrade your plan to continue using CodeAnt AI.

@qodo-code-review

Copy link
Copy Markdown

ⓘ Qodo reviews are paused because your workspace is out of credits. Ask your workspace admin to add credits to resume reviews. Manage billing

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @yakimoto, this account has used its review budget of 2,500,000 diff characters for the last 7 days.

You can request another review in 10 hours and 46 minutes by commenting @sourcery-ai review.

@cursor

cursor Bot commented Sep 4, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_4b471347-baa0-4d1e-aaa6-f394b83c7efd)

@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 41 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available. Your 91 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Team

Run ID: b6a3eca0-e8ba-4713-a636-c4f409ceda70

📥 Commits

Reviewing files that changed from the base of the PR and between 5899f5b and 7dfb276.

📒 Files selected for processing (1)
  • .github/workflows/release.yml

Comment @coderabbitai help to get the list of available commands.

@sourcery-ai

sourcery-ai Bot commented Sep 4, 2026

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

The release workflow no longer invokes the permanently broken lint script; it proceeds directly from dependency installation to the existing type-check gate, converting an infrastructure failure into actionable CI feedback without adding an unconfigured linter or weakening error handling.

Flow diagram for the updated release verification gate

flowchart LR
    Install[Install dev dependencies] --> TypeCheck[Type-check: npm run type-check]
    TypeCheck --> Test[Test]
    Test --> Build[Build]
    Build --> E2E[E2E smoke test]
    Lint[Removed lint step: eslint not found] -. eliminated .-> TypeCheck
Loading

File-Level Changes

Change Details Files
Removed the unrecoverable lint invocation from the release verification gate while retaining type checking and updating workflow documentation.
  • Deleted the Lint step that ran npm run lint and failed because eslint is undeclared and unconfigured.
  • Kept the unconditional Type-check step as the next real validation gate.
  • Updated gate summaries and install comments to remove obsolete lint references.
  • Documented that the existing type-check currently exposes pre-existing SDK API drift and missing-module errors, so the release may remain blocked after this fix.
.github/workflows/release.yml

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@gitar-bot

gitar-bot Bot commented Sep 4, 2026

Copy link
Copy Markdown

Note

Automatic reviews are paused because your team has used its included automatic processing for this billing period (headroom scales with your seat count). You can still comment "Gitar review" to run one anytime, and automatic reviews resume on their own by October 1. Add seats for more headroom.
Learn more

Code Review ✅ Approved

Removes the broken Lint step from the release workflow that was failing with exit 127 because eslint is not installed and no ESLint config exists in the repo. Type-check, tests, build, and e2e-smoke verification remain in place. No issues found.

Options

Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@macroscopeapp

macroscopeapp Bot commented Sep 4, 2026

Copy link
Copy Markdown

Approvability

Verdict: Would Approve

Macroscope's review found this PR approvable — This is a one-file CI-only cleanup that removes an always-failing ESLint invocation while preserving type-checking, tests, builds, scans, smoke verification, and the existing publish dependency chain. It does not change CLI runtime behavior, package contents, or deployment targets.

Not approved because:

  • Credit balance exhausted. Approvability relies on correctness review in order to determine eligibility

Review your spending limits in Billing settings. You can add or adjust custom eligibility rules. Learn more.

@yakimoto
yakimoto merged commit 6805ce5 into main Sep 4, 2026
24 checks passed
@yakimoto
yakimoto deleted the fix/release-lint-step branch September 4, 2026 02:58
yakimoto added a commit that referenced this pull request Sep 4, 2026
Resolves the .github/workflows/release.yml conflict from PR #45/#46/#48
landing on main in parallel:
- Keeps main's node-version/cache node-setup form and its dist-tag-aware
  `npm publish --tag $DIST_TAG` step (from VER-001/#46) in the publish job.
- Keeps this branch's new npm->=11.5.1 floor check in the verify job.
- Drops the redundant 'Verify tag matches package.json version' step in
  the verify job that main already removed (the publish job's own
  tag-vs-version check covers it; this is not undoing landed work).
- Appends this branch's verify-publish job after the dist-tag publish
  step, fixing 'needs: release' -> 'needs: publish' since the workflow's
  actual job id (post-union with PR #17) is 'publish', not 'release'.
- No Lint step is reintroduced (#48 removed it for exit-127 reasons).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant