//usr/bin/env jbang "$0" "$@" ; exit $? //JAVA_OPTIONS --add-opens java.base/java.net=ALL-UNNAMED //JAVA_OPTIONS --add-opens java.base/sun.net.www.protocol.https=ALL-UNNAMED //DEPS info.picocli:picocli:4.1.4 //DEPS org.kohsuke:github-api:1.101 import org.kohsuke.github.GHAsset; import org.kohsuke.github.GHRelease; import org.kohsuke.github.GitHub; import org.kohsuke.github.PagedIterator; import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Parameters; import java.util.concurrent.Callable; import java.util.regex.Matcher; import java.util.regex.Pattern; @Command(name = "gh_fetch_release_assets", mixinStandardHelpOptions = true, version = "gh_fetch_release_assets 0.1", description = "Fetch latest release artifacts from a github repo with jbang") class fetchlatestgraalvm implements Callable<Integer> { @Parameters(index = "0", description = "The repo to fetch latest release for", defaultValue = "graalvm/graalvm-ce-dev-builds") private String repo; @CommandLine.Option(names={"--assets"}, description="The asset pattern to look for.", defaultValue=".*") Pattern assetPattern; public static void main(String... args) { int exitCode = new CommandLine(new fetchlatestgraalvm()).execute(args); System.exit(exitCode); } @Override public Integer call() throws Exception { // your business logic goes here... GitHub github = GitHub.connectAnonymously(); var ghRepo = github.getRepository(repo); ghRepo.archive(); PagedIterator<GHRelease> releases = ghRepo.listReleases().iterator(); if(releases.hasNext()) { var release = releases.next(); for(GHAsset asset: release.getAssets()) { if(assetPattern.matcher(asset.getName()).matches()) { System.out.println(asset.getBrowserDownloadUrl()); //System.out.println(asset.getName()); } } } else { System.err.println("No releases found."); return CommandLine.ExitCode.SOFTWARE; } return CommandLine.ExitCode.OK; } }