Merge bitcoin/bitcoin#35131: guix, refactor: Minor script cleanups and improvements

53388773af guix: Remove redundant ShellCheck `source` directives (Hennadii Stepanov)
62cf7bc53f guix, refactor: Add `BASE` argument to `*_for_host` functions (Hennadii Stepanov)
5d46429e32 guix, refactor: Move `distsrc_for_host()` to `prelude.bash` (Hennadii Stepanov)
cab65ea9c6 guix, refactor: Move duplicated `profiledir_for_host()` to `prelude.bash` (Hennadii Stepanov)
faa9d4345f guix, refactor: Move duplicated `outdir_for_host()` to `prelude.bash` (Hennadii Stepanov)
6b59fd6b8c guix, refactor: Remove `contains()` function (Hennadii Stepanov)
d4c69a7224 guix, refactor: Remove unused `out_name()` function (Hennadii Stepanov)

Pull request description:

  While working on https://github.com/bitcoin/bitcoin/pull/35098, I reviewed my notes regarding a few minor Guix script flaws and decided to address them here.

  This PR:

  1. Removes unused code.

  2. Reduces code duplication.

  3. Improves consistency across function usage.

  4. Minimizes ShellCheck directive usage.

ACKs for top commit:
  fanquake:
    ACK 53388773af - the move-only deduplication, and dead code removal seem fine. The other (refactoring) changes seem less well motived

Tree-SHA512: d565e31ba49300f3001b04d3143721aced305f41bca6d04c33dc479d568efb2c06d91758619378199f174a40f1306c9418ae80d5478013a65ad96341bea122b1
This commit is contained in:
merge-script
2026-05-30 10:25:25 +01:00
4 changed files with 51 additions and 91 deletions

View File

@@ -139,14 +139,6 @@ fi
## Attest ##
##############
# Usage: out_name $outdir
#
# HOST: The output directory being attested
#
out_name() {
basename "$(dirname "$1")"
}
shasum_already_exists() {
cat <<EOF
--

View File

@@ -85,14 +85,6 @@ export HOSTS="${HOSTS:-x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu ri
x86_64-w64-mingw32
x86_64-apple-darwin arm64-apple-darwin}"
# Usage: distsrc_for_host HOST
#
# HOST: The current platform triple we're building for
#
distsrc_for_host() {
echo "${DISTSRC_BASE}/distsrc-${VERSION}-${1}"
}
# Accumulate a list of build directories that already exist...
hosts_distsrc_exists=""
for host in $HOSTS; do
@@ -244,18 +236,9 @@ SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(git -c log.showSignature=false log --f
# Precious directories are those which should not be cleaned between successive
# guix builds
depends_precious_dir_names='SOURCES_PATH BASE_CACHE SDK_PATH'
precious_dir_names="${depends_precious_dir_names} OUTDIR_BASE PROFILES_BASE"
# Usage: contains IFS-SEPARATED-LIST ITEM
contains() {
for i in ${1}; do
if [ "$i" = "${2}" ]; then
return 0 # Found!
fi
done
return 1
}
depends_precious_dir_names="SOURCES_PATH BASE_CACHE SDK_PATH"
base_dir_names="OUTDIR_BASE PROFILES_BASE"
precious_dir_names="${depends_precious_dir_names} ${base_dir_names}"
# If the user explicitly specified a precious directory, create it so we
# can map it into the container
@@ -287,11 +270,9 @@ mkdir -p "$VAR_BASE"
-- $(printf "print-%s\n" $depends_precious_dir_names)
# Get remaining precious dir definitions from the environment
for precious_dir_name in $precious_dir_names; do
for precious_dir_name in $base_dir_names; do
precious_dir_path="${!precious_dir_name}"
if ! contains "$depends_precious_dir_names" "$precious_dir_name"; then
echo "${precious_dir_name}=${precious_dir_path}"
fi
echo "${precious_dir_name}=${precious_dir_path}"
done
} > "${VAR_BASE}/precious_dirs"
@@ -305,22 +286,6 @@ for host in $HOSTS; do
make -C "${PWD}/depends" -j"$JOBS" download-"$(host_to_commonname "$host")" ${V:+V=1} ${SOURCES_PATH:+SOURCES_PATH="$SOURCES_PATH"}
done
# Usage: outdir_for_host HOST SUFFIX
#
# HOST: The current platform triple we're building for
#
outdir_for_host() {
echo "${OUTDIR_BASE}/${1}${2:+-${2}}"
}
# Usage: profiledir_for_host HOST SUFFIX
#
# HOST: The current platform triple we're building for
#
profiledir_for_host() {
echo "${PROFILES_BASE}/${1}${2:+-${2}}"
}
#########
# BUILD #
@@ -356,7 +321,6 @@ for host in $HOSTS; do
# for the particular $HOST we're building for
export HOST="$host"
# shellcheck disable=SC2030
cat << EOF
INFO: Building ${VERSION:?not set} for platform triple ${HOST:?not set}:
...using reference timestamp: ${SOURCE_DATE_EPOCH:?not set}
@@ -364,9 +328,9 @@ INFO: Building ${VERSION:?not set} for platform triple ${HOST:?not set}:
...from worktree directory: '${PWD}'
...bind-mounted in container to: '/bitcoin'
...in build directory: '$(distsrc_for_host "$HOST")'
...bind-mounted in container to: '$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")'
...bind-mounted in container to: '$(distsrc_for_host "$HOST" "" /distsrc-base)'
...outputting in: '$(outdir_for_host "$HOST")'
...bind-mounted in container to: '$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST")'
...bind-mounted in container to: '$(outdir_for_host "$HOST" "" /outdir-base)'
ADDITIONAL FLAGS (if set)
ADDITIONAL_GUIX_COMMON_FLAGS: ${ADDITIONAL_GUIX_COMMON_FLAGS}
ADDITIONAL_GUIX_ENVIRONMENT_FLAGS: ${ADDITIONAL_GUIX_ENVIRONMENT_FLAGS}
@@ -440,7 +404,7 @@ EOF
# Please read the README.md in the same directory as this file for
# more information.
#
# shellcheck disable=SC2086,SC2031
# shellcheck disable=SC2086
time-machine shell --manifest="${PWD}/contrib/guix/manifest_build.scm" \
--container \
--writable-root \
@@ -468,8 +432,8 @@ EOF
${SOURCES_PATH:+SOURCES_PATH="$SOURCES_PATH"} \
${BASE_CACHE:+BASE_CACHE="$BASE_CACHE"} \
${SDK_PATH:+SDK_PATH="$SDK_PATH"} \
DISTSRC="$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")" \
OUTDIR="$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST")" \
DISTSRC="$(distsrc_for_host "$HOST" "" /distsrc-base)" \
OUTDIR="$(outdir_for_host "$HOST" "" /outdir-base)" \
DIST_ARCHIVE_BASE=/outdir-base/dist-archive \
bash -c "cd /bitcoin && bash contrib/guix/libexec/build.sh"
)

