Skip to content

Upgrade dev toolchain to clear Dependabot alerts; move CI to GitHub Actions on Node 24 - #23

Merged
boatmeme merged 9 commits into
masterfrom
dependency-upgrade
Sep 22, 2026
Merged

boatmeme merged 9 commits into
masterfrom
dependency-upgrade

Conversation

@boatmeme

@boatmeme boatmeme commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Clears all 34 open Dependabot alerts and moves CI to GitHub Actions on Node 24.

Every alert came from 2020-era dev tooling in yarn.lock. prolly has no runtime dependencies, so nothing changes for consumers: the published tarball is still just LICENSE, README.md, index.js and package.json.

Dev toolchain

  • eslint 6 → 10. ESLint 10 only supports flat config, so .eslintrc, .eslintignore and test/.eslintrc become one eslint.config.js with the same rules: ES2015 syntax, node globals, mocha globals for tests, and the should unused-var exception.
  • mocha 7 → 12
  • nyc → c8 (native V8 coverage). This drops the Babel/istanbul tree behind several alerts.
  • Removed eslint-plugin-import and eslint-plugin-mocha. Neither contributed any rules.
  • Regenerated yarn.lock from scratch: 316 → 134 packages. 13 of the flagged packages are gone entirely; the rest resolve to patched versions. npm audit reports 0 vulnerabilities.
  • Added a project .npmrc that pins the public npm registry, so a CodeArtifact registry in someone's ~/.npmrc can't leak into yarn.lock again.

CI

  • Replaced .travis.yml with .github/workflows/build.yml. Travis hasn't reported a status on master in years and still targeted Node 8/10/12. The new workflow gets Node from .nvmrc (24) and runs yarn ci-test (c8 coverage, mocha, eslint).
  • Build runs on ubuntu-latest, not the org's ARC runners. prolly is public, and the ARC runners don't pick up public-repo jobs. GitHub-hosted runners also keep fork PRs off internal infrastructure.
  • Removed the gha-shared workflows (action-lint, dependabot-alert-handler, pr-summarizer). GitHub doesn't allow public repos to use actions or reusable workflows from private repos, so they failed with a workflow file error.
  • Build writes test results to the job summary: mocha pass/fail counts, the c8 coverage table, and the full log in a collapsed section.
  • Swapped the README's Travis and Codecov badges for the Actions badge.

Other

  • Fixed the misspelled engine key in package.json, which npm and yarn were ignoring. It's now engines: { node: ">=4.0.0" }, the same constraint.

  • Fixed flaky .parallel duration assertions. Node timers can fire up to about 1 ms early when measured with Date.now(), which made the lower-bound checks fail intermittently (1 in 40 runs locally, and once on this PR). They now use the same - 1 slack as the .wait tests.

Not in this PR

  • npm publishing. It used to be a Travis deploy stage and will come in a follow-up PR.

Test plan

  • yarn ci-test passes locally on Node 24.21: 32 tests, 100% line coverage, eslint clean
  • yarn install --frozen-lockfile succeeds with a fresh cache and no user-level npm/yarn config
  • Resolved lockfile versions checked against every open alert's vulnerable range: 0 matches
  • Build workflow passes on this PR

The Dependabot alerts close once this merges and Dependabot rescans master.

🤖 Generated with Claude Code

boatmeme and others added 9 commits September 22, 2026 14:22
All open Dependabot alerts come from 2020-era dev tooling in yarn.lock;
prolly has no runtime dependencies.

- eslint 6 -> 10, migrating .eslintrc/.eslintignore/test/.eslintrc to a
  flat eslint.config.js with equivalent rules (ES2015 syntax, node globals,
  mocha globals and should-ignore for tests)
- mocha 7 -> 12
- nyc -> c8 (native V8 coverage), dropping the Babel/istanbul tree
- remove eslint-plugin-import and eslint-plugin-mocha (no rules used)
- regenerate yarn.lock from scratch (316 -> 134 packages)
- update .npmignore for the new config files

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Travis hasn't reported a status on master in years and still targeted
Node 8/10/12. Add a Build workflow modelled on ombud-lib-template that
reads Node from .nvmrc (24), runs on arc-runner-build with SHA-pinned
actions, and runs `yarn ci-test` (c8 coverage + mocha + eslint).

Swap the README's Travis and Codecov badges for the Actions badge;
coverage is no longer uploaded to Codecov. npm publishing (previously a
Travis deploy stage) will follow in a separate PR.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The push trigger targeted `main`, but this repo's default branch is
`master`, so it never fired.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The misspelled `engine` string key was ignored by npm/yarn; use the
standard `engines` object form with the same constraint.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
prolly is a public repo. GitHub doesn't allow public repos to use actions
or reusable workflows from private repos, so action-lint,
dependabot-alert-handler and pr-summarizer (all backed by the private
gha-shared repo) fail with a workflow file error. The org's ARC runners
also don't pick up jobs from public repos, leaving Build queued.

Move Build to ubuntu-latest, which is also the safer choice for a public
repo since fork PRs can't reach internal runners, and remove the three
gha-shared workflows.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The regenerated lockfile picked up the CodeArtifact registry from a
user-level ~/.npmrc, so CI failed with 401s fetching tarballs. Add a
project .npmrc pinning the public registry so installs and future
lockfile updates don't depend on local config, and re-resolve the
lockfile (same versions, only `resolved` URLs change).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Tee the ci-test output and render it into $GITHUB_STEP_SUMMARY: mocha
pass/fail counts, the c8 coverage table, and the full log in a collapsed
section. Runs on failure too, and `shell: bash` adds pipefail so the tee
doesn't mask a failing test run.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Node timers can fire up to ~1ms early when measured with Date.now(), so
the parallel() lower-bound duration checks failed intermittently (e.g.
"expected 24 to be above or equal 25" on CI). Apply the same `- 1`
slack the wait() tests already use.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@boatmeme
boatmeme merged commit 72a6975 into master Sep 22, 2026
2 checks passed
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