Skip to content

Commit d1abd02

Browse files
Multi-platform builds using GitHub workflows
1 parent db76f85 commit d1abd02

13 files changed

+176
-123
lines changed

.github/workflows/hooks.yml

+7-2
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,22 @@ jobs:
1515
matrix:
1616
version: ['10.0', '11.0', '12.0', '13.0']
1717
php: ['7.3']
18-
archi: ['amd64']
1918
variant: ['apache', 'fpm', 'fpm-alpine']
2019

2120
steps:
2221
- name: Check Out Repo
2322
uses: actions/checkout@v2
2423

24+
- name: Setup QEMU
25+
uses: docker/setup-qemu-action@v1
26+
27+
- name: Setup Docker Buildx
28+
uses: docker/setup-buildx-action@v1
29+
2530
- name: Execute CI hooks
2631
id: docker_hooks
2732
run: |
28-
cd images/${{ matrix.version }}/php${{ matrix.php }}-${{ matrix.variant }}-${{ matrix.archi }}
33+
cd images/${{ matrix.version }}/php${{ matrix.php }}-${{ matrix.variant }}
2934
./hooks/run
3035
3136
- name: Display docker images

.github/workflows/push.yml

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
2+
name: Docker Image Push
3+
4+
on:
5+
workflow_dispatch:
6+
inputs:
7+
version:
8+
description: 'Image version to push (only specify one)'
9+
required: true
10+
default: '14.0'
11+
platform:
12+
description: 'Comma-separated list of platforms'
13+
required: true
14+
default: 'linux/arm/v7,linux/arm64,linux/386,linux/amd64'
15+
16+
jobs:
17+
build:
18+
runs-on: ubuntu-latest
19+
strategy:
20+
matrix:
21+
php: ['7.3']
22+
variant: ['apache', 'fpm', 'fpm-alpine']
23+
24+
steps:
25+
- name: Checkout Repo
26+
uses: actions/checkout@v2
27+
28+
- name: Setup QEMU
29+
uses: docker/setup-qemu-action@v1
30+
31+
- name: Setup Docker Buildx
32+
uses: docker/setup-buildx-action@v1
33+
34+
- name: Execute push hook
35+
id: docker_push_hook
36+
env:
37+
DOCKER_LOGIN: ${{ secrets.DOCKER_LOGIN }}
38+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
39+
DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
40+
DOCKER_PLATFORM: ${{ github.event.inputs.platform }}
41+
run: |
42+
cd images/${{ github.event.inputs.version }}/php${{ matrix.php }}-${{ matrix.variant }}
43+
./hooks/run_push

.travis.yml

+23-44
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ branches:
99
before_install:
1010
- env | sort
1111
- export home=$(pwd)
12-
- export travis_dir="${home}/images/${VERSION}/php${PHP_VERSION}-${VARIANT}-${ARCHI}"
13-
- export TAG=${VERSION}-php${PHP_VERSION}-${VARIANT}-${ARCHI}
12+
- export travis_dir="${home}/images/${VERSION}/php${PHP_VERSION}-${VARIANT}"
13+
- export TAG=${VERSION}-php${PHP_VERSION}-${VARIANT}
1414
- export VCS_REF=`git rev-parse --short HEAD`
1515
- export BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"`
1616
- export IMAGE_NAME=monogramm/docker-dolibarr:${TAG}
@@ -63,47 +63,26 @@ matrix:
6363
# # Ref: https://docs.travis-ci.com/user/reference/osx
6464
# osx_image: xcode11.3
6565
allow_failures:
66-
- env: VERSION=develop PHP_VERSION=7.2 VARIANT=fpm-alpine ARCHI=i386
67-
- env: VERSION=develop PHP_VERSION=7.2 VARIANT=fpm-alpine ARCHI=amd64
68-
- env: VERSION=develop PHP_VERSION=7.2 VARIANT=fpm ARCHI=i386
69-
- env: VERSION=develop PHP_VERSION=7.2 VARIANT=fpm ARCHI=amd64
70-
- env: VERSION=develop PHP_VERSION=7.2 VARIANT=apache ARCHI=i386
71-
- env: VERSION=develop PHP_VERSION=7.2 VARIANT=apache ARCHI=amd64
66+
- env: VERSION=develop PHP_VERSION=7.2 VARIANT=fpm-alpine
67+
- env: VERSION=develop PHP_VERSION=7.2 VARIANT=fpm
68+
- env: VERSION=develop PHP_VERSION=7.2 VARIANT=apache
7269

