diff --git a/sources.json b/sources.json new file mode 100644 index 0000000..9d07885 --- /dev/null +++ b/sources.json @@ -0,0 +1,30 @@ +{ + "x86_64-unknown-linux-gnu": { + "versions": { + "17": { + "major_version": "17", + "version": "17.0.0+35", + "url": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk17u-2021-10-25-08-48-beta/OpenJDK17U-jdk_x64_linux_hotspot_2021-10-25-08-48.tar.gz", + "sha256": "0lb5mkh752x6d5yvlkcgdr60pas1qxk00jwlr7rm3566ry852vgf" + }, + "18": { + "major_version": "18", + "version": "18.0.0+28", + "url": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk18-2021-12-17-07-56-beta/OpenJDK18-jdk_x64_linux_hotspot_2021-12-17-07-56.tar.gz", + "sha256": "05jb4qdzb7v8arm1ysghrkyj53k2qaxsb2gnzlkgivgpnv91jbll" + }, + "11": { + "major_version": "11", + "version": "11.0.13+8", + "url": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk11u-2021-11-05-11-35-beta/OpenJDK11U-jdk_x64_linux_hotspot_2021-11-05-11-35.tar.gz", + "sha256": "09p60182vz31wxnp43ghlp1q928xfql0wnk7g852s1wiwjr26dm0" + }, + "16": { + "major_version": "16", + "version": "16.0.1+9", + "url": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk16u-2021-07-22-01-18-beta/OpenJDK16U-jdk_x64_linux_hotspot_2021-07-22-01-18.tar.gz", + "sha256": "0rgyp5jrwqjxz0ajk94vmwvagk88p5a41sm2ynckq3p7sg992ym0" + } + } + } +} diff --git a/updater/src/main.rs b/updater/src/main.rs index 8338c87..70d689f 100644 --- a/updater/src/main.rs +++ b/updater/src/main.rs @@ -1,4 +1,5 @@ use std::collections::{HashMap, HashSet}; +use std::process::Command; use color_eyre::{ eyre::{bail, Context, ContextCompat, Result}, @@ -26,7 +27,7 @@ fn main() -> Result<()> { versions: HashMap::new(), }; for (_slug, (version, url)) in slugs { - sources.add_release(&version, &url); + sources.add_release(&version, &url)?; } let mut output: HashMap = HashMap::new(); output.insert("x86_64-unknown-linux-gnu".to_string(), sources); @@ -43,14 +44,16 @@ struct Sources { versions: HashMap, } impl Sources { - fn add_release(&mut self, release: &Release, url: &str) { + fn add_release(&mut self, release: &Release, url: &str) -> Result<()> { let version = release.to_java_version(); let source = Source { major_version: release.major.to_string(), version, url: url.to_string(), + sha256: get_sha256(url)?, }; self.versions.insert(release.major.to_string(), source); + Ok(()) } } #[derive(Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] @@ -58,6 +61,7 @@ struct Source { major_version: String, version: String, url: String, + sha256: String, } /// Serde formatting struct @@ -138,7 +142,7 @@ fn get_versions_page(page: usize) -> Result> { .query("image_type", "jdk") .query("os", "linux") .query("page", &page) - .query("page_size", "10") + .query("page_size", "50") .query("project", "jdk"); let url = request.url().to_string(); let response = request @@ -198,7 +202,7 @@ fn get_url(version: &Release) -> Result { .query("image_type", "jdk") .query("os", "linux") .query("page", "0") - .query("page_size", "10") + .query("page_size", "1") .query("project", "jdk"); let url = request.url().to_string(); let response = request @@ -219,3 +223,15 @@ fn get_url(version: &Release) -> Result { None => bail!("Binary was missing!"), } } + +/// Gets the nix sha256 for a url +fn get_sha256(url: &str) -> Result { + let output = Command::new("nix-prefetch-url") + .args([url, "--type", "sha256"]) + .output() + .with_section(|| format!("Failed to prefetch url: {}", url).header("Prefetch Failure")) + .context("Failed to prefetch")?; + let output = String::from_utf8(output.stdout).context("Invalid utf-8 from nix pre fetch")?; + // Trim the trailing new line + Ok(output.trim().to_string()) +}