summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-02-25 14:58:39 +0100
committerDavid Lönnhager <david.l@mullvad.net>2025-03-06 00:09:16 +0100
commit60528adb9689803a4d2f170819c30b7ea4182b1f (patch)
tree5904ad89159d064068e750cffefd11b77a646ead
parent8aae07d50daf461e6288ae734589fc52032da54f (diff)
downloadmullvadvpn-60528adb9689803a4d2f170819c30b7ea4182b1f.tar.xz
mullvadvpn-60528adb9689803a4d2f170819c30b7ea4182b1f.zip
Add URLs to generated metadata
-rw-r--r--mullvad-update/meta/src/artifacts.rs19
-rw-r--r--mullvad-update/meta/src/main.rs4
-rw-r--r--mullvad-update/meta/src/platform.rs19
3 files changed, 35 insertions, 7 deletions
diff --git a/mullvad-update/meta/src/artifacts.rs b/mullvad-update/meta/src/artifacts.rs
index 2c0a76b28e..4cda5db75c 100644
--- a/mullvad-update/meta/src/artifacts.rs
+++ b/mullvad-update/meta/src/artifacts.rs
@@ -11,6 +11,7 @@ use mullvad_update::{format, verify::Sha256Verifier};
/// Generate `format::Installer`
pub async fn generate_installer_details(
architecture: format::Architecture,
+ base_urls: &[String],
artifact: &Path,
) -> anyhow::Result<format::Installer> {
let mut file = fs::File::open(artifact)
@@ -28,14 +29,28 @@ pub async fn generate_installer_details(
.context("Failed to reset file pos")?;
let file = BufReader::new(file);
+ println!("Generating checksum for {}", artifact.display());
+
let checksum = Sha256Verifier::generate_hash(file)
.await
.context("Failed to compute checksum")?;
+ // Construct URLs from base URLs
+ let filename = artifact
+ .file_name()
+ .and_then(|f| f.to_str())
+ .context("Unexpected filename")?;
+ let urls = base_urls
+ .iter()
+ .map(|base_url| {
+ let base_url = base_url.split('/').next().unwrap_or(base_url);
+ format!("{base_url}/{}", filename)
+ })
+ .collect();
+
Ok(format::Installer {
architecture,
- // TODO: fetch cdns from config
- urls: vec![],
+ urls,
size: file_size.try_into().context("Invalid file size")?,
sha256: hex::encode(checksum),
})
diff --git a/mullvad-update/meta/src/main.rs b/mullvad-update/meta/src/main.rs
index 8c3cd478a9..59d869c505 100644
--- a/mullvad-update/meta/src/main.rs
+++ b/mullvad-update/meta/src/main.rs
@@ -171,7 +171,9 @@ async fn main() -> anyhow::Result<()> {
println!("\nchanges.txt for tag {version}:\n\n-- begin\n{changes}\n--end\n\n");
for platform in all_platforms_if_empty(platforms) {
- platform.add_release(&version, &changes, rollout).await?;
+ platform
+ .add_release(&version, &changes, &config.base_urls, rollout)
+ .await?;
}
Ok(())
}
diff --git a/mullvad-update/meta/src/platform.rs b/mullvad-update/meta/src/platform.rs
index f5cae74dea..31fc145f24 100644
--- a/mullvad-update/meta/src/platform.rs
+++ b/mullvad-update/meta/src/platform.rs
@@ -248,9 +248,10 @@ impl Platform {
&self,
version: &mullvad_version::Version,
changes: &str,
+ base_urls: &[String],
rollout: f32,
) -> anyhow::Result<()> {
- let installers = self.installers(version).await?;
+ let installers = self.installers(version, base_urls).await?;
// Fetch WIP versions and verify that release does not exist
let work_path = self.work_path();
@@ -292,18 +293,28 @@ impl Platform {
async fn installers(
&self,
version: &mullvad_version::Version,
+ base_urls: &[String],
) -> anyhow::Result<Vec<format::Installer>> {
let mut installers = vec![];
let artifacts = self.artifact_filenames(version);
for artifact in artifacts.arm64_artifacts {
installers.push(
- artifacts::generate_installer_details(format::Architecture::Arm64, &artifact)
- .await?,
+ artifacts::generate_installer_details(
+ format::Architecture::Arm64,
+ base_urls,
+ &artifact,
+ )
+ .await?,
);
}
for artifact in artifacts.x86_artifacts {
installers.push(
- artifacts::generate_installer_details(format::Architecture::X86, &artifact).await?,
+ artifacts::generate_installer_details(
+ format::Architecture::X86,
+ base_urls,
+ &artifact,
+ )
+ .await?,
);
}
Ok(installers)