7370
env: # Environments
74-
- VERSION=develop PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=i386
75-
- VERSION=develop PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=amd64
76-
- VERSION=develop PHP_VERSION=7.3 VARIANT=fpm ARCHI=i386
77-
- VERSION=develop PHP_VERSION=7.3 VARIANT=fpm ARCHI=amd64
78-
- VERSION=develop PHP_VERSION=7.3 VARIANT=apache ARCHI=i386
79-
- VERSION=develop PHP_VERSION=7.3 VARIANT=apache ARCHI=amd64
80-
- VERSION=10.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=i386
81-
- VERSION=10.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=amd64
82-
- VERSION=10.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=i386
83-
- VERSION=10.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=amd64
84-
- VERSION=10.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=i386
85-
- VERSION=10.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=amd64
86-
- VERSION=11.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=i386
87-
- VERSION=11.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=amd64
88-
- VERSION=11.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=i386
89-
- VERSION=11.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=amd64
90-
- VERSION=11.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=i386
91-
- VERSION=11.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=amd64
92-
- VERSION=12.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=i386
93-
- VERSION=12.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=amd64
94-
- VERSION=12.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=i386
95-
- VERSION=12.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=amd64
96-
- VERSION=12.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=i386
97-
- VERSION=12.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=amd64
98-
- VERSION=13.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=i386
99-
- VERSION=13.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=amd64
100-
- VERSION=13.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=i386
101-
- VERSION=13.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=amd64
102-
- VERSION=13.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=i386
103-
- VERSION=13.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=amd64
104-
- VERSION=14.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=i386
105-
- VERSION=14.0 PHP_VERSION=7.3 VARIANT=fpm-alpine ARCHI=amd64
106-
- VERSION=14.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=i386
107-
- VERSION=14.0 PHP_VERSION=7.3 VARIANT=fpm ARCHI=amd64
108-
- VERSION=14.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=i386
109-
- VERSION=14.0 PHP_VERSION=7.3 VARIANT=apache ARCHI=amd64
71+
- VERSION=14.0 PHP_VERSION=7.3 VARIANT=apache
72+
- VERSION=14.0 PHP_VERSION=7.3 VARIANT=fpm
73+
- VERSION=14.0 PHP_VERSION=7.3 VARIANT=fpm-alpine
74+
- VERSION=13.0 PHP_VERSION=7.3 VARIANT=apache
75+
- VERSION=13.0 PHP_VERSION=7.3 VARIANT=fpm
76+
- VERSION=13.0 PHP_VERSION=7.3 VARIANT=fpm-alpine
77+
- VERSION=12.0 PHP_VERSION=7.3 VARIANT=apache
78+
- VERSION=12.0 PHP_VERSION=7.3 VARIANT=fpm
79+
- VERSION=12.0 PHP_VERSION=7.3 VARIANT=fpm-alpine
80+
- VERSION=11.0 PHP_VERSION=7.3 VARIANT=apache
81+
- VERSION=11.0 PHP_VERSION=7.3 VARIANT=fpm
82+
- VERSION=11.0 PHP_VERSION=7.3 VARIANT=fpm-alpine
83+
- VERSION=10.0 PHP_VERSION=7.3 VARIANT=apache
84+
- VERSION=10.0 PHP_VERSION=7.3 VARIANT=fpm
85+
- VERSION=10.0 PHP_VERSION=7.3 VARIANT=fpm-alpine
86+
- VERSION=develop PHP_VERSION=7.3 VARIANT=apache
87+
- VERSION=develop PHP_VERSION=7.3 VARIANT=fpm
88+
- VERSION=develop PHP_VERSION=7.3 VARIANT=fpm-alpine