View File

@@ -99,18 +99,10 @@ fi
# Default to building for all supported HOSTs (overridable by environment)
export HOSTS="${HOSTS:-x86_64-w64-mingw32 x86_64-apple-darwin arm64-apple-darwin}"
# Usage: distsrc_for_host HOST
#
# HOST: The current platform triple we're building for
#
distsrc_for_host() {
echo "${DISTSRC_BASE}/distsrc-${VERSION}-${1}-codesigned"
}
# Accumulate a list of build directories that already exist...
hosts_distsrc_exists=""
for host in $HOSTS; do
if [ -e "$(distsrc_for_host "$host")" ]; then
if [ -e "$(distsrc_for_host "$host" codesigned)" ]; then
hosts_distsrc_exists+=" ${host}"
fi
done
@@ -134,7 +126,7 @@ packages cache, the garbage collector roots for Guix environments, and the
output directory.
EOF
for host in $hosts_distsrc_exists; do
echo " ${host} '$(distsrc_for_host "$host")'"
echo " ${host} '$(distsrc_for_host "$host" codesigned)'"
done
exit 1
else
@@ -146,22 +138,18 @@ fi
# Codesigning tarballs SHOULD exist
################
# Usage: outdir_for_host HOST SUFFIX
# Usage: codesigning_tarball_for_host HOST [BASE]
#
# HOST: The current platform triple we're building for
# BASE: Optional. If provided, replaces ${OUTDIR_BASE}
#
outdir_for_host() {
echo "${OUTDIR_BASE}/${1}${2:+-${2}}"
}
codesigning_tarball_for_host() {
case "$1" in
*mingw*)
echo "$(outdir_for_host "$1")/${DISTNAME}-win64-codesigning.tar.gz"
echo "$(outdir_for_host "$1" "" "$2")/${DISTNAME}-win64-codesigning.tar.gz"
;;
*darwin*)
echo "$(outdir_for_host "$1")/${DISTNAME}-${1}-codesigning.tar.gz"
echo "$(outdir_for_host "$1" "" "$2")/${DISTNAME}-${1}-codesigning.tar.gz"
;;
*)
exit 1
@@ -232,14 +220,6 @@ SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(git -c log.showSignature=false log --f
OUTDIR_BASE="${OUTDIR_BASE:-${VERSION_BASE}/output}"
mkdir -p "$OUTDIR_BASE"
# Usage: profiledir_for_host HOST SUFFIX
#
# HOST: The current platform triple we're building for
#
profiledir_for_host() {
echo "${PROFILES_BASE}/${1}${2:+-${2}}"
}
#########
# BUILD #
#########
@@ -274,16 +254,15 @@ for host in $HOSTS; do
# for the particular $HOST we're building for
export HOST="$host"
# shellcheck disable=SC2030
cat << EOF
INFO: Codesigning ${VERSION:?not set} for platform triple ${HOST:?not set}:
...using reference timestamp: ${SOURCE_DATE_EPOCH:?not set}
...from worktree directory: '${PWD}'
...bind-mounted in container to: '/bitcoin'
...in build directory: '$(distsrc_for_host "$HOST")'
...bind-mounted in container to: '$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")'
...in build directory: '$(distsrc_for_host "$HOST" codesigned)'
...bind-mounted in container to: '$(distsrc_for_host "$HOST" codesigned /distsrc-base)'
...outputting in: '$(outdir_for_host "$HOST" codesigned)'
...bind-mounted in container to: '$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST" codesigned)'
...bind-mounted in container to: '$(outdir_for_host "$HOST" codesigned /outdir-base)'
...using detached signatures in: '${DETACHED_SIGS_REPO:?not set}'
...bind-mounted in container to: '/detached-sigs'
EOF
@@ -340,7 +319,7 @@ EOF
# Please read the README.md in the same directory as this file for
# more information.
#
# shellcheck disable=SC2086,SC2031
# shellcheck disable=SC2086
time-machine shell --manifest="${PWD}/contrib/guix/manifest_codesign.scm" \
--container \
--writable-root \
@@ -364,11 +343,11 @@ EOF
JOBS="$JOBS" \
SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:?unable to determine value}" \
${V:+V=1} \
DISTSRC="$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")" \
OUTDIR="$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST" codesigned)" \
DISTSRC="$(distsrc_for_host "$HOST" codesigned /distsrc-base)" \
OUTDIR="$(outdir_for_host "$HOST" codesigned /outdir-base)" \
DIST_ARCHIVE_BASE=/outdir-base/dist-archive \
DETACHED_SIGS_REPO=/detached-sigs \
CODESIGNING_TARBALL="$(OUTDIR_BASE=/outdir-base && codesigning_tarball_for_host "$HOST")" \
CODESIGNING_TARBALL="$(codesigning_tarball_for_host "$HOST" /outdir-base)" \
bash -c "cd /bitcoin && bash contrib/guix/libexec/codesign.sh"
)

