Merged
Conversation
Replaces ESLint with oxlint, pulling in the shared `@apify/oxlint-config` preset and `oxlint-tsgolint` for type-aware rules. Mirrors the migration already shipped in apify-storage-local-js, apify-shared-js, apify-core, apify-client-js, apify-sdk-js, and actor-scraper. - Drop `eslint`, `typescript-eslint`, `eslint-plugin-react`, `eslint-plugin-yml`, `globals`, `@apify/eslint-config` - Add `oxlint@1.62.0`, `oxlint-tsgolint@0.22.0`, `@apify/oxlint-config@^0.2.5` - Replace `eslint.config.mjs` with `oxlint.config.ts`; drop unused `tsconfig.eslint.json` - `lint:code` / `lint:code:fix` now run `oxlint --type-aware` - Drop the YAML-specific lint script (`openapi:lint:yaml`) and its CI step — Redocly + Spectral already validate the OpenAPI spec; oxlint doesn't lint YAML, and we don't want eslint hanging around just for style nits on YAML files - Bump `@apify/tsconfig` to ^0.1.2 and add `module: Node16` / `moduleResolution: Node16` so oxlint-tsgolint can parse the project - Disable `typescript/no-floating-promises` and `typescript/promise-function-async` repo-wide — the React event handlers in `apify-docs-theme/` intentionally fire-and-forget - Ignore `examples/` in oxlint (each example has its own tsconfig with its own bundler settings)
Restores the YAML-only eslint setup and CI step. The eslint config now exists solely to lint apify-api/**/*.yaml via eslint-plugin-yml — all JS/TS linting is on oxlint.
… lint" This reverts commit 0165ff4.
pnpm forwards args directly to the underlying command and treats the leading `--` as a literal argument, so the previous form was passing an extra `--` token to redocly/spectral. Same fix as apify/fingerprint-suite#539.
barjin
approved these changes
May 5, 2026
Member
barjin
left a comment
There was a problem hiding this comment.
One small nit (but I see it's being touched upon in the PR description as well).
Otherwise, lgtm, thank you!
| "openapi:lint:redocly": "redocly lint apify-api/openapi/openapi.yaml", | ||
| "openapi:lint:spectral": "spectral lint apify-api/openapi/openapi.yaml", | ||
| "openapi:lint:yaml": "eslint 'apify-api/**/*.yaml'", | ||
| "openapi:lint:yaml:fix": "eslint 'apify-api/**/*.yaml' --fix", |
Member
There was a problem hiding this comment.
It seems we're dropping yaml linting without a replacement (also see ignorePatterns in oxlint.config.ts. Is this intentional?
Member
Author
There was a problem hiding this comment.
yes, oxlint doesn't support yaml, and using that old eslint plugin through oxlint would mean bringing the whole eslint dependency here for a very low benefit. we will adopt oxfmt right afterward, which will format yaml, i dont think we need a linter for it.
B4nan
added a commit
that referenced
this pull request
May 5, 2026
## Summary Adds [oxfmt](https://oxc.rs/docs/guide/usage/formatter) as the formatter, matching the toolchain in apify-storage-local-js, apify-shared-js, apify-core, apify-web, apify-client-js, apify-sdk-js, actor-scraper, and crawlee v4. The repo had no formatter before — this is a fresh adoption. Stacked on top of #2493 (eslint→oxlint migration). Will be retargeted to \`master\` once the parent merges. ### Commits - \`chore: add oxfmt tooling\` — adds \`oxfmt@0.46.0\` devDep, \`.oxfmtrc.json\` (4-space tabs, single quotes, 120 col), and \`format\` / \`format:check\` scripts - \`chore: apply oxfmt formatting\` — pure \`oxfmt --write\` reformat across 219 files (mostly \`.css\`, \`.html\`, \`.js\`/\`.jsx\`, \`.ts\`/\`.tsx\`, \`.mjs\`) - \`ci: add format-check step\` — gates the lint job on \`pnpm format:check\` ## Test plan - [x] \`pnpm lint:code\` — clean - [x] \`pnpm format:check\` — clean ## Follow-up Once this lands, add the reformat commit SHA to \`.git-blame-ignore-revs\` so blame skips it.
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.
Summary
Replaces ESLint with oxlint, pulling in the shared
@apify/oxlint-configpreset andoxlint-tsgolintfor type-aware rules. Mirrors the migration already shipped in apify-storage-local-js, apify-shared-js, apify-core, apify-client-js, apify-sdk-js, and actor-scraper.What changed
eslint,typescript-eslint,eslint-plugin-react,eslint-plugin-yml,globals,@apify/eslint-configoxlint@1.62.0,oxlint-tsgolint@0.22.0,@apify/oxlint-config@^0.2.5eslint.config.mjswithoxlint.config.ts; drop unusedtsconfig.eslint.jsonlint:code/lint:code:fixnow runoxlint --type-awareopenapi:lint:yaml) and its CI step — Redocly + Spectral already validate the OpenAPI spec; oxlint doesn't lint YAML, and we don't want eslint hanging around just for style nits on YAML files@apify/tsconfigto^0.1.2and addmodule: Node16/moduleResolution: Node16so oxlint-tsgolint can parse the projecttypescript/no-floating-promisesandtypescript/promise-function-asyncrepo-wide — the React event handlers inapify-docs-theme/intentionally fire-and-forgetexamples/in oxlint (each example has its own tsconfig with its own bundler settings)Lint output
```
$ pnpm lint:code
Found 0 warnings and 0 errors.
Finished in 312ms on 132 files with 113 rules using 14 threads.
```
Test plan