template/Dockerfile.alpine.template

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM %%ARCHI%%/php:%%PHP_VERSION%%-%%VARIANT%%
1+
FROM php:%%PHP_VERSION%%-%%VARIANT%%
22

33
# Install the packages we need
44
# Install the PHP extensions we need

template/Dockerfile.debian.template

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM %%ARCHI%%/php:%%PHP_VERSION%%-%%VARIANT%%
1+
FROM php:%%PHP_VERSION%%-%%VARIANT%%
22

33
# Install the packages we need
44
# Install the PHP extensions we need

template/docker-compose.apache.test.yml

-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ services:
3535
context: ./
3636
dockerfile: Dockerfile
3737
args:
38-
- TAG=${TAG}
3938
- VCS_REF=${VCS_REF}
4039
- BUILD_DATE=${BUILD_DATE}
4140
image: ${IMAGE_NAME}

template/docker-compose.fpm.test.yml

-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ services:
3535
context: ./
3636
dockerfile: Dockerfile
3737
args:
38-
- TAG=${TAG}
3938
- VCS_REF=${VCS_REF}
4039
- BUILD_DATE=${BUILD_DATE}
4140
image: ${IMAGE_NAME}

template/hooks/build

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
# https://docs.docker.com/docker-hub/builds/advanced/
55
# https://microbadger.com/labels
66

7-
docker build \
8-
--build-arg "TAG=${DOCKER_TAG}" \
7+
docker buildx build \
98
--build-arg "VCS_REF=$(git rev-parse --short HEAD)" \
109
--build-arg "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
10+
--load \
1111
-f "$DOCKERFILE_PATH" \
1212
-t "$IMAGE_NAME" .

template/hooks/post_push

+7-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@
66
if [ -f ./.dockertags ]; then
77
for tag in $(cat ./.dockertags); do
88
if [ ! "${tag}" = "${DOCKER_TAG}" ]; then
9-
docker tag "$IMAGE_NAME" "$DOCKER_REPO:$tag"
10-
docker push "$DOCKER_REPO:$tag"
9+
docker buildx build \
10+
--build-arg "VCS_REF=$(git rev-parse --short HEAD)" \
11+
--build-arg "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
12+
--platform "$DOCKER_PLATFORM" \
13+
--push \
14+
-f "$DOCKERFILE_PATH" \
15+
-t "$DOCKER_REPO:$tag" .
1116
fi
1217
done
1318
fi

template/hooks/pre_push

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
# https://docs.docker.com/docker-hub/builds/advanced/
55

66
if [ -n "${DOCKER_PASSWORD}" ] && [ -n "${DOCKER_REGISTRY}" ]; then
7-
docker login -u "${DOCKER_LOGIN}" -p "${DOCKER_PASSWORD}" "${DOCKER_REGISTRY}"
7+
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_LOGIN}" --password-stdin "${DOCKER_REGISTRY}"
88
fi

template/hooks/pre_test

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ if [ ! -f '.env' ]; then
1010
mv .env.tmp .env
1111
fi
1212

13+
export VCS_REF=$(git rev-parse --short HEAD)
14+
export BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
15+
1316
#echo 'Preparing persisted data...'
1417
#mkdir -p "${APP_HOME:-/srv/dolibarr}"
1518
#chown 777 "${APP_HOME:-/srv/dolibarr}"

