From 579014dce30e8de4aaa8c63c7a38efae90fe5cae Mon Sep 17 00:00:00 2001 From: Will Chandler Date: Wed, 18 Jun 2025 10:10:46 -0400 Subject: [PATCH 1/4] Bump version --- Cargo.lock | 6 +++--- Cargo.toml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 59111d60c..b80639539 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -397,7 +397,7 @@ dependencies = [ [[package]] name = "axoproject" -version = "1.0.1" +version = "1.0.2" dependencies = [ "axoasset", "axoprocess", @@ -1130,7 +1130,7 @@ dependencies = [ [[package]] name = "dist" -version = "1.0.1" +version = "1.0.2" dependencies = [ "axoasset", "axocli", @@ -1181,7 +1181,7 @@ dependencies = [ [[package]] name = "dist-schema" -version = "1.0.1" +version = "1.0.2" dependencies = [ "camino", "gazenot", diff --git a/Cargo.toml b/Cargo.toml index a8e8565b5..41dd5df3b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,13 +18,13 @@ edition = "2021" license = "MIT OR Apache-2.0" repository = "https://github.com/oxidecomputer/cargo-dist" homepage = "https://opensource.axo.dev/cargo-dist/" -version = "1.0.1" +version = "1.0.2" rust-version = "1.74" [workspace.dependencies] # intra-workspace deps (you need to bump these versions when you cut releases too! -dist-schema = { version = "=1.0.1", path = "cargo-dist-schema" } -axoproject = { version = "=1.0.1", path = "axoproject", default-features = false, features = ["cargo-projects", "generic-projects", "npm-projects"] } +dist-schema = { version = "=1.0.2", path = "cargo-dist-schema" } +axoproject = { version = "=1.0.2", path = "axoproject", default-features = false, features = ["cargo-projects", "generic-projects", "npm-projects"] } # vendored first-party deps axocli = { version = "0.2.0", path = "vendor/axocli" } From 9c74f05ccf298e903d7fbc2ecfc96ceac8a90a5f Mon Sep 17 00:00:00 2001 From: Will Chandler Date: Wed, 18 Jun 2025 10:11:00 -0400 Subject: [PATCH 2/4] Fix other glibc minimum version There's a separate default glibc version in `cargo-dist-schema` that we missed in 5952e453 (Update minimum glibc version, 2025-06-17). Update this as well, and correct the comment at the other site as well. --- CHANGELOG.md | 6 ++++++ cargo-dist-schema/src/lib.rs | 2 +- cargo-dist/src/platform.rs | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4407b5ac..d4eb2d5c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ Nothing Yet! +# Version 1.0.2 (2025-06-19) + +## Fixes + +- Fix the other place the minimum glibc version is set. + # Version 1.0.1 (2025-06-17) ## Fixes diff --git a/cargo-dist-schema/src/lib.rs b/cargo-dist-schema/src/lib.rs index 106e295e6..f44315e91 100644 --- a/cargo-dist-schema/src/lib.rs +++ b/cargo-dist-schema/src/lib.rs @@ -268,7 +268,7 @@ impl Default for GlibcVersion { Self { // Values from the default Ubuntu runner major: 2, - series: 31, + series: 35, } } } diff --git a/cargo-dist/src/platform.rs b/cargo-dist/src/platform.rs index 9e59482c9..b5bf1fbc9 100644 --- a/cargo-dist/src/platform.rs +++ b/cargo-dist/src/platform.rs @@ -314,7 +314,7 @@ impl LibcVersion { /// Get the default glibc version for cases where we just need to guess /// and make one up. /// - /// This is the glibc of Ubuntu 20.04, which is the oldest supported + /// This is the glibc of Ubuntu 22.04, which is the oldest supported /// github linux runner, as of this writing. pub fn default_glibc() -> Self { Self { From 74c759a2fba4e615b81e7c5d5d2d35105c6b797d Mon Sep 17 00:00:00 2001 From: Will Chandler Date: Wed, 18 Jun 2025 10:05:39 -0400 Subject: [PATCH 3/4] Remove snap for fallback test `install_path_fallback_to_cargo_home` is expected to panic, so its snapshot is never read. Remove the unused snapshot. --- .../install_path_fallback_to_cargo_home.snap | 1676 ----------------- 1 file changed, 1676 deletions(-) delete mode 100644 cargo-dist/tests/snapshots/install_path_fallback_to_cargo_home.snap diff --git a/cargo-dist/tests/snapshots/install_path_fallback_to_cargo_home.snap b/cargo-dist/tests/snapshots/install_path_fallback_to_cargo_home.snap deleted file mode 100644 index 61b91ebad..000000000 --- a/cargo-dist/tests/snapshots/install_path_fallback_to_cargo_home.snap +++ /dev/null @@ -1,1676 +0,0 @@ ---- -source: cargo-dist/tests/gallery/dist.rs -expression: self.payload ---- -================ installer.sh ================ -#!/bin/sh -# shellcheck shell=dash -# -# Licensed under the MIT license -# , at your -# option. This file may not be copied, modified, or distributed -# except according to those terms. - -if [ "$KSH_VERSION" = 'Version JM 93t+ 2010-03-05' ]; then - # The version of ksh93 that ships with many illumos systems does not - # support the "local" extension. Print a message rather than fail in - # subtle ways later on: - echo 'this installer does not work with this ksh93 version; please try bash!' >&2 - exit 1 -fi - -set -u - -APP_NAME="axolotlsay" -APP_VERSION="0.2.1" -ARTIFACT_DOWNLOAD_URL="${INSTALLER_DOWNLOAD_URL:-https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1}" -PRINT_VERBOSE=${INSTALLER_PRINT_VERBOSE:-0} -PRINT_QUIET=${INSTALLER_PRINT_QUIET:-0} -NO_MODIFY_PATH=${INSTALLER_NO_MODIFY_PATH:-0} -read -r RECEIPT <&2 - say_verbose " from $_url" 1>&2 - say_verbose " to $_file" 1>&2 - - ensure mkdir -p "$_dir" - - if ! downloader "$_url" "$_file"; then - say "failed to download $_url" - say "this may be a standard network error, but it may also indicate" - say "that $APP_NAME's release process is not working. When in doubt" - say "please feel free to open an issue!" - exit 1 - fi - - # ...and then the updater, if it exists - if [ -n "$_updater_name" ]; then - local _updater_url="$ARTIFACT_DOWNLOAD_URL/$_updater_name" - # This renames the artifact while doing the download, removing the - # target triple and leaving just the appname-update format - local _updater_file="$_dir/$APP_NAME-update" - - if ! downloader "$_updater_url" "$_updater_file"; then - say "failed to download $_updater_url" - say "this may be a standard network error, but it may also indicate" - say "that $APP_NAME's release process is not working. When in doubt" - say "please feel free to open an issue!" - exit 1 - fi - - # Add the updater to the list of binaries to install - _bins="$_bins $APP_NAME-update" - fi - - # unpack the archive - case "$_zip_ext" in - ".zip") - ensure unzip -q "$_file" -d "$_dir" - ;; - - ".tar."*) - ensure tar xf "$_file" --strip-components 1 -C "$_dir" - ;; - *) - err "unknown archive format: $_zip_ext" - ;; - esac - - install "$_dir" "$_bins" "$@" - local _retval=$? - if [ "$_retval" != 0 ]; then - return "$_retval" - fi - - ignore rm -rf "$_dir" - - # Install the install receipt - mkdir -p "$RECEIPT_HOME" || { - err "unable to create receipt directory at $RECEIPT_HOME" - } - echo "$RECEIPT" > "$RECEIPT_HOME/$APP_NAME-receipt.json" - # shellcheck disable=SC2320 - local _retval=$? - - return "$_retval" -} - -# See discussion of late-bound vs early-bound for why we use single-quotes with env vars -# shellcheck disable=SC2016 -install() { - # This code needs to both compute certain paths for itself to write to, and - # also write them to shell/rc files so that they can look them up to e.g. - # add them to PATH. This requires an active distinction between paths - # and expressions that can compute them. - # - # The distinction lies in when we want env-vars to be evaluated. For instance - # if we determine that we want to install to $HOME/.myapp, which do we add - # to e.g. $HOME/.profile: - # - # * early-bound: export PATH="/home/myuser/.myapp:$PATH" - # * late-bound: export PATH="$HOME/.myapp:$PATH" - # - # In this case most people would prefer the late-bound version, but in other - # cases the early-bound version might be a better idea. In particular when using - # other env-vars than $HOME, they are more likely to be only set temporarily - # for the duration of this install script, so it's more advisable to erase their - # existence with early-bounding. - # - # This distinction is handled by "double-quotes" (early) vs 'single-quotes' (late). - # - # This script has a few different variants, the most complex one being the - # CARGO_HOME version which attempts to install things to Cargo's bin dir, - # potentially setting up a minimal version if the user hasn't ever installed Cargo. - # - # In this case we need to: - # - # * Install to $HOME/.cargo/bin/ - # * Create a shell script at $HOME/.cargo/env that: - # * Checks if $HOME/.cargo/bin/ is on PATH - # * and if not prepends it to PATH - # * Edits $HOME/.profile to run $HOME/.cargo/env (if the line doesn't exist) - # - # To do this we need these 4 values: - - # The actual path we're going to install to - local _install_dir - # Path to the an shell script that adds install_dir to PATH - local _env_script_path - # Potentially-late-bound version of install_dir to write env_script - local _install_dir_expr - # Potentially-late-bound version of env_script_path to write to rcfiles like $HOME/.profile - local _env_script_path_expr - -if [ "$INSTALL_PATH_STRATEGY" = "CargoHome" ]; then - # first try CARGO_HOME, then fallback to HOME - if [ -n "${CARGO_HOME:-}" ]; then - _install_dir="$CARGO_HOME/bin" - _env_script_path="$CARGO_HOME/env" - - # If we need to override the above - if [ -n "${CARGO_DIST_FORCE_INSTALL_DIR:-}" ] && [ "${CARGO_DIST_FORCE_INSTALL_DIR}" != "$CARGO_HOME" ]; then - _install_dir="$CARGO_DIST_FORCE_INSTALL_DIR/bin" - _env_script_path="$CARGO_DIST_FORCE_INSTALL_DIR/env" - fi - - # If CARGO_HOME was set but it ended up being the default $HOME-based path, - # then keep things late-bound. Otherwise bake the value for safety. - # This is what rustup does, and accurately reproducing it is useful. - if [ -n "${HOME:-}" ]; then - if [ "$HOME/.cargo/bin" = "$_install_dir" ]; then - _install_dir_expr='$HOME/.cargo/bin' - _env_script_path_expr='$HOME/.cargo/env' - else - _install_dir_expr="$_install_dir" - _env_script_path_expr="$_env_script_path" - fi - else - _install_dir_expr="$_install_dir" - _env_script_path_expr="$_env_script_path" - fi - elif [ -n "${HOME:-}" ]; then - _install_dir="$HOME/.cargo/bin" - _env_script_path="$HOME/.cargo/env" - _install_dir_expr='$HOME/.cargo/bin' - _env_script_path_expr='$HOME/.cargo/env' - - # If we need to override the above - if [ -n "${CARGO_DIST_FORCE_INSTALL_DIR:-}" ] && [ "${CARGO_DIST_FORCE_INSTALL_DIR}" != "$HOME/.cargo" ]; then - _install_dir="$CARGO_DIST_FORCE_INSTALL_DIR/bin" - _env_script_path="$CARGO_DIST_FORCE_INSTALL_DIR/env" - # For these two, if the new value contains $HOME, make - # sure to `sed` the $HOME expression back into the expr - _install_dir_expr="$(echo "$CARGO_DIST_FORCE_INSTALL_DIR/bin" | sed "s,$HOME,\$HOME,")" - _env_script_path_expr="$(echo "$CARGO_DIST_FORCE_INSTALL_DIR/env" | sed "s,$HOME,\$HOME,")" - fi - else - err "could not find your CARGO_HOME or HOME dir to install binaries to" - fi -elif [ "$INSTALL_PATH_STRATEGY" = "HomeSubdir" ]; then - # Install to this subdir of the user's home dir - _install_dir="$HOME/$INSTALL_PATH_SUBDIR" - _env_script_path="$HOME/$INSTALL_PATH_SUBDIR/env" - _install_dir_expr="\$HOME/$INSTALL_PATH_SUBDIR" - _env_script_path_expr="\$HOME/$INSTALL_PATH_SUBDIR/env" - - if [ -n "${CARGO_DIST_FORCE_INSTALL_DIR:-}" ]; then - _install_dir="$CARGO_DIST_FORCE_INSTALL_DIR" - _env_script_path="$CARGO_DIST_FORCE_INSTALL_DIR/env" - # For these two, if the new value contains $HOME, make - # sure to `sed` the $HOME expression back into the expr - _install_dir_expr="$(echo "$CARGO_DIST_FORCE_INSTALL_DIR" | sed "s,$HOME,\$HOME,")" - _env_script_path_expr="$(echo "$CARGO_DIST_FORCE_INSTALL_DIR/env" | sed "s,$HOME,\$HOME,")" - fi -elif [ "$INSTALL_PATH_STRATEGY" = "EnvSubdir" ]; then - # Install to this subdir of the user's $INSTALL_PATH_ENV_KEY dir. - if [ -n "$INSTALL_PATH_SUBDIR" ]; then - _install_dir="$INSTALL_PATH_ENV_KEY/$INSTALL_PATH_SUBDIR" - _env_script_path="$INSTALL_PATH_ENV_KEY/$INSTALL_PATH_SUBDIR/env" - else - _install_dir="$INSTALL_PATH_ENV_KEY" - _env_script_path="$INSTALL_PATH_ENV_KEY/env" - fi - _install_dir_expr="$_install_dir" - _env_script_path_expr="$_env_script_path" - - # Override if necessary - if [ -n "${CARGO_DIST_FORCE_INSTALL_DIR:-}" ]; then - _install_dir="$CARGO_DIST_FORCE_INSTALL_DIR" - _env_script_path="$CARGO_DIST_FORCE_INSTALL_DIR/env" - _install_dir_expr="$_install_dir" - _env_script_path_expr="$_env_script_path" - fi -fi - - # Replace the temporary cargo home with the calculated one - RECEIPT=$(echo "$RECEIPT" | sed "s,AXO_INSTALL_PREFIX,$_install_dir,") - - say "installing to $_install_dir" - ensure mkdir -p "$_install_dir" - - # copy all the binaries to the install dir - local _src_dir="$1" - local _bins="$2" - for _bin_name in $_bins; do - local _bin="$_src_dir/$_bin_name" - ensure mv "$_bin" "$_install_dir" - # unzip seems to need this chmod - ensure chmod +x "$_install_dir/$_bin_name" - say " $_bin_name" - done - - say "everything's installed!" - - if [ "0" = "$NO_MODIFY_PATH" ]; then - add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" ".profile" - exit1=$? - add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" ".bash_profile .bash_login .bashrc" - exit2=$? - add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" ".zshrc .zshenv" - exit3=$? - - if [ "${exit1:-0}" = 1 ] || [ "${exit2:-0}" = 1 ] || [ "${exit3:-0}" = 1 ]; then - say "" - say "To add $_install_dir_expr to your PATH, either restart your shell or run:" - say "" - say " source $_env_script_path_expr" - fi - fi -} - -print_home_for_script() { - local script="$1" - - local _home - case "$script" in - # zsh has a special ZDOTDIR directory, which if set - # should be considered instead of $HOME - .zsh*) - if [ -n "${ZDOTDIR:-}" ]; then - _home="$ZDOTDIR" - else - _home="$HOME" - fi - ;; - *) - _home="$HOME" - ;; - esac - - echo "$_home" -} - -add_install_dir_to_path() { - # Edit rcfiles ($HOME/.profile) to add install_dir to $PATH - # - # We do this slightly indirectly by creating an "env" shell script which checks if install_dir - # is on $PATH already, and prepends it if not. The actual line we then add to rcfiles - # is to just source that script. This allows us to blast it into lots of different rcfiles and - # have it run multiple times without causing problems. It's also specifically compatible - # with the system rustup uses, so that we don't conflict with it. - local _install_dir_expr="$1" - local _env_script_path="$2" - local _env_script_path_expr="$3" - local _rcfiles="$4" - - if [ -n "${HOME:-}" ]; then - local _target - local _home - - # Find the first file in the array that exists and choose - # that as our target to write to - for _rcfile_relative in $_rcfiles; do - _home="$(print_home_for_script "$_rcfile_relative")" - local _rcfile="$_home/$_rcfile_relative" - - if [ -f "$_rcfile" ]; then - _target="$_rcfile" - break - fi - done - - # If we didn't find anything, pick the first entry in the - # list as the default to create and write to - if [ -z "${_target:-}" ]; then - local _rcfile_relative - _rcfile_relative="$(echo "$_rcfiles" | awk '{ print $1 }')" - _home="$(print_home_for_script "$_rcfile_relative")" - _target="$_home/$_rcfile_relative" - fi - - # `source x` is an alias for `. x`, and the latter is more portable/actually-posix. - # This apparently comes up a lot on freebsd. It's easy enough to always add - # the more robust line to rcfiles, but when telling the user to apply the change - # to their current shell ". x" is pretty easy to misread/miscopy, so we use the - # prettier "source x" line there. Hopefully people with Weird Shells are aware - # this is a thing and know to tweak it (or just restart their shell). - local _robust_line=". \"$_env_script_path_expr\"" - local _pretty_line="source \"$_env_script_path_expr\"" - - # Add the env script if it doesn't already exist - if [ ! -f "$_env_script_path" ]; then - say_verbose "creating $_env_script_path" - write_env_script "$_install_dir_expr" "$_env_script_path" - else - say_verbose "$_env_script_path already exists" - fi - - # Check if the line is already in the rcfile - # grep: 0 if matched, 1 if no match, and 2 if an error occurred - # - # Ideally we could use quiet grep (-q), but that makes "match" and "error" - # have the same behaviour, when we want "no match" and "error" to be the same - # (on error we want to create the file, which >> conveniently does) - # - # We search for both kinds of line here just to do the right thing in more cases. - if ! grep -F "$_robust_line" "$_target" > /dev/null 2>/dev/null && \ - ! grep -F "$_pretty_line" "$_target" > /dev/null 2>/dev/null - then - # If the script now exists, add the line to source it to the rcfile - # (This will also create the rcfile if it doesn't exist) - if [ -f "$_env_script_path" ]; then - say_verbose "adding $_robust_line to $_target" - # prepend an extra newline in case the user's file is missing a trailing one - ensure echo "" >> "$_target" - ensure echo "$_robust_line" >> "$_target" - return 1 - fi - else - say_verbose "$_install_dir already on PATH" - fi - fi -} - -write_env_script() { - # write this env script to the given path (this cat/EOF stuff is a "heredoc" string) - local _install_dir_expr="$1" - local _env_script_path="$2" - ensure cat < "$_env_script_path" -#!/bin/sh -# add binaries to PATH if they aren't added yet -# affix colons on either side of \$PATH to simplify matching -case ":\${PATH}:" in - *:"$_install_dir_expr":*) - ;; - *) - # Prepending path in case a system-installed binary needs to be overridden - export PATH="$_install_dir_expr:\$PATH" - ;; -esac -EOF -} - -check_proc() { - # Check for /proc by looking for the /proc/self/exe link - # This is only run on Linux - if ! test -L /proc/self/exe ; then - err "fatal: Unable to find /proc/self/exe. Is /proc mounted? Installation cannot proceed without /proc." - fi -} - -get_bitness() { - need_cmd head - # Architecture detection without dependencies beyond coreutils. - # ELF files start out "\x7fELF", and the following byte is - # 0x01 for 32-bit and - # 0x02 for 64-bit. - # The printf builtin on some shells like dash only supports octal - # escape sequences, so we use those. - local _current_exe_head - _current_exe_head=$(head -c 5 /proc/self/exe ) - if [ "$_current_exe_head" = "$(printf '\177ELF\001')" ]; then - echo 32 - elif [ "$_current_exe_head" = "$(printf '\177ELF\002')" ]; then - echo 64 - else - err "unknown platform bitness" - fi -} - -is_host_amd64_elf() { - need_cmd head - need_cmd tail - # ELF e_machine detection without dependencies beyond coreutils. - # Two-byte field at offset 0x12 indicates the CPU, - # but we're interested in it being 0x3E to indicate amd64, or not that. - local _current_exe_machine - _current_exe_machine=$(head -c 19 /proc/self/exe | tail -c 1) - [ "$_current_exe_machine" = "$(printf '\076')" ] -} - -get_endianness() { - local cputype=$1 - local suffix_eb=$2 - local suffix_el=$3 - - # detect endianness without od/hexdump, like get_bitness() does. - need_cmd head - need_cmd tail - - local _current_exe_endianness - _current_exe_endianness="$(head -c 6 /proc/self/exe | tail -c 1)" - if [ "$_current_exe_endianness" = "$(printf '\001')" ]; then - echo "${cputype}${suffix_el}" - elif [ "$_current_exe_endianness" = "$(printf '\002')" ]; then - echo "${cputype}${suffix_eb}" - else - err "unknown platform endianness" - fi -} - -get_architecture() { - local _ostype - local _cputype - _ostype="$(uname -s)" - _cputype="$(uname -m)" - local _clibtype="gnu" - local _local_glibc - - if [ "$_ostype" = Linux ]; then - if [ "$(uname -o)" = Android ]; then - _ostype=Android - fi - if ldd --version 2>&1 | grep -q 'musl'; then - _clibtype="musl-dynamic" - # glibc, but is it a compatible glibc? - else - # Parsing version out from line 1 like: - # ldd (Ubuntu GLIBC 2.35-0ubuntu3.1) 2.35 - _local_glibc="$(ldd --version | awk -F' ' '{ if (FNR<=1) print $NF }')" - - if [ "$(echo "${_local_glibc}" | awk -F. '{ print $1 }')" = $BUILDER_GLIBC_MAJOR ] && [ "$(echo "${_local_glibc}" | awk -F. '{ print $2 }')" -ge $BUILDER_GLIBC_SERIES ]; then - _clibtype="gnu" - else - say "System glibc version (\`${_local_glibc}') is too old; using musl" >&2 - _clibtype="musl-static" - fi - fi - fi - - if [ "$_ostype" = Darwin ] && [ "$_cputype" = i386 ]; then - # Darwin `uname -m` lies - if sysctl hw.optional.x86_64 | grep -q ': 1'; then - _cputype=x86_64 - fi - fi - - if [ "$_ostype" = Darwin ] && [ "$_cputype" = x86_64 ]; then - # Rosetta on aarch64 - if [ "$(sysctl -n hw.optional.arm64 2>/dev/null)" = "1" ]; then - _cputype=aarch64 - fi - fi - - if [ "$_ostype" = SunOS ]; then - # Both Solaris and illumos presently announce as "SunOS" in "uname -s" - # so use "uname -o" to disambiguate. We use the full path to the - # system uname in case the user has coreutils uname first in PATH, - # which has historically sometimes printed the wrong value here. - if [ "$(/usr/bin/uname -o)" = illumos ]; then - _ostype=illumos - fi - - # illumos systems have multi-arch userlands, and "uname -m" reports the - # machine hardware name; e.g., "i86pc" on both 32- and 64-bit x86 - # systems. Check for the native (widest) instruction set on the - # running kernel: - if [ "$_cputype" = i86pc ]; then - _cputype="$(isainfo -n)" - fi - fi - - case "$_ostype" in - - Android) - _ostype=linux-android - ;; - - Linux) - check_proc - _ostype=unknown-linux-$_clibtype - _bitness=$(get_bitness) - ;; - - FreeBSD) - _ostype=unknown-freebsd - ;; - - NetBSD) - _ostype=unknown-netbsd - ;; - - DragonFly) - _ostype=unknown-dragonfly - ;; - - Darwin) - _ostype=apple-darwin - ;; - - illumos) - _ostype=unknown-illumos - ;; - - MINGW* | MSYS* | CYGWIN* | Windows_NT) - _ostype=pc-windows-gnu - ;; - - *) - err "unrecognized OS type: $_ostype" - ;; - - esac - - case "$_cputype" in - - i386 | i486 | i686 | i786 | x86) - _cputype=i686 - ;; - - xscale | arm) - _cputype=arm - if [ "$_ostype" = "linux-android" ]; then - _ostype=linux-androideabi - fi - ;; - - armv6l) - _cputype=arm - if [ "$_ostype" = "linux-android" ]; then - _ostype=linux-androideabi - else - _ostype="${_ostype}eabihf" - fi - ;; - - armv7l | armv8l) - _cputype=armv7 - if [ "$_ostype" = "linux-android" ]; then - _ostype=linux-androideabi - else - _ostype="${_ostype}eabihf" - fi - ;; - - aarch64 | arm64) - _cputype=aarch64 - ;; - - x86_64 | x86-64 | x64 | amd64) - _cputype=x86_64 - ;; - - mips) - _cputype=$(get_endianness mips '' el) - ;; - - mips64) - if [ "$_bitness" -eq 64 ]; then - # only n64 ABI is supported for now - _ostype="${_ostype}abi64" - _cputype=$(get_endianness mips64 '' el) - fi - ;; - - ppc) - _cputype=powerpc - ;; - - ppc64) - _cputype=powerpc64 - ;; - - ppc64le) - _cputype=powerpc64le - ;; - - s390x) - _cputype=s390x - ;; - riscv64) - _cputype=riscv64gc - ;; - loongarch64) - _cputype=loongarch64 - ;; - *) - err "unknown CPU type: $_cputype" - - esac - - # Detect 64-bit linux with 32-bit userland - if [ "${_ostype}" = unknown-linux-gnu ] && [ "${_bitness}" -eq 32 ]; then - case $_cputype in - x86_64) - # 32-bit executable for amd64 = x32 - if is_host_amd64_elf; then { - err "x32 linux unsupported" - }; else - _cputype=i686 - fi - ;; - mips64) - _cputype=$(get_endianness mips '' el) - ;; - powerpc64) - _cputype=powerpc - ;; - aarch64) - _cputype=armv7 - if [ "$_ostype" = "linux-android" ]; then - _ostype=linux-androideabi - else - _ostype="${_ostype}eabihf" - fi - ;; - riscv64gc) - err "riscv64 with 32-bit userland unsupported" - ;; - esac - fi - - # treat armv7 systems without neon as plain arm - if [ "$_ostype" = "unknown-linux-gnueabihf" ] && [ "$_cputype" = armv7 ]; then - if ensure grep '^Features' /proc/cpuinfo | grep -q -v neon; then - # At least one processor does not have NEON. - _cputype=arm - fi - fi - - _arch="${_cputype}-${_ostype}" - - RETVAL="$_arch" -} - -say() { - if [ "0" = "$PRINT_QUIET" ]; then - echo "$1" - fi -} - -say_verbose() { - if [ "1" = "$PRINT_VERBOSE" ]; then - echo "$1" - fi -} - -err() { - if [ "0" = "$PRINT_QUIET" ]; then - local red - local reset - red=$(tput setaf 1 2>/dev/null || echo '') - reset=$(tput sgr0 2>/dev/null || echo '') - say "${red}ERROR${reset}: $1" >&2 - fi - exit 1 -} - -need_cmd() { - if ! check_cmd "$1" - then err "need '$1' (command not found)" - fi -} - -check_cmd() { - command -v "$1" > /dev/null 2>&1 - return $? -} - -assert_nz() { - if [ -z "$1" ]; then err "assert_nz $2"; fi -} - -# Run a command that should never fail. If the command fails execution -# will immediately terminate with an error showing the failing -# command. -ensure() { - if ! "$@"; then err "command failed: $*"; fi -} - -# This is just for indicating that commands' results are being -# intentionally ignored. Usually, because it's being executed -# as part of error handling. -ignore() { - "$@" -} - -# This wraps curl or wget. Try curl first, if not installed, -# use wget instead. -downloader() { - if check_cmd curl - then _dld=curl - elif check_cmd wget - then _dld=wget - else _dld='curl or wget' # to be used in error message of need_cmd - fi - - if [ "$1" = --check ] - then need_cmd "$_dld" - elif [ "$_dld" = curl ] - then curl -sSfL "$1" -o "$2" - elif [ "$_dld" = wget ] - then wget "$1" -O "$2" - else err "Unknown downloader" # should not reach here - fi -} - -download_binary_and_run_installer "$@" || exit 1 - -================ formula.rb ================ -class Axolotlsay < Formula - desc "šŸ’¬ a CLI for learning to distribute CLIs in rust" - homepage "https://github.com/axodotdev/axolotlsay" - version "0.2.1" - if OS.mac? - if Hardware::CPU.arm? - url "https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-aarch64-apple-darwin.tar.gz" - end - if Hardware::CPU.intel? - url "https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-x86_64-apple-darwin.tar.gz" - end - end - if OS.linux? - if Hardware::CPU.intel? - url "https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-x86_64-unknown-linux-gnu.tar.gz" - end - end - license "MIT OR Apache-2.0" - - def install - if OS.mac? && Hardware::CPU.arm? - bin.install "axolotlsay" - end - if OS.mac? && Hardware::CPU.intel? - bin.install "axolotlsay" - end - if OS.linux? && Hardware::CPU.intel? - bin.install "axolotlsay" - end - - # Homebrew will automatically install these, so we don't need to do that - doc_files = Dir["README.*", "readme.*", "LICENSE", "LICENSE.*", "CHANGELOG.*"] - leftover_contents = Dir["*"] - doc_files - - # Install any leftover files in pkgshare; these are probably config or - # sample files. - pkgshare.install(*leftover_contents) unless leftover_contents.empty? - end -end - -================ installer.ps1 ================ -# Licensed under the MIT license -# , at your -# option. This file may not be copied, modified, or distributed -# except according to those terms. - -<# -.SYNOPSIS - -The installer for axolotlsay 0.2.1 - -.DESCRIPTION - -This script detects what platform you're on and fetches an appropriate archive from -https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1 -then unpacks the binaries and installs them to one of the following locations -$env:NO_SUCH_ENV_VAR\My Nonexistent Documents -$env:CARGO_HOME\bin ($HOME\.cargo\bin) - - -It will then add that dir to PATH by editing your Environment.Path registry key - -.PARAMETER ArtifactDownloadUrl -The URL of the directory where artifacts can be fetched from - -.PARAMETER NoModifyPath -Don't add the install directory to PATH - -.PARAMETER Help -Print help - -#> - -param ( - [Parameter(HelpMessage = "The URL of the directory where artifacts can be fetched from")] - [string]$ArtifactDownloadUrl = 'https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1', - [Parameter(HelpMessage = "Don't add the install directory to PATH")] - [switch]$NoModifyPath, - [Parameter(HelpMessage = "Print Help")] - [switch]$Help -) - -$app_name = 'axolotlsay' -$app_version = '0.2.1' - -$install_path = $null -# If you're reading this install script generated by an app, and -# this looks strange to you, it's because it's possible for there -# to be multiple generated paths here. If you're only seeing one -# $install_path assignment, it's because the app you're looking at -# has been configured with a single install path. - -if (-Not $install_path) { - - # We skip this if the environment variable isn't set - if ($env:NO_SUCH_ENV_VAR) { - $install_path = @{ - "strategy" = "EnvSubdir" - "env_key" = "NO_SUCH_ENV_VAR" - "subdir" = "My Nonexistent Documents" - } - }} - -if (-Not $install_path) { - - # This strategy can't fail; always assign it - $install_path = @{ - "strategy" = "CargoHome" - } -} - - -# Looks like all of the above assignments failed -if (-Not $install_path) { - throw "ERROR: could not find a valid path to install to; please check the installation instructions" -} - -$receipt = @" -{"binaries":["CARGO_DIST_BINS"],"install_prefix":"AXO_INSTALL_PREFIX","provider":{"source":"cargo-dist","version":"CENSORED"},"source":{"app_name":"axolotlsay","name":"axolotlsay","owner":"axodotdev","release_type":"github"},"version":"CENSORED"} -"@ -$receipt_home = "${env:LOCALAPPDATA}\axolotlsay" - -function Install-Binary($install_args) { - if ($Help) { - Get-Help $PSCommandPath -Detailed - Exit - } - - Initialize-Environment - - # Platform info injected by cargo-dist - $platforms = @{ - "x86_64-pc-windows-msvc" = @{ - "artifact_name" = "axolotlsay-x86_64-pc-windows-msvc.tar.gz" - "bins" = "axolotlsay.exe" - "zip_ext" = ".tar.gz" - } - } - - $fetched = Download "$ArtifactDownloadUrl" $platforms - # FIXME: add a flag that lets the user not do this step - Invoke-Installer -bin_paths $fetched -platforms $platforms "$install_args" -} - -function Get-TargetTriple() { - try { - # NOTE: this might return X64 on ARM64 Windows, which is OK since emulation is available. - # It works correctly starting in PowerShell Core 7.3 and Windows PowerShell in Win 11 22H2. - # Ideally this would just be - # [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture - # but that gets a type from the wrong assembly on Windows PowerShell (i.e. not Core) - $a = [System.Reflection.Assembly]::LoadWithPartialName("System.Runtime.InteropServices.RuntimeInformation") - $t = $a.GetType("System.Runtime.InteropServices.RuntimeInformation") - $p = $t.GetProperty("OSArchitecture") - # Possible OSArchitecture Values: https://learn.microsoft.com/dotnet/api/system.runtime.interopservices.architecture - # Rust supported platforms: https://doc.rust-lang.org/stable/rustc/platform-support.html - switch ($p.GetValue($null).ToString()) - { - "X86" { return "i686-pc-windows-msvc" } - "X64" { return "x86_64-pc-windows-msvc" } - "Arm" { return "thumbv7a-pc-windows-msvc" } - "Arm64" { return "aarch64-pc-windows-msvc" } - } - } catch { - # The above was added in .NET 4.7.1, so Windows PowerShell in versions of Windows - # prior to Windows 10 v1709 may not have this API. - Write-Verbose "Get-TargetTriple: Exception when trying to determine OS architecture." - Write-Verbose $_ - } - - # This is available in .NET 4.0. We already checked for PS 5, which requires .NET 4.5. - Write-Verbose("Get-TargetTriple: falling back to Is64BitOperatingSystem.") - if ([System.Environment]::Is64BitOperatingSystem) { - return "x86_64-pc-windows-msvc" - } else { - return "i686-pc-windows-msvc" - } -} - -function Download($download_url, $platforms) { - $arch = Get-TargetTriple - - if (-not $platforms.ContainsKey($arch)) { - # X64 is well-supported, including in emulation on ARM64 - Write-Verbose "$arch is not available, falling back to X64" - $arch = "x86_64-pc-windows-msvc" - } - - if (-not $platforms.ContainsKey($arch)) { - # should not be possible, as currently we always produce X64 binaries. - $platforms_json = ConvertTo-Json $platforms - throw "ERROR: could not find binaries for this platform. Last platform tried: $arch platform info: $platforms_json" - } - - # Lookup what we expect this platform to look like - $info = $platforms[$arch] - $zip_ext = $info["zip_ext"] - $bin_names = $info["bins"] - $artifact_name = $info["artifact_name"] - - # Make a new temp dir to unpack things to - $tmp = New-Temp-Dir - $dir_path = "$tmp\$app_name$zip_ext" - - # Download and unpack! - $url = "$download_url/$artifact_name" - Write-Information "Downloading $app_name $app_version ($arch)" - Write-Verbose " from $url" - Write-Verbose " to $dir_path" - $wc = New-Object Net.Webclient - $wc.downloadFile($url, $dir_path) - - Write-Verbose "Unpacking to $tmp" - - # Select the tool to unpack the files with. - # - # As of windows 10(?), powershell comes with tar preinstalled, but in practice - # it only seems to support .tar.gz, and not xz/zstd. Still, we should try to - # forward all tars to it in case the user has a machine that can handle it! - switch -Wildcard ($zip_ext) { - ".zip" { - Expand-Archive -Path $dir_path -DestinationPath "$tmp"; - Break - } - ".tar.*" { - tar xf $dir_path --strip-components 1 -C "$tmp"; - Break - } - Default { - throw "ERROR: unknown archive format $zip_ext" - } - } - - # Let the next step know what to copy - $bin_paths = @() - foreach ($bin_name in $bin_names) { - Write-Verbose " Unpacked $bin_name" - $bin_paths += "$tmp\$bin_name" - } - - if ($null -ne $info["updater"]) { - $updater_id = $info["updater"]["artifact_name"] - $updater_url = "$download_url/$updater_id" - $out_name = "$tmp\axolotlsay-update.exe" - - $wc.downloadFile($updater_url, $out_name) - $bin_paths += $out_name - } - - return $bin_paths -} - -function Invoke-Installer($bin_paths, $platforms) { - if ($install_path.strategy -eq "CargoHome") { - # first try CARGO_HOME, then fallback to HOME - # (for whatever reason $HOME is not a normal env var and doesn't need the $env: prefix) - $root = if (($base_dir = $env:CARGO_HOME)) { - $base_dir - } elseif (($base_dir = $HOME)) { - Join-Path $base_dir ".cargo" - } else { - throw "ERROR: could not find your HOME dir or CARGO_HOME to install binaries to" - } - - $dest_dir = Join-Path $root "bin" - - # If we need to override the above - if (($env:CARGO_DIST_FORCE_INSTALL_DIR)) { - $dest_dir = Join-Path $env:CARGO_DIST_FORCE_INSTALL_DIR "bin" - } - } elseif ($install_path.strategy -eq "HomeSubdir") { - # Install to this subdir of the user's home dir - $dest_dir = if (($base_dir = $HOME)) { - Join-Path $base_dir $install_path.subdir - } else { - throw "ERROR: could not find your HOME dir to install binaries to" - } - - # If we need to override the above - if (($env:CARGO_DIST_FORCE_INSTALL_DIR)) { - $dest_dir = $env:CARGO_DIST_FORCE_INSTALL_DIR - } - } elseif ($install_path.strategy -eq "EnvSubdir") { - # Install to this subdir of the user's $install_path.env_key dir - $dest_dir = if (($base_dir = [Environment]::GetEnvironmentVariable($install_path.env_key))) { - Join-Path $base_dir $install_path.subdir - } else { - throw "ERROR: could not find your $install_path.env_key dir to install binaries to" - } - - # If we need to override the above - if (($env:CARGO_DIST_FORCE_INSTALL_DIR)) { - $dest_dir = $env:CARGO_DIST_FORCE_INSTALL_DIR - } - } - - # The replace call here ensures proper escaping is inlined into the receipt - $receipt = $receipt.Replace('AXO_INSTALL_PREFIX', $dest_dir.replace("\", "\\")) - - $dest_dir = New-Item -Force -ItemType Directory -Path $dest_dir - Write-Information "Installing to $dest_dir" - # Just copy the binaries from the temp location to the install dir - foreach ($bin_path in $bin_paths) { - $installed_file = Split-Path -Path "$bin_path" -Leaf - Copy-Item "$bin_path" -Destination "$dest_dir" - Remove-Item "$bin_path" -Recurse -Force - Write-Information " $installed_file" - } - - # Replaces the placeholder binary entry with the actual list of binaries - $arch = Get-TargetTriple - - if (-not $platforms.ContainsKey($arch)) { - # X64 is well-supported, including in emulation on ARM64 - Write-Verbose "$arch is not available, falling back to X64" - $arch = "x86_64-pc-windows-msvc" - } - - if (-not $platforms.ContainsKey($arch)) { - # should not be possible, as currently we always produce X64 binaries. - $platforms_json = ConvertTo-Json $platforms - throw "ERROR: could not find binaries for this platform. Last platform tried: $arch platform info: $platforms_json" - } - - $info = $platforms[$arch] - $formatted_bins = ($info["bins"] | ForEach-Object { '"' + $_ + '"' }) -join "," - $receipt = $receipt.Replace('"CARGO_DIST_BINS"', $formatted_bins) - - # Write the install receipt - $null = New-Item -Path $receipt_home -ItemType "directory" -ErrorAction SilentlyContinue - # Trying to get Powershell 5.1 (not 6+, which is fake and lies) to write utf8 is a crime - # because "Out-File -Encoding utf8" actually still means utf8BOM, so we need to pull out - # .NET's APIs which actually do what you tell them (also apparently utf8NoBOM is the - # default in newer .NETs but I'd rather not rely on that at this point). - $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False - [IO.File]::WriteAllLines("$receipt_home/axolotlsay-receipt.json", "$receipt", $Utf8NoBomEncoding) - - Write-Information "Everything's installed!" - if (-not $NoModifyPath) { - if (Add-Path $dest_dir) { - Write-Information "" - Write-Information "$dest_dir was added to your PATH, you may need to restart your shell for that to take effect." - } - } -} - -# Try to add the given path to PATH via the registry -# -# Returns true if the registry was modified, otherwise returns false -# (indicating it was already on PATH) -function Add-Path($OrigPathToAdd) { - Write-Verbose "Adding $OrigPathToAdd to your PATH" - $RegistryPath = "HKCU:\Environment" - $PropertyName = "Path" - $PathToAdd = $OrigPathToAdd - - $Item = if (Test-Path $RegistryPath) { - # If the registry key exists, get it - Get-Item -Path $RegistryPath - } else { - # If the registry key doesn't exist, create it - Write-Verbose "Creating $RegistryPath" - New-Item -Path $RegistryPath -Force - } - - $OldPath = "" - try { - # Try to get the old PATH value. If that fails, assume we're making it from scratch. - # Otherwise assume there's already paths in here and use a ; separator - $OldPath = $Item | Get-ItemPropertyValue -Name $PropertyName - $PathToAdd = "$PathToAdd;" - } catch { - # We'll be creating the PATH from scratch - Write-Verbose "No $PropertyName Property exists on $RegistryPath (we'll make one)" - } - - # Check if the path is already there - # - # We don't want to incorrectly match "C:\blah\" to "C:\blah\blah\", so we include the semicolon - # delimiters when searching, ensuring exact matches. To avoid corner cases we add semicolons to - # both sides of the input, allowing us to pretend we're always in the middle of a list. - Write-Verbose "Old $PropertyName Property is $OldPath" - if (";$OldPath;" -like "*;$OrigPathToAdd;*") { - # Already on path, nothing to do - Write-Verbose "install dir already on PATH, all done!" - return $false - } else { - # Actually update PATH - Write-Verbose "Actually mutating $PropertyName Property" - $NewPath = $PathToAdd + $OldPath - # We use -Force here to make the value already existing not be an error - $Item | New-ItemProperty -Name $PropertyName -Value $NewPath -PropertyType String -Force | Out-Null - return $true - } -} - -function Initialize-Environment() { - If (($PSVersionTable.PSVersion.Major) -lt 5) { - throw @" -Error: PowerShell 5 or later is required to install $app_name. -Upgrade PowerShell: - - https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-windows-powershell - -"@ - } - - # show notification to change execution policy: - $allowedExecutionPolicy = @('Unrestricted', 'RemoteSigned', 'ByPass') - If ((Get-ExecutionPolicy).ToString() -notin $allowedExecutionPolicy) { - throw @" -Error: PowerShell requires an execution policy in [$($allowedExecutionPolicy -join ", ")] to run $app_name. For example, to set the execution policy to 'RemoteSigned' please run: - - Set-ExecutionPolicy RemoteSigned -scope CurrentUser - -"@ - } - - # GitHub requires TLS 1.2 - If ([System.Enum]::GetNames([System.Net.SecurityProtocolType]) -notcontains 'Tls12') { - throw @" -Error: Installing $app_name requires at least .NET Framework 4.5 -Please download and install it first: - - https://www.microsoft.com/net/download - -"@ - } -} - -function New-Temp-Dir() { - [CmdletBinding(SupportsShouldProcess)] - param() - $parent = [System.IO.Path]::GetTempPath() - [string] $name = [System.Guid]::NewGuid() - New-Item -ItemType Directory -Path (Join-Path $parent $name) -} - -# PSScriptAnalyzer doesn't like how we use our params as globals, this calms it -$Null = $ArtifactDownloadUrl, $NoModifyPath, $Help -# Make Write-Information statements be visible -$InformationPreference = "Continue" - -# The default interactive handler -try { - Install-Binary "$Args" -} catch { - Write-Information $_ - exit 1 -} - -================ dist-manifest.json ================ -{ - "dist_version": "CENSORED", - "announcement_tag": "v0.2.1", - "announcement_tag_is_implicit": true, - "announcement_is_prerelease": false, - "announcement_title": "Version 0.2.1", - "announcement_changelog": "```text\n +--------------------------------------+\n | now with linux static musl binary!!! |\n +--------------------------------------+\n /\n≽(ā—• į“— ā—•)≼\n```", - "announcement_github_body": "## Release Notes\n\n```text\n +--------------------------------------+\n | now with linux static musl binary!!! |\n +--------------------------------------+\n /\n≽(ā—• į“— ā—•)≼\n```\n\n## Install axolotlsay 0.2.1\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.1/axolotlsay-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -c \"irm https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install axolotlsay\n```\n\n## Download axolotlsay 0.2.1\n\n| File | Platform | Checksum |\n|--------|----------|----------|\n| [axolotlsay-aarch64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-aarch64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-x86_64-apple-darwin.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-x86_64-apple-darwin.tar.gz.sha256) |\n| [axolotlsay-x86_64-pc-windows-msvc.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-x86_64-pc-windows-msvc.tar.gz) | x64 Windows | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256) |\n| [axolotlsay-x86_64-unknown-linux-gnu.tar.gz](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n\n", - "releases": [ - { - "app_name": "axolotlsay", - "app_version": "0.2.1", - "artifacts": [ - "source.tar.gz", - "source.tar.gz.sha256", - "axolotlsay-installer.sh", - "axolotlsay-installer.ps1", - "axolotlsay.rb", - "axolotlsay-aarch64-apple-darwin.tar.gz", - "axolotlsay-aarch64-apple-darwin.tar.gz.sha256", - "axolotlsay-x86_64-apple-darwin.tar.gz", - "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-linux-gnu.tar.gz", - "axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256" - ], - "hosting": { - "github": { - "artifact_download_url": "https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1" - } - } - } - ], - "artifacts": { - "axolotlsay-aarch64-apple-darwin.tar.gz": { - "name": "axolotlsay-aarch64-apple-darwin.tar.gz", - "kind": "executable-zip", - "target_triples": [ - "aarch64-apple-darwin" - ], - "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-aarch64-apple-darwin-axolotlsay", - "name": "axolotlsay", - "path": "axolotlsay", - "kind": "executable" - } - ], - "checksum": "axolotlsay-aarch64-apple-darwin.tar.gz.sha256" - }, - "axolotlsay-aarch64-apple-darwin.tar.gz.sha256": { - "name": "axolotlsay-aarch64-apple-darwin.tar.gz.sha256", - "kind": "checksum", - "target_triples": [ - "aarch64-apple-darwin" - ] - }, - "axolotlsay-installer.ps1": { - "name": "axolotlsay-installer.ps1", - "kind": "installer", - "target_triples": [ - "x86_64-pc-windows-msvc" - ], - "install_hint": "powershell -c \"irm https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-installer.ps1 | iex\"", - "description": "Install prebuilt binaries via powershell script" - }, - "axolotlsay-installer.sh": { - "name": "axolotlsay-installer.sh", - "kind": "installer", - "target_triples": [ - "aarch64-apple-darwin", - "x86_64-apple-darwin", - "x86_64-unknown-linux-gnu" - ], - "install_hint": "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/axolotlsay/releases/download/v0.2.1/axolotlsay-installer.sh | sh", - "description": "Install prebuilt binaries via shell script" - }, - "axolotlsay-x86_64-apple-darwin.tar.gz": { - "name": "axolotlsay-x86_64-apple-darwin.tar.gz", - "kind": "executable-zip", - "target_triples": [ - "x86_64-apple-darwin" - ], - "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-apple-darwin-axolotlsay", - "name": "axolotlsay", - "path": "axolotlsay", - "kind": "executable" - } - ], - "checksum": "axolotlsay-x86_64-apple-darwin.tar.gz.sha256" - }, - "axolotlsay-x86_64-apple-darwin.tar.gz.sha256": { - "name": "axolotlsay-x86_64-apple-darwin.tar.gz.sha256", - "kind": "checksum", - "target_triples": [ - "x86_64-apple-darwin" - ] - }, - "axolotlsay-x86_64-pc-windows-msvc.tar.gz": { - "name": "axolotlsay-x86_64-pc-windows-msvc.tar.gz", - "kind": "executable-zip", - "target_triples": [ - "x86_64-pc-windows-msvc" - ], - "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-pc-windows-msvc-axolotlsay", - "name": "axolotlsay", - "path": "axolotlsay.exe", - "kind": "executable" - } - ], - "checksum": "axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256" - }, - "axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256": { - "name": "axolotlsay-x86_64-pc-windows-msvc.tar.gz.sha256", - "kind": "checksum", - "target_triples": [ - "x86_64-pc-windows-msvc" - ] - }, - "axolotlsay-x86_64-unknown-linux-gnu.tar.gz": { - "name": "axolotlsay-x86_64-unknown-linux-gnu.tar.gz", - "kind": "executable-zip", - "target_triples": [ - "x86_64-unknown-linux-gnu" - ], - "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-linux-gnu-axolotlsay", - "name": "axolotlsay", - "path": "axolotlsay", - "kind": "executable" - } - ], - "checksum": "axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256" - }, - "axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256": { - "name": "axolotlsay-x86_64-unknown-linux-gnu.tar.gz.sha256", - "kind": "checksum", - "target_triples": [ - "x86_64-unknown-linux-gnu" - ] - }, - "axolotlsay.rb": { - "name": "axolotlsay.rb", - "kind": "installer", - "target_triples": [ - "aarch64-apple-darwin", - "x86_64-apple-darwin", - "x86_64-unknown-linux-gnu" - ], - "install_hint": "brew install axolotlsay", - "description": "Install prebuilt binaries via Homebrew" - }, - "source.tar.gz": { - "name": "source.tar.gz", - "kind": "source-tarball", - "checksum": "source.tar.gz.sha256" - }, - "source.tar.gz.sha256": { - "name": "source.tar.gz.sha256", - "kind": "checksum" - } - }, - "systems": { - "plan:all:": { - "id": "plan:all:", - "cargo_version_line": "CENSORED" - } - }, - "publish_prereleases": false, - "ci": { - "github": { - "artifacts_matrix": { - "include": [ - { - "targets": [ - "aarch64-apple-darwin" - ], - "runner": "macos-12", - "install_dist": "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/vSOME_VERSION/dist-installer.sh | sh", - "dist_args": "--artifacts=local --target=aarch64-apple-darwin" - }, - { - "targets": [ - "x86_64-apple-darwin" - ], - "runner": "macos-12", - "install_dist": "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/vSOME_VERSION/dist-installer.sh | sh", - "dist_args": "--artifacts=local --target=x86_64-apple-darwin" - }, - { - "targets": [ - "x86_64-pc-windows-msvc" - ], - "runner": "windows-2022", - "install_dist": "powershell -c \"irm https://github.com/axodotdev/cargo-dist/releases/download/vSOME_VERSION/dist-installer.ps1 | iex\"", - "dist_args": "--artifacts=local --target=x86_64-pc-windows-msvc" - }, - { - "targets": [ - "x86_64-unknown-linux-gnu" - ], - "runner": "ubuntu-22.04", - "install_dist": "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/vSOME_VERSION/dist-installer.sh | sh", - "dist_args": "--artifacts=local --target=x86_64-unknown-linux-gnu" - } - ] - }, - "pr_run_mode": "plan" - } - }, - "linkage": [] -} From 32b2659716d3c7a53f47ad3ab70bcc2937d2302c Mon Sep 17 00:00:00 2001 From: Will Chandler Date: Wed, 18 Jun 2025 10:06:55 -0400 Subject: [PATCH 4/4] Build with v1.0.1 --- .github/workflows/release.yml | 11 ++++++----- dist-workspace.toml | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9611f5844..b17cf392b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,6 +1,7 @@ # This file was autogenerated by dist: https://opensource.axo.dev/cargo-dist/ # # Copyright 2022-2024, axodotdev +# Copyright 2025, Oxide Computer Company # SPDX-License-Identifier: MIT or Apache-2.0 # # CI that: @@ -49,7 +50,7 @@ on: jobs: # Run 'dist plan' (or host) to determine what tasks we need to do plan: - runs-on: "ubuntu-24.04" + runs-on: "ubuntu-22.04" outputs: val: ${{ steps.plan.outputs.manifest }} tag: ${{ !github.event.pull_request && github.ref_name || '' }} @@ -65,7 +66,7 @@ jobs: # we specify bash to get pipefail; it guards against the `curl` command # failing. otherwise `sh` won't catch that `curl` returned non-0 shell: bash - run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/oxidecomputer/cargo-dist/releases/download/v1.0.0-rc.2/dist-installer.sh | sh" + run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/oxidecomputer/cargo-dist/releases/download/v1.0.1/dist-installer.sh | sh" - name: Cache dist uses: actions/upload-artifact@v4 with: @@ -174,7 +175,7 @@ jobs: needs: - plan - build-local-artifacts - runs-on: "ubuntu-24.04" + runs-on: "ubuntu-22.04" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json @@ -224,7 +225,7 @@ jobs: if: ${{ always() && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - runs-on: "ubuntu-24.04" + runs-on: "ubuntu-22.04" outputs: val: ${{ steps.host.outputs.manifest }} steps: @@ -288,7 +289,7 @@ jobs: # still allowing individual publish jobs to skip themselves (for prereleases). # "host" however must run to completion, no skipping allowed! if: ${{ always() && needs.host.result == 'success' }} - runs-on: "ubuntu-24.04" + runs-on: "ubuntu-22.04" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: diff --git a/dist-workspace.toml b/dist-workspace.toml index ddcb376d6..cd8c4322a 100644 --- a/dist-workspace.toml +++ b/dist-workspace.toml @@ -4,7 +4,7 @@ members = ["cargo:."] # Config for 'dist' [dist] # The preferred dist version to use in CI (Cargo.toml SemVer syntax) -cargo-dist-version = "1.0.0-rc.2" +cargo-dist-version = "1.0.1" # CI backends to support ci = "github" # The installers to generate for each app