mirror of
https://github.com/taiki-e/install-action.git
synced 2026-05-10 14:40:32 +00:00
codegen: Sort releases returned from GitHub API
This commit is contained in:
@@ -40,7 +40,7 @@ fn main() -> Result<()> {
|
|||||||
.strip_prefix("https://github.com/")
|
.strip_prefix("https://github.com/")
|
||||||
.context("repository must be starts with https://github.com/")?;
|
.context("repository must be starts with https://github.com/")?;
|
||||||
|
|
||||||
eprintln!("downloading releases of https://github.com/{repo}");
|
eprintln!("downloading releases of https://github.com/{repo} from https://api.github.com/repos/{repo}/releases");
|
||||||
let mut releases: github::Releases = vec![];
|
let mut releases: github::Releases = vec![];
|
||||||
// GitHub API returns up to 100 results at a time. If the number of releases
|
// GitHub API returns up to 100 results at a time. If the number of releases
|
||||||
// is greater than 100, multiple fetches are needed.
|
// is greater than 100, multiple fetches are needed.
|
||||||
@@ -56,13 +56,17 @@ fn main() -> Result<()> {
|
|||||||
}
|
}
|
||||||
releases.append(&mut r);
|
releases.append(&mut r);
|
||||||
}
|
}
|
||||||
let releases: Vec<_> = releases
|
let releases: BTreeMap<_, _> = releases
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|release| {
|
.filter_map(|release| {
|
||||||
release
|
let version = release.tag_name.strip_prefix(&base_info.tag_prefix)?;
|
||||||
.tag_name
|
let mut semver_version = version.parse::<semver::Version>();
|
||||||
.strip_prefix(&base_info.tag_prefix)
|
if semver_version.is_err() {
|
||||||
.map(|version| (version, release))
|
if let Some(default_major_version) = &base_info.default_major_version {
|
||||||
|
semver_version = format!("{default_major_version}.{version}").parse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some((Reverse(semver_version.ok()?), (version, release)))
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
@@ -112,13 +116,15 @@ fn main() -> Result<()> {
|
|||||||
ManifestRef::Real(_) => &m.0 .0,
|
ManifestRef::Real(_) => &m.0 .0,
|
||||||
};
|
};
|
||||||
if !manifests.map.is_empty()
|
if !manifests.map.is_empty()
|
||||||
&& *version == releases.first().unwrap().0.parse()?
|
&& *version >= releases.first_key_value().unwrap().0 .0.clone().into()
|
||||||
{
|
{
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(format!("={}", releases.first().unwrap().0).parse()?)
|
let req = format!("={}", releases.first_key_value().unwrap().0 .0).parse()?;
|
||||||
|
eprintln!("update manifest for versions '{req}'");
|
||||||
|
Some(req)
|
||||||
}
|
}
|
||||||
None => match base_info.version_range {
|
None => match base_info.version_range {
|
||||||
Some(version_range) => Some(version_range.parse()?),
|
Some(version_range) => Some(version_range.parse()?),
|
||||||
@@ -137,7 +143,7 @@ fn main() -> Result<()> {
|
|||||||
|
|
||||||
let req = if version_req == "latest" {
|
let req = if version_req == "latest" {
|
||||||
if manifests.map.is_empty() {
|
if manifests.map.is_empty() {
|
||||||
format!("={}", releases.first().unwrap().0).parse()?
|
format!("={}", releases.first_key_value().unwrap().0 .0).parse()?
|
||||||
} else {
|
} else {
|
||||||
format!(">{}", semver_versions.last().unwrap()).parse()?
|
format!(">{}", semver_versions.last().unwrap()).parse()?
|
||||||
}
|
}
|
||||||
@@ -150,18 +156,9 @@ fn main() -> Result<()> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let mut buf = vec![];
|
let mut buf = vec![];
|
||||||
for &(version, release) in &releases {
|
for (Reverse(semver_version), (version, release)) in &releases {
|
||||||
let mut semver_version = version.parse::<semver::Version>();
|
|
||||||
if semver_version.is_err() {
|
|
||||||
if let Some(default_major_version) = &base_info.default_major_version {
|
|
||||||
semver_version = format!("{default_major_version}.{version}").parse();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let Ok(semver_version) = semver_version else {
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
if let Some(version_req) = &version_req {
|
if let Some(version_req) = &version_req {
|
||||||
if !version_req.matches(&semver_version) {
|
if !version_req.matches(semver_version) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user