Skip to content

Commit 1c3fa61

Browse files
authored
Merge pull request #1105 from Automattic/add/php-helpers
feat: introduce `php-helpers` image
2 parents 18e3c8f + 04cce7b commit 1c3fa61

File tree

6 files changed

+238
-0
lines changed

6 files changed

+238
-0
lines changed

.github/dependabot.yml

+5
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ updates:
4040
schedule:
4141
interval: "weekly"
4242

43+
- package-ecosystem: "docker"
44+
directory: "php-helpers/"
45+
schedule:
46+
interval: "weekly"
47+
4348
- package-ecosystem: "docker"
4449
directory: "skeleton/"
4550
schedule:

.github/workflows/php-helpers.yml

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
name: Build PHP Helpers image
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
paths:
8+
- "php-helpers/**"
9+
- ".github/workflows/php-helpers.yml"
10+
pull_request:
11+
branches:
12+
- master
13+
paths:
14+
- "php-helpers/**"
15+
- ".github/workflows/php-helpers.yml"
16+
workflow_dispatch:
17+
18+
permissions:
19+
contents: read
20+
21+
concurrency:
22+
group: ${{ github.workflow }}-${{ github.ref }}
23+
cancel-in-progress: true
24+
25+
jobs:
26+
build:
27+
name: Build Docker image
28+
runs-on: ubuntu-latest
29+
permissions:
30+
contents: read
31+
packages: write
32+
steps:
33+
- name: Check out the source code
34+
uses: actions/checkout@v4
35+
36+
- name: Set up Docker
37+
uses: docker/setup-docker-action@c2d73c1a11a9b44be6d855121d75c3e0dac814c1 # v4.2.0
38+
with:
39+
daemon-config: |
40+
{
41+
"features": {
42+
"containerd-snapshotter": true
43+
}
44+
}
45+
46+
- name: Login to DockerHub
47+
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3
48+
with:
49+
registry: https://ghcr.io
50+
username: ${{ github.actor }}
51+
password: ${{ secrets.GITHUB_TOKEN }}
52+
if: ${{ github.event_name != 'pull_request' }}
53+
54+
- name: Set up Docker Buildx
55+
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
56+
57+
- name: Build and push
58+
uses: docker/bake-action@4ba453fbc2db7735392b93edf935aaf9b1e8f747 # v6.5.0
59+
with:
60+
source: .
61+
workdir: php-helpers
62+
files: docker-bake.hcl
63+
push: ${{ github.event_name != 'pull_request' }}
64+
no-cache: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }}
65+
set: |
66+
*.output=type=docker,rewrite-timestamp=true
67+
*.output=type=image,push=${{ github.base_ref == null }},rewrite-timestamp=true,name=ghcr.io/automattic/vip-container-images/php-helpers:latest
68+
env:
69+
SOURCE_DATE_EPOCH: 0

php-helpers/.dockerignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*

php-helpers/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*

