1
0
Fork 0

Initial commit

This commit is contained in:
Miguel Jacq 2025-10-14 17:40:53 +11:00
commit b10e7b0f5d
Signed by: mig5
GPG key ID: 59B3F0C24135C6A9
22 changed files with 1153 additions and 0 deletions

84
scripts/package.sh Executable file
View file

@ -0,0 +1,84 @@
#!/usr/bin/env bash
set -euo pipefail
# Space-separated list of PHP major.minor versions to build
PHPS="${PHPS:-"7.4 8.0 8.1 8.2 8.3 8.4"}"
# Matrix of base images with their distro codenames (image|codename)
BASE_MATRIX=(
"debian:13|trixie"
"debian:12|bookworm"
"ubuntu:24.04|noble"
"ubuntu:22.04|jammy"
)
# Where to put artifacts on the host
OUT_DIR="${OUT_DIR:-"$(cd "$(dirname "$0")/.."; pwd)/build"}"
# Docker binary
DOCKER_BIN="${DOCKER_BIN:-docker}"
# Pass extra args to `docker build` if needed
EXTRA_BUILD_ARGS=${EXTRA_BUILD_ARGS:-}
export DOCKER_BUILDKIT=1
# Always run from scripts/ so relative paths work the same
cd "$(dirname "$0")"
# Dockerfile is in parent; use repo root as build context
DOCKERFILE="../Dockerfile"
CONTEXT=".."
mkdir -p "$OUT_DIR"
echo "==> Output directory: $OUT_DIR"
echo "==> Dockerfile: $DOCKERFILE (context: $CONTEXT)"
echo "==> PHP versions: $PHPS"
echo "==> Base matrix:"
printf ' - %s\n' "${BASE_MATRIX[@]}"
for entry in "${BASE_MATRIX[@]}"; do
IFS='|' read -r BASE_IMAGE CODENAME <<<"$entry"
for PHP_VER in $PHPS; do
TAG="pkg-php${PHP_VER}-${CODENAME}"
DEST_DIR="${OUT_DIR}/${CODENAME}/php${PHP_VER}"
echo
echo "==== Building: base=${BASE_IMAGE} (${CODENAME}), php=${PHP_VER} -> tag=${TAG}"
echo " Artifacts -> ${DEST_DIR}"
mkdir -p "${DEST_DIR}"
# Build the image.
$DOCKER_BIN build \
-f "${DOCKERFILE}" \
--build-arg "BASE_IMAGE=${BASE_IMAGE}" \
--build-arg "PHP_VER=${PHP_VER}" \
--progress=plain \
-t "${TAG}" \
${EXTRA_BUILD_ARGS} \
"${CONTEXT}"
# Export /dist/ from the image to the host
CID="$($DOCKER_BIN create "${TAG}" sh -c 'exit 0')"
# Copy artifacts
if ! $DOCKER_BIN cp "${CID}:/dist/." "${DEST_DIR}/"; then
echo "!! No /dist found in image ${TAG}."
else
#find "${DEST_DIR}" -type f ! -name "*.deb" -delete || true
# Sanity check
if compgen -G "${DEST_DIR}/*.deb" >/dev/null; then
echo "==> Collected $(ls -1 "${DEST_DIR}"/*.deb | wc -l | tr -d ' ') .deb files"
else
echo "!! No .deb files found for ${TAG} after copy."
fi
fi
done
done
echo
echo " Done. All artifacts are under: ${OUT_DIR}"
echo " Structure: build/<codename>/php<version>/*.deb"

13
scripts/publish.sh Executable file
View file

@ -0,0 +1,13 @@
#!/usr/bin/env bash
set -eoux pipefail
OUT_DIR="${OUT_DIR:-"$(cd "$(dirname "$0")/.."; pwd)/build"}"
for CODENAME in trixie bookworm noble jammy; do
# feed all .deb for that codename into the repo
if compgen -G "${OUT_DIR}/${CODENAME}/php*/*.deb" >/dev/null 2>&1; then
find "${OUT_DIR}/${CODENAME}" -name '*.deb' -print0 \
| xargs -0 -n1 reprepro -b repo includedeb "$CODENAME"
fi
done

66
scripts/render-debian-files.sh Executable file
View file

