Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ARG BZDB="-mysql"
FROM bugzilla/bugzilla-perl-slim${BZDB}:20250925.1
FROM bugzilla/bugzilla-perl-slim${BZDB}:20260801.1

ENV DEBIAN_FRONTEND=noninteractive

Expand Down
2 changes: 2 additions & 0 deletions docker/base-image-tags.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
BUGZILLA_PERL_SLIM_TAG=20260801.1
BUGZILLA_PERL_FULL_TAG=20260801.1
148 changes: 125 additions & 23 deletions docker/gen-docker-image.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,51 @@ FILES=()
for f in docker/images/Dockerfile.b*; do
[[ "$f" != *.bak ]] && FILES+=("${f#docker/images/Dockerfile.}")
done

TAG_FILE="docker/base-image-tags.env"

MENU_IMAGES=()
for image in "${FILES[@]}"; do
MENU_IMAGES+=("$image")
if [[ "$image" == bugzilla-perl-slim-* ]]; then
MENU_IMAGES+=("${image/bugzilla-perl-slim-/bugzilla-perl-full-}")
fi
done

write_base_tags_file() {
cat > "$TAG_FILE" <<EOF
BUGZILLA_PERL_SLIM_TAG=${BUGZILLA_PERL_SLIM_TAG}
BUGZILLA_PERL_FULL_TAG=${BUGZILLA_PERL_FULL_TAG}
EOF
}

resolve_base_tag() {
local base_image="$1"

if [ -n "${BUILT_IMAGES[$base_image]}" ]; then
echo "${BUILT_IMAGES[$base_image]}"
return 0
fi

if [[ "$base_image" == "bugzilla-perl-slim" ]]; then
echo "$BUGZILLA_PERL_SLIM_TAG"
elif [[ "$base_image" == "bugzilla-perl-full" ]]; then
echo "$BUGZILLA_PERL_FULL_TAG"
else
echo ""
fi
}

if [ -f "$TAG_FILE" ]; then
# shellcheck disable=SC1090
source "$TAG_FILE"
fi

BUGZILLA_PERL_SLIM_TAG="${BUGZILLA_PERL_SLIM_TAG:-}"
BUGZILLA_PERL_FULL_TAG="${BUGZILLA_PERL_FULL_TAG:-}"

PS3="Choose an image to build or CTRL-C to abort: "
select IMAGE in "All images" "${FILES[@]}"; do
select IMAGE in "All images" "${MENU_IMAGES[@]}"; do
CACHE=""
if [ "$1" == "--no-cache" ]; then
CACHE="--no-cache"
Expand All @@ -43,7 +86,29 @@ select IMAGE in "All images" "${FILES[@]}"; do

# Determine which images to build
if [ "$IMAGE" == "All images" ]; then
IMAGES_TO_BUILD=("${FILES[@]}")
IMAGES_TO_BUILD=()

if [[ " ${FILES[*]} " == *" bugzilla-perl-slim "* ]]; then
IMAGES_TO_BUILD+=("bugzilla-perl-slim")
fi
if [[ " ${FILES[*]} " == *" bugzilla-perl-full "* ]]; then
IMAGES_TO_BUILD+=("bugzilla-perl-full")
fi

for image in "${FILES[@]}"; do
case "$image" in
bugzilla-perl-slim|bugzilla-perl-full)
continue
;;
bugzilla-perl-slim-*)
IMAGES_TO_BUILD+=("$image")
IMAGES_TO_BUILD+=("${image/bugzilla-perl-slim-/bugzilla-perl-full-}")
;;
*)
IMAGES_TO_BUILD+=("$image")
;;
esac
done
else
IMAGES_TO_BUILD=("$IMAGE")
fi
Expand All @@ -52,6 +117,37 @@ select IMAGE in "All images" "${FILES[@]}"; do
declare -A BUILT_IMAGES

for IMAGE in "${IMAGES_TO_BUILD[@]}"; do
DOCKERFILE_IMAGE="$IMAGE"
BUILD_ARGS=()
BASE_IMAGE=""

if [[ "$IMAGE" == bugzilla-perl-full-* ]]; then
DOCKERFILE_IMAGE="${IMAGE/bugzilla-perl-full-/bugzilla-perl-slim-}"
BUILD_ARGS+=(--build-arg SIZE=full)
BASE_IMAGE="bugzilla-perl-full"
elif [[ "$IMAGE" == "bugzilla-perl-full" ]]; then
BASE_IMAGE="bugzilla-perl-slim"
elif [[ "$IMAGE" == bugzilla-perl-slim-* ]]; then
BUILD_ARGS+=(--build-arg SIZE=slim)
BASE_IMAGE="bugzilla-perl-slim"
fi

