fix(ubi): URL syntax fails (#4859)

As discussed in #4856
This commit is contained in:
Roland Schaer 2025-04-16 13:33:03 -03:00 committed by GitHub
parent f47c0f4a89
commit 8aa1417ae1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 18 deletions

View File

@ -5,6 +5,12 @@ assert "mise x ubi:goreleaser/goreleaser@v1.25.0 -- goreleaser -v | grep -o 1.25
mise use ubi:kellyjonbrazil/jc@1.25.3 mise use ubi:kellyjonbrazil/jc@1.25.3
assert_contains "$MISE_DATA_DIR/shims/jc --version" "jc version: 1.25.3" assert_contains "$MISE_DATA_DIR/shims/jc --version" "jc version: 1.25.3"
# only run on linux/amd64
if [ "$(uname -m)" = "x86_64" ] && [ "$(uname -s)" = "Linux" ]; then
mise use ubi:https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz[exe=ffmpeg]
assert_contains "$MISE_DATA_DIR/shims/ffmpeg -version" "ffmpeg version"
fi
cat <<EOF >mise.toml cat <<EOF >mise.toml
[tools] [tools]
"ubi:cilium/cilium-cli" = { version = "latest", exe = "cilium" } "ubi:cilium/cilium-cli" = { version = "latest", exe = "cilium" }

View File

@ -120,32 +120,37 @@ impl Backend for UbiBackend {
let extract_all = opts.get("extract_all").is_some_and(|v| v == "true"); let extract_all = opts.get("extract_all").is_some_and(|v| v == "true");
let bin_dir = tv.install_path(); let bin_dir = tv.install_path();
let release: Result<_, eyre::Report> = match forge { if !name_is_url(&self.tool_name()) {
ForgeType::GitHub => { let release: Result<_, eyre::Report> = match forge {
github::get_release_for_url(api_url, &self.tool_name(), &v).map(|_| "github") ForgeType::GitHub => {
github::get_release_for_url(api_url, &self.tool_name(), &v).map(|_| "github")
}
ForgeType::GitLab => {
gitlab::get_release_for_url(api_url, &self.tool_name(), &v).map(|_| "gitlab")
}
};
if let Err(err) = release {
// this can fail with a rate limit error or 404, either way, try prefixing and if it fails, try without the prefix
// if http::error_code(&err) == Some(404) {
debug!(
"Failed to get release for {}, trying with 'v' prefix: {}",
tv, err
);
v = format!("v{v}");
// }
} }
ForgeType::GitLab => {
gitlab::get_release_for_url(api_url, &self.tool_name(), &v).map(|_| "gitlab")
}
};
if let Err(err) = release {
// this can fail with a rate limit error or 404, either way, try prefixing and if it fails, try without the prefix
// if http::error_code(&err) == Some(404) {
debug!(
"Failed to get release for {}, trying with 'v' prefix: {}",
tv, err
);
v = format!("v{v}");
// }
} }
let install = |v: &str| { let install = |v: &str| {
// Workaround because of not knowing how to pull out the value correctly without quoting // Workaround because of not knowing how to pull out the value correctly without quoting
let name = self.tool_name(); let name = self.tool_name();
let mut builder = UbiBuilder::new().project(&name).install_dir(&bin_dir); let mut builder = UbiBuilder::new().install_dir(&bin_dir);
if v != "latest" { if name_is_url(&name) {
builder = builder.url(&name);
} else {
builder = builder.project(&name);
builder = builder.tag(v); builder = builder.tag(v);
} }