View File

@@ -2,10 +2,7 @@
export LC_ALL=C
set -e -o pipefail
# shellcheck source=contrib/shell/realpath.bash
source contrib/shell/realpath.bash
# shellcheck source=contrib/shell/git-utils.bash
source contrib/shell/git-utils.bash
################
@@ -80,6 +77,34 @@ time-machine() {
-- "$@"
}
# Usage: distsrc_for_host HOST [SUFFIX] [BASE]
#
# HOST: The current platform triple we're building for
# SUFFIX: Optional. If provided, appended to the directory name as "-SUFFIX"
# BASE: Optional. If provided, replaces ${DISTSRC_BASE}
#
distsrc_for_host() {
echo "${3:-${DISTSRC_BASE}}/distsrc-${VERSION}-${1}${2:+-${2}}"
}
# Usage: outdir_for_host HOST [SUFFIX] [BASE]
#
# HOST: The current platform triple we're building for
# SUFFIX: Optional. If provided, appended to the directory name as "-SUFFIX"
# BASE: Optional. If provided, replaces ${OUTDIR_BASE}
#
outdir_for_host() {
echo "${3:-${OUTDIR_BASE}}/${1}${2:+-${2}}"
}
# Usage: profiledir_for_host HOST [SUFFIX]
#
# HOST: The current platform triple we're building for
# SUFFIX: Optional. If provided, appended to the directory name as "-SUFFIX"
#
profiledir_for_host() {
echo "${PROFILES_BASE}/${1}${2:+-${2}}"
}
################
# Set common variables