aboutsummaryrefslogtreecommitdiffstats
path: root/.extras/image-builder/build-sbo-testbuild.sh
diff options
context:
space:
mode:
Diffstat (limited to '.extras/image-builder/build-sbo-testbuild.sh')
-rwxr-xr-x.extras/image-builder/build-sbo-testbuild.sh131
1 files changed, 0 insertions, 131 deletions
diff --git a/.extras/image-builder/build-sbo-testbuild.sh b/.extras/image-builder/build-sbo-testbuild.sh
deleted file mode 100755
index d04c426..0000000
--- a/.extras/image-builder/build-sbo-testbuild.sh
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/bin/bash
-# build-sbo-testbuild.sh — sbo-testbuild:{ver} FROM sbo-full:{ver}.
-# Adds sbopkg + sbo-maintainer-tools from prebuilt .txz in PKGDIR.
-# Rebuilds when the full image OR the .txz set changes.
-set -euo pipefail
-HERE="$(cd "$(dirname "$0")" && pwd)"
-source "${HERE}/config"
-LOG_TAG=testbuild
-source "${HERE}/lib.sh"
-
-FULL_IMAGE="${REGISTRY}/sbo-full"
-TB_IMAGE="${REGISTRY}/sbo-testbuild"
-DIGEST_LABEL="sbo.testbuild.full-digest"
-PKGS_LABEL="sbo.testbuild.pkgs-hash"
-
-FORCE=false
-OPT_VERSION=""
-while [[ $# -gt 0 ]]; do
- case "$1" in
- --version) OPT_VERSION="$2"; shift 2 ;;
- --force) FORCE=true; shift ;;
- *) _err "unknown argument: $1" ;;
- esac
-done
-if [[ -n "${OPT_VERSION}" ]]; then
- BUILD_VARIANTS=("${OPT_VERSION}")
-else
- BUILD_VARIANTS=("${VARIANTS[@]}")
-fi
-
-# Verify the required packages (*.t?z) are present before doing anything.
-require_pkgs() {
- [[ -d "${PKGDIR}" ]] || _err "PKGDIR missing: ${PKGDIR}"
- compgen -G "${PKGDIR}/sbopkg-*.t?z" >/dev/null \
- || _err "no sbopkg-*.t?z in ${PKGDIR}"
- compgen -G "${PKGDIR}/sbo-maintainer-tools-*.t?z" >/dev/null \
- || _err "no sbo-maintainer-tools-*.t?z in ${PKGDIR}"
-}
-
-# needs_rebuild FULL_TAG TB_TAG PKGS_HASH -> 0 if rebuild needed
-needs_rebuild() {
- local full_tag="$1" tb_tag="$2" pkgs_hash="$3"
- [[ "${FORCE}" == "true" ]] && { _log " --force."; return 0; }
-
- local full_digest
- full_digest=$(docker inspect --format '{{index .RepoDigests 0}}' \
- "${full_tag}" 2>/dev/null || echo "")
- [[ -n "${full_digest}" ]] || { _warn " no full digest; rebuilding."; return 0; }
-
- local rec_digest rec_pkgs
- rec_digest=$(docker inspect \
- --format "{{index .Config.Labels \"${DIGEST_LABEL}\"}}" \
- "${tb_tag}" 2>/dev/null || echo "")
- rec_pkgs=$(docker inspect \
- --format "{{index .Config.Labels \"${PKGS_LABEL}\"}}" \
- "${tb_tag}" 2>/dev/null || echo "")
-
- if [[ "${full_digest}" == "${rec_digest}" && "${pkgs_hash}" == "${rec_pkgs}" ]]; then
- _log " full image and .txz set unchanged; skipping."
- return 1
- fi
- _log " full image or .txz set changed; rebuilding."
- return 0
-}
-
-build_variant() {
- local VERSION="$1"
- local FULL_TAG="${FULL_IMAGE}:${VERSION}"
- local TB_TAG="${TB_IMAGE}:${VERSION}"
- _log "=== ${TB_TAG} ==="
-
- _log " Pulling ${FULL_TAG}..."
- docker pull "${FULL_TAG}"
-
- local PKGS_HASH; PKGS_HASH="$(txz_hash "${PKGDIR}")"
-
- if ! needs_rebuild "${FULL_TAG}" "${TB_TAG}" "${PKGS_HASH}"; then
- return 0
- fi
-
- local FULL_DIGEST
- FULL_DIGEST=$(docker inspect --format '{{index .RepoDigests 0}}' "${FULL_TAG}" 2>/dev/null || echo "")
-
- local WORKDIR; WORKDIR="$(mktemp -d /tmp/sbo-testbuild.XXXXXX)"
- # shellcheck disable=SC2064
- trap "rm -rf '${WORKDIR}'" EXIT
- mkdir -p "${WORKDIR}/pkgs"
- cp "${PKGDIR}"/sbopkg-*.t?z "${PKGDIR}"/sbo-maintainer-tools-*.t?z "${WORKDIR}/pkgs/"
-
- cat > "${WORKDIR}/Dockerfile" <<DOCKERFILE
-FROM ${FULL_TAG}
-LABEL maintainer="danix <danix@danix.xyz>"
-COPY pkgs/ /tmp/pkgs/
-RUN installpkg /tmp/pkgs/* && rm -rf /tmp/pkgs
-RUN /sbin/ldconfig
-LABEL org.opencontainers.image.created="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
-LABEL org.opencontainers.image.title="SBo test-build env ${VERSION} (x86_64)"
-LABEL org.opencontainers.image.description="Slackware ${VERSION} full + sbopkg + sbo-maintainer-tools"
-LABEL slackware.version="${VERSION}"
-LABEL ${DIGEST_LABEL}="${FULL_DIGEST}"
-LABEL ${PKGS_LABEL}="${PKGS_HASH}"
-CMD ["/bin/bash"]
-DOCKERFILE
-
- local BUILD_FLAGS=()
- [[ "${FORCE}" == "true" ]] && BUILD_FLAGS+=(--no-cache)
- # Explicit exit checks: build_variant runs in an `if ! (...)` condition
- # (see Main), which suppresses `set -e` in this subshell, so a failed build
- # would otherwise push a nonexistent tag and log "Done".
- _log " Building ${TB_TAG}..."
- if ! docker build "${BUILD_FLAGS[@]}" -t "${TB_TAG}" "${WORKDIR}"; then
- _warn " build failed for ${TB_TAG}; not pushing."
- return 1
- fi
- _log " Pushing ${TB_TAG}..."
- if ! docker push "${TB_TAG}"; then
- _warn " push failed for ${TB_TAG}."
- return 1
- fi
- _log "=== Done: ${TB_TAG} ==="
-}
-
-require_pkgs
-rc=0
-for VERSION in "${BUILD_VARIANTS[@]}"; do
- if ! ( build_variant "${VERSION}" ); then
- _warn "variant ${VERSION} failed; continuing."
- rc=1
- fi
-done
-exit "${rc}"