template/hooks/run_push

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/bin/bash
2+
3+
# Custom script to run locally DockerHub hooks
4+
# See documentation for details:
5+
# https://docs.docker.com/docker-hub/builds/advanced/
6+
7+
echo "Custom script to run locally DockerHub hooks..."
8+
set -e
9+
10+
export SOURCE_BRANCH
11+
SOURCE_BRANCH=$(git rev-parse --abbrev-ref HEAD)
12+
export SOURCE_COMMIT
13+
SOURCE_COMMIT=$(git rev-parse --short HEAD)
14+
export COMMIT_MSG
15+
COMMIT_MSG=$(git log -1 --format=%s)
16+
17+
export DOCKER_REPO=monogramm/docker-dolibarr
18+
export DOCKERFILE_PATH=Dockerfile
19+
export DOCKER_TAG=${VARIANT}
20+
export IMAGE_NAME=${DOCKER_REPO}:${DOCKER_TAG}
21+
22+
# Execute hooks in given order
23+
IFS=',' read -ra STEPS <<< "${1:-push}"
24+
for step in "${STEPS[@]}"
25+
do
26+
for hook in "pre_${step}" "${step}" "post_${step}"; do
27+
if [ -f "./hooks/${hook}" ]; then
28+
echo "Executing ${hook} hook..."
29+
"./hooks/${hook}"
30+
fi
31+
done
32+
done
33+
34+
echo "DockerHub hooks finished"

update.sh

+54-68
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,6 @@ variants=(
3131
fpm-alpine
3232
)
3333

34-
archis=(
35-
amd64
36-
#arm32v5
37-
#arm32v6
38-
#arm32v7
39-
#arm64v8
40-
i386
41-
#ppc64le
42-
)
43-
4434
min_version='10.0'
4535
dockerLatest='13.0'
4636

@@ -73,69 +63,65 @@ for latest in "${latests[@]}"; do
7363
for php_version in "${php_versions[@]}"; do
7464

