Initial commit
This commit is contained in:
		
						commit
						b10e7b0f5d
					
				
					 22 changed files with 1153 additions and 0 deletions
				
			
		
							
								
								
									
										84
									
								
								scripts/package.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										84
									
								
								scripts/package.sh
									
										
									
									
									
										Executable 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
									
								
							
							
						
						
									
										13
									
								
								scripts/publish.sh
									
										
									
									
									
										Executable 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
									
								
							
							
						
						
									
										66
									
								
								scripts/render-debian-files.sh
									
										
									
									
									
										Executable 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
									
								
							
							
						
						
									
										32
									
								
								scripts/setup-php-sources.sh
									
										
									
									
									
										Executable 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řej’s 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 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue