Skip to content

Commit 8d69d65

Browse files
ammachadoclaude
andcommitted
CAMEL-23703: camel-launcher - fix latest.properties path + Windows mvn invocation from review
Website manifest generator wrote latest.properties to the output root while both installers fetch it from the releases/ subdirectory, so the default versionless install would 404. Write it under releases/ and align the generator and package-prepare tests with the installer contract. Also fix camel-package.bat to target the module via `mvn -f pom.xml` (matching camel-package.sh) instead of `mvn -pl`, and tighten install.sh version validation to reject leading/trailing/double-dot versions for parity with install.ps1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 4a3e70e commit 8d69d65

6 files changed

Lines changed: 22 additions & 18 deletions

File tree

dsl/camel-jbang/camel-launcher/src/install/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ fail() {
3535
is_valid_version() {
3636
v="$1"
3737
case "$v" in
38-
'' | *[!0-9.]*) return 1 ;;
38+
'' | .* | *. | *..* | *[!0-9.]*) return 1 ;;
3939
esac
4040
old_ifs="$IFS"
4141
IFS=.

dsl/camel-jbang/camel-launcher/src/jreleaser/bin/camel-package.bat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ if not "%CAMEL_PACKAGE_TEST_VERSION%"=="" (
113113
)
114114
set "PROJECT_VERSION=%CAMEL_PACKAGE_TEST_VERSION%"
115115
) else (
116-
for /f "usebackq delims=" %%v in (`mvn -q -B -ntp -pl "%MODULE_DIR%" org.apache.maven.plugins:maven-help-plugin:3.5.1:evaluate -Dexpression=project.version -DforceStdout`) do set "PROJECT_VERSION=%%v"
116+
for /f "usebackq delims=" %%v in (`mvn -q -B -ntp -f "%MODULE_DIR%\pom.xml" org.apache.maven.plugins:maven-help-plugin:3.5.1:evaluate -Dexpression=project.version -DforceStdout`) do set "PROJECT_VERSION=%%v"
117117
)
118118

119119
if "!PROJECT_VERSION:~-8!"=="SNAPSHOT" (
@@ -197,7 +197,7 @@ if "%JRELEASER_GITHUB_TOKEN%"=="" set "JRELEASER_GITHUB_TOKEN=dry-run-placeholde
197197
@REM 1.25.0 plugin), used to select which packagers run for this channel; e.g. `lts`
198198
@REM excludes `scoop` by omitting it from !PACKAGERS!.
199199
echo Preparing packages for channel '%CHANNEL%' ^(packagers: !PACKAGERS!^)...
200-
call mvn -B -ntp -pl "%MODULE_DIR%" -Djreleaser.distributions=camel-cli -Djreleaser.packagers=!PACKAGERS! jreleaser:config jreleaser:prepare jreleaser:package -Djreleaser.dry.run=true
200+
call mvn -B -ntp -f "%MODULE_DIR%\pom.xml" -Djreleaser.distributions=camel-cli -Djreleaser.packagers=!PACKAGERS! jreleaser:config jreleaser:prepare jreleaser:package -Djreleaser.dry.run=true
201201
exit /b %ERRORLEVEL%
202202

203203
:usage

dsl/camel-jbang/camel-launcher/src/jreleaser/java/WebsiteManifestGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ private static void run(String[] args) throws IOException {
105105
writeVersionManifest(releasesDir.resolve(version + ".properties"), manifest, version);
106106

107107
if (latest) {
108-
writeLatestManifest(output.resolve("latest.properties"), manifest, version);
108+
writeLatestManifest(releasesDir.resolve("latest.properties"), manifest, version);
109109
}
110110
}
111111

dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/PackagePlanBatTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ void stableStagesInstallersAndWritesWebsiteManifests(@TempDir Path tmp) throws E
195195
Files.readAllBytes(installPs1));
196196

197197
Path versionManifest = websiteDir().resolve("camel-cli/releases/" + TEST_VERSION + ".properties");
198-
Path latestManifest = websiteDir().resolve("camel-cli/latest.properties");
198+
Path latestManifest = websiteDir().resolve("camel-cli/releases/latest.properties");
199199
assertTrue(Files.exists(versionManifest));
200200
assertTrue(Files.exists(latestManifest));
201201
String expected = "format=1\nversion=" + TEST_VERSION + "\ntar_sha256=" + sha256Hex(tar) + "\nzip_sha256="
@@ -219,7 +219,7 @@ void ltsStagesInstallersButDoesNotWriteLatest(@TempDir Path tmp) throws Exceptio
219219

