neiam
/grafana-plasmoid
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
Package without bind mounts: lift nfpm out of its image
84b8f07 · gmorell · 2026-11-05 18:40
Message
{commit_body(@commit)}
Files changed
modified
.forgejo/workflows/package.yml
+6
−2
@@ -62,10 +62,14 @@ jobs:
| 62 | 62 | export HOMEPAGE="$FORGE_URL/$REPOSITORY" |
| 63 | 63 | |
| 64 | 64 | rm -rf dist |
| 65 | + # Assigned before it's echoed: `echo "$(build.sh)"` would | |
| 66 | + # swallow a failed build and hand Publish an empty path. | |
| 65 | 67 | for suite in $SUITES; do |
| 66 | − echo "deb $suite $(packaging/build.sh deb "$suite")" >> packages.txt | |
| 68 | + package=$(packaging/build.sh deb "$suite") | |
| 69 | + echo "deb $suite $package" >> packages.txt | |
| 67 | 70 | done |
| 68 | − echo "rpm - $(packaging/build.sh rpm)" >> packages.txt | |
| 71 | + package=$(packaging/build.sh rpm) | |
| 72 | + echo "rpm - $package" >> packages.txt | |
| 69 | 73 | mv packages.txt dist/ |
| 70 | 74 | cat dist/packages.txt |
| 71 | 75 |
modified
packaging/build.sh
+18
−11
@@ -110,21 +110,28 @@ before=$(ls -1 "$out" | sort)
| 110 | 110 | |
| 111 | 111 | rel_config=${config#"$root/"} |
| 112 | 112 | if command -v nfpm >/dev/null 2>&1; then |
| 113 | − (cd "$root" && nfpm package -f "$rel_config" -p "$format" -t dist/) >&2 | |
| 113 | + nfpm=nfpm | |
| 114 | 114 | else |
| 115 | + # nfpm is one static binary; lift it out of its image rather than | |
| 116 | + # running the image. On the CI runner the job is itself a container | |
| 117 | + # talking to the host's daemon, so a bind mount of the checkout names | |
| 118 | + # a path the daemon can't see — but create/cp go over the API and | |
| 119 | + # need no shared filesystem. | |
| 115 | 120 | image=${NFPM_IMAGE:-docker.io/goreleaser/nfpm:v2.41.0} |
| 116 | − if command -v docker >/dev/null 2>&1; then | |
| 117 | − run=(docker run --rm --user "$(id -u):$(id -g)" -v "$root:/w") | |
| 118 | − elif command -v podman >/dev/null 2>&1; then | |
| 119 | − # keep-id: files come out owned by the caller, not a subuid. | |
| 120 | − run=(podman run --rm --userns=keep-id -v "$root:/w:z") | |
| 121 | − else | |
| 122 | − echo "need nfpm, docker or podman" >&2 | |
| 123 | − exit 1 | |
| 121 | + nfpm=$out/.bin/nfpm-${image##*:} | |
| 122 | + if [ ! -x "$nfpm" ]; then | |
| 123 | + if command -v docker >/dev/null 2>&1; then engine=docker | |
| 124 | + elif command -v podman >/dev/null 2>&1; then engine=podman | |
| 125 | + else echo "need nfpm, docker or podman" >&2; exit 1 | |
| 126 | + fi | |
| 127 | + mkdir -p "$out/.bin" | |
| 128 | + container=$("$engine" create "$image") | |
| 129 | + trap '"$engine" rm -f "$container" >/dev/null' EXIT | |
| 130 | + "$engine" cp "$container:/usr/bin/nfpm" "$nfpm.tmp" >&2 | |
| 131 | + chmod +x "$nfpm.tmp" && mv "$nfpm.tmp" "$nfpm" | |
| 124 | 132 | fi |
| 125 | − "${run[@]}" -e SOURCE_DATE_EPOCH -w /w "$image" \ | |
| 126 | − package -f "$rel_config" -p "$format" -t dist/ >&2 | |
| 127 | 133 | fi |
| 134 | +(cd "$root" && "$nfpm" package -f "$rel_config" -p "$format" -t dist/) >&2 | |
| 128 | 135 | |
| 129 | 136 | made=$(comm -13 <(echo "$before") <(ls -1 "$out" | sort) | grep "\.$format\$" || true) |
| 130 | 137 | if [ "$(echo "$made" | grep -c .)" != 1 ]; then |
Parents: 35c3541