@ 261104.1

260827.1.1 · c276ac79f4257817203f72311ffb1386ab3ddb35

build: Create archive script

Move the code for creating the archive from the GHA yaml into a dedicated script file.

reading declarations

.github/workflows/CICD.yml

@@ -205,44 +205,12 @@ jobs:     - name: Create tarball       id: package       shell: bash+      run: bash scripts/create-archive.sh       env:         BIN_PATH: ${{ steps.bin.outputs.BIN_PATH }}-        version: ${{ needs.crate_metadata.outputs.version }}-      run: |-        PKG_suffix=".tar.gz"-        case ${target} in-        *-pc-windows-*) PKG_suffix=".zip" ;;-        esac-        PKG_BASENAME=${name}-v${version}-${target}-        PKG_NAME=${PKG_BASENAME}${PKG_suffix}-        echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_OUTPUT--        PKG_STAGING="${CICD_INTERMEDIATES_DIR}/package"-        ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/"-        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/${name}.1" "$ARCHIVE_DIR"--        # Autocompletion files-        cp -r autocomplete "${ARCHIVE_DIR}"--        # base compressed package-        pushd "${PKG_STAGING}/" >/dev/null-        case ${target} in-          *-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;;-          *) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;;-        esac;-        popd >/dev/null--        # Let subsequent steps know where to find the compressed package-        echo "PKG_PATH=${PKG_STAGING}/${PKG_NAME}" >> $GITHUB_OUTPUT+        TARGET: ${{ env.target }}+        ARCHIVE_NAME: ${{ env.name }}-v${{ needs.crate_metadata.outputs.version }}-${{ env.target }}+        PKG_STAGING: "${{ env.CICD_INTERMEDIATES_DIR }}/package"      - name: Create Debian package       id: debian-package

.gitignore

@@ -1,3 +1,4 @@ target/ /autocomplete/+/package/ **/*.rs.bk

Makefile

@@ -1,9 +1,16 @@-PROFILE=release+PROFILE?=release EXE=target/$(PROFILE)/fd prefix=/usr/local bindir=$(prefix)/bin datadir=$(prefix)/share exe_name=fd+ifdef VERSION+	ARCHIVE_NAME = fd-v$(VERSION)+else+	ARCHIVE_NAME = fd+endif+export ARCHIVE_NAME+archive_path=package/$(ARCHIVE_NAME).tar.gz  $(EXE): Cargo.toml src/**/*.rs 	cargo build --profile $(PROFILE) --locked@@ -41,6 +48,11 @@ autocomplete/fdfind.fish: contrib/completion/fdfind.fish 	$(comp_dir) 	cp $< $@ +archive: $(archive_path)++$(archive_path): completions $(EXE)+	bash scripts/create-archive.sh+ install: $(EXE) completions 	install -Dm755 $(EXE) $(DESTDIR)$(bindir)/fd 	install -Dm644 autocomplete/fd.bash $(DESTDIR)/$(datadir)/bash-completion/completions/$(exe_name)

scripts/create-archive.sh

new file mode 100755@@ -0,0 +1,67 @@+#!/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