220220
assertEquals(0, r.exit, r.stderr);
221221
assertTrue(Files.exists(websiteDir().resolve("camel-cli/releases/" + TEST_VERSION + ".properties")));
222-
assertFalse(Files.exists(websiteDir().resolve("camel-cli/latest.properties")),
222+
assertFalse(Files.exists(websiteDir().resolve("camel-cli/releases/latest.properties")),
223223
"LTS prepare must not create or modify latest.properties");
224224
assertTrue(Files.exists(recordFile));
225225
}

dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/PackagePlanShTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ void stableStagesInstallersAndWritesWebsiteManifests(@TempDir Path tmp) throws E
239239
Files.readAllBytes(installPs1));
240240

241241
Path versionManifest = websiteDir().resolve("camel-cli/releases/" + TEST_VERSION + ".properties");
242-
Path latestManifest = websiteDir().resolve("camel-cli/latest.properties");
242+
Path latestManifest = websiteDir().resolve("camel-cli/releases/latest.properties");
243243
assertTrue(Files.exists(versionManifest));
244244
assertTrue(Files.exists(latestManifest));
245245
String expected = "format=1\nversion=" + TEST_VERSION + "\ntar_sha256=" + sha256Hex(tar) + "\nzip_sha256="
@@ -263,7 +263,7 @@ void ltsStagesInstallersButDoesNotWriteLatest(@TempDir Path tmp) throws Exceptio
263263

264264
assertEquals(0, r.exit, r.stderr);
265265
assertTrue(Files.exists(websiteDir().resolve("camel-cli/releases/" + TEST_VERSION + ".properties")));
266-
assertFalse(Files.exists(websiteDir().resolve("camel-cli/latest.properties")),
266+
assertFalse(Files.exists(websiteDir().resolve("camel-cli/releases/latest.properties")),
267267
"LTS prepare must not create or modify latest.properties");
268268
assertTrue(Files.exists(recordFile));
269269
}

dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/WebsiteManifestGeneratorTest.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ void stableWritesVersionAndLatestManifests(@TempDir Path work) throws Exception
102102
assertEquals(0, r.exit, r.stderr);
103103
String expected = expectedManifest("4.22.0", sha256Hex(tar), sha256Hex(zip));
104104
Path versionFile = output.resolve("releases").resolve("4.22.0.properties");
105-
Path latestFile = output.resolve("latest.properties");
105+
Path latestFile = output.resolve("releases").resolve("latest.properties");
106106
assertEquals(expected, Files.readString(versionFile, StandardCharsets.UTF_8));
107107
assertArrayEquals(Files.readAllBytes(versionFile), Files.readAllBytes(latestFile),
108108
"latest.properties must be byte-identical to the version manifest");
@@ -119,7 +119,8 @@ void ltsDoesNotWriteLatest(@TempDir Path work) throws Exception {
119119

120120
assertEquals(0, r.exit, r.stderr);
121121
assertTrue(Files.exists(output.resolve("releases").resolve("4.18.5.properties")));
122-
assertFalse(Files.exists(output.resolve("latest.properties")), "LTS run must not create latest.properties");
122+
assertFalse(Files.exists(output.resolve("releases").resolve("latest.properties")),
123+
"LTS run must not create latest.properties");
123124
}
124125

125126
@Test
@@ -133,14 +134,14 @@ void repeatedRunIsIdempotent(@TempDir Path work) throws Exception {
133134
assertEquals(0, r1.exit, r1.stderr);
134135

135136
byte[] versionBytesBefore = Files.readAllBytes(output.resolve("releases").resolve("4.22.0.properties"));
136-
byte[] latestBytesBefore = Files.readAllBytes(output.resolve("latest.properties"));
137+
byte[] latestBytesBefore = Files.readAllBytes(output.resolve("releases").resolve("latest.properties"));
137138

138139
Result r2 = run("--version", "4.22.0", "--tar", tar.toString(), "--zip", zip.toString(), "--output",
139140
output.toString(), "--latest", "true");
140141
assertEquals(0, r2.exit, r2.stderr);
141142

142143
assertArrayEquals(versionBytesBefore, Files.readAllBytes(output.resolve("releases").resolve("4.22.0.properties")));
143-
assertArrayEquals(latestBytesBefore, Files.readAllBytes(output.resolve("latest.properties")));
144+
assertArrayEquals(latestBytesBefore, Files.readAllBytes(output.resolve("releases").resolve("latest.properties")));
144145
}
145146

