summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-08-29 13:25:14 +0200
committerDavid Lönnhager <david.l@mullvad.net>2025-08-29 13:25:14 +0200
commit4f03db1de3224d666cf6fc5ab255f3629435a59a (patch)
tree444c4a37a3b24f275af9131badeb06a1b109951f
parentb1390ed043db3889382da6e9b788102ee1ebeb95 (diff)
parent87f9305942b0144796837160652b9e9e9243e6bd (diff)
downloadmullvadvpn-4f03db1de3224d666cf6fc5ab255f3629435a59a.tar.xz
mullvadvpn-4f03db1de3224d666cf6fc5ab255f3629435a59a.zip
Merge branch 'linux-query-metadata-version'
-rw-r--r--installer-downloader/src/controller.rs1
-rw-r--r--mullvad-api/src/version.rs2
-rw-r--r--mullvad-update/src/client/snapshots/mullvad_update__client__api__test__http_version_provider.snap7
-rw-r--r--mullvad-update/src/snapshots/mullvad_update__version__test__version_info_empty.snap44
-rw-r--r--mullvad-update/src/version.rs36
-rw-r--r--mullvad-update/test-version-response.json9
6 files changed, 95 insertions, 4 deletions
diff --git a/installer-downloader/src/controller.rs b/installer-downloader/src/controller.rs
index 94a1a84e73..2dad0d0c90 100644
--- a/installer-downloader/src/controller.rs
+++ b/installer-downloader/src/controller.rs
@@ -215,6 +215,7 @@ where
architecture,
// For the downloader, the rollout version is always preferred
rollout: mullvad_update::version::IGNORE,
+ allow_empty: false,
// The downloader allows any version
lowest_metadata_version: mullvad_update::version::MIN_VERIFY_METADATA_VERSION,
};
diff --git a/mullvad-api/src/version.rs b/mullvad-api/src/version.rs
index ff8d647e09..a78e1d784f 100644
--- a/mullvad-api/src/version.rs
+++ b/mullvad-api/src/version.rs
@@ -85,6 +85,8 @@ impl AppVersionProxy {
let params = VersionParameters {
architecture,
rollout,
+ // NOTE: On Linux, version metadata contains no installers
+ allow_empty: cfg!(target_os = "linux"),
lowest_metadata_version,
};
diff --git a/mullvad-update/src/client/snapshots/mullvad_update__client__api__test__http_version_provider.snap b/mullvad-update/src/client/snapshots/mullvad_update__client__api__test__http_version_provider.snap
index a7266769fc..0ab318fa1f 100644
--- a/mullvad-update/src/client/snapshots/mullvad_update__client__api__test__http_version_provider.snap
+++ b/mullvad-update/src/client/snapshots/mullvad_update__client__api__test__http_version_provider.snap
@@ -6,10 +6,10 @@ snapshot_kind: text
signatures:
- keytype: ed25519
keyid: bb4ef63ffdcc6bd5a19c30cd23b9de03099407a04463418f17ae338b98aa09d4
- sig: 253ec37846dcd909bfc5119c0e0d06535767e179eb8b4465015eaa95f4bed362c8c9186311192c987871722bf7d319d44e4f04eaf79c269820bc13ff1a901f0b
+ sig: fb0f0d608f82101ca294c9150ce268c29bdaf99d4a726541e59523ef00b0d534d65cac277f1355e2838f5ac1b1f1e7013411da70049ba19a208515c67a97de06
signed:
metadata_version: 0
- metadata_expiry: "2025-07-02T15:33:00Z"
+ metadata_expiry: "2025-10-02T15:33:00Z"
releases:
- version: "2025.2"
changelog: "[macos] Adding support for quicfuscator\n[windows] Less bugs"
@@ -64,3 +64,6 @@ signed:
- "https://releases.mullvad.net/desktop/releases/2025.3-beta1/MullvadVPN-2025.3-beta1_arm64.exe"
size: 111488248
sha256: 82948D3DB5B869EE5F0D246DB557A81B72B68DFDDD2267872B7B8A5B19A05444
+ - version: "2026.10"
+ changelog: ""
+ installers: []
diff --git a/mullvad-update/src/snapshots/mullvad_update__version__test__version_info_empty.snap b/mullvad-update/src/snapshots/mullvad_update__version__test__version_info_empty.snap
new file mode 100644
index 0000000000..6c5a8fc498
--- /dev/null
+++ b/mullvad-update/src/snapshots/mullvad_update__version__test__version_info_empty.snap
@@ -0,0 +1,44 @@
+---
+source: mullvad-update/src/version.rs
+expression: info
+snapshot_kind: text
+---
+stable:
+ version: "2026.10"
+ urls: []
+ size: 0
+ changelog: ""
+ sha256:
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+ - 0
+beta: ~
diff --git a/mullvad-update/src/version.rs b/mullvad-update/src/version.rs
index 19b83aa511..94b3f52e38 100644
--- a/mullvad-update/src/version.rs
+++ b/mullvad-update/src/version.rs
@@ -22,6 +22,8 @@ pub struct VersionParameters {
pub architecture: VersionArchitecture,
/// Rollout threshold. Any version in the response below this threshold will be ignored
pub rollout: Rollout,
+ /// Allow versions without any installers to be returned
+ pub allow_empty: bool,
/// Lowest allowed `metadata_version` in the version data
/// Typically the current version plus 1
pub lowest_metadata_version: usize,
@@ -85,6 +87,16 @@ impl VersionInfo {
// Filter out dev versions
.filter(|release| !release.version.is_dev())
.flat_map(|format::Release { version, changelog, installers, .. }| {
+ if installers.is_empty() && params.allow_empty {
+ // HACK: If there are no installers (e.g. on Linux), return the version anyway
+ return Some(anyhow::Ok(Version {
+ version,
+ size: 0,
+ urls: vec![],
+ changelog,
+ sha256: [0u8; 32],
+ }));
+ }
installers
.into_iter()
// Find installer for the requested architecture (assumed to be unique)
@@ -145,6 +157,7 @@ mod test {
let params = VersionParameters {
architecture: VersionArchitecture::X86,
rollout: 1.,
+ allow_empty: false,
lowest_metadata_version: 0,
};
@@ -166,6 +179,7 @@ mod test {
let params = VersionParameters {
architecture: VersionArchitecture::Arm64,
rollout: 0.01,
+ allow_empty: false,
lowest_metadata_version: 0,
};
@@ -176,4 +190,26 @@ mod test {
Ok(())
}
+
+ /// Versions without installers should be returned if `allow_empty` is set
+ #[test]
+ fn test_version_info_empty() -> anyhow::Result<()> {
+ let response = format::SignedResponse::deserialize_insecure(include_bytes!(
+ "../test-version-response.json"
+ ))?;
+
+ let params = VersionParameters {
+ architecture: VersionArchitecture::X86,
+ rollout: 0.01,
+ allow_empty: true,
+ lowest_metadata_version: 0,
+ };
+
+ let info = VersionInfo::try_from_response(&params, response.signed)?;
+
+ // Expect: The available latest versions for x86, where the rollout is .01.
+ assert_yaml_snapshot!(info);
+
+ Ok(())
+ }
}
diff --git a/mullvad-update/test-version-response.json b/mullvad-update/test-version-response.json
index b6466e48c2..17e3c57aba 100644
--- a/mullvad-update/test-version-response.json
+++ b/mullvad-update/test-version-response.json
@@ -3,12 +3,12 @@
{
"keytype": "ed25519",
"keyid": "bb4ef63ffdcc6bd5a19c30cd23b9de03099407a04463418f17ae338b98aa09d4",
- "sig": "253ec37846dcd909bfc5119c0e0d06535767e179eb8b4465015eaa95f4bed362c8c9186311192c987871722bf7d319d44e4f04eaf79c269820bc13ff1a901f0b"
+ "sig": "fb0f0d608f82101ca294c9150ce268c29bdaf99d4a726541e59523ef00b0d534d65cac277f1355e2838f5ac1b1f1e7013411da70049ba19a208515c67a97de06"
}
],
"signed": {
"metadata_version": 0,
- "metadata_expiry": "2025-07-02T15:33:00Z",
+ "metadata_expiry": "2025-10-02T15:33:00Z",
"releases": [
{
"version": "2025.2",
@@ -98,6 +98,11 @@
"sha256": "82948D3DB5B869EE5F0D246DB557A81B72B68DFDDD2267872B7B8A5B19A05444"
}
]
+ },
+ {
+ "version": "2026.10",
+ "changelog": "",
+ "installers": []
}
]
}