* [ci] Version packages and generate changelogs with changesets
PRs now add a changeset in .changeset/ instead of editing CHANGELOG.md.
The manual release workflow runs scripts/src/versionPackages.ts, which
runs `changeset version` for one fixed group of all packages, writes the
root CHANGELOG.md section with the existing emoji categories, and then
commits, tags, and pushes vX.Y.Z. The tag-driven publish is unchanged,
except that it reads the changelog section from the tagged commit.
The PR check validates changesets with @changesets/parse and rejects
direct CHANGELOG.md edits. The "no changelog" label still skips it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Correct "no changelog" documentation in .changeset/README.md
* [ci] Fail on CHANGELOG.md edits even with the "no changelog" label
Co-Authored-By: Claude Opus 5.5 <[email protected]>
* [ci] Skip the changeset check for Dependabot PRs
Dependabot PRs only update dependencies, so they need no changeset, and
their read-only token cannot post the PR comment. The job skips both for
them. The CHANGELOG.md check still runs. The workflow now sets explicit
token permissions.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Remove the "## main" block from CHANGELOG.md
Co-Authored-By: Claude Opus 5.5 <[email protected]>
---------
Co-authored-by: Claude Opus 5.5 <[email protected]>
* [eas-cli][local-build-plugin] Deprecate Node 20, use Node 22 in CI
Print a deprecation warning from the eas-cli and local-build-plugin
bin scripts when running on Node.js < 22. Develop and test on Node.js
22: bump mise, drop 20.18.3 from the test matrix, and move to
@tsconfig/node22 and @types/node 22. Published engines are unchanged.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
<!-- You can skip the changelog check by labeling the PR with "no changelog". -->
# Why
Follow-up to #4399 to upgrade typescript to latest version.
# How
Tell claude to upgrade to 6.x.
# Test Plan
CI, tests
<!-- You can skip the changelog check by labeling the PR with "no changelog". -->
# Why
This is a bit behind in typescript. 6.x is where most of our repos live.
First step is to get to highest 5.x.
# How
Tell claude to upgrade to highest 5.x.
It required a new version of `https-proxy-agent` to be compatible with new node types.
# Test Plan
`yarn start`, tests.
# Why
Supersedes #3968.
Dependabot alert 354 requires `lodash` and `lodash-es` 4.18.1. The original PR upgraded the worker's direct dependency and enforced the patched transitive version with a root resolution. That resolution is no longer needed: this PR upgrades the EAS-owned declarations and the GraphQL Code Generator packages that brought in the remaining restrictive `lodash ~4.17.0` dependency.
# How
- Upgrade direct Lodash declarations in build-tools, local-build-plugin, template-file, and worker to 4.18.1.
- Upgrade the scripts project's `lodash-es` declaration and its independent lockfile to 4.18.1.
- Upgrade the complete GraphQL Code Generator family used by EAS CLI:
- `@graphql-codegen/cli` 5.0.0 → 6.3.1
- `@graphql-codegen/introspection` 4.0.0 → 5.0.2
- `@graphql-codegen/typescript` 4.0.1 → 5.0.10
- `@graphql-codegen/typescript-operations` 4.0.1 → 5.1.0
- Regenerate the checked-in GraphQL TypeScript output.
- Keep the root free of `resolutions` and regenerate both affected lockfiles.
These are the newest aligned Codegen releases before `typescript-operations` v6. That v6 upgrade changes generated operation type semantics (including nullable response-field presence) and causes broad fixture/type failures across EAS CLI, so it should be handled as a separate GraphQL contract migration rather than bundled into this security dependency update. The selected packages use `@graphql-codegen/plugin-helpers` 6.3.x, which no longer depends on Lodash.
The root dependency graph now reports only `[email protected].1`, selected through ordinary declared dependency ranges. The separate scripts project reports only `[email protected].1`. There is no resolution or override.
# Test Plan
- `yarn install`
- `yarn why lodash` — only `[email protected].1`; no Codegen consumer
- `cd scripts && yarn install && yarn why lodash-es` — only `[email protected].1`
- `yarn build` — all 13 projects passed
- `yarn workspace eas-cli verify-graphql-code` — generated output compiles against the current live schema
- `cd scripts && yarn typecheck`
- `yarn lint-changelog`
- template-file tests — 7 passed
- worker tests — 51 passed
- `yarn fmt`
I want us to move off of killswitches in Redis coming from `workflow-orchestration` towards fetching killswitches from a simple JSON file.
I picked GCS over R2 because it lets us make objects fully public (no `Authorization` required) and I (Stanley) found no way to achieve the same thing with R2.
This pull request adds a script `scripts/edit-runtime-settings staging | production` that is going to let us edit the file.
# Why
When yarn moved to version 4, they removed the `--silent` flag. Because of this change, any use of yarn to call scripts and get output will also get yarn debugging garbage, and there is no way to suppress it.
The release scripts are mostly ok with this, except for calling the `next-version` script. The output of this script has to be clean for it to be used as input for `lerna version`.
# How
Replaced the yarn call with a direct invocation of the node Typescript source, bypassing yarn.
# Test Plan
Since the `trigger-release.yml` workflow supports a dry run mode, it's safe to modify it to check out a test branch and run the workflow many times to debug the issue.
Once this change is merged, a dry run invocation of the workflow should succeed even if no version string is passed in.
## Why
- Repository maintenance: standardize on Yarn 4 managed via Mise.
- Prepare for introducing minimum package-age constraints in dependency policy.
## How
- Migrated repo tooling to Yarn 4 with Mise.
- Updated CI and scripts for Yarn 4 behavior:
- Lerna invoked via `yarn run -T lerna`.
- Coverage args forwarded correctly (`-- --coverage`).
- Removed unsupported Yarn 4 `--silent` usage.
- Added missing package-local script dependencies surfaced by Yarn 4 (`jest`, `oxlint`, `rimraf`).
- Increased `EasCommand` coverage test timeout from 30s to 60s. (Was consistently failing in CI.)
## Test Plan
- CI only: `Run tests` matrix (including Node 20 coverage) and other touched workflows.
- Release behavior will be verified during the normal release run.
<!-- If this PR requires a changelog entry, add it by commenting the PR with the command `/changelog-entry [breaking-change|new-feature|bug-fix|chore] [message]`. -->
<!-- You can skip the changelog check by labeling the PR with "no changelog". -->
# Why
We're moving to Oxc in universe too. The toolset is faster than ESLint / Prettier.
# How
Asked Codex to migrate the repository. I don't think all rules got migrated, unfortunately, but also the lint are in a bit weird state (different rules in `eas-cli` vs the rest of the repo). I hope we can unify the rules soon.
# Test Plan
CI should pass.
<!-- If this PR requires a changelog entry, add it by commenting the PR with the command `/changelog-entry [breaking-change|new-feature|bug-fix|chore] [message]`. -->
<!-- You can skip the changelog check by labeling the PR with "no changelog". -->
# Why
Noticed we're not running tests on Node 18 anymore (since https://github.com/expo/eas-cli/commit/6bb09c4e99950a6b46b0b908a93e8fcd9b3002aa). I think we probably want to officially drop support for Node 18 too.
# How
Looked at https://github.com/expo/eas-cli/commit/eb4c5e073d02f38d7f90fbd6a1b2b5491dc40464, pinned Node to a newer version, updated types, adjusted `engines`.
# Test Plan
CI should pass.
# Why
The manual release workflow is broken after #3237, since the local plugin version is no longer hardcoded, but tied to the `@expo/eas-build-job` dependency.
# How
Remove this step from the workflow.
# Test Plan
Workflow should succeed in dry run mode.
# Why
The new release GitHub workflow has an error because the release script needs to be run without prompts:
```
Checking if eas-cli-local-build-plugin upgrade is available
eas-cli-local-build-plugin is already on the latest version - 1.0.171
lerna notice cli v8.2.3
lerna info ci enabled
lerna info current version 16.17.3
lerna info Assuming all packages changed
Changes:
- eas-build-cache-provider: 16.4.2 => 16.17.4
- eas-cli: 16.17.3 => 16.17.4
- @expo/eas-json: 16.13.2 => 16.17.4
error Command failed with exit code 130.
? Are you sure you want to create these versions? (ynH) info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error: Process completed with exit code 130.
```
# How
- Added the `--yes` flag to the script commands
- Instead of failing when run locally, the script now executes the release flow in "dry run" mode, without committing, tagging, or pushing changes.
- Add workflow input for dry run mode (true by default, must be manually set to false to actually release)
- Get full Git history before running release script, as required for correct Lerna version check
# Test Plan
- Test locally
- Run the workflow in dry run mode after merging
- Attempt a release after this PR is merged
# Why
The current release script requires that the user executing the script have permission to push changes to main without any PR requirement or checks.
# How
To allow us to add PR requirements and checks, I have added a manual GitHub workflow so that the existing script is executed by the expo-bot user, which is exempted from PR requirements.
I have also made a few adjustments to the `release.yml` workflow (remove incorrect release name, update Node version to 22).
# Test Plan
- CI should pass
- Try a release after this PR is merged
* chore: update node versions to test with to 18, 20, 22
* update CHANGELOG.md
* chore(eas-cli)!: bump minimum supported Node version to 18
This makes the PR a breaking change.
* docs(eas-cli): add breaking change(log) entry
* chore: update `engines.node` to 18 everywhere
* test against node 20 and drop support for node 14
* update CHANGELOG.md
* update @types/node
* bump yarn version
* Revert "update @types/node"
This reverts commit 027e26b002.
* update @types/node
* try to debug
* Revert "try to debug"
This reverts commit 0d557d02f8.
* test sth
* update lock
* Revert "update lock"
This reverts commit 184b412655.
* Revert "test sth"
This reverts commit 77606cf5be.
* diff once again
* fix issues
* Revert "diff once again"
This reverts commit 526ab57453.