current commit
260827.1.1 · build: Create archive script
#!/bin/bash
#
# Create a .tar.gz archive of the fd project for distribution
#
# Expected environment variables:
#
# TARGET: rust target to publish. Defaults to default rustc target
# BIN_PATH: path to fd binary
# PKG_STAGING: directory to use for staging files to include in the archive
# ARCHIVE_NAME: Name of output file, minus extension, defaults to "fd" with a version appended
#   if VERSION is specified
# VERSION: version to publish
# GITHUB_OUTPUT: file to store github output variables in

if [[ -z "$TARGET" ]]; then
  TARGET="$(rustc -vV | sed -n 's/host: //p')"
fi

PKG_suffix=".tar.gz"
EXE_suffix=""
case ${TARGET} in
*-pc-windows-*)
  PKG_suffix=".zip"
  EXE_suffix=".exe"
  ;;
esac

if [[ -z $BIN_PATH ]]; then
  BIN_PATH=target/${PROFILE:-release}/fd
fi

if [[ -z "$ARCHIVE_NAME" ]]; then
  ARCHIVE_NAME=fd
  [[ -n "$VERSION" ]] && ARCHIVE_NAME+="-v$VERSION"
fi

PKG_NAME=${ARCHIVE_NAME}${PKG_suffix}

staging_dir="${PKG_STAGING:-package}"
ARCHIVE_DIR="${staging_dir}/${ARCHIVE_NAME}/"
mkdir -p "${ARCHIVE_DIR}"

# Binary
cp "${BIN_PATH}" "$ARCHIVE_DIR"

# README, LICENSE and CHANGELOG files
cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "CHANGELOG.md" "$ARCHIVE_DIR"

# Man page
cp "doc/fd.1" "$ARCHIVE_DIR"

# Autocompletion files
cp -r autocomplete "${ARCHIVE_DIR}"

# base compressed package
pushd "${staging_dir}/" >/dev/null
case ${TARGET} in
*-pc-windows-*) 7z -y a "${PKG_NAME}" "${ARCHIVE_NAME}"/* | tail -2 ;;
*) tar czf "${PKG_NAME}" "${ARCHIVE_NAME}"/* ;;
esac;
popd >/dev/null

if [[ -n "$GITHUB_OUTPUT" ]]; then
  echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_OUTPUT
  # Let subsequent steps know where to find the compressed package
  echo "PKG_PATH=${PKG_STAGING}/${PKG_NAME}" >> $GITHUB_OUTPUT
fi