diff --git a/cargo-dist-schema/src/lib.rs b/cargo-dist-schema/src/lib.rs index 6bcb6f2d6..c657a091c 100644 --- a/cargo-dist-schema/src/lib.rs +++ b/cargo-dist-schema/src/lib.rs @@ -39,6 +39,11 @@ impl TripleNameRef { self.0.contains("linux") } + /// Returns true if this target triple contains the word "freebsd" + pub fn is_freebsd(&self) -> bool { + self.0.contains("freebsd") + } + /// Returns true if this target triple contains the word "apple" pub fn is_apple(&self) -> bool { self.0.contains("apple") diff --git a/cargo-dist/src/backend/ci/github.rs b/cargo-dist/src/backend/ci/github.rs index 55bfb01d4..7b126c448 100644 --- a/cargo-dist/src/backend/ci/github.rs +++ b/cargo-dist/src/backend/ci/github.rs @@ -688,6 +688,13 @@ fn github_runner_for_target( } else { runner_to_config(GithubRunnerRef::from_str("windows-2022")) } + }, + OperatingSystem::Freebsd => { + if target_triple.architecture == Architecture::X86_64 { + runner_to_config(GithubRunnerRef::from_str("ubuntu-latest")) + } else { + return Ok(None); + } } _ => return Ok(None), }); @@ -744,6 +751,9 @@ fn system_deps_install_script( let mut chocolatey_packages: SortedSet<(ChocolateyPackageName, Option)> = Default::default(); + let binstall_needed = targets.iter().any(|t| t.is_freebsd()); + + let mut lines = Vec::::new(); let host = rc.real_triple(); match host.operating_system { OperatingSystem::Darwin(_) => { @@ -755,9 +765,16 @@ fn system_deps_install_script( continue; } brew_packages.insert(name.clone()); + if binstall_needed { + brew_packages.insert(HomebrewPackageName::new("cargo-binstall".to_string())); + } } } - OperatingSystem::Linux => { + // We can use Freebsd here because it is getting cross-compiled from Linux + OperatingSystem::Freebsd | OperatingSystem::Linux => { + if binstall_needed { + lines.push("curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash;".to_string()); + } // We currently don't support non-apt package managers on Linux // is_none() means a native build, probably on GitHub's // apt-using runners. @@ -786,6 +803,9 @@ fn system_deps_install_script( } } OperatingSystem::Windows => { + if binstall_needed { + lines.push("Set-ExecutionPolicy Unrestricted -Scope Process; iex (iwr \"https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.ps1\").Content".to_string()); + } for (name, pkg) in &packages.chocolatey { if !pkg.0.stage_wanted(&DependencyKind::Build) { continue; @@ -804,7 +824,6 @@ fn system_deps_install_script( } } - let mut lines = vec![]; if !brew_packages.is_empty() { lines.push(brew_bundle_command(brew_packages.iter())) } @@ -852,6 +871,11 @@ fn system_deps_install_script( pip_pkgs.insert(PipPackageName::new("cargo-xwin".to_owned())); } + let mut cargo_binstall_pkgs: SortedSet = Default::default(); + if required_wrappers.contains(&CargoBuildWrapper::Cross) { + cargo_binstall_pkgs.insert("cross".to_string()); + } + if !pip_pkgs.is_empty() { let push_pip_install_lines = |lines: &mut Vec| { if host.operating_system == OperatingSystem::Linux { @@ -890,6 +914,12 @@ fn system_deps_install_script( } } + if !cargo_binstall_pkgs.is_empty() { + // lines.push() + let to_install_packages = cargo_binstall_pkgs.into_iter().join(" "); + lines.push(format!("cargo binstall {to_install_packages}")) + } + Ok(if lines.is_empty() { None } else { diff --git a/cargo-dist/src/backend/ci/mod.rs b/cargo-dist/src/backend/ci/mod.rs index 16bb5fc78..22fb614e6 100644 --- a/cargo-dist/src/backend/ci/mod.rs +++ b/cargo-dist/src/backend/ci/mod.rs @@ -63,7 +63,7 @@ pub trait InstallStrategy { /// Return the right install method for a given set of targets fn for_triple(&self, triple: &Triple) -> GhaRunStep { match triple.operating_system { - OperatingSystem::Linux | OperatingSystem::Darwin(_) => self.dash(), + OperatingSystem::Freebsd | OperatingSystem::Linux | OperatingSystem::Darwin(_) => self.dash(), OperatingSystem::Windows => self.powershell(), _ => panic!("unsupported host triple {triple}"), } diff --git a/cargo-dist/src/build/cargo.rs b/cargo-dist/src/build/cargo.rs index 06f1dfde8..fb1511b38 100644 --- a/cargo-dist/src/build/cargo.rs +++ b/cargo-dist/src/build/cargo.rs @@ -169,7 +169,7 @@ pub fn make_build_cargo_target_command( rustflags: &str, step: &CargoBuildStep, auditable: bool, -) -> DistResult { +) -> DistResult<(Cmd, Option)> { let target: Triple = step.target_triple.parse()?; eprint!("building {target} target"); @@ -186,9 +186,11 @@ pub fn make_build_cargo_target_command( if auditable { command.arg("auditable"); } - match wrapper { + let wrapper = match wrapper { None => { command.arg("build"); + + None } Some(CargoBuildWrapper::ZigBuild) => { if auditable { @@ -198,6 +200,8 @@ pub fn make_build_cargo_target_command( }); } command.arg("zigbuild"); + + Some(CargoBuildWrapper::ZigBuild) } Some(CargoBuildWrapper::Xwin) => { // cf. @@ -205,12 +209,20 @@ pub fn make_build_cargo_target_command( Architecture::X86_32(_) => "x86", Architecture::X86_64 => "x86_64", Architecture::Aarch64(_) => "aarch64", - _ => panic!("cargo-xwin doesn't support {target} because of its architecture",), + _ => panic!("cargo-xwin doesn't support {target} because of its architecture", ), }; command.env("XWIN_ARCH", arch); command.arg("xwin").arg("build"); + + Some(CargoBuildWrapper::Xwin) } - } + Some(CargoBuildWrapper::Cross) => { + command = Cmd::new("cross", "Cross compile using cross."); + command.arg("build"); + + Some(CargoBuildWrapper::Cross) + } + }; command .arg("--profile") .arg(&step.profile) @@ -249,7 +261,7 @@ pub fn make_build_cargo_target_command( } } - Ok(command) + Ok((command, wrapper)) } /// Build a cargo target @@ -273,7 +285,7 @@ pub fn build_cargo_target( let auditable = dist_graph.config.builds.cargo.cargo_auditable; let host = dist_schema::target_lexicon::HOST; - let mut command = + let (mut command, wrapper) = make_build_cargo_target_command(&host, &cargo.cmd, &rustflags, step, auditable)?; // If we generated any extra environment variables to @@ -298,7 +310,7 @@ pub fn build_cargo_target( match message { cargo_metadata::Message::CompilerArtifact(artifact) => { // Hey we got some files, record that fact - expected.found_bins(artifact.package_id.to_string(), artifact.filenames); + expected.found_bins(artifact.package_id.to_string(), artifact.filenames, wrapper); } _ => { // Nothing else interesting? @@ -334,7 +346,6 @@ fn determine_brew_rustflags(base_rustflags: &str, environment: &SortedMap<&str, #[cfg(test)] mod tests { - use super::make_build_cargo_target_command; use crate::platform::targets; use crate::tasks::{CargoTargetFeatureList, CargoTargetFeatures, CargoTargetPackages}; @@ -360,14 +371,14 @@ mod tests { working_dir: ".".to_string().into(), // this feels mildly cursed -duckinator. }; - let cmd = make_build_cargo_target_command( + let (cmd, _) = make_build_cargo_target_command( &step.target_triple.parse().unwrap(), &cargo_cmd, &rustflags, &step, auditable, ) - .unwrap(); + .unwrap(); let mut args = cmd.inner.get_args(); @@ -395,7 +406,7 @@ mod tests { working_dir: ".".to_string().into(), // this feels mildly cursed -duckinator. }; - let cmd = make_build_cargo_target_command( + let (cmd, _) = make_build_cargo_target_command( &step.target_triple.parse().unwrap(), &cargo_cmd, &rustflags, diff --git a/cargo-dist/src/build/fake.rs b/cargo-dist/src/build/fake.rs index ccf778856..a36345c1b 100644 --- a/cargo-dist/src/build/fake.rs +++ b/cargo-dist/src/build/fake.rs @@ -50,7 +50,7 @@ fn build_fake_binaries( let real_fake_bin = tempdir.join(&binary.file_name); let package_id = super::package_id_string(binary.pkg_id.as_ref()); LocalAsset::write_new_all("", &real_fake_bin)?; - expectations.found_bins(package_id, vec![real_fake_bin]); + expectations.found_bins(package_id, vec![real_fake_bin], None); } expectations.process_bins(dist, manifest)?; diff --git a/cargo-dist/src/build/generic.rs b/cargo-dist/src/build/generic.rs index c69bd66b7..52cbd5a52 100644 --- a/cargo-dist/src/build/generic.rs +++ b/cargo-dist/src/build/generic.rs @@ -233,7 +233,7 @@ pub fn build_generic_target( for binary_idx in &target.expected_binaries { let binary = dist_graph.binary(*binary_idx); let src_path = target.out_dir.join(&binary.file_name); - expected.found_bins(package_id_string(binary.pkg_id.as_ref()), vec![src_path]); + expected.found_bins(package_id_string(binary.pkg_id.as_ref()), vec![src_path], None); } // Check and process the binaries diff --git a/cargo-dist/src/build/mod.rs b/cargo-dist/src/build/mod.rs index 71c36baed..be1654814 100644 --- a/cargo-dist/src/build/mod.rs +++ b/cargo-dist/src/build/mod.rs @@ -5,10 +5,7 @@ use camino::Utf8PathBuf; use dist_schema::{AssetInfo, DistManifest, TripleNameRef}; use tracing::info; -use crate::{ - copy_file, linkage::determine_linkage, Binary, BinaryIdx, BinaryKind, DistError, DistGraph, - DistResult, SortedMap, -}; +use crate::{copy_file, linkage::determine_linkage, Binary, BinaryIdx, BinaryKind, CargoBuildWrapper, DistError, DistGraph, DistResult, SortedMap}; pub mod cargo; pub mod fake; @@ -89,7 +86,7 @@ impl BuildExpectations { /// /// NOTE: it is correct/expected to hand this a bunch of random paths to things /// that vaguely might be what we want, assuming it knows how to pick the right ones out. - pub fn found_bins(&mut self, pkg_id: String, filenames: Vec) { + pub fn found_bins(&mut self, pkg_id: String, filenames: Vec, wrapper: Option) { // The files we're given by cargo are one big mush of // the executables, libraries, symbols, etc. // Try to partition this into what's probably symbols @@ -111,7 +108,16 @@ impl BuildExpectations { // of feature resolution), this can produce a bunch of binaries for examples or // packages you don't care about, which cargo/rustc will happily report back to us, // and we need to be aware enough to throw those irrelevant results out. - for src_path in maybe_bins { + for mut src_path in maybe_bins { + // Due to cross being docker based we get a weird absolute path back from the analytics + // that starts with `/target`. + // To handle these kinds of path we simply convert them to relative path. + if wrapper.eq(&Some(CargoBuildWrapper::Cross)) && src_path.starts_with("/target") { + if let Ok(path) = src_path.strip_prefix("/") { + src_path = Utf8PathBuf::from(path); + } + } + info!("got a new binary: {}", src_path); // lookup the binary in the package diff --git a/cargo-dist/src/lib.rs b/cargo-dist/src/lib.rs index d615cacb0..ea3b0aa9a 100644 --- a/cargo-dist/src/lib.rs +++ b/cargo-dist/src/lib.rs @@ -73,6 +73,7 @@ pub fn do_env_test(cfg: &Config) -> DistResult<()> { let need_omnibor = builds.omnibor; let mut need_xwin = false; let mut need_zigbuild = false; + let mut need_cross = false; let tools = dist.tools; let host = tools.host_target.parse()?; @@ -95,6 +96,9 @@ pub fn do_env_test(cfg: &Config) -> DistResult<()> { Some(CargoBuildWrapper::ZigBuild) => { need_zigbuild = true; } + Some(CargoBuildWrapper::Cross) => { + need_cross = true; + } None => {} } } @@ -111,6 +115,7 @@ pub fn do_env_test(cfg: &Config) -> DistResult<()> { need_omnibor.then(|| tools.omnibor()), need_xwin.then(|| tools.cargo_xwin()), need_zigbuild.then(|| tools.cargo_zigbuild()), + need_cross.then(|| tools.cargo_cross()), ]; // Drop `None`s, then extract the values from the remaining `Option`s. @@ -990,5 +995,6 @@ pub fn known_desktop_targets() -> Vec { t::TARGET_ARM64_MAC.to_owned(), t::TARGET_ARM64_LINUX_GNU.to_owned(), t::TARGET_ARM64_WINDOWS.to_owned(), + t::TARGET_X64_FREEBSD.to_owned(), ] } diff --git a/cargo-dist/src/linkage.rs b/cargo-dist/src/linkage.rs index 22c447033..59ebeb948 100644 --- a/cargo-dist/src/linkage.rs +++ b/cargo-dist/src/linkage.rs @@ -395,7 +395,7 @@ pub fn determine_linkage(path: &Utf8PathBuf, target: &TripleNameRef) -> Linkage fn try_determine_linkage(path: &Utf8PathBuf, target: &TripleNameRef) -> DistResult { let libraries = if target.is_darwin() { do_otool(path)? - } else if target.is_linux() { + } else if target.is_linux() || target.is_freebsd() { // Currently can only be run on Linux if std::env::consts::OS != "linux" { return Err(DistError::LinkageCheckInvalidOS { diff --git a/cargo-dist/src/platform/github_runners.rs b/cargo-dist/src/platform/github_runners.rs index d039b540b..272591d0f 100644 --- a/cargo-dist/src/platform/github_runners.rs +++ b/cargo-dist/src/platform/github_runners.rs @@ -40,6 +40,9 @@ lazy_static::lazy_static! { m.insert(GithubRunnerRef::from_str("macos-latest"), t::TARGET_ARM64_MAC); m.insert(GithubRunnerRef::from_str("macos-latest-xlarge"), t::TARGET_ARM64_MAC); + //-------- FreeBSD + m.insert(GithubRunnerRef::from_str("ubuntu-latest"), t::TARGET_X64_FREEBSD); + m }; } diff --git a/cargo-dist/src/tasks/mod.rs b/cargo-dist/src/tasks/mod.rs index 5488cd7b3..17322eec1 100644 --- a/cargo-dist/src/tasks/mod.rs +++ b/cargo-dist/src/tasks/mod.rs @@ -289,6 +289,8 @@ pub struct Tools { pub cargo_xwin: Option, /// cargo-zigbuild, for some cross builds pub cargo_zigbuild: Option, + /// cargo-cross, for some cross builds + pub cargo_cross: Option, } impl Tools { @@ -333,6 +335,13 @@ impl Tools { tool: "cargo-zigbuild".to_owned(), }) } + + /// Returns cargo-cross info or an error + pub fn cargo_cross(&self) -> DistResult<&Tool> { + self.cargo_cross.as_ref().ok_or(DistError::ToolMissing { + tool: "cargo-cross".to_owned(), + }) + } } /// Info about the cargo toolchain we're using @@ -468,6 +477,10 @@ pub enum CargoBuildWrapper { /// Run 'cargo xwin' to cross-compile, e.g. from `aarch64-apple-darwin` to `x86_64-pc-windows-msvc` /// cf. Xwin, + + /// Run 'cargo cross' to cross-compile, e.g. from `x86_64-unknown-linux-gnu` to `x86_64-unknown-freebsd` + /// cf. + Cross, } impl std::fmt::Display for CargoBuildWrapper { @@ -475,6 +488,7 @@ impl std::fmt::Display for CargoBuildWrapper { f.pad(match self { CargoBuildWrapper::ZigBuild => "cargo-zigbuild", CargoBuildWrapper::Xwin => "cargo-xwin", + CargoBuildWrapper::Cross => "cargo-cross", }) } } @@ -511,7 +525,7 @@ pub fn build_wrapper_for_cross( OperatingSystem::Linux | OperatingSystem::Darwin(_) | OperatingSystem::Windows => { // zigbuild works for e.g. x86_64-unknown-linux-gnu => aarch64-unknown-linux-gnu Ok(Some(CargoBuildWrapper::ZigBuild)) - } + }, _ => { Err(DistError::UnsupportedCrossCompile { host: host.clone(), @@ -538,6 +552,9 @@ pub fn build_wrapper_for_cross( }) } }, + OperatingSystem::Freebsd => { + Ok(Some(CargoBuildWrapper::Cross)) + }, _ => { Err(DistError::UnsupportedCrossCompile { host: host.clone(), @@ -1462,7 +1479,7 @@ impl<'pkg_graph> DistGraphBuilder<'pkg_graph> { if target_is_windows { platform_lib_ext = ".dll"; platform_staticlib_ext = ".lib"; - } else if target.is_linux() { + } else if target.is_linux() || target.is_freebsd(){ platform_lib_ext = ".so"; platform_staticlib_ext = ".a"; } else if target.is_darwin() { @@ -3280,6 +3297,7 @@ fn tool_info() -> DistResult { cargo_cyclonedx: find_cargo_subcommand("cargo", "cyclonedx", "--version"), cargo_xwin: find_cargo_subcommand("cargo", "xwin", "--version"), cargo_zigbuild: find_tool("cargo-zigbuild", "--version"), + cargo_cross: find_tool("cross", "--version"), }) } diff --git a/cargo-dist/src/tests/mock.rs b/cargo-dist/src/tests/mock.rs index 24cb9f293..589c087fc 100644 --- a/cargo-dist/src/tests/mock.rs +++ b/cargo-dist/src/tests/mock.rs @@ -88,6 +88,7 @@ pub fn mock_tools() -> Tools { cargo_cyclonedx: None, cargo_xwin: None, cargo_zigbuild: None, + cargo_cross: None, } } diff --git a/cargo-dist/tests/integration-tests.rs b/cargo-dist/tests/integration-tests.rs index 43b472522..b61dec5db 100644 --- a/cargo-dist/tests/integration-tests.rs +++ b/cargo-dist/tests/integration-tests.rs @@ -1946,7 +1946,7 @@ fn axolotlsay_cross1() -> Result<(), miette::Report> { [workspace.metadata.dist] cargo-dist-version = "{dist_version}" installers = ["shell", "powershell"] -targets = ["x86_64-unknown-linux-gnu", "aarch64-unknown-linux-gnu", "x86_64-apple-darwin", "aarch64-apple-darwin", "x86_64-pc-windows-msvc", "aarch64-pc-windows-msvc"] +targets = ["x86_64-unknown-linux-gnu", "aarch64-unknown-linux-gnu", "x86_64-apple-darwin", "aarch64-apple-darwin", "x86_64-pc-windows-msvc", "aarch64-pc-windows-msvc", "x86_64-unknown-freebsd"] ci = ["github"] unix-archive = ".tar.gz" windows-archive = ".tar.gz" diff --git a/cargo-dist/tests/snapshots/axolotlsay_cross1.snap b/cargo-dist/tests/snapshots/axolotlsay_cross1.snap index 8c95322e3..b15e90718 100644 --- a/cargo-dist/tests/snapshots/axolotlsay_cross1.snap +++ b/cargo-dist/tests/snapshots/axolotlsay_cross1.snap @@ -267,6 +267,18 @@ download_binary_and_run_installer() { _updater_name="" _updater_bin="" ;; + "axolotlsay-x86_64-unknown-freebsd.tar.gz") + _arch="x86_64-unknown-freebsd" + _zip_ext=".tar.gz" + _bins="axolotlsay" + _bins_js_array='"axolotlsay"' + _libs="" + _libs_js_array="" + _staticlibs="" + _staticlibs_js_array="" + _updater_name="" + _updater_bin="" + ;; "axolotlsay-x86_64-unknown-linux-gnu.tar.gz") _arch="x86_64-unknown-linux-gnu" _zip_ext=".tar.gz" @@ -404,6 +416,9 @@ json_binary_aliases() { "x86_64-pc-windows-gnu") echo '{}' ;; + "x86_64-unknown-freebsd") + echo '{}' + ;; "x86_64-unknown-linux-gnu") echo '{}' ;; @@ -453,6 +468,13 @@ aliases_for_binary() { ;; esac ;; + "x86_64-unknown-freebsd") + case "$_bin" in + *) + echo "" + ;; + esac + ;; "x86_64-unknown-linux-gnu") case "$_bin" in *) @@ -535,6 +557,13 @@ select_archive_for_arch() { return 0 fi ;; + "x86_64-unknown-freebsd") + _archive="axolotlsay-x86_64-unknown-freebsd.tar.gz" + if [ -n "$_archive" ]; then + echo "$_archive" + return 0 + fi + ;; "x86_64-unknown-linux-gnu") _archive="axolotlsay-x86_64-unknown-linux-gnu.tar.gz" if ! check_glibc "2" "31"; then @@ -2191,7 +2220,7 @@ CENSORED (see https://github.com/axodotdev/cargo-dist/issues/1477) source.tar.g "announcement_is_prerelease": false, "announcement_title": "Version 0.2.2", "announcement_changelog": "```text\n +----------------------------------+\n | now with arm64 linux binaries!!! |\n +----------------------------------+\n /\n≽(◕ ᴗ ◕)≼\n```", - "announcement_github_body": "## Release Notes\n\n```text\n +----------------------------------+\n | now with arm64 linux binaries!!! |\n +----------------------------------+\n /\n≽(◕ ᴗ ◕)≼\n```\n\n## Install axolotlsay 0.2.2\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-installer.ps1 | iex\"\n```\n\n## Download axolotlsay 0.2.2\n\n| File | Platform | Checksum |\n|--------|----------|----------|\n| [axolotlsay-aarch64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-x86_64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-aarch64-pc-windows-msvc.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-pc-windows-msvc.tar.gz) | ARM64 Windows | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-pc-windows-msvc.tar.gz.sha256) |\n| [axolotlsay-x86_64-pc-windows-msvc.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-pc-windows-msvc.tar.gz) | x64 Windows | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256) |\n| [axolotlsay-aarch64-unknown-linux-gnu.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [axolotlsay-x86_64-unknown-linux-gnu.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n\n", + "announcement_github_body": "## Release Notes\n\n```text\n +----------------------------------+\n | now with arm64 linux binaries!!! |\n +----------------------------------+\n /\n≽(◕ ᴗ ◕)≼\n```\n\n## Install axolotlsay 0.2.2\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-installer.ps1 | iex\"\n```\n\n## Download axolotlsay 0.2.2\n\n| File | Platform | Checksum |\n|--------|----------|----------|\n| [axolotlsay-aarch64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-x86_64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-aarch64-pc-windows-msvc.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-pc-windows-msvc.tar.gz) | ARM64 Windows | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-pc-windows-msvc.tar.gz.sha256) |\n| [axolotlsay-x86_64-pc-windows-msvc.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-pc-windows-msvc.tar.gz) | x64 Windows | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256) |\n| [axolotlsay-x86_64-unknown-freebsd.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-unknown-freebsd.tar.gz) | x64 FreeBSD | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-unknown-freebsd.tar.gz.sha256) |\n| [axolotlsay-aarch64-unknown-linux-gnu.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [axolotlsay-x86_64-unknown-linux-gnu.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n\n", "releases": [ { "app_name": "axolotlsay", @@ -2226,6 +2255,8 @@ CENSORED (see https://github.com/axodotdev/cargo-dist/issues/1477) source.tar.g "axolotlsay-x86_64-apple-darwin.tar.gz.sha256", "axolotlsay-x86_64-pc-windows-msvc.tar.gz", "axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256", + "axolotlsay-x86_64-unknown-freebsd.tar.gz", + "axolotlsay-x86_64-unknown-freebsd.tar.gz.sha256", "axolotlsay-x86_64-unknown-linux-gnu.tar.gz", "axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256" ], @@ -2390,6 +2421,7 @@ CENSORED (see https://github.com/axodotdev/cargo-dist/issues/1477) source.tar.g "aarch64-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-gnu", + "x86_64-unknown-freebsd", "x86_64-unknown-linux-gnu" ], "install_hint": "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/axolotlsay/releases/download/v0.2.2/axolotlsay-installer.sh | sh", @@ -2481,6 +2513,49 @@ CENSORED (see https://github.com/axodotdev/cargo-dist/issues/1477) source.tar.g "x86_64-pc-windows-msvc" ] }, + "axolotlsay-x86_64-unknown-freebsd.tar.gz": { + "name": "axolotlsay-x86_64-unknown-freebsd.tar.gz", + "kind": "executable-zip", + "target_triples": [ + "x86_64-unknown-freebsd" + ], + "assets": [ + { + "name": "CHANGELOG.md", + "path": "CHANGELOG.md", + "kind": "changelog" + }, + { + "name": "LICENSE-APACHE", + "path": "LICENSE-APACHE", + "kind": "license" + }, + { + "name": "LICENSE-MIT", + "path": "LICENSE-MIT", + "kind": "license" + }, + { + "name": "README.md", + "path": "README.md", + "kind": "readme" + }, + { + "id": "axolotlsay-x86_64-unknown-freebsd-exe-axolotlsay", + "name": "axolotlsay", + "path": "axolotlsay", + "kind": "executable" + } + ], + "checksum": "axolotlsay-x86_64-unknown-freebsd.tar.gz.sha256" + }, + "axolotlsay-x86_64-unknown-freebsd.tar.gz.sha256": { + "name": "axolotlsay-x86_64-unknown-freebsd.tar.gz.sha256", + "kind": "checksum", + "target_triples": [ + "x86_64-unknown-freebsd" + ] + }, "axolotlsay-x86_64-unknown-linux-gnu.tar.gz": { "name": "axolotlsay-x86_64-unknown-linux-gnu.tar.gz", "kind": "executable-zip", @@ -2629,6 +2704,20 @@ CENSORED (see https://github.com/axodotdev/cargo-dist/issues/1477) source.tar.g "packages_install": "if ! command -v cargo-xwin > /dev/null 2>&1; then\n if ! command -v pip3 > /dev/null 2>&1; then\n dnf install --assumeyes python3-pip\n pip3 install --upgrade pip\n fi\n pip3 install cargo-xwin\nfi", "cache_provider": "github" }, + { + "runner": "ubuntu-latest", + "host": "x86_64-unknown-freebsd", + "install_dist": { + "shell": "sh", + "run": "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/vSOME_VERSION/cargo-dist-installer.sh | sh" + }, + "dist_args": "--artifacts=local --target=x86_64-unknown-freebsd", + "targets": [ + "x86_64-unknown-freebsd" + ], + "packages_install": "curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash;", + "cache_provider": "github" + }, { "runner": "ubuntu-22.04", "host": "x86_64-unknown-linux-gnu",