@invarn/cibuild 2.6.7 → 2.6.8
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.
- package/dist/cli.cjs +10 -10
- package/dist/src/commands/android-java-version.test.js +55 -24
- package/dist/src/commands/android-scanner-java.test.d.ts +2 -0
- package/dist/src/commands/android-scanner-java.test.d.ts.map +1 -0
- package/dist/src/commands/android-scanner-java.test.js +130 -0
- package/dist/src/commands/android-scanner.d.ts +47 -22
- package/dist/src/commands/android-scanner.d.ts.map +1 -1
- package/dist/src/commands/android-scanner.js +187 -52
- package/dist/src/commands/ios-scanner.d.ts +42 -1
- package/dist/src/commands/ios-scanner.d.ts.map +1 -1
- package/dist/src/commands/ios-scanner.js +123 -3
- package/dist/src/commands/ios-scheme-ranking.test.d.ts +2 -0
- package/dist/src/commands/ios-scheme-ranking.test.d.ts.map +1 -0
- package/dist/src/commands/ios-scheme-ranking.test.js +152 -0
- package/dist/src/shared/detect-project.d.ts +15 -3
- package/dist/src/shared/detect-project.d.ts.map +1 -1
- package/dist/src/shared/detect-project.js +126 -15
- package/dist/src/shared/detect-project.test.d.ts +2 -0
- package/dist/src/shared/detect-project.test.d.ts.map +1 -0
- package/dist/src/shared/detect-project.test.js +126 -0
- package/dist/src/shared/gradle-settings.d.ts +32 -0
- package/dist/src/shared/gradle-settings.d.ts.map +1 -0
- package/dist/src/shared/gradle-settings.js +66 -0
- package/dist/src/yaml/steps/android-variant-resolution.test.d.ts +2 -0
- package/dist/src/yaml/steps/android-variant-resolution.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/android-variant-resolution.test.js +117 -0
- package/dist/src/yaml/steps/android.d.ts +37 -0
- package/dist/src/yaml/steps/android.d.ts.map +1 -1
- package/dist/src/yaml/steps/android.js +130 -17
- package/dist/src/yaml/steps/base.d.ts +20 -0
- package/dist/src/yaml/steps/base.d.ts.map +1 -1
- package/dist/src/yaml/steps/base.js +24 -1
- package/dist/src/yaml/steps/java-home-version-spec.test.d.ts +10 -0
- package/dist/src/yaml/steps/java-home-version-spec.test.d.ts.map +1 -0
- package/dist/src/yaml/steps/java-home-version-spec.test.js +58 -0
- package/package.json +1 -1
|
@@ -29,10 +29,19 @@ describe('gradleJavaCeiling / gradleJavaFloor', () => {
|
|
|
29
29
|
test('tracks what each Gradle line can run on', () => {
|
|
30
30
|
expect(gradleJavaCeiling('4.10.2')).toBe(8);
|
|
31
31
|
expect(gradleJavaCeiling('5.2.1')).toBe(11);
|
|
32
|
-
expect(gradleJavaCeiling('6.9')).toBe(
|
|
32
|
+
expect(gradleJavaCeiling('6.9')).toBe(11);
|
|
33
33
|
expect(gradleJavaCeiling('7.6.1')).toBe(17);
|
|
34
34
|
expect(gradleJavaCeiling('8.9')).toBe(21);
|
|
35
|
-
expect(gradleJavaCeiling('9.4.0')).toBe(
|
|
35
|
+
expect(gradleJavaCeiling('9.4.0')).toBe(25);
|
|
36
|
+
});
|
|
37
|
+
// The boundaries are minor releases, and preferring the newest JDK makes
|
|
38
|
+
// them load-bearing: JDK 21 arrived in Gradle 8.5, JDK 17 in 7.3, JDK 11 in
|
|
39
|
+
// 5.0.
|
|
40
|
+
test('knows the minor release each JDK arrived in', () => {
|
|
41
|
+
expect(gradleJavaCeiling('8.4')).toBe(17);
|
|
42
|
+
expect(gradleJavaCeiling('8.5')).toBe(21);
|
|
43
|
+
expect(gradleJavaCeiling('7.2')).toBe(11);
|
|
44
|
+
expect(gradleJavaCeiling('7.3')).toBe(17);
|
|
36
45
|
});
|
|
37
46
|
test('knows Gradle 9 dropped everything below 17', () => {
|
|
38
47
|
expect(gradleJavaFloor('8.9')).toBe(8);
|
|
@@ -45,17 +54,32 @@ describe('gradleJavaCeiling / gradleJavaFloor', () => {
|
|
|
45
54
|
});
|
|
46
55
|
});
|
|
47
56
|
describe('runnableJavaVersion', () => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
expect(runnableJavaVersion(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
// DECIDED 2026-09-06 (Alex): the newest JDK the wrapper allows, reversing
|
|
58
|
+
// PRD decision #15. A declaration is a floor — 11 is installed, and a
|
|
59
|
+
// project declaring sourceCompatibility 11 gets 21, which it compiles
|
|
60
|
+
// perfectly well on and which AGP 8.x needs anyway.
|
|
61
|
+
test('takes the newest available JDK that covers the declaration', () => {
|
|
62
|
+
expect(runnableJavaVersion(11)).toBe(25);
|
|
63
|
+
expect(runnableJavaVersion(17)).toBe(25);
|
|
64
|
+
expect(runnableJavaVersion(25)).toBe(25);
|
|
65
|
+
});
|
|
66
|
+
test('takes the newest available JDK when nothing is declared', () => {
|
|
67
|
+
expect(runnableJavaVersion(undefined)).toBe(25);
|
|
68
|
+
});
|
|
69
|
+
// 8 joined the images on 2026-09-07 and must stay unreachable except where
|
|
70
|
+
// a wrapper ceiling forces it: a project declaring `sourceCompatibility 1.8`
|
|
71
|
+
// is declaring a floor, and AGP will not run on 8 at all.
|
|
72
|
+
test('never picks 8 for a project that merely declares it', () => {
|
|
73
|
+
// 8.13's own ceiling is 21 — JDK 25 needs Gradle 9.1.
|
|
74
|
+
expect(runnableJavaVersion(8, '8.13')).toBe(21);
|
|
75
|
+
expect(runnableJavaVersion(8)).toBe(25);
|
|
76
|
+
});
|
|
77
|
+
// AutoJs6: Gradle 4.10.2 tops out at Java 8, and now there is a Java 8.
|
|
78
|
+
test('picks 8 when the wrapper leaves nothing else', () => {
|
|
79
|
+
expect(runnableJavaVersion(undefined, '4.10.2')).toBe(8);
|
|
80
|
+
expect(runnableJavaVersion(8, '4.10.2')).toBe(8);
|
|
81
|
+
});
|
|
82
|
+
test('steps down to 11 only when the wrapper rules everything else out', () => {
|
|
59
83
|
expect(runnableJavaVersion(undefined, '5.2.1')).toBe(11);
|
|
60
84
|
expect(runnableJavaVersion(11, '5.2.1')).toBe(11);
|
|
61
85
|
expect(runnableJavaVersion(undefined, '6.9')).toBe(11);
|
|
@@ -65,24 +89,29 @@ describe('runnableJavaVersion', () => {
|
|
|
65
89
|
expect(AVAILABLE_JAVA_VERSIONS).toContain(runnableJavaVersion(25, '8.9'));
|
|
66
90
|
});
|
|
67
91
|
test('lets an old wrapper cap a newer declaration', () => {
|
|
68
|
-
// Gradle 7.x tops out at 17 even though
|
|
69
|
-
|
|
92
|
+
// Gradle 7.x tops out at 17 even though newer JDKs are installed. There
|
|
93
|
+
// is no usable JDK at all, so the pipeline names the newest and the
|
|
94
|
+
// caller warns — `javaVersionProblem` is what says so.
|
|
95
|
+
expect(runnableJavaVersion(21, '7.6.1')).toBe(25);
|
|
96
|
+
expect(runnableJavaVersion(17, '7.6.1')).toBe(17);
|
|
70
97
|
});
|
|
71
98
|
test('honours the Gradle 9 floor of 17', () => {
|
|
72
|
-
|
|
99
|
+
// The floor rules 11 out; the newest above it is what gets written.
|
|
100
|
+
expect(runnableJavaVersion(8, '9.0')).toBe(21);
|
|
73
101
|
});
|
|
74
102
|
});
|
|
75
103
|
describe('javaVersionProblem', () => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
expect(
|
|
104
|
+
// There is no longer a Gradle version no installed JDK can run: the ceiling
|
|
105
|
+
// bottoms out at Java 8 and since 2026-09-07 the images carry one. The
|
|
106
|
+
// branch that says so is kept for an installed set that drops 8 again.
|
|
107
|
+
test('no longer calls an old wrapper a problem', () => {
|
|
108
|
+
expect(javaVersionProblem(undefined, '4.10.2')).toBeUndefined();
|
|
109
|
+
expect(javaVersionProblem(undefined, '3.5')).toBeUndefined();
|
|
81
110
|
});
|
|
82
111
|
test('names a declaration above every installed JDK', () => {
|
|
83
|
-
const problem = javaVersionProblem(
|
|
84
|
-
expect(problem).toContain('Java
|
|
85
|
-
expect(problem).toContain('11, 17 and
|
|
112
|
+
const problem = javaVersionProblem(30, '8.9');
|
|
113
|
+
expect(problem).toContain('Java 30');
|
|
114
|
+
expect(problem).toContain('8, 11, 17, 21 and 25');
|
|
86
115
|
});
|
|
87
116
|
test('is silent when every constraint was honoured', () => {
|
|
88
117
|
expect(javaVersionProblem(17, '8.9')).toBeUndefined();
|
|
@@ -90,6 +119,8 @@ describe('javaVersionProblem', () => {
|
|
|
90
119
|
expect(javaVersionProblem(undefined, undefined)).toBeUndefined();
|
|
91
120
|
// 5.2.1 used to be a problem. The images carry 11 now, so it is not.
|
|
92
121
|
expect(javaVersionProblem(undefined, '5.2.1')).toBeUndefined();
|
|
122
|
+
// Nor is 4.10.2, since the images carry 8.
|
|
123
|
+
expect(javaVersionProblem(undefined, '4.10.2')).toBeUndefined();
|
|
93
124
|
});
|
|
94
125
|
});
|
|
95
126
|
//# sourceMappingURL=android-java-version.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android-scanner-java.test.d.ts","sourceRoot":"","sources":["../../../src/commands/android-scanner-java.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which JDK a project needs, from every place it says so.
|
|
3
|
+
*
|
|
4
|
+
* Two rows of the thirty-app study died at root-project configuration on a
|
|
5
|
+
* JDK the images already carry, and neither was a repository problem:
|
|
6
|
+
*
|
|
7
|
+
* - `SimonSchubert/LinuxCommandLibrary` declares eight modules in a single
|
|
8
|
+
* `include(...)` call. The scanner's own include regex captured only the
|
|
9
|
+
* first argument, so seven modules were never opened — including the one
|
|
10
|
+
* with `jvmToolchain(21)` in it. It answered 17, and a Gradle plugin
|
|
11
|
+
* requiring a 21 runtime failed the build.
|
|
12
|
+
* - `mihonapp/mihon` declares no Java level in any Gradle file. It pins 21
|
|
13
|
+
* in `.github/.java-version`, which its own workflows consume through
|
|
14
|
+
* `setup-java`'s `java-version-file:`. Nothing of ours read either.
|
|
15
|
+
*/
|
|
16
|
+
import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { tmpdir } from "node:os";
|
|
19
|
+
import { scanAndroidProject } from "./android-scanner.js";
|
|
20
|
+
let root;
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
root = mkdtempSync(join(tmpdir(), "cibuild-java-"));
|
|
23
|
+
});
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
rmSync(root, { recursive: true, force: true });
|
|
26
|
+
});
|
|
27
|
+
function write(relative, content) {
|
|
28
|
+
const path = join(root, relative);
|
|
29
|
+
mkdirSync(join(path, ".."), { recursive: true });
|
|
30
|
+
writeFileSync(path, content);
|
|
31
|
+
}
|
|
32
|
+
async function detectedJava() {
|
|
33
|
+
const result = await scanAndroidProject(root);
|
|
34
|
+
return result.detectedJavaVersion;
|
|
35
|
+
}
|
|
36
|
+
describe("the Java version a project asks for", () => {
|
|
37
|
+
describe("every module the build includes", () => {
|
|
38
|
+
// The exact settings line from LinuxCommandLibrary, and the two build
|
|
39
|
+
// files that decide the answer: 17 in the first module, 21 in the last.
|
|
40
|
+
test("reads all eight modules of one include call", async () => {
|
|
41
|
+
write("settings.gradle.kts", 'include(":android", ":common", ":websiteBuilder", ":cli", ":composeApp", ":desktopApp", ":viewmodels", ":screenshotTests")\n');
|
|
42
|
+
write("build.gradle.kts", "// root\n");
|
|
43
|
+
write("android/build.gradle.kts", "kotlin {\n compilerOptions {\n jvmTarget.set(JvmTarget.JVM_17)\n }\n}\n");
|
|
44
|
+
write("screenshotTests/build.gradle.kts", "kotlin {\n jvmToolchain(21)\n}\n");
|
|
45
|
+
expect(await detectedJava()).toBe(21);
|
|
46
|
+
});
|
|
47
|
+
test("reads the Groovy multi-argument form too", async () => {
|
|
48
|
+
write("settings.gradle", "include ':app', ':feature:home'\n");
|
|
49
|
+
write("app/build.gradle", "android { compileOptions { sourceCompatibility JavaVersion.VERSION_17 } }\n");
|
|
50
|
+
write("feature/home/build.gradle", "kotlin { jvmToolchain(21) }\n");
|
|
51
|
+
expect(await detectedJava()).toBe(21);
|
|
52
|
+
});
|
|
53
|
+
// A7 lite: a convention plugin's own build file is where a monorepo's
|
|
54
|
+
// Java level often lives, and `includeBuild` is how it gets there.
|
|
55
|
+
test("follows includeBuild into a build-logic root", async () => {
|
|
56
|
+
write("settings.gradle.kts", 'includeBuild("build-logic")\ninclude(":app")\n');
|
|
57
|
+
write("app/build.gradle.kts", "// nothing\n");
|
|
58
|
+
write("build-logic/build.gradle.kts", "kotlin { jvmToolchain(21) }\n");
|
|
59
|
+
expect(await detectedJava()).toBe(21);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe("the forms a Kotlin build writes jvmTarget in", () => {
|
|
63
|
+
test.each([
|
|
64
|
+
["jvmTarget.set(JvmTarget.JVM_17)", 17],
|
|
65
|
+
["jvmTarget = JvmTarget.JVM_21", 21],
|
|
66
|
+
['jvmTarget.set(JvmTarget.fromTarget("17"))', 17],
|
|
67
|
+
['jvmTarget = "21"', 21],
|
|
68
|
+
["jvmTarget.set(JvmTarget.JVM_1_8)", 8],
|
|
69
|
+
])("reads %s", async (form, expected) => {
|
|
70
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
71
|
+
write("app/build.gradle.kts", `kotlin { compilerOptions { ${form} } }\n`);
|
|
72
|
+
expect(await detectedJava()).toBe(expected);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe("the files that pin a JDK outside Gradle", () => {
|
|
76
|
+
// mihon. The floor is 21 and no Gradle file says anything at all.
|
|
77
|
+
test("reads .github/.java-version", async () => {
|
|
78
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
79
|
+
write("app/build.gradle.kts", "// nothing\n");
|
|
80
|
+
write(".github/.java-version", "21\n");
|
|
81
|
+
expect(await detectedJava()).toBe(21);
|
|
82
|
+
});
|
|
83
|
+
// thunderbird pins at the root.
|
|
84
|
+
test("reads a root .java-version", async () => {
|
|
85
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
86
|
+
write(".java-version", "21\n");
|
|
87
|
+
expect(await detectedJava()).toBe(21);
|
|
88
|
+
});
|
|
89
|
+
test("reads a java entry in .tool-versions", async () => {
|
|
90
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
91
|
+
write(".tool-versions", "nodejs 20.11.0\njava temurin-21.0.3+9\n");
|
|
92
|
+
expect(await detectedJava()).toBe(21);
|
|
93
|
+
});
|
|
94
|
+
test("reads .sdkmanrc", async () => {
|
|
95
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
96
|
+
write(".sdkmanrc", "# comment\njava=17.0.9-tem\ngradle=8.13\n");
|
|
97
|
+
expect(await detectedJava()).toBe(17);
|
|
98
|
+
});
|
|
99
|
+
test("reads java-version from a workflow", async () => {
|
|
100
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
101
|
+
write(".github/workflows/build.yml", "jobs:\n build:\n steps:\n - uses: actions/setup-java@v4\n with:\n java-version: 21\n");
|
|
102
|
+
expect(await detectedJava()).toBe(21);
|
|
103
|
+
});
|
|
104
|
+
// A matrix declares several; the highest is the one that has to work.
|
|
105
|
+
test("takes the highest of a workflow matrix", async () => {
|
|
106
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
107
|
+
write(".github/workflows/ci.yml", "strategy:\n matrix:\n java-version: [17, 21]\n");
|
|
108
|
+
expect(await detectedJava()).toBe(21);
|
|
109
|
+
});
|
|
110
|
+
// A pin is a floor, not a ceiling, and a Gradle declaration above it wins.
|
|
111
|
+
test("is a floor, not an override", async () => {
|
|
112
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
113
|
+
write("app/build.gradle.kts", "kotlin { jvmToolchain(21) }\n");
|
|
114
|
+
write(".java-version", "17\n");
|
|
115
|
+
expect(await detectedJava()).toBe(21);
|
|
116
|
+
});
|
|
117
|
+
test("says nothing when nothing pins anything", async () => {
|
|
118
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
119
|
+
write("app/build.gradle.kts", "// nothing\n");
|
|
120
|
+
expect(await detectedJava()).toBeUndefined();
|
|
121
|
+
});
|
|
122
|
+
// A version this scanner cannot make sense of must not become a number.
|
|
123
|
+
test("ignores an unreadable pin", async () => {
|
|
124
|
+
write("settings.gradle.kts", 'include(":app")\n');
|
|
125
|
+
write(".java-version", "graalvm-community\n");
|
|
126
|
+
expect(await detectedJava()).toBeUndefined();
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=android-scanner-java.test.js.map
|
|
@@ -44,6 +44,26 @@ export interface BuildVariants {
|
|
|
44
44
|
* losing a real declaration is worse than keeping a guarded one.
|
|
45
45
|
*/
|
|
46
46
|
export declare function stripExistenceGuardedBlocks(content: string): string;
|
|
47
|
+
/** The builds a settings file composes in, e.g. `includeBuild("build-logic")`. */
|
|
48
|
+
export declare function parseIncludedBuilds(content: string): string[];
|
|
49
|
+
/**
|
|
50
|
+
* A Java version pinned outside Gradle, and the file that pins it.
|
|
51
|
+
*
|
|
52
|
+
* `mihonapp/mihon` declares no Java level in any Gradle file and pins 21 in
|
|
53
|
+
* `.github/.java-version`, which its own workflows consume through
|
|
54
|
+
* `setup-java`'s `java-version-file:`. The project says what it needs; it
|
|
55
|
+
* just does not say it in Gradle, and reading only Gradle files scanned it as
|
|
56
|
+
* "nothing declared" and ran it on the default. Across the thirty clones,
|
|
57
|
+
* three repositories pin with a version file and ten name a version in a
|
|
58
|
+
* workflow.
|
|
59
|
+
*
|
|
60
|
+
* A pin is a **floor**, folded in with `Math.max` like every other
|
|
61
|
+
* declaration — not an override.
|
|
62
|
+
*/
|
|
63
|
+
export declare function detectPinnedJavaVersion(root: string): {
|
|
64
|
+
version: number;
|
|
65
|
+
source: string;
|
|
66
|
+
} | undefined;
|
|
47
67
|
/**
|
|
48
68
|
* The Gradle version a wrapper pins, read out of its `distributionUrl`.
|
|
49
69
|
* `…/gradle-8.9-bin.zip` → `8.9`.
|
|
@@ -70,35 +90,40 @@ export declare function gradleJavaFloor(gradleVersion: string | undefined): numb
|
|
|
70
90
|
*
|
|
71
91
|
* 11 joined the images on 2026-09-05, for Gradle 5.x and 6.x — which cannot
|
|
72
92
|
* *start* on 17, whatever the sources declare. It is a fallback, never a
|
|
73
|
-
* preference
|
|
93
|
+
* preference: the selection takes the newest JDK that fits, so 11 is reached
|
|
94
|
+
* only when a wrapper's ceiling leaves nothing else.
|
|
95
|
+
*
|
|
96
|
+
* 8 and 25 joined on 2026-09-07, the companion half of the "newest the
|
|
97
|
+
* wrapper allows" decision — the images carry every JDK we find a project
|
|
98
|
+
* asking for, rather than a project bending to what they carry. 8 is 11's
|
|
99
|
+
* argument one line further back (Gradle 4.x tops out at Java 8); 25 covers
|
|
100
|
+
* the six repositories in the 150-repo corpus that declare a level above 21.
|
|
101
|
+
* Nothing reaches 8 unless a wrapper ceiling forces it.
|
|
74
102
|
*/
|
|
75
103
|
export declare const AVAILABLE_JAVA_VERSIONS: number[];
|
|
76
104
|
/**
|
|
77
|
-
* The JDK
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* installed that rule would write `JAVA_VERSION: 11` for every project whose
|
|
82
|
-
* `sourceCompatibility` is 11 — and AGP 8.x will not run on JDK 11, so
|
|
83
|
-
* pipelines that build today would stop building.
|
|
105
|
+
* The newest JDK a build machine carries. Named because it is what a
|
|
106
|
+
* generated pipeline falls back to when no JDK can satisfy the constraints —
|
|
107
|
+
* a pipeline has to write something, and `javaVersionProblem` says what was
|
|
108
|
+
* given up.
|
|
84
109
|
*/
|
|
85
|
-
export declare const
|
|
110
|
+
export declare const NEWEST_AVAILABLE_JAVA_VERSION: number;
|
|
86
111
|
/**
|
|
87
|
-
* The Java version to write into a generated pipeline:
|
|
88
|
-
*
|
|
89
|
-
* wrapper can run on
|
|
112
|
+
* The Java version to write into a generated pipeline: the **newest**
|
|
113
|
+
* available JDK that satisfies both what the sources declare and what the
|
|
114
|
+
* Gradle wrapper can run on.
|
|
90
115
|
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
116
|
+
* DECIDED 2026-09-06 (Alex), reversing Invarn PRD decision #15 ("17 is the
|
|
117
|
+
* JDK whenever nothing forces otherwise"). The thirty-app study measured the
|
|
118
|
+
* cost of preferring 17 in one direction and none in the other: two rows
|
|
119
|
+
* failed because 17 was too *low* for a build plugin's own runtime
|
|
120
|
+
* requirement, and no row failed because 21 was too high. A project targeting
|
|
121
|
+
* 17 runs fine on 21; never the reverse.
|
|
96
122
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* what was given up so the caller can warn.
|
|
123
|
+
* Source compatibility is a floor, not an exact request. Gradle starts before
|
|
124
|
+
* it reads a single `sourceCompatibility`, so a wrapper pinning an old Gradle
|
|
125
|
+
* caps the JDK no matter what the sources say — which is why the ceiling
|
|
126
|
+
* above had to learn minor versions before this could ship.
|
|
102
127
|
*/
|
|
103
128
|
export declare function runnableJavaVersion(detectedJavaVersion: number | undefined, gradleVersion?: string): number;
|
|
104
129
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"android-scanner.d.ts","sourceRoot":"","sources":["../../../src/commands/android-scanner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"android-scanner.d.ts","sourceRoot":"","sources":["../../../src/commands/android-scanner.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjD,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,SAAS,GACT,iBAAiB,GACjB,gBAAgB,GAChB,cAAc,GACd,UAAU,GACV,gBAAgB,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,+EAA+E;IAC/E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uFAAuF;IACvF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,2FAA2F;IAC3F,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,gGAAgG;IAChG,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,wFAAwF;IACxF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAwKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAcnE;AAyKD,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAO7D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,GACX;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA8CjD;AA2BD;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG7E;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAsBvF;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIrF;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,UAAsB,CAAC;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,QAAuC,CAAC;AAElF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,mBAAmB,EAAE,MAAM,GAAG,SAAS,EACvC,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAQR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,mBAAmB,EAAE,MAAM,GAAG,SAAS,EACvC,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,GAAG,SAAS,CAkBpB;AA6FD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,aAAa,CAmCxE;AAMD,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAoQjF;AAgBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAyD3D"}
|