146147
@Test
@@ -174,7 +175,7 @@ void latestRollbackFails(@TempDir Path work) throws Exception {
174175
Result seed = run("--version", "4.23.0", "--tar", tar1.toString(), "--zip", zip1.toString(), "--output",
175176
output.toString(), "--latest", "true");
176177
assertEquals(0, seed.exit, seed.stderr);
177-
byte[] latestBefore = Files.readAllBytes(output.resolve("latest.properties"));
178+
byte[] latestBefore = Files.readAllBytes(output.resolve("releases").resolve("latest.properties"));
178179

179180
Path tar2 = writeFixture(work, "lo.tar.gz", "lo-tar");
180181
Path zip2 = writeFixture(work, "lo.zip", "lo-zip");
@@ -183,7 +184,7 @@ void latestRollbackFails(@TempDir Path work) throws Exception {
183184
output.toString(), "--latest", "true");
184185

185186
assertNotEquals(0, r.exit, "latest must not move backward to a lower version");
186-
assertArrayEquals(latestBefore, Files.readAllBytes(output.resolve("latest.properties")));
187+
assertArrayEquals(latestBefore, Files.readAllBytes(output.resolve("releases").resolve("latest.properties")));
187188
assertTrue(Files.exists(output.resolve("releases").resolve("4.22.0.properties")),
188189
"the version-specific manifest is still written even if the latest update is rejected");
189190
}
@@ -201,7 +202,8 @@ void sameVersionChecksumConflictOnLatestFails(@TempDir Path work) throws Excepti
201202
Path zipStale = writeFixture(work, "stale.zip", "stale-zip");
202203
byte[] tamperedLatest
203204
= expectedManifest("4.22.0", sha256Hex(tarStale), sha256Hex(zipStale)).getBytes(StandardCharsets.UTF_8);
204-
Files.write(output.resolve("latest.properties"), tamperedLatest);
205+
Files.createDirectories(output.resolve("releases"));
206+
Files.write(output.resolve("releases").resolve("latest.properties"), tamperedLatest);
205207
assertFalse(Files.exists(output.resolve("releases").resolve("4.22.0.properties")));
206208

207209
Path tarNew = writeFixture(work, "new.tar.gz", "new-tar-different");
@@ -211,7 +213,7 @@ void sameVersionChecksumConflictOnLatestFails(@TempDir Path work) throws Excepti
211213
output.toString(), "--latest", "true");
212214

213215
assertNotEquals(0, r.exit, "same-version checksum conflict against latest.properties must fail");
214-
assertArrayEquals(tamperedLatest, Files.readAllBytes(output.resolve("latest.properties")),
216+
assertArrayEquals(tamperedLatest, Files.readAllBytes(output.resolve("releases").resolve("latest.properties")),
215217
"latest.properties must remain untouched after a rejected conflicting update");
216218
assertTrue(Files.exists(output.resolve("releases").resolve("4.22.0.properties")),
217219
"the version-specific manifest still gets written since it did not previously exist");
@@ -235,7 +237,8 @@ void forwardUpdateSucceeds(@TempDir Path work) throws Exception {
235237

236238
assertEquals(0, r.exit, r.stderr);
237239
String expected = expectedManifest("4.23.0", sha256Hex(tar2), sha256Hex(zip2));
238-
assertEquals(expected, Files.readString(output.resolve("latest.properties"), StandardCharsets.UTF_8));
240+
assertEquals(expected,
241+
Files.readString(output.resolve("releases").resolve("latest.properties"), StandardCharsets.UTF_8));
239242
assertTrue(Files.exists(output.resolve("releases").resolve("4.22.0.properties")));
240243
assertTrue(Files.exists(output.resolve("releases").resolve("4.23.0.properties")));
241244
}
@@ -292,6 +295,7 @@ void handlesOutputPathsWithSpacesAndUnicode(@TempDir Path work) throws Exception
292295
String expected = expectedManifest("4.22.0", sha256Hex(tar), sha256Hex(zip));
293296
assertEquals(expected,
294297
Files.readString(output.resolve("releases").resolve("4.22.0.properties"), StandardCharsets.UTF_8));
295-
assertEquals(expected, Files.readString(output.resolve("latest.properties"), StandardCharsets.UTF_8));
298+
assertEquals(expected,
299+
Files.readString(output.resolve("releases").resolve("latest.properties"), StandardCharsets.UTF_8));
296300
}
297301
}

0 commit comments

Comments
 (0)