php-helpers/Dockerfile

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
FROM --platform=${BUILDPLATFORM} tonistiigi/xx:latest@sha256:923441d7c25f1e2eb5789f82d987693c47b8ed987c4ab3b075d6ed2b5d6779a3 AS xx
2+
3+
FROM --platform=${BUILDPLATFORM} ubuntu:24.04@sha256:2e863c44b718727c860746568e1d54afd13b2fa71b160f5cd9058fc436217b30 AS common
4+
ARG TARGETPLATFORM
5+
COPY --from=xx / /
6+
ENV DEBIAN_FRONTEND=noninteractive
7+
RUN \
8+
apt-get update && \
9+
apt-get install -y --no-install-recommends clang cmake file lld make pkgconf && \
10+
xx-apt-get update && \
11+
xx-apt-get install -y binutils gcc g++ libc6-dev && \
12+
xx-clang --setup-target-triple && \
13+
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
14+
15+
ENV SOURCE_DATE_EPOCH=0
16+
WORKDIR /src
17+
18+
19+
20+
FROM --platform=${BUILDPLATFORM} common AS php-common
21+
ARG TARGETPLATFORM
22+
RUN \
23+
apt-get update && \
24+
apt-get install -y curl lsb-release ca-certificates gnupg --no-install-recommends && \
25+
echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list && \
26+
curl -sSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x71DAEAAB4AD4CAB6" | gpg --dearmor > /etc/apt/trusted.gpg.d/ppa-ondrej-php.gpg && \
27+
xx-apt-get update && \
28+
apt-get install -y shtool php-pear && \
29+
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* && \
30+
sed -i '/^Package: shtool$/a Multi-Arch: foreign' /var/lib/dpkg/status && \
31+
pecl bundle timezonedb
32+
33+
34+
35+
FROM --platform=${BUILDPLATFORM} common AS build-mydumper
36+
ARG TARGETPLATFORM
37+
RUN \
38+
echo 'DPkg::Pre-Invoke { "rm -f /var/lib/dpkg/info/*.postinst || true"; };' > /etc/apt/apt.conf.d/99local && \
39+
xx-apt-get update && \
40+
xx-apt-get install --no-install-recommends -y -oDPkg::ConfigurePending=0 libglib2.0-dev || true && \
41+
xx-apt-get install --no-install-recommends -y -oDPkg::ConfigurePending=0 libglib2.0-dev || true && \
42+
xx-apt-get install --no-install-recommends -y -oDPkg::ConfigurePending=0 libglib2.0-dev && \
43+
xx-apt-get install --no-install-recommends -y \
44+
zlib1g-dev libpcre3-dev libssl-dev libzstd-dev libmysqlclient-dev && \
45+
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
46+
47+
WORKDIR /src/mydumper
48+
ADD https://github.com/mydumper/mydumper/archive/refs/tags/v0.18.1-1.tar.gz mydumper.tar.gz
49+
RUN \
50+
echo "0cce6f1e15b474c35d57e9bcd87d8469 mydumper.tar.gz" | md5sum -c - && \
51+
tar -xzf mydumper.tar.gz --strip-components=1 && \
52+
sed -i 's/-Werror//g' CMakeLists.txt && \
53+
cmake -B build $(xx-clang --print-cmake-defines) && \
54+
cmake --build build -j$(nproc) && \
55+
cmake --install build && \
56+
rm -rf build
57+
58+
59+
60+
FROM --platform=${BUILDPLATFORM} php-common AS php81
61+
WORKDIR /src/timezonedb
62+
RUN \
63+
xx-apt-get update && \
64+
xx-apt-get install -y --no-install-recommends php8.1-dev && \
65+
phpize && ./configure --host=$(xx-clang --print-target-triple) && make -j$(nproc) && make install && \
66+
make distclean && \
67+
xx-apt-get remove --purge -y --auto-remove php8.1-dev && \
68+
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
69+
70+
71+
72+
FROM --platform=${BUILDPLATFORM} php-common AS php82
73+
WORKDIR /src/timezonedb
74+
RUN \
75+
xx-apt-get update && \
76+
xx-apt-get install -y --no-install-recommends php8.2-dev && \
77+
phpize && ./configure --host=$(xx-clang --print-target-triple) && make -j$(nproc) && make install && \
78+
make distclean && \
79+
xx-apt-get remove --purge -y --auto-remove php8.2-dev && \
80+
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
81+
82+
83+
84+
FROM --platform=${BUILDPLATFORM} php-common AS php83
85+
WORKDIR /src/timezonedb
86+
RUN \
87+
xx-apt-get update && \
88+
xx-apt-get install -y --no-install-recommends php8.3-dev && \
89+
phpize && ./configure --host=$(xx-clang --print-target-triple) && make -j$(nproc) && make install && \
90+
make distclean && \
91+
xx-apt-get remove --purge -y --auto-remove php8.3-dev && \
92+
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
93+
94+
95+
96+
FROM --platform=${BUILDPLATFORM} php-common AS php84
97+
WORKDIR /src/timezonedb
98+
RUN \
99+
xx-apt-get update && \
100+
xx-apt-get install -y --no-install-recommends php8.4-dev && \
101+
phpize && ./configure --host=$(xx-clang --print-target-triple) && make -j$(nproc) && make install && \
102+
make distclean && \
103+
xx-apt-get remove --purge -y --auto-remove php8.4-dev && \
104+
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
105+
106+
107+
108+
FROM scratch
109+
COPY --from=build-mydumper /usr/local/bin/mydumper /usr/local/bin/myloader /etc/mydumper.cnf /
110+
COPY --from=php81 /usr/lib/php/20210902/timezonedb.so /usr/lib/php/20210902/timezonedb.so
111+
COPY --from=php82 /usr/lib/php/20220829/timezonedb.so /usr/lib/php/20220829/timezonedb.so
112+
COPY --from=php83 /usr/lib/php/20230831/timezonedb.so /usr/lib/php/20230831/timezonedb.so
113+
COPY --from=php84 /usr/lib/php/20240924/timezonedb.so /usr/lib/php/20240924/timezonedb.so

php-helpers/docker-bake.hcl

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
target "base" {
2+
dockerfile = "Dockerfile"
3+
tags = ["ghcr.io/automattic/vip-container-images/php-helpers:latest"]
4+
platforms = ["linux/amd64", "linux/arm64"]
5+
pull = true
6+
output = [
7+
"type=docker"
8+
]
9+
10+
cache-from = [
11+
"type=gha,scope=php-helpers"
12+
]
13+
14+
cache-to = [
15+
"type=gha,mode=max,scope=php-helpers"
16+
]
17+
}
18+
19+
target "mydumper" {
20+
inherits = ["base"]
21+
target = "mydumper"
22+
}
23+
24+
target "php81" {
25+
inherits = ["base"]
26+
target = "php81"
27+
}
28+
29+
target "php82" {
30+
inherits = ["base"]
31+
target = "php82"
32+
}
33+
34+
target "php83" {
35+
inherits = ["base"]
36+
target = "php83"
37+
}
38+
39+
target "php84" {
40+
inherits = ["base"]
41+
target = "php84"
42+
}
43+
44+
target "default" {
45+
inherits = ["base"]
46+
output = [
47+
"type=local,dest=IMAGE",
48+
]
49+
}

0 commit comments

Comments
 (0)