Skip to content

Commit

Permalink
Merge pull request #105 from shopware/add-otel
Browse files Browse the repository at this point in the history
feat: add otel ready to use image
  • Loading branch information
shyim authored Oct 1, 2024
2 parents 3b45df8 + 22fd19b commit 66064f3
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 87 deletions.
147 changes: 64 additions & 83 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ env:
DOCKER_BUILDKIT: 1
COSIGN_EXPERIMENTAL: 1


permissions:
contents: write
id-token: write
Expand All @@ -36,113 +35,108 @@ jobs:
echo "$MATRIX" >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
build-fpm-amd64:
name: PHP FPM ${{ matrix.php }} on amd64
runs-on: ubuntu-latest
fpm:
name: PHP FPM ${{ matrix.php }}
runs-on: shopware-arm64
container:
image: ghcr.io/catthehacker/ubuntu:act-22.04
needs: [generate-matrix]
strategy: ${{ fromJson(needs.generate-matrix.outputs.matrix) }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Login into Docker Hub
if: github.ref == 'refs/heads/main'
run: echo "${{ secrets.DOCKER_HUB_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin

- name: Login into Github Docker Registery
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- uses: docker/build-push-action@v6
- name: Build and Push
uses: docker/build-push-action@v6
with:
tags: ${{ matrix.fpm-image }}-amd64
tags: |
${{ matrix.fpm-tags }}
context: fpm
cache-from: type=gha,scope=fpm-${{ matrix.php }}-amd64
cache-to: type=gha,mode=max,scope=fpm-${{ matrix.php }}-amd64
platforms: linux/amd64
cache-from: type=gha,scope=fpm-${{ matrix.php }}
cache-to: type=gha,mode=max,scope=fpm-${{ matrix.php }}
platforms: linux/arm64,linux/amd64
build-args: |
PHP_PATCH_VERSION=${{ matrix.phpPatch }}
PHP_DIGEST=${{ matrix.phpPatchDigest }}
push: true
provenance: false

build-fpm-arm64:
name: PHP FPM ${{ matrix.php }} on arm64
fpm-otel:
name: PHP FPM ${{ matrix.php }} with OpenTelemetry
runs-on: shopware-arm64
container: ghcr.io/catthehacker/ubuntu:act-22.04
env:
DOCKER_HOST: localhost:2375
services:
docker:
image: docker:23-dind
needs: [generate-matrix]
container:
image: ghcr.io/catthehacker/ubuntu:act-22.04
needs: [generate-matrix, fpm]
strategy: ${{ fromJson(needs.generate-matrix.outputs.matrix) }}
steps:
- name: wait for docker to be available
run: while ! docker info 2>&1 >/dev/null; do sleep 1; done

- name: Checkout
uses: actions/checkout@v4

- name: Login into Docker Hub
if: github.ref == 'refs/heads/main'
run: echo "${{ secrets.DOCKER_HUB_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin

- name: Login into Github Docker Registery
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- uses: docker/build-push-action@v6

- name: Build and Push
uses: docker/build-push-action@v6
with:
tags: ${{ matrix.fpm-image }}-arm64
context: fpm
platforms: linux/arm64
cache-from: type=gha,scope=fpm-${{ matrix.php }}-arm64
cache-to: type=gha,mode=max,scope=fpm-${{ matrix.php }}-arm64
tags: |
${{ matrix.fpm-tags-otel }}
context: fpm-otel
platforms: linux/amd64,linux/arm64
cache-from: type=gha,scope=fpm-otel-${{ matrix.php }}
cache-to: type=gha,mode=max,scope=fpm-otel-${{ matrix.php }}
build-args: |
PHP_PATCH_VERSION=${{ matrix.phpPatch }}
PHP_DIGEST=${{ matrix.phpPatchDigest }}
FPM_IMAGE=${{ matrix.fpm-image }}
push: true
provenance: false

fpm-merge:
name: Generate Docker Manifest for PHP ${{ matrix.php }}
caddy:
name: Build Caddy with ${{ matrix.php }}
runs-on: ubuntu-latest
needs: [generate-matrix, build-fpm-amd64, build-fpm-arm64]
needs: [generate-matrix, fpm]
strategy: ${{ fromJson(needs.generate-matrix.outputs.matrix) }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Login into Docker Hub
if: github.ref == 'refs/heads/main'
run: echo "${{ secrets.DOCKER_HUB_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin

- name: Login into Github Docker Registery
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

- name: Install Cosign
uses: sigstore/cosign-installer@v3

- name: Install Regclient
run: |
wget https://github.com/regclient/regclient/releases/latest/download/regctl-linux-amd64
chmod +x regctl-linux-amd64
- run: docker manifest create ${{ matrix.fpm-image }} --amend ${{ matrix.fpm-image }}-amd64 --amend ${{ matrix.fpm-image }}-arm64

- run: docker manifest push ${{ matrix.fpm-image }}

- run: cosign sign --yes ${{ matrix.fpm-image }}

- run: docker manifest create ${{ matrix.fpm-patch-image }} --amend ${{ matrix.fpm-image }}-amd64 --amend ${{ matrix.fpm-image }}-arm64

- run: docker manifest push ${{ matrix.fpm-patch-image }}

- run: cosign sign --yes ${{ matrix.fpm-patch-image }}

- if: github.ref == 'refs/heads/main'
run: ./regctl-linux-amd64 image copy ${{ matrix.fpm-image }} ${{ matrix.fpm-hub-image }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- if: github.ref == 'refs/heads/main'
run: ./regctl-linux-amd64 image copy ${{ matrix.fpm-patch-image }} ${{ matrix.fpm-patch-hub-image }}
- name: Build and Push
uses: docker/build-push-action@v6
with:
tags: |
${{ matrix.caddy-tags }}
context: caddy
cache-from: type=registry,ref=ghcr.io/shopware/docker-cache:${{ matrix.php }}-caddy
cache-to: type=registry,ref=ghcr.io/shopware/docker-cache:${{ matrix.php }}-caddy,mode=max
platforms: linux/amd64,linux/arm64
build-args: |
FPM_IMAGE=${{ matrix.fpm-image }}
push: true
provenance: false

caddy:
name: Build Caddy ${{ matrix.php }}
caddy-otel:
name: Build Caddy ${{ matrix.php }} with OpenTelemetry
runs-on: ubuntu-latest
needs: [generate-matrix, fpm-merge]
needs: [fpm-otel, generate-matrix]
strategy: ${{ fromJson(needs.generate-matrix.outputs.matrix) }}
steps:
- name: Checkout
Expand All @@ -157,31 +151,18 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- uses: docker/build-push-action@v6
- name: Build and Push
uses: docker/build-push-action@v6
with:
tags: |
${{ matrix.caddy-tags }}
${{ matrix.caddy-tags-otel }}
context: caddy
cache-from: type=registry,ref=ghcr.io/shopware/docker-cache:${{ matrix.php }}-caddy
cache-to: type=registry,ref=ghcr.io/shopware/docker-cache:${{ matrix.php }}-caddy,mode=max
platforms: linux/amd64,linux/arm64
build-args: |
FPM_IMAGE=${{ matrix.fpm-image }}
FPM_IMAGE=${{ matrix.fpm-image }}-otel
push: true
provenance: false

- name: Docker Scout
id: docker-scout
if: ${{ github.event_name == 'pull_request' }}
uses: docker/scout-action@v1
with:
command: compare
to: ${{ matrix.scan-to }}
image: ${{ matrix.scan-tag }}
organization: shopware
ignore-unchanged: true
github-token: ${{ secrets.GITHUB_TOKEN }}

check:
name: Test Image
runs-on: ubuntu-latest
Expand Down
23 changes: 23 additions & 0 deletions fpm-otel/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#syntax=docker/dockerfile:1.4

ARG FPM_IMAGE=ghcr.io/shopware/docker-base:8.3.1-fpm

FROM ${FPM_IMAGE}

USER root

RUN apk add --no-cache git grpc-cpp grpc-dev $PHPIZE_DEPS && \
GRPC_VERSION=$(apk info grpc -d | grep grpc | cut -d- -f2) && \
git clone --depth 1 -b v${GRPC_VERSION} https://github.com/grpc/grpc /tmp/grpc && \
cd /tmp/grpc/src/php/ext/grpc && \
phpize && \
./configure && \
make && \
make install && \
rm -rf /tmp/grpc && \
apk del --no-cache git grpc-dev $PHPIZE_DEPS && \
echo "extension=grpc.so" > /usr/local/etc/php/conf.d/grpc.ini

RUN install-php-extensions opentelemetry

USER www-data
37 changes: 33 additions & 4 deletions matrix.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,25 +85,54 @@ function get_digest_of_image(string $imageName, string $tag): string {
'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $patchVersion['version'] . '-caddy',
];

$caddyImagesOtel = [
'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $supportedVersion . '-caddy-otel',
'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $patchVersion['version'] . '-caddy-otel',
];

$fpmImages = [
'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $supportedVersion . '-fpm',
'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $patchVersion['version'] . '-fpm'
];

$fpmImagesOtel = [
'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $supportedVersion . '-fpm-otel',
'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $patchVersion['version'] . '-fpm-otel'
];

if ($_SERVER['GITHUB_REF'] === 'refs/heads/main') {
$caddyImages = array_merge($caddyImages, [
'shopware/docker-base:' . $imageTagPrefix . $supportedVersion,
'shopware/docker-base:' . $imageTagPrefix . $supportedVersion . '-caddy',
'shopware/docker-base:' . $imageTagPrefix . $patchVersion['version'],
'shopware/docker-base:' . $imageTagPrefix . $patchVersion['version'] . '-caddy',
]);

$caddyImagesOtel = array_merge($caddyImagesOtel, [
'shopware/docker-base:' . $imageTagPrefix . $supportedVersion . '-caddy-otel',
'shopware/docker-base:' . $imageTagPrefix . $patchVersion['version'] . '-caddy-otel',
]);

$fpmImages = array_merge($fpmImages, [
'shopware/docker-base:' . $imageTagPrefix . $supportedVersion . '-fpm',
'shopware/docker-base:' . $imageTagPrefix . $patchVersion['version'] . '-fpm'
]);

$fpmImagesOtel = array_merge($fpmImages, [
'shopware/docker-base:' . $imageTagPrefix . $supportedVersion . '-fpm-otel',
'shopware/docker-base:' . $imageTagPrefix . $patchVersion['version'] . '-fpm-otel'
]);
}

$data[] = [
'php' => $supportedVersion,
'phpPatch' => $patchVersion['version'],
'phpPatchDigest' => $phpDigest,
'base-image' => 'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $supportedVersion,
'fpm-image' => 'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $supportedVersion . '-fpm',
'fpm-patch-image' => 'ghcr.io/shopware/docker-base' . $imageSuffix . ':' . $imageTagPrefix . $patchVersion['version'] . '-fpm',
'fpm-hub-image' => 'shopware/docker-base:' . $imageTagPrefix . $supportedVersion . '-fpm',
'fpm-patch-hub-image' => 'shopware/docker-base:' . $imageTagPrefix . $patchVersion['version'] . '-fpm',
'fpm-tags' => implode("\n", $fpmImages),
'fpm-tags-otel' => implode("\n", $fpmImagesOtel),
'caddy-tags' => implode("\n", $caddyImages),
'caddy-tags-otel' => implode("\n", $caddyImagesOtel),
'scan-tag' => $caddyImages[0],
'scan-to' => 'ghcr.io/shopware/docker-base:'.$supportedVersion,
];
Expand Down

0 comments on commit 66064f3

Please sign in to comment.