Repository navigation
Replace tslint with ESLint - #83
Merged
Merged
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
The lint script’s single-quoted globs fail under Windows npm shells.
1 open finding
What changed in this PR
Replaces TSLint with shared ESLint tooling across TypeScript source and tests.
Changes:
- Adds ESLint configuration, scripts, dependencies, and CI enforcement.
- Removes TSLint and updates related documentation.
- Reformats and strengthens typings in SDK and test code.
| File | Description |
|---|---|
eslint.config.mjs |
Configures shared ESLint rules and exclusions. |
package.json |
Adds ESLint dependencies and scripts. |
package-lock.json |
Locks the new lint dependencies. |
tslint.json |
Removes obsolete TSLint configuration. |
.npmignore |
Excludes ESLint configuration from publishing. |
.github/workflows/ci-test.yml |
Adds CI linting. |
.github/workflows/publish.yml |
Adds pre-publish linting. |
AGENTS.md |
Documents lint commands. |
.agents/skills/verify-codepush/SKILL.md |
Updates test type-check guidance. |
src/acquisition-sdk/acquisition-sdk.ts |
Reformats and tightens lint-related typing. |
src/acquisition-sdk/code-push-error.ts |
Applies formatting. |
src/acquisition-sdk/types.ts |
Applies formatting. |
test/test.mts |
Reformats tests and replaces explicit any types. |
test/codesign.mts |
Applies formatting. |
🧠 Review effort: Balanced
Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.
| "test:unit:android": "cd android && ./gradlew :app:test", | ||
| "test:unit:ios": "xcodebuild test -project ios/CodePush.xcodeproj -scheme CodePushTests -destination \"platform=iOS Simulator,id=$(xcrun simctl list devices available | grep -m1 iPhone | grep -oE '[0-9A-F-]{36}')\"", | ||
| "tslint": "tslint -c tslint.json test/**/*.mts" | ||
| "lint": "eslint --max-warnings 0 'src/**/*.ts' 'test/**/*.mts'", |
Collaborator
Author
There was a problem hiding this comment.
Not that important, we don't support Windows anymore.
Use @bitrise/eslint-plugin as the lint config, and lint src/ as well as test/. Lint runs separately from the type checks and fails on warnings. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
ofalvai
force-pushed
the
eslint-replace-tslint
branch
from
October 19, 2026 07:39
d4a5ac7 to
bc912d2
Compare
gsanta
approved these changes
Oct 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Why
tslint is blocking the upgrade to TypeScript 7. This replaces it with ESLint, configured through the shared
@bitrise/eslint-plugin, and extends that config only where this repo needs it.What changes
eslint.config.mjsapplies the plugin's config tosrc/**/*.tsandtest/**/*.mts. tslint only coveredtest/.npm run lintandlint:fixare new. Lint runs with--max-warnings 0.npm run lintin both workflows. Thenpm test*scripts run it before the type check.typecheckandtypecheck:testsno longer lint.src/andtest/.Reviewing the diff
Most of the diff is Prettier output in
test/test.mts,test/codesign.mtsandsrc/acquisition-sdk/. Start with the config,package.jsonand the workflows. For the source files, the non-trivial edits are small:_, and unusedcatch (e)bindings are nowcatch.no-explicit-anyhits are typed.test.mtsgets two small interfaces for the mock server's request bodies, anderrorMessagein the SDK is astring.acquisition-sdk.ts, each with a comment (see below).Trade-off: dependency weight
The plugin is built for React apps, so it pulls in React, Storybook, jest and testing-library plugins that this library does not use. Package count in
package-lock.json:@bitrise/eslint-plugin(this PR)I measured the standalone setup and chose the plugin to stay on the shared Bitrise config, at about 140 extra packages.
🤖 Generated with Claude Code