if [ -n "$BASE_IMAGE" ]; then
BASE_TAG=$(resolve_base_tag "$BASE_IMAGE")
if [ -z "$BASE_TAG" ]; then
echo
echo_red "Could not determine a base tag for ${BASE_IMAGE}."
echo_red "Build ${BASE_IMAGE} first, or set tags in ${TAG_FILE}."
echo
if [ ${#IMAGES_TO_BUILD[@]} -eq 1 ]; then
exit 1
fi
continue
fi
BUILD_ARGS+=(--build-arg "BASE_TAG=${BASE_TAG}")
echo "Using base bugzilla/${BASE_IMAGE}:${BASE_TAG} for ${IMAGE}"
fi

# Figure out the tag name to use for the image. We'll do this by generating
# a code based on today's date, then attempt to pull it from DockerHub. If
# we successfully pull, then it already exists, and we bump the interation
Expand All @@ -66,35 +162,41 @@ select IMAGE in "All images" "${FILES[@]}"; do
echo "##${LINE//?/#}##"
echo "# ${LINE} #"
echo "##${LINE//?/#}##"
if $DOCKER build $CACHE -t "bugzilla/${IMAGE}:${DATE}.${ITER}" -f "docker/images/Dockerfile.${IMAGE}" .; then
if $DOCKER build $CACHE "${BUILD_ARGS[@]}" -t "bugzilla/${IMAGE}:${DATE}.${ITER}" -f "docker/images/Dockerfile.${DOCKERFILE_IMAGE}" .; then
echo
echo_green "The build appears to have succeeded."

# Only update Dockerfiles when building the perl-slim image specifically (not variants like perl-slim-mysql)
if [[ "$IMAGE" == "bugzilla-perl-slim" ]]; then
# Only update literal pinned FROM references when building a base perl image.
if [[ "$IMAGE" == "bugzilla-perl-slim" || "$IMAGE" == "bugzilla-perl-full" ]]; then
echo "Updating FROM lines in Dockerfiles to use bugzilla/${IMAGE}:${DATE}.${ITER}..."
echo

# Update all Dockerfiles that reference this image
for dockerfile in Dockerfile docker/images/Dockerfile.*; do
# Skip backups and temp files
case "$dockerfile" in
*.bak|*.tmp) continue ;;
esac
if [ -f "$dockerfile" ]; then
# Check for both direct references and BZDB variable references
if grep -q "FROM bugzilla/${IMAGE}:" "$dockerfile" || grep -q "FROM bugzilla/${IMAGE}\${BZDB}:" "$dockerfile"; then
# Create a backup
cp "$dockerfile" "${dockerfile}.bak"
echo " Created backup: ${dockerfile}.bak"
# Update the FROM line - handle both direct and BZDB variable patterns
sed -i.tmp "s|FROM bugzilla/${IMAGE}:[^ ]*|FROM bugzilla/${IMAGE}:${DATE}.${ITER}|g" "$dockerfile"
sed -i.tmp "s|FROM bugzilla/${IMAGE}\${BZDB}:[^ ]*|FROM bugzilla/${IMAGE}\${BZDB}:${DATE}.${ITER}|g" "$dockerfile"
rm -f "${dockerfile}.tmp"
echo " Updated: $dockerfile"
fi
for dockerfile in Dockerfile docker/images/Dockerfile.perl-testsuite; do
if [ ! -f "$dockerfile" ]; then
continue
fi
# Check for both direct references and BZDB variable references
if grep -q "FROM bugzilla/${IMAGE}:" "$dockerfile" || grep -q "FROM bugzilla/${IMAGE}\${BZDB}:" "$dockerfile"; then
# Create a backup
cp "$dockerfile" "${dockerfile}.bak"
echo " Created backup: ${dockerfile}.bak"
# Update the FROM line - handle both direct and BZDB variable patterns
sed -i.tmp "s|FROM bugzilla/${IMAGE}:[^ ]*|FROM bugzilla/${IMAGE}:${DATE}.${ITER}|g" "$dockerfile"
sed -i.tmp "s|FROM bugzilla/${IMAGE}\${BZDB}:[^ ]*|FROM bugzilla/${IMAGE}\${BZDB}:${DATE}.${ITER}|g" "$dockerfile"
rm -f "${dockerfile}.tmp"
echo " Updated: $dockerfile"
fi
done

if [[ "$IMAGE" == "bugzilla-perl-slim" ]]; then
BUGZILLA_PERL_SLIM_TAG="${DATE}.${ITER}"
write_base_tags_file
echo " Updated: ${TAG_FILE} (BUGZILLA_PERL_SLIM_TAG=${BUGZILLA_PERL_SLIM_TAG})"
elif [[ "$IMAGE" == "bugzilla-perl-full" ]]; then
BUGZILLA_PERL_FULL_TAG="${DATE}.${ITER}"
write_base_tags_file
echo " Updated: ${TAG_FILE} (BUGZILLA_PERL_FULL_TAG=${BUGZILLA_PERL_FULL_TAG})"
fi
echo
fi

Expand Down
57 changes: 57 additions & 0 deletions docker/images/Dockerfile.bugzilla-perl-full
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
ARG BASE_IMAGE="bugzilla-perl-slim"
ARG BASE_TAG="20260801.1"
FROM bugzilla/${BASE_IMAGE}:${BASE_TAG} AS builder

RUN apt-get update \
&& apt-get dist-upgrade -y \
&& apt-get install -y \
apt-file \
build-essential \
cmake \
curl \
git \
libcairo-dev \
libexpat-dev \
libgd-dev \
libssl-dev \
openssl \
zlib1g-dev \
unzip \
wget

WORKDIR /app

COPY Makefile.PL Bugzilla.pm gen-cpanfile.pl /app/
COPY extensions/ /app/extensions/

RUN cpanm --notest --quiet App::cpm Module::CPANfile Carton::Snapshot

RUN perl Makefile.PL
RUN make cpanfile GEN_CPANFILE_ARGS="-A -U mysql -U mariadb -U pg -U oracle"

RUN carton install

RUN apt-file update
RUN find local -name '*.so' -exec ldd {} \; \
| egrep -v 'not.found|not.a.dynamic.executable' \
| awk '$3 {print $3}' \
| sort -u \
| xargs -IFILE apt-file search -l FILE \
| sort -u > PACKAGES

FROM bugzilla/${BASE_IMAGE}:${BASE_TAG}

ENV DEBIAN_FRONTEND=noninteractive

COPY --from=builder /app/local /app/local
COPY --from=builder /app/PACKAGES /app/PACKAGES

RUN apt-get update \
&& apt-get install -y \
gnupg

RUN apt-get update \
&& apt-get install -y \
$(cat /app/PACKAGES) \
&& rm -rf /var/cache/apt/* /var/lib/apt/lists/*

6 changes: 4 additions & 2 deletions docker/images/Dockerfile.bugzilla-perl-slim-mariadb
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
FROM bugzilla/bugzilla-perl-slim:20250925.1 AS builder
ARG SIZE="slim"
ARG BASE_TAG="20260801.1"
FROM bugzilla/bugzilla-perl-${SIZE}:${BASE_TAG} AS builder

RUN apt-get update \
&& apt-get dist-upgrade -y \
Expand Down Expand Up @@ -38,7 +40,7 @@ RUN find local -name '*.so' -exec ldd {} \; \
| xargs -IFILE apt-file search -l FILE \
| sort -u > PACKAGES

FROM bugzilla/bugzilla-perl-slim:20250925.1
FROM bugzilla/bugzilla-perl-${SIZE}:${BASE_TAG}

ENV DEBIAN_FRONTEND=noninteractive

Expand Down
6 changes: 4 additions & 2 deletions docker/images/Dockerfile.bugzilla-perl-slim-mysql
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
FROM bugzilla/bugzilla-perl-slim:20250925.1 AS builder
ARG SIZE="slim"
ARG BASE_TAG="20260801.1"
FROM bugzilla/bugzilla-perl-${SIZE}:${BASE_TAG} AS builder

RUN apt-get update \
&& apt-get dist-upgrade -y \
Expand Down Expand Up @@ -48,7 +50,7 @@ RUN find local -name '*.so' -exec ldd {} \; \
| xargs -IFILE apt-file search -l FILE \
| sort -u > PACKAGES

FROM bugzilla/bugzilla-perl-slim:20250925.1
FROM bugzilla/bugzilla-perl-${SIZE}:${BASE_TAG}

ENV DEBIAN_FRONTEND=noninteractive

Expand Down
6 changes: 4 additions & 2 deletions docker/images/Dockerfile.bugzilla-perl-slim-pg
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
FROM bugzilla/bugzilla-perl-slim:20250925.1 AS builder
ARG SIZE="slim"
ARG BASE_TAG="20260801.1"
FROM bugzilla/bugzilla-perl-${SIZE}:${BASE_TAG} AS builder

# reinstall the build prereqs on the temporary image
RUN apt-get update \
Expand Down Expand Up @@ -49,7 +51,7 @@ RUN find local -name '*.so' -exec ldd {} \; \

# now we start over with a new image so the final image doesn't contain
# developer tools
FROM bugzilla/bugzilla-perl-slim:20250925.1
FROM bugzilla/bugzilla-perl-${SIZE}:${BASE_TAG}

ENV DEBIAN_FRONTEND=noninteractive

Expand Down
2 changes: 1 addition & 1 deletion docker/images/Dockerfile.perl-testsuite
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# defined by the Mozilla Public License, v. 2.0.

ARG BZDB=""
FROM bugzilla/bugzilla-perl-slim${BZDB}:20250925.1
FROM bugzilla/bugzilla-perl-slim${BZDB}:20260801.1

WORKDIR /app

Expand Down
Loading