fix(ci): allow sticky writer rebuild to finish (#113175)

* fix(ci): allow sticky writer rebuild to finish

* test: register iOS release tooling ownership
This commit is contained in:
Peter Steinberger
2026-07-23 17:17:10 -07:00
committed by GitHub
parent 0d406a84db
commit 7915c44773
3 changed files with 23 additions and 4 deletions
+11 -2
View File
@@ -387,15 +387,22 @@ runs:
append_pnpm_option_arg PNPM_CONFIG_NETWORK_CONCURRENCY network-concurrency
append_pnpm_option_arg PNPM_CONFIG_STORE_DIR store-dir
append_pnpm_option_arg PNPM_CONFIG_VIRTUAL_STORE_DIR virtual-store-dir
sticky_writer_rebuild="false"
if [ "$STICKY_DISK" = "true" ] && [ "$STICKY_WRITER" = "true" ] &&
[ "$sticky_snapshot_matches" != "true" ]; then
# Pnpm can trust stale hidden install metadata even with --force. Clear only
# the writer-owned modules tree; the warmed store remains on the sticky disk.
find "$GITHUB_WORKSPACE/node_modules" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +
install_args+=(--force)
sticky_writer_rebuild="true"
fi
run_pnpm_install() {
if [ "$STICKY_DISK" = "true" ]; then
if [ "$sticky_writer_rebuild" = "true" ]; then
# A full relink exceeds the ordinary retry cap; restarting discards
# several minutes of progress even when the warmed store is healthy.
timeout --signal=TERM --kill-after=15s 15m \
pnpm "${install_args[@]}" --config.fetch-retries=0
elif [ "$STICKY_DISK" = "true" ]; then
# Pnpm can keep retrying optional platform tarballs after the
# required tree is linked. Retry the whole frozen transaction from
# its warmed store instead of letting minute backoffs outlive this cap.
@@ -425,7 +432,9 @@ runs:
rm -f "$sticky_marker"
fi
install_attempts=2
if [ "$STICKY_DISK" = "true" ]; then
if [ "$sticky_writer_rebuild" = "true" ]; then
install_attempts=1
elif [ "$STICKY_DISK" = "true" ]; then
install_attempts=3
fi
install_status=1
+4
View File
@@ -2160,6 +2160,7 @@ describe("ci workflow guards", () => {
"Sticky dependency snapshot matches the install fingerprint and importer contents; skipping pnpm install",
);
expect(installStep.run).toContain("timeout --signal=TERM --kill-after=15s 4m");
expect(installStep.run).toContain("timeout --signal=TERM --kill-after=15s 15m");
expect(installStep.run).toContain('pnpm "${install_args[@]}" --config.fetch-retries=0');
const forceStickyWriterInstall =
'if [ "$STICKY_DISK" = "true" ] && [ "$STICKY_WRITER" = "true" ] &&\n' +
@@ -2169,6 +2170,9 @@ describe("ci workflow guards", () => {
'find "$GITHUB_WORKSPACE/node_modules" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +';
expect(installStep.run).toContain(clearStickyModules);
expect(installStep.run).toContain("install_args+=(--force)");
expect(installStep.run).toContain('sticky_writer_rebuild="true"');
expect(installStep.run).toContain('if [ "$sticky_writer_rebuild" = "true" ]; then');
expect(installStep.run).toContain("install_attempts=1");
expect(installStep.run.indexOf(forceStickyWriterInstall)).toBeLessThan(
installStep.run.indexOf(clearStickyModules),
);
+8 -2
View File
@@ -2848,7 +2848,10 @@ describe("scripts/test-projects changed-target routing", () => {
{
config: "test/vitest/vitest.unit-fast-isolated.config.ts",
forwardedArgs: [],
includePatterns: ["test/scripts/android-version.test.ts"],
includePatterns: [
"test/scripts/android-version.test.ts",
"test/scripts/ios-release-plan.test.ts",
],
watchMode: false,
},
{
@@ -3006,7 +3009,10 @@ describe("scripts/test-projects changed-target routing", () => {
{
config: "test/vitest/vitest.unit-fast-isolated.config.ts",
forwardedArgs: [],
includePatterns: ["test/scripts/android-version.test.ts"],
includePatterns: [
"test/scripts/android-version.test.ts",
"test/scripts/ios-release-plan.test.ts",
],
watchMode: false,
},
{