diff --git a/get_jreleaser.java b/get_jreleaser.java index 9d19151..20676ba 100644 --- a/get_jreleaser.java +++ b/get_jreleaser.java @@ -1,10 +1,15 @@ //JAVA 11+ + import java.io.FileNotFoundException; import java.io.IOException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.StandardCopyOption; + +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; +import static java.nio.file.StandardOpenOption.CREATE; +import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING; +import static java.nio.file.StandardOpenOption.WRITE; class get_jreleaser { public static void main(String... args) throws Exception { @@ -27,15 +32,27 @@ class get_jreleaser { System.exit(1); } + var versionFile = Path.of("JRELEASER_VERSION"); + + var cachedVersion = ""; + if (Files.exists(versionFile)) { + try { + cachedVersion = Files.readString(versionFile).trim(); + } catch (IOException e) { + System.out.printf("☠️ JReleaser %s could not be resolved%n", version); + e.printStackTrace(); + System.exit(1); + } + } + // resolve latest to a tagged release if ("latest".equalsIgnoreCase(version)) { var url = "https://jreleaser.org/releases/latest/download/VERSION"; - var file = Path.of("JRELEASER_VERSION"); try (var stream = new URL(url).openStream()) { System.out.printf("✅ Located version marker%n"); - Files.copy(stream, file, StandardCopyOption.REPLACE_EXISTING); - version = new String(Files.readAllBytes(file)).trim(); + Files.copy(stream, versionFile, REPLACE_EXISTING); + version = new String(Files.readAllBytes(versionFile)).trim(); System.out.printf("✅ JReleaser latest resolves to %s%n", version); } catch (FileNotFoundException e) { System.out.printf("❌ JReleaser %s not found%n", version); @@ -46,18 +63,32 @@ class get_jreleaser { e.printStackTrace(); System.exit(1); } + } else { + try { + Files.writeString(versionFile, version, CREATE, TRUNCATE_EXISTING, WRITE); + } catch (IOException e) { + System.out.printf("☠️ JReleaser %s could not be resolved%n", version); + e.printStackTrace(); + System.exit(1); + } + } + + var jreleaserJar = Path.of("jreleaser-cli.jar"); + if (version.equals(cachedVersion) && Files.exists(jreleaserJar)) { + // assume jreleaserJar has the expected version for now + System.out.printf("✅ JReleaser %s already downloaded%n", version); + System.exit(0); } // setup the actual download var tag = !"early-access".equals(version) ? "v" + version : version; var url = "https://github.com/jreleaser/jreleaser/releases/download/" + tag + "/jreleaser-tool-provider-" + version + ".jar"; - var file = Path.of("jreleaser-cli.jar"); try (var stream = new URL(url).openStream()) { System.out.printf("✅ Located JReleaser %s%n", version); System.out.printf("⬇️ Downloading %s%n", url); - var size = Files.copy(stream, file, StandardCopyOption.REPLACE_EXISTING); - System.out.printf("%s << copied %d bytes%n", file, size); + var size = Files.copy(stream, jreleaserJar, REPLACE_EXISTING); + System.out.printf("%s << copied %d bytes%n", jreleaserJar, size); System.out.printf("✅ JReleaser installed successfully%n"); } catch (FileNotFoundException e) { System.out.printf("❌ JReleaser %s not found%n", version);