@ -0,0 +1,66 @@
#!/usr/bin/env bash
set -euo pipefail
# ---- Compute variables ----
PHP_VER="${PHP_VER:?set PHP_VER like 7.4|8.0|8.1|8.2|8.3|8.4}"
PKG="php${PHP_VER}-sqlcipher"
PHP_BIN="php${PHP_VER}"
DOC_DIR="/usr/share/doc/${PKG}"
# Distro codename
if command -v lsb_release >/dev/null 2>&1; then
DIST_CODENAME="${DIST_CODENAME:-$(lsb_release -sc)}"
else
. /etc/os-release 2>/dev/null || true
DIST_CODENAME="${DIST_CODENAME:-${VERSION_CODENAME:-unknown}}"
fi
MAINT_NAME="${MAINT_NAME:-Miguel Jacq}"
MAINT_EMAIL="${MAINT_EMAIL:-mig@mig5.net}"
DATE_RFC2822="$(date -R)"
# Derive package version if not provided
if [[ -z "${PKG_VERSION:-}" ]]; then
if command -v "${PHP_BIN}" >/dev/null 2>&1; then
PHP_FULL="$("${PHP_BIN}" -r 'echo PHP_MAJOR_VERSION,".",PHP_MINOR_VERSION,".",PHP_RELEASE_VERSION;')"
else
PHP_FULL="$(dpkg-query -W -f='${Version}\n' "${PHP_BIN}-dev" 2>/dev/null | sed 's/-.*//;q' || echo "${PHP_VER}.0")"
fi
PKG_VERSION="${PHP_FULL}-1+${DIST_CODENAME}"
fi
# Export everything envsubst must see
export PHP_VER PKG PHP_BIN DOC_DIR DIST_CODENAME PKG_VERSION MAINT_NAME MAINT_EMAIL DATE_RFC2822
# Only substitute the vars we care about
VARS='${PHP_VER} ${PKG} ${PHP_BIN} ${DOC_DIR} ${DIST_CODENAME} ${PKG_VERSION} ${MAINT_NAME} ${MAINT_EMAIL} ${DATE_RFC2822}'
render() {
local src="$1" dst="$2"
[[ -f "$src" ]] || return 0
# Support both ${VAR} and @VAR@ templates
local tmp; tmp="$(mktemp)"
sed -E 's/@([A-Z0-9_]+)@/\${\1}/g' "$src" > "$tmp"
envsubst "$VARS" < "$tmp" > "$dst"
rm -f "$tmp"
}
# Render files
render debian/changelog.in debian/changelog
render debian/control.in debian/control
render debian/copyright.in debian/copyright
render debian/pkg.examples.in "debian/${PKG}.examples"
render debian/pkg.php.in "debian/${PKG}.php"
mkdir -p debian/tests
render debian/tests/control.in debian/tests/control
render debian/tests/basic.in debian/tests/basic
# ---- Self-check: make sure changelog header is valid and no ${...} placeholders remain ----
if [[ -f debian/changelog ]]; then
head -n1 debian/changelog | grep -Eq '^[a-z0-9.+-]+ \([0-9][^)]*\) [^;]+; urgency=' \
|| { echo "ERROR: debian/changelog header invalid:"; sed -n '1,3p' debian/changelog; exit 1; }
! grep -q '\${[A-Z0-9_]\+}' debian/changelog \
|| { echo "ERROR: Unsubstituted variables remain in debian/changelog"; sed -n '1,8p' debian/changelog; exit 1; }
fi

32
scripts/setup-php-sources.sh Executable file
View file

@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -euo pipefail
. /etc/os-release
case "${ID}" in
ubuntu)
apt-get update
apt-get install -y --no-install-recommends software-properties-common
# Adds both deb and deb-src for Ondřejs PPA
add-apt-repository -y -s ppa:ondrej/php
;;
debian)
# Official way per deb.sury.org README
curl -fsSL -o /tmp/debsuryorg-archive-keyring.deb \
https://packages.sury.org/debsuryorg-archive-keyring.deb
# SHA256SUM matches what https://mirrors.dotsrc.org/deb.sury.org/bind-dev/dists/bullseye/main/binary-amd64/Packages shows
echo "d1df4b797498829bb4dbd23de7a88945924a0eac6bce9b6c68e6650c85187f5f /tmp/debsuryorg-archive-keyring.deb" | sha256sum -c -
dpkg -i /tmp/debsuryorg-archive-keyring.deb
codename="$(lsb_release -sc)"
cat >/etc/apt/sources.list.d/php.list <<EOF
deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ ${codename} main
deb-src [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ ${codename} main
EOF
;;
*)
echo "Unsupported distro ID=${ID}" >&2; exit 2;;
esac
apt-get update;
apt-get install -y --no-install-recommends php${PHP_VER}-dev