@invarn/cibuild 2.9.1 → 2.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/cli.cjs +173 -11
  2. package/dist/src/yaml/steps/android.d.ts.map +1 -1
  3. package/dist/src/yaml/steps/android.js +5 -0
  4. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts +42 -0
  5. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts.map +1 -0
  6. package/dist/src/yaml/steps/cocoapods-deployment-floor.js +140 -0
  7. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts +11 -0
  8. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts.map +1 -0
  9. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.js +176 -0
  10. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts +28 -0
  11. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts.map +1 -0
  12. package/dist/src/yaml/steps/gradle-sdk-cmake.js +107 -0
  13. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts +2 -0
  14. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts.map +1 -0
  15. package/dist/src/yaml/steps/gradle-sdk-cmake.test.js +183 -0
  16. package/dist/src/yaml/steps/ios-deps.d.ts.map +1 -1
  17. package/dist/src/yaml/steps/ios-deps.js +2 -0
  18. package/dist/src/yaml/steps/xcode-derived-data.test.js +18 -1
  19. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts +53 -0
  20. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts.map +1 -0
  21. package/dist/src/yaml/steps/xcode-simulator-archs.js +98 -0
  22. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts +21 -0
  23. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts.map +1 -0
  24. package/dist/src/yaml/steps/xcode-simulator-archs.test.js +155 -0
  25. package/dist/src/yaml/steps/xcode.d.ts.map +1 -1
  26. package/dist/src/yaml/steps/xcode.js +31 -2
  27. package/package.json +1 -1
