Line data Source code
1 : use super::release_version::{ReleaseChannel, ReleaseVersion};
2 :
3 : /// The object keys a release is uploaded to
4 : pub struct RemotePaths {
5 : /// The channel metadata key to point to the release, e.g. `stable.json`
6 : pub channel_metadata: &'static str,
7 : /// The channel update manifest key to point to the release, e.g. `stable-update.json`
8 : pub channel_update: &'static str,
9 : /// The versioned directory of the release, `releases/<version>`
10 : pub release_directory: String,
11 : /// The key of the release metadata
12 : pub release_metadata: String,
13 : /// The key of the release update manifest
14 : pub release_update: String,
15 : /// The name of the release channel, `stable` or `latest`
16 : pub channel: &'static str,
17 : }
18 :
19 20 : pub fn derive_remote_paths(release: &ReleaseVersion) -> RemotePaths {
20 20 : let (channel, channel_metadata, channel_update) = match release.channel {
21 15 : ReleaseChannel::Stable => ("stable", "stable.json", "stable-update.json"),
22 5 : ReleaseChannel::Latest => ("latest", "latest.json", "latest-update.json"),
23 : };
24 20 : let release_directory = format!("releases/{}", release.version.to_string());
25 20 : let release_metadata = format!("{}/{}", &release_directory, "metadata.json");
26 20 : let release_update = format!("{}/{}", &release_directory, "update.json");
27 20 : RemotePaths {
28 20 : channel_metadata,
29 20 : channel_update,
30 20 : release_directory,
31 20 : release_metadata,
32 20 : release_update,
33 20 : channel,
34 20 : }
35 20 : }
36 :
37 35 : pub fn electron_channel_manifest(channel: &str, arch: &str) -> String {
38 35 : format!("channels/{}/macos/{}/latest-mac.yml", channel, arch)
39 35 : }
40 :
41 : #[cfg(test)]
42 : mod tests {
43 : use super::*;
44 :
45 : #[test]
46 1 : fn architecture_specific_electron_feed() {
47 1 : assert_eq!(electron_channel_manifest("stable", "arm64"), "channels/stable/macos/arm64/latest-mac.yml");
48 1 : assert_eq!(electron_channel_manifest("latest", "x64"), "channels/latest/macos/x64/latest-mac.yml");
49 1 : }
50 :
51 2 : fn release(version: &str, channel: ReleaseChannel) -> ReleaseVersion {
52 2 : ReleaseVersion { version: semver::Version::parse(version).unwrap(), id: uuid::Uuid::nil(), channel }
53 2 : }
54 :
55 : #[test]
56 1 : fn a_stable_release_only_moves_the_stable_channel() {
57 1 : let paths = derive_remote_paths(&release("1.2.3", ReleaseChannel::Stable));
58 1 : assert_eq!(paths.channel, "stable");
59 1 : assert_eq!(paths.channel_metadata, "stable.json");
60 1 : assert_eq!(paths.channel_update, "stable-update.json");
61 1 : assert_eq!(paths.release_directory, "releases/1.2.3");
62 1 : assert_eq!(paths.release_metadata, "releases/1.2.3/metadata.json");
63 1 : assert_eq!(paths.release_update, "releases/1.2.3/update.json");
64 1 : }
65 :
66 : #[test]
67 1 : fn a_prerelease_only_moves_the_latest_channel() {
68 1 : let paths = derive_remote_paths(&release("1.2.4-dev.3", ReleaseChannel::Latest));
69 1 : assert_eq!(paths.channel, "latest");
70 1 : assert_eq!(paths.channel_metadata, "latest.json");
71 1 : assert_eq!(paths.channel_update, "latest-update.json");
72 1 : assert_eq!(paths.release_directory, "releases/1.2.4-dev.3");
73 1 : }
74 : }
|