7565
for variant in "${variants[@]}"; do
76-
77-
for archi in "${archis[@]}"; do
78-
# Create the version+php_version+variant directory with a Dockerfile.
79-
dir="images/$version/php$php_version-$variant-$archi"
80-
if [ -d "$dir" ]; then
81-
continue
82-
fi
83-
echo "generating $latest [$version] php$php_version-$variant-$archi"
84-
mkdir -p "$dir"
85-
86-
# Copy the files
87-
template="template/Dockerfile.${base[$variant]}.template"
88-
cp "$template" "$dir/Dockerfile"
89-
cp "template/entrypoint.sh" "$dir/entrypoint.sh"
90-
91-
cp -r "template/hooks" "$dir/"
92-
cp -r "template/test" "$dir/"
93-
cp "template/.env" "$dir/.env"
94-
cp "template/.dockerignore" "$dir/.dockerignore"
95-
cp "template/docker-compose.${compose[$variant]}.test.yml" "$dir/docker-compose.test.yml"
96-
97-
if [ -n "${conf[$variant]}" ] && [ -d "template/${conf[$variant]}" ]; then
98-
cp -r "template/${conf[$variant]}" "$dir/${conf[$variant]}"
66+
# Create the version+php_version+variant directory with a Dockerfile.
67+
dir="images/$version/php$php_version-$variant"
68+
if [ -d "$dir" ]; then
69+
continue
70+
fi
71+
echo "generating $latest [$version] php$php_version-$variant"
72+
mkdir -p "$dir"
73+
74+
# Copy the files
75+
template="template/Dockerfile.${base[$variant]}.template"
76+
cp "$template" "$dir/Dockerfile"
77+
cp "template/entrypoint.sh" "$dir/entrypoint.sh"
78+
79+
cp -r "template/hooks" "$dir/"
80+
cp -r "template/test" "$dir/"
81+
cp "template/.env" "$dir/.env"
82+
cp "template/.dockerignore" "$dir/.dockerignore"
83+
cp "template/docker-compose.${compose[$variant]}.test.yml" "$dir/docker-compose.test.yml"
84+
85+
if [ -n "${conf[$variant]}" ] && [ -d "template/${conf[$variant]}" ]; then
86+
cp -r "template/${conf[$variant]}" "$dir/${conf[$variant]}"
87+
fi
88+
89+
# Replace the variables.
90+
sed -ri -e '
91+
s/%%PHP_VERSION%%/'"$php_version"'/g;
92+
s/%%VARIANT%%/'"$variant"'/g;
93+
s/%%VERSION%%/'"$latest"'/g;
94+
s/%%CMD%%/'"${cmd[$variant]}"'/g;
95+
' "$dir/Dockerfile"
96+
97+
sed -ri -e '
98+
s|DOCKER_TAG=.*|DOCKER_TAG='"$version"'|g;
99+
s|DOCKER_REPO=.*|DOCKER_REPO='"$dockerRepo"'|g;
100+
' "$dir/hooks/run"
101+
102+
# Create a list of "alias" tags for DockerHub post_push
103+
if [ "$version" = "$dockerLatest" ]; then
104+
if [ "$variant" = 'apache' ]; then
105+
echo "$latest-$variant $version-$variant $variant $latest $version latest " > "$dir/.dockertags"
106+
else
107+
echo "$latest-$variant $version-$variant $variant " > "$dir/.dockertags"
99108
fi
100-
101-
# Replace the variables.
102-
sed -ri -e '
103-
s/%%PHP_VERSION%%/'"$php_version"'/g;
104-
s/%%VARIANT%%/'"$variant"'/g;
105-
s/%%ARCHI%%/'"$archi"'/g;
106-
s/%%VERSION%%/'"$latest"'/g;
107-
s/%%CMD%%/'"${cmd[$variant]}"'/g;
108-
' "$dir/Dockerfile"
109-
110-
sed -ri -e '
111-
s|DOCKER_TAG=.*|DOCKER_TAG='"$version"'|g;
112-
s|DOCKER_REPO=.*|DOCKER_REPO='"$dockerRepo"'|g;
113-
' "$dir/hooks/run"
114-
115-
# Create a list of "alias" tags for DockerHub post_push
116-
if [ "$version" = "$dockerLatest" ]; then
117-
if [ "$variant" = 'apache' ]; then
118-
echo "$latest-$variant $version-$variant $variant $latest $version latest " > "$dir/.dockertags"
119-
else
120-
echo "$latest-$variant $version-$variant $variant " > "$dir/.dockertags"
121-
fi
109+
else
110+
if [ "$variant" = 'apache' ]; then
111+
echo "$latest-$variant $version-$variant $latest $version " > "$dir/.dockertags"
122112
else
123-
if [ "$variant" = 'apache' ]; then
124-
echo "$latest-$variant $version-$variant $latest $version " > "$dir/.dockertags"
125-
else
126-
echo "$latest-$variant $version-$variant " > "$dir/.dockertags"
127-
fi
113+
echo "$latest-$variant $version-$variant " > "$dir/.dockertags"
128114
fi
115+
fi
129116

130-
# Add Travis-CI env var
131-
travisEnv='\n - VERSION='"$version"' PHP_VERSION='"$php_version"' VARIANT='"$variant"' ARCHI='"$archi$travisEnv"
117+
# Add Travis-CI env var
118+
travisEnv="$travisEnv"'\n - VERSION='"$version"' PHP_VERSION='"$php_version"' VARIANT='"$variant"
132119

133-
if [[ $1 == 'build' ]]; then
134-
tag="$version-$php_version-$variant"
135-
echo "Build Dockerfile for ${tag}"
136-
docker build -t "${dockerRepo}:${tag}" "$dir"
137-
fi
138-
done
120+
if [[ $1 == 'build' ]]; then
121+
tag="$version-$php_version-$variant"
122+
echo "Build Dockerfile for ${tag}"
123+
docker build -t "${dockerRepo}:${tag}" "$dir"
124+
fi
139125

140126
done
141127

0 commit comments

Comments
 (0)