@@ -0,0 +1,183 @@
1
+ /**
2
+ * The SDK CMake a build file pins, installed before Gradle runs.
3
+ *
4
+ * IacobIonut01/ReFra pins `externalNativeBuild.cmake.version = "3.31.6"`, and
5
+ * its own native script (a Gradle task that runs before AGP configures CMake)
6
+ * requires `$SDK/cmake/3.31.6/bin/cmake`. AGP would download the pinned CMake,
7
+ * but only at its own configure step, which comes too late, and the build
8
+ * image bakes no SDK CMake. So the build failed with "cmake 3.31.6 not found".
9
+ *
10
+ * The shell under test is the one that ships: it is executed here, not
11
+ * re-implemented.
12
+ */
13
+ import { execFileSync } from "node:child_process";
14
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
15
+ import { tmpdir } from "node:os";
16
+ import { dirname, join } from "node:path";
17
+ import { fileURLToPath } from "node:url";
18
+ import { AndroidBuildForUITestingStepExecutor, AndroidLintStepExecutor, AndroidUnitTestStepExecutor, GradleBuildStepExecutor, } from "./android.js";
19
+ import { GRADLE_SDK_CMAKE_FUNCTIONS } from "./gradle-sdk-cmake.js";
20
+ import { testConfig } from "./test-config.js";
21
+ const FIXTURES = join(dirname(fileURLToPath(import.meta.url)), "../../../test/fixtures/gradle-sdk-cmake");
22
+ let dir;
23
+ let sdk;
24
+ beforeEach(() => {
25
+ dir = mkdtempSync(join(tmpdir(), "cibuild-sdk-cmake-"));
26
+ sdk = join(dir, "sdk");
27
+ mkdirSync(join(dir, "project", "app"), { recursive: true });
28
+ mkdirSync(sdk);
29
+ });
30
+ afterEach(() => {
31
+ rmSync(dir, { recursive: true, force: true });
32
+ });
33
+ /** A fake sdkmanager: records its arguments and installs what it is asked for. */
34
+ function fakeSdkmanager(exitCode = 0) {
35
+ const bin = join(sdk, "cmdline-tools", "latest", "bin");
36
+ mkdirSync(bin, { recursive: true });
37
+ const path = join(bin, "sdkmanager");
38
+ writeFileSync(path, `#!/bin/bash
39
+ echo "$*" >> "${dir}/sdkmanager-args"
40
+ [ ${exitCode} -eq 0 ] || { echo "Warning: Failed to find package"; exit ${exitCode}; }
41
+ for a in "$@"; do
42
+ case "$a" in
43
+ cmake\\;*) v="\${a#cmake;}"; mkdir -p "${sdk}/cmake/$v/bin"; printf '#!/bin/sh\\n' > "${sdk}/cmake/$v/bin/cmake"; chmod +x "${sdk}/cmake/$v/bin/cmake" ;;
44
+ esac
45
+ done
46
+ `);
47
+ chmodSync(path, 0o755);
48
+ return path;
49
+ }
50
+ /** Run the shipped install in the project directory, with the SDK in ANDROID_HOME. */
51
+ function install(env = { ANDROID_HOME: sdk }) {
52
+ const script = `${GRADLE_SDK_CMAKE_FUNCTIONS}
53
+ cibuild_install_pinned_cmake
54
+ echo "after: $?"`;
55
+ try {
56
+ const stdout = execFileSync("bash", ["-c", script], {
57
+ cwd: join(dir, "project"),
58
+ encoding: "utf-8",
59
+ env: { PATH: "/usr/bin:/bin", ...env },
60
+ });
61
+ return { status: 0, stdout };
62
+ }
63
+ catch (e) {
64
+ const err = e;
65
+ return { status: err.status, stdout: err.stdout };
66
+ }
67
+ }
68
+ function sdkmanagerArgs() {
69
+ const file = join(dir, "sdkmanager-args");
70
+ return existsSync(file) ? readFileSync(file, "utf-8").trim().split("\n") : [];
71
+ }
72
+ describe("cibuild_install_pinned_cmake", () => {
73
+ test("ReFra: the pinned cmake;3.31.6 is installed, and one line says why", () => {
74
+ copyFileSync(join(FIXTURES, "refra.app.build.gradle.kts"), join(dir, "project", "app", "build.gradle.kts"));
75
+ fakeSdkmanager();
76
+ const run = install();
77
+ expect(sdkmanagerArgs()).toEqual([`--sdk_root=${sdk} cmake;3.31.6`]);
78
+ expect(existsSync(join(sdk, "cmake", "3.31.6", "bin", "cmake"))).toBe(true);
79
+ expect(run.stdout).toContain("Android SDK: installing cmake;3.31.6, which ./app/build.gradle.kts:47 pins (externalNativeBuild cmake version) and this SDK does not have.");
80
+ expect(run.stdout).toContain("Android SDK: cmake;3.31.6 installed.");
81
+ expect(run.stdout).toContain("after: 0");
82
+ });
83
+ test("a CMake the SDK already has is left alone, and nothing is printed", () => {
84
+ copyFileSync(join(FIXTURES, "refra.app.build.gradle.kts"), join(dir, "project", "app", "build.gradle.kts"));
85
+ fakeSdkmanager();
86
+ mkdirSync(join(sdk, "cmake", "3.31.6", "bin"), { recursive: true });
87
+ writeFileSync(join(sdk, "cmake", "3.31.6", "bin", "cmake"), "#!/bin/sh\n");
88
+ chmodSync(join(sdk, "cmake", "3.31.6", "bin", "cmake"), 0o755);
89
+ const run = install();
90
+ expect(sdkmanagerArgs()).toEqual([]);
91
+ expect(run.stdout).not.toContain("Android SDK:");
92
+ });
93
+ test("Groovy's `version \"x\"`, and only inside a cmake block, and never in a comment", () => {
94
+ writeFileSync(join(dir, "project", "app", "build.gradle"), [
95
+ "version = '9.9.9'",
96
+ "android {",
97
+ " defaultConfig {",
98
+ " versionName \"1.2.3\"",
99
+ " externalNativeBuild { cmake { cppFlags '-std=c++17' } }",
100
+ " }",
101
+ " externalNativeBuild {",
102
+ " cmake {",
103
+ " path 'src/main/cpp/CMakeLists.txt'",
104
+ " // version '3.10.2'",
105
+ " version '3.22.1'",
106
+ " }",
107
+ " }",
108
+ " ndkVersion '27.0.12077973'",
109
+ "}",
110
+ "",
111
+ ].join("\n"));
112
+ fakeSdkmanager();
113
+ install();
114
+ expect(sdkmanagerArgs()).toEqual([`--sdk_root=${sdk} cmake;3.22.1`]);
115
+ });
116
+ test("a one-line cmake block, two modules pinning the same version, and build outputs skipped", () => {
117
+ writeFileSync(join(dir, "project", "app", "build.gradle.kts"), 'android { externalNativeBuild { cmake { version = "3.31.6" } } }\n');
118
+ mkdirSync(join(dir, "project", "lib"));
119
+ writeFileSync(join(dir, "project", "lib", "build.gradle.kts"), 'android {\n externalNativeBuild {\n cmake {\n version = "3.31.6"\n }\n }\n}\n');
120
+ mkdirSync(join(dir, "project", "app", "build", "tmp"), { recursive: true });
121
+ writeFileSync(join(dir, "project", "app", "build", "tmp", "build.gradle.kts"), 'cmake { version = "3.6.0" }\n');
122
+ fakeSdkmanager();
123
+ install();
124
+ expect(sdkmanagerArgs()).toEqual([`--sdk_root=${sdk} cmake;3.31.6`]);
125
+ });
126
+ test("a project that pins no CMake does nothing", () => {
127
+ writeFileSync(join(dir, "project", "app", "build.gradle.kts"), 'android { compileSdk = 36 }\n');
128
+ fakeSdkmanager();
129
+ const run = install();
130
+ expect(sdkmanagerArgs()).toEqual([]);
131
+ expect(run.stdout).toBe("after: 0\n");
132
+ });
133
+ test("the SDK from local.properties when ANDROID_HOME is unset", () => {
134
+ copyFileSync(join(FIXTURES, "refra.app.build.gradle.kts"), join(dir, "project", "app", "build.gradle.kts"));
135
+ writeFileSync(join(dir, "project", "local.properties"), `sdk.dir=${sdk}\n`);
136
+ fakeSdkmanager();
137
+ install({});
138
+ expect(sdkmanagerArgs()).toEqual([`--sdk_root=${sdk} cmake;3.31.6`]);
139
+ });
140
+ test("no SDK to install into: says so, and the step goes on", () => {
141
+ copyFileSync(join(FIXTURES, "refra.app.build.gradle.kts"), join(dir, "project", "app", "build.gradle.kts"));
142
+ const run = install({});
143
+ expect(run.stdout).toContain("Android SDK: ./app/build.gradle.kts:47 pins cmake;3.31.6, but no Android SDK was found (ANDROID_HOME, ANDROID_SDK_ROOT, local.properties sdk.dir), so it is not installed here.");
144
+ expect(run.stdout).toContain("after: 0");
145
+ });
146
+ test("an SDK without sdkmanager: says so, and the step goes on", () => {
147
+ copyFileSync(join(FIXTURES, "refra.app.build.gradle.kts"), join(dir, "project", "app", "build.gradle.kts"));
148
+ const run = install();
149
+ expect(run.stdout).toContain(`Android SDK: ./app/build.gradle.kts:47 pins cmake;3.31.6, but ${sdk} has no sdkmanager, so it is not installed here.`);
150
+ expect(run.stdout).toContain("after: 0");
151
+ });
152
+ test("a failed install says so, with sdkmanager's words, and the step goes on", () => {
153
+ copyFileSync(join(FIXTURES, "refra.app.build.gradle.kts"), join(dir, "project", "app", "build.gradle.kts"));
154
+ fakeSdkmanager(1);
155
+ const run = install();
156
+ expect(run.stdout).toContain("Android SDK: installing cmake;3.31.6 failed (sdkmanager exit 1); Gradle runs anyway:");
157
+ expect(run.stdout).toContain(" Warning: Failed to find package");
158
+ expect(run.stdout).toContain("after: 0");
159
+ });
160
+ });
161
+ describe("the Gradle steps", () => {
162
+ test("every Gradle step installs the pinned CMake before Gradle runs", async () => {
163
+ const steps = [
164
+ await new GradleBuildStepExecutor().execute({ gradle_task: "assembleDebug" }, {}, testConfig),
165
+ await new AndroidLintStepExecutor().execute({}, {}, testConfig),
166
+ await new AndroidUnitTestStepExecutor().execute({}, {}, testConfig),
167
+ await new AndroidBuildForUITestingStepExecutor().execute({}, {}, testConfig),
168
+ ];
169
+ for (const step of steps) {
170
+ const script = step.script;
171
+ const at = script.indexOf("\ncibuild_install_pinned_cmake\n");
172
+ expect(at).toBeGreaterThan(-1);
173
+ expect(at).toBeLessThan(script.indexOf("$GRADLE_CMD "));
174
+ execFileSync("bash", ["-n", "-c", script]);
175
+ }
176
+ });
177
+ test("no line the functions print can be taken for a step-progress marker", () => {
178
+ for (const line of GRADLE_SDK_CMAKE_FUNCTIONS.split("\n")) {
179
+ expect(line).not.toMatch(/INVARN_STEP|\[step_/);
180
+ }
181
+ });
182
+ });
183
+ //# sourceMappingURL=gradle-sdk-cmake.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ios-deps.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ios-deps.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAc,MAAM,wBAAwB,CAAC;AAMhF,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,4BAA6B,SAAQ,gBAAgB;IAChE,yBAAyB,CACvB,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAUpB,OAAO,CACX,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;CA+MpB;AAMD,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;IACxD,yBAAyB,CACvB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAUpB,OAAO,CACX,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;CAyDpB"}
1
+ {"version":3,"file":"ios-deps.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ios-deps.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAc,MAAM,wBAAwB,CAAC;AAMhF,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,4BAA6B,SAAQ,gBAAgB;IAChE,yBAAyB,CACvB,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAUpB,OAAO,CACX,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;CAgNpB;AAMD,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;IACxD,yBAAyB,CACvB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAUpB,OAAO,CACX,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;CAyDpB"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { BaseStepExecutor } from './base.js';
5
5
  import { refusedFetchHelpers, retryOnRefusedFetch } from './git-fetch-retry.js';
6
+ import { podDeploymentFloorLines } from './cocoapods-deployment-floor.js';
6
7
  /**
7
8
  * Runs `pod install` or `pod update`.
8
9
  * Auto-detects Gemfile and uses `bundle exec pod` when appropriate.
@@ -210,6 +211,7 @@ export class CocoapodsInstallStepExecutor extends BaseStepExecutor {
210
211
  command: '$POD_INVOCATION $POD_CMD',
211
212
  }));
212
213
  commands.push('');
214
+ commands.push(...podDeploymentFloorLines());
213
215
  commands.push('echo "✅ CocoaPods ${POD_CMD%% *} completed"');
214
216
  const script = this.createBashScriptFromCommands(commands, stepName);
215
217
  return this.createScriptStep(script, stepName);
@@ -28,7 +28,7 @@
28
28
  */
29
29
  import { describe, test, expect } from '@jest/globals';
30
30
  import { execFileSync } from 'child_process';
31
- import { mkdtempSync, realpathSync } from 'fs';
31
+ import { mkdtempSync, realpathSync, symlinkSync } from 'fs';
32
32
  import { tmpdir } from 'os';
33
33
  import { join } from 'path';
34
34
  import { XcodeBuildStepExecutor, XcodeBuildForTestStepExecutor, XcodeBuildForSimulatorStepExecutor, } from './xcode.js';
@@ -226,6 +226,23 @@ describe('derived data is outside the source tree', () => {
226
226
  const b = resolve(script, { CIBUILD_SCRATCH: '/scratch', OUTPUT_DIR: '/work/repo/build' });
227
227
  expect(a).not.toBe(b);
228
228
  });
229
+ // analogcode/Swift-Radio-Pro: LNPopupController's Package.swift lists its
230
+ // header directories with FileManager (real paths, /private/tmp/...) and
231
+ // strips packageBase.path (/tmp/...) by text replacement, so every header
232
+ // search path came out eight characters short and '_LNPopupGlassUtils.h'
233
+ // was not found. On macOS /tmp and TMPDIR's /var are symlinks into
234
+ // /private; derived data has to be named by its real path.
235
+ test('derived data is named by its real path, not through a symlink', async () => {
236
+ const real = realpathSync(mkdtempSync(join(tmpdir(), 'real-')));
237
+ const link = join(realpathSync(mkdtempSync(join(tmpdir(), 'link-'))), 'tmp');
238
+ symlinkSync(real, link);
239
+ const script = await scriptFor(new XcodeBuildStepExecutor(), {});
240
+ const lines = script.split('\n');
241
+ const from = lines.findIndex((l) => l.startsWith('DERIVED_DATA_PATH='));
242
+ const to = lines.findIndex((l) => l.startsWith('echo "Derived data:'));
243
+ const path = execFileSync('bash', ['-c', `set -e\n${lines.slice(from, to).join('\n')}\nprintf '%s' "$DERIVED_DATA_PATH"`], { env: { PATH: process.env.PATH ?? '', TMPDIR: link, OUTPUT_DIR: '/work/repo/build' } }).toString();
244
+ expect(path.startsWith(real + '/')).toBe(true);
245
+ });
229
246
  test('the product listing and the xctestrun search follow it', async () => {
230
247
  const build = await scriptFor(new XcodeBuildStepExecutor(), {});
231
248
  expect(build).toContain('ls -lhR "$DERIVED_DATA_PATH/Build/Products"');
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The simulator architecture, chosen at run time.
3
+ *
4
+ * A pipeline pins `ARCHS=arm64` on its simulator builds: a *generic* simulator
5
+ * destination otherwise exports `ARCHS='arm64 x86_64'`, and anything that maps
6
+ * ARCHS onto a second toolchain meets an architecture nothing on the runner
7
+ * builds. But a project can exclude arm64 from the simulator
8
+ * (`EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64`, an Intel-era workaround),
9
+ * and then the pin leaves nothing to build: "None of the architectures in
10
+ * ARCHS (arm64) are valid", and CocoaPods' `[CP] Embed Pods Frameworks` dies
11
+ * on `ARCHS[@]: unbound variable`.
12
+ *
13
+ * Invarn switches to x86_64 at pipeline creation when the exclusion is in the
14
+ * repository (the pbxproj or the Podfile). A pod can also carry it, in its
15
+ * podspec's `user_target_xcconfig`, which CocoaPods writes into the app's
16
+ * `Pods-…debug.xcconfig` — and that exists only after `pod install`
17
+ * (ExistOrLive/GithubClient: WoodPeckeriOS 1.4.3, nightly-baseline issue 54).
18
+ * So the step asks Xcode, right before it builds, for the effective settings:
19
+ * `-showBuildSettings` reads the pbxproj, every xcconfig and the pods at once.
20
+ *
21
+ * Only an `ARCHS=arm64` pin is checked. An `ARCHS=x86_64` chosen at creation
22
+ * is left as it is, and options without a pin have nothing to decide.
23
+ */
24
+ /** The variable the build line reads its simulator architecture from. */
25
+ export declare const SIMULATOR_ARCHS_VAR = "CIBUILD_SIMULATOR_ARCHS";
26
+ /** Whether `xcodebuild_options` pins the simulator build to arm64. */
27
+ export declare function pinsSimulatorArm64(xcodebuildOptions: string): boolean;
28
+ /** The options with the arm64 pin replaced by the run-time choice. */
29
+ export declare function withRuntimeSimulatorArchs(xcodebuildOptions: string): string;
30
+ /**
31
+ * Reads `xcodebuild -showBuildSettings -json` on stdin and prints one line
32
+ * naming the target that excludes arm64, or nothing. The application target
33
+ * decides when the scheme lists one; a framework the scheme also lists is not
34
+ * what is being built for the simulator. Output it cannot read is no
35
+ * evidence: it prints nothing and exits 0, and the build keeps arm64.
36
+ */
37
+ export declare const ARM64_EXCLUSION_READER_SOURCE: string;
38
+ /**
39
+ * The lines that set `$CIBUILD_SIMULATOR_ARCHS`: arm64, or x86_64 when the
40
+ * project's effective simulator settings exclude arm64, saying so in the log.
41
+ * They expect `$PROJECT_TYPE` and `$DERIVED_DATA_PATH` to be set, and go after
42
+ * package resolution, so the settings are read from the graph the build uses.
43
+ */
44
+ export declare function simulatorArchsLines(opts: {
45
+ /** Already escaped for a single-quoted bash string. */
46
+ projectPath: string;
47
+ scheme: string;
48
+ configuration: string;
49
+ destination: string;
50
+ /** Pass `-xcconfig "$XCCONFIG_FILE"` too, as the build does. */
51
+ xcconfig: boolean;
52
+ }): string[];
53
+ //# sourceMappingURL=xcode-simulator-archs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xcode-simulator-archs.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/xcode-simulator-archs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAE7D,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAErE;AAED,sEAAsE;AACtE,wBAAgB,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAqB3C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,EAAE,CAyBX"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * The simulator architecture, chosen at run time.
3
+ *
4
+ * A pipeline pins `ARCHS=arm64` on its simulator builds: a *generic* simulator
5
+ * destination otherwise exports `ARCHS='arm64 x86_64'`, and anything that maps
6
+ * ARCHS onto a second toolchain meets an architecture nothing on the runner
7
+ * builds. But a project can exclude arm64 from the simulator
8
+ * (`EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64`, an Intel-era workaround),
9
+ * and then the pin leaves nothing to build: "None of the architectures in
10
+ * ARCHS (arm64) are valid", and CocoaPods' `[CP] Embed Pods Frameworks` dies
11
+ * on `ARCHS[@]: unbound variable`.
12
+ *
13
+ * Invarn switches to x86_64 at pipeline creation when the exclusion is in the
14
+ * repository (the pbxproj or the Podfile). A pod can also carry it, in its
15
+ * podspec's `user_target_xcconfig`, which CocoaPods writes into the app's
16
+ * `Pods-…debug.xcconfig` — and that exists only after `pod install`
17
+ * (ExistOrLive/GithubClient: WoodPeckeriOS 1.4.3, nightly-baseline issue 54).
18
+ * So the step asks Xcode, right before it builds, for the effective settings:
19
+ * `-showBuildSettings` reads the pbxproj, every xcconfig and the pods at once.
20
+ *
21
+ * Only an `ARCHS=arm64` pin is checked. An `ARCHS=x86_64` chosen at creation
22
+ * is left as it is, and options without a pin have nothing to decide.
23
+ */
24
+ const ARM64_PIN = /(^|\s)ARCHS=arm64(?=\s|$)/;
25
+ /** The variable the build line reads its simulator architecture from. */
26
+ export const SIMULATOR_ARCHS_VAR = 'CIBUILD_SIMULATOR_ARCHS';
27
+ /** Whether `xcodebuild_options` pins the simulator build to arm64. */
28
+ export function pinsSimulatorArm64(xcodebuildOptions) {
29
+ return ARM64_PIN.test(xcodebuildOptions);
30
+ }
31
+ /** The options with the arm64 pin replaced by the run-time choice. */
32
+ export function withRuntimeSimulatorArchs(xcodebuildOptions) {
33
+ return xcodebuildOptions.replace(ARM64_PIN, (_m, lead) => `${lead}ARCHS="$${SIMULATOR_ARCHS_VAR}"`);
34
+ }
35
+ /**
36
+ * Reads `xcodebuild -showBuildSettings -json` on stdin and prints one line
37
+ * naming the target that excludes arm64, or nothing. The application target
38
+ * decides when the scheme lists one; a framework the scheme also lists is not
39
+ * what is being built for the simulator. Output it cannot read is no
40
+ * evidence: it prints nothing and exits 0, and the build keeps arm64.
41
+ */
42
+ export const ARM64_EXCLUSION_READER_SOURCE = String.raw `
43
+ var input = '';
44
+ process.stdin.setEncoding('utf8');
45
+ process.stdin.on('data', function (d) { input += d; });
46
+ process.stdin.on('end', function () {
47
+ var entries;
48
+ try { entries = JSON.parse(input); } catch (err) { return; }
49
+ if (!Array.isArray(entries)) return;
50
+ var apps = entries.filter(function (e) {
51
+ return e && e.buildSettings && e.buildSettings.PRODUCT_TYPE === 'com.apple.product-type.application';
52
+ });
53
+ var judged = apps.length > 0 ? apps : entries;
54
+ for (var i = 0; i < judged.length; i++) {
55
+ var e = judged[i];
56
+ var excluded = String((e && e.buildSettings && e.buildSettings.EXCLUDED_ARCHS) || '').trim();
57
+ if (excluded.split(/\s+/).indexOf('arm64') >= 0) {
58
+ process.stdout.write('target ' + e.target + ' sets EXCLUDED_ARCHS = ' + excluded + '\n');
59
+ return;
60
+ }
61
+ }
62
+ });
63
+ `;
64
+ /**
65
+ * The lines that set `$CIBUILD_SIMULATOR_ARCHS`: arm64, or x86_64 when the
66
+ * project's effective simulator settings exclude arm64, saying so in the log.
67
+ * They expect `$PROJECT_TYPE` and `$DERIVED_DATA_PATH` to be set, and go after
68
+ * package resolution, so the settings are read from the graph the build uses.
69
+ */
70
+ export function simulatorArchsLines(opts) {
71
+ let ask = 'xcodebuild -showBuildSettings -json';
72
+ ask += ` "$PROJECT_TYPE" '${opts.projectPath}'`;
73
+ ask += ` -scheme '${opts.scheme}'`;
74
+ if (opts.configuration)
75
+ ask += ` -configuration '${opts.configuration}'`;
76
+ ask += ` -destination '${opts.destination}'`;
77
+ ask += ' -derivedDataPath "$DERIVED_DATA_PATH"';
78
+ if (opts.xcconfig)
79
+ ask += ' -xcconfig "$XCCONFIG_FILE"';
80
+ return [
81
+ '# The simulator architecture, read after pod install: a pod can exclude',
82
+ '# arm64 through its user_target_xcconfig, which no file in the repository',
83
+ '# says until CocoaPods has run. See xcode-simulator-archs.ts.',
84
+ `${SIMULATOR_ARCHS_VAR}=arm64`,
85
+ 'ARCHS_READER="$(mktemp -t cibuild-sim-archs).cjs"',
86
+ `cat > "$ARCHS_READER" << 'CIBUILD_SIM_ARCHS_EOF'`,
87
+ ARM64_EXCLUSION_READER_SOURCE.trim(),
88
+ 'CIBUILD_SIM_ARCHS_EOF',
89
+ `ARM64_EXCLUDED_BY=$(${ask} 2>/dev/null | node "$ARCHS_READER" 2>/dev/null || true)`,
90
+ 'rm -f "$ARCHS_READER"',
91
+ 'if [ -n "$ARM64_EXCLUDED_BY" ]; then',
92
+ ` ${SIMULATOR_ARCHS_VAR}=x86_64`,
93
+ ' echo "Building the simulator app as x86_64, not arm64: $ARM64_EXCLUDED_BY in the project\'s effective simulator settings (after pod install)"',
94
+ 'fi',
95
+ '',
96
+ ];
97
+ }
98
+ //# sourceMappingURL=xcode-simulator-archs.js.map
@@ -0,0 +1,21 @@
1
+ /**
2
+ * A simulator build pinned to arm64, on a project whose effective settings
3
+ * exclude arm64 from the simulator, builds x86_64 instead — decided at run
4
+ * time, after `pod install`, from what Xcode itself reports.
5
+ *
6
+ * The witness (nightly-baseline issue 54): ExistOrLive/GithubClient @ 7969212a.
7
+ * Its pod WoodPeckeriOS 1.4.3 ships `user_target_xcconfig:
8
+ * { "EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64" }`, which CocoaPods writes
9
+ * into the app's `Pods-…debug.xcconfig`. The pipeline pinned `ARCHS=arm64`, so
10
+ * nothing was left to build and `[CP] Embed Pods Frameworks` died on
11
+ * `ARCHS[@]: unbound variable` (bld_b91e230368d6505e97ec9b75). Nothing in the
12
+ * repository says so before `pod install` has run.
13
+ *
14
+ * Measured on a clone, Xcode 26.4, 2026-10-01: after `pod install`,
15
+ * `xcodebuild -showBuildSettings -json … -destination 'generic/platform=iOS
16
+ * Simulator'` reported, for target ZLGitHubClient
17
+ * (com.apple.product-type.application), `EXCLUDED_ARCHS = "arm64"`, in 3 s;
18
+ * and `ARCHS=x86_64` compiled the app's sources.
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=xcode-simulator-archs.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xcode-simulator-archs.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/xcode-simulator-archs.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * A simulator build pinned to arm64, on a project whose effective settings
3
+ * exclude arm64 from the simulator, builds x86_64 instead — decided at run
4
+ * time, after `pod install`, from what Xcode itself reports.
5
+ *
6
+ * The witness (nightly-baseline issue 54): ExistOrLive/GithubClient @ 7969212a.
7
+ * Its pod WoodPeckeriOS 1.4.3 ships `user_target_xcconfig:
8
+ * { "EXCLUDED_ARCHS[sdk=iphonesimulator*]": "arm64" }`, which CocoaPods writes
9
+ * into the app's `Pods-…debug.xcconfig`. The pipeline pinned `ARCHS=arm64`, so
10
+ * nothing was left to build and `[CP] Embed Pods Frameworks` died on
11
+ * `ARCHS[@]: unbound variable` (bld_b91e230368d6505e97ec9b75). Nothing in the
12
+ * repository says so before `pod install` has run.
13
+ *
14
+ * Measured on a clone, Xcode 26.4, 2026-10-01: after `pod install`,
15
+ * `xcodebuild -showBuildSettings -json … -destination 'generic/platform=iOS
16
+ * Simulator'` reported, for target ZLGitHubClient
17
+ * (com.apple.product-type.application), `EXCLUDED_ARCHS = "arm64"`, in 3 s;
18
+ * and `ARCHS=x86_64` compiled the app's sources.
19
+ */
20
+ import { describe, test, expect } from '@jest/globals';
21
+ import { execFileSync } from 'node:child_process';
22
+ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
23
+ import { tmpdir } from 'node:os';
24
+ import { join } from 'node:path';
25
+ import { ARM64_EXCLUSION_READER_SOURCE, pinsSimulatorArm64, withRuntimeSimulatorArchs, } from './xcode-simulator-archs.js';
26
+ import { XcodeBuildForSimulatorStepExecutor, XcodeBuildForTestStepExecutor, } from './xcode.js';
27
+ import { testConfig } from './test-config.js';
28
+ /** What `-showBuildSettings -json` printed for GithubClient, cut to the fields read. */
29
+ const githubClient = [
30
+ {
31
+ action: 'build',
32
+ target: 'ZLGitHubClient',
33
+ buildSettings: {
34
+ PRODUCT_TYPE: 'com.apple.product-type.application',
35
+ EXCLUDED_ARCHS: 'arm64',
36
+ ARCHS: 'x86_64',
37
+ },
38
+ },
39
+ ];
40
+ const read = (settings) => {
41
+ const dir = mkdtempSync(join(tmpdir(), 'sim-archs-'));
42
+ try {
43
+ const reader = join(dir, 'reader.cjs');
44
+ writeFileSync(reader, ARM64_EXCLUSION_READER_SOURCE);
45
+ return execFileSync('node', [reader], {
46
+ input: typeof settings === 'string' ? settings : JSON.stringify(settings),
47
+ encoding: 'utf8',
48
+ }).trim();
49
+ }
50
+ finally {
51
+ rmSync(dir, { recursive: true, force: true });
52
+ }
53
+ };
54
+ describe('the arm64 exclusion reader', () => {
55
+ test('names the app target that excludes arm64, and its setting', () => {
56
+ expect(read(githubClient)).toBe('target ZLGitHubClient sets EXCLUDED_ARCHS = arm64');
57
+ });
58
+ test('says nothing when arm64 is not excluded', () => {
59
+ expect(read([{ ...githubClient[0], buildSettings: { PRODUCT_TYPE: 'com.apple.product-type.application', EXCLUDED_ARCHS: '' } }])).toBe('');
60
+ expect(read([{ ...githubClient[0], buildSettings: { PRODUCT_TYPE: 'com.apple.product-type.application' } }])).toBe('');
61
+ });
62
+ test('reads arm64 as a word, not a substring', () => {
63
+ const s = (v) => [{ ...githubClient[0], buildSettings: { PRODUCT_TYPE: 'com.apple.product-type.application', EXCLUDED_ARCHS: v } }];
64
+ expect(read(s('i386 arm64'))).toBe('target ZLGitHubClient sets EXCLUDED_ARCHS = i386 arm64');
65
+ expect(read(s('arm64e'))).toBe('');
66
+ });
67
+ test('judges the application target, not a library the scheme also lists', () => {
68
+ const settings = [
69
+ { target: 'SomeKit', buildSettings: { PRODUCT_TYPE: 'com.apple.product-type.framework', EXCLUDED_ARCHS: 'arm64' } },
70
+ { target: 'App', buildSettings: { PRODUCT_TYPE: 'com.apple.product-type.application', EXCLUDED_ARCHS: '' } },
71
+ ];
72
+ expect(read(settings)).toBe('');
73
+ });
74
+ test('with no application target listed, any target that excludes arm64 counts', () => {
75
+ expect(read([{ target: 'Lib', buildSettings: { EXCLUDED_ARCHS: 'arm64' } }])).toBe('target Lib sets EXCLUDED_ARCHS = arm64');
76
+ });
77
+ test('unreadable output is no evidence: says nothing, exits 0', () => {
78
+ expect(read('')).toBe('');
79
+ expect(read('xcodebuild: error: not json')).toBe('');
80
+ expect(read({ not: 'an array' })).toBe('');
81
+ });
82
+ });
83
+ describe('pinsSimulatorArm64 / withRuntimeSimulatorArchs', () => {
84
+ const template = "-skipMacroValidation -skipPackagePluginValidation 'OTHER_CFLAGS=$(inherited) -Wno-error=parentheses' ARCHS=arm64";
85
+ test('the template line pins arm64', () => {
86
+ expect(pinsSimulatorArm64(template)).toBe(true);
87
+ });
88
+ test('an x86_64 already chosen at creation (issue 10) is not touched', () => {
89
+ const chosen = template.replace('ARCHS=arm64', 'ARCHS=x86_64');
90
+ expect(pinsSimulatorArm64(chosen)).toBe(false);
91
+ expect(withRuntimeSimulatorArchs(chosen)).toBe(chosen);
92
+ });
93
+ test('only a whole ARCHS=arm64 token counts', () => {
94
+ expect(pinsSimulatorArm64('VALID_ARCHS=arm64')).toBe(false);
95
+ expect(pinsSimulatorArm64('ARCHS=arm64e')).toBe(false);
96
+ expect(pinsSimulatorArm64('ARCHS=arm64 -quiet')).toBe(true);
97
+ });
98
+ test('the pin becomes the run-time variable, the rest of the line unchanged', () => {
99
+ expect(withRuntimeSimulatorArchs(template)).toBe("-skipMacroValidation -skipPackagePluginValidation 'OTHER_CFLAGS=$(inherited) -Wno-error=parentheses' ARCHS=\"$CIBUILD_SIMULATOR_ARCHS\"");
100
+ });
101
+ });
102
+ const steps = [
103
+ ['xcode-build-for-simulator', () => new XcodeBuildForSimulatorStepExecutor(), 'xcodebuild build "$PROJECT_TYPE"'],
104
+ ['xcode-build-for-test', () => new XcodeBuildForTestStepExecutor(), 'xcodebuild build-for-testing'],
105
+ ];
106
+ describe.each(steps)('%s reads the exclusion at run time', (_name, make, buildMarker) => {
107
+ const script = async (xcodebuild_options) => (await make().execute({
108
+ project_path: 'ZLGitHubClient/ZLGitHubClient.xcworkspace',
109
+ scheme: 'ZLGitHubClient',
110
+ configuration: 'Debug',
111
+ destination: 'generic/platform=iOS Simulator',
112
+ xcodebuild_options,
113
+ }, {}, testConfig)).script;
114
+ const pinned = "'OTHER_CFLAGS=$(inherited) -Wno-error=parentheses' ARCHS=arm64";
115
+ test('asks Xcode for the effective settings, after resolution and before the build', async () => {
116
+ const s = await script(pinned);
117
+ const ask = s.indexOf('xcodebuild -showBuildSettings -json');
118
+ expect(ask).toBeGreaterThan(s.indexOf('xcodebuild -resolvePackageDependencies'));
119
+ expect(ask).toBeLessThan(s.indexOf(buildMarker));
120
+ const line = s.split('\n').find((l) => l.includes('-showBuildSettings'));
121
+ expect(line).toContain("-scheme 'ZLGitHubClient'");
122
+ expect(line).toContain("-configuration 'Debug'");
123
+ expect(line).toContain("-destination 'generic/platform=iOS Simulator'");
124
+ });
125
+ test('builds with the run-time choice, arm64 unless the project excludes it', async () => {
126
+ const s = await script(pinned);
127
+ expect(s).toContain('CIBUILD_SIMULATOR_ARCHS=arm64');
128
+ expect(s).toContain('CIBUILD_SIMULATOR_ARCHS=x86_64');
129
+ const build = s.split('\n').find((l) => l.startsWith(buildMarker.split(' "')[0]) && !l.includes('-showBuildSettings') && !l.includes('-resolvePackageDependencies'));
130
+ expect(build).toContain('ARCHS="$CIBUILD_SIMULATOR_ARCHS"');
131
+ expect(build).not.toContain('ARCHS=arm64');
132
+ });
133
+ test('says so in the log, as the creation-time switch does', async () => {
134
+ expect(await script(pinned)).toContain('Building the simulator app as x86_64, not arm64: ');
135
+ });
136
+ test('without an arm64 pin there is nothing to check', async () => {
137
+ for (const opts of ['', pinned.replace('arm64', 'x86_64')]) {
138
+ const s = await script(opts);
139
+ expect(s).not.toContain('-showBuildSettings');
140
+ expect(s).not.toContain('CIBUILD_SIMULATOR_ARCHS');
141
+ }
142
+ });
143
+ test('the emitted script is valid bash', async () => {
144
+ const dir = mkdtempSync(join(tmpdir(), 'sim-archs-sh-'));
145
+ try {
146
+ const f = join(dir, 's.sh');
147
+ writeFileSync(f, await script(pinned));
148
+ expect(() => execFileSync('bash', ['-n', f])).not.toThrow();
149
+ }
150
+ finally {
151
+ rmSync(dir, { recursive: true, force: true });
152
+ }
153
+ });
154
+ });
155
+ //# sourceMappingURL=xcode-simulator-archs.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xcode.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/xcode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xcode.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/xcode.ts"],"names":[],"mappings":"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"}