Skip to content

Commit

Permalink
Build service images in CI
Browse files Browse the repository at this point in the history
  • Loading branch information
lloeki committed Jan 31, 2025
1 parent 4c58301 commit 4dfafeb
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 3 deletions.
98 changes: 98 additions & 0 deletions .github/workflows/build-services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Build Services

on:
workflow_dispatch:
inputs:
push:
description: Push images
required: true
type: boolean
default: true
workflow_call:

env:
REGISTRY: ghcr.io
REPO: datadog/images-rb

jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- service: datadog/agent
arch: ["x86_64", "aarch64"]
- service: datadog/dd-apm-test-agent
arch: ["x86_64", "aarch64"]
- service: elasticsearch
arch: ["x86_64", "aarch64"]
- service: memcached
arch: ["x86_64", "aarch64"]
- service: mongo
arch: ["x86_64", "aarch64"]
- service: mysql
arch: ["x86_64", "aarch64"]
- service: opensearchproject/opensearch
arch: ["x86_64", "aarch64"]
- service: postgres
arch: ["x86_64", "aarch64"]
- service: redis
arch: ["x86_64", "aarch64"]
- service: starburstdata/presto
arch: ["x86_64", "aarch64"]
runs-on: ubuntu-24.04
permissions:
packages: write
name: Build (${{ matrix.service }})
steps:
- name: Set up Docker
uses: crazy-max/ghaction-setup-docker@635d07c09dc2b52072362e9bb37e7e789767106d
with:
daemon-config: |
{
"features": {
"containerd-snapshotter": true
}
}
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
persist-credentials: false
fetch-depth: 2
- name: Bundle install
run: |
bundle install
- name: Set variables
id: vars
run: |
echo "DOCKER_PLATFORMS=$(echo ${{ join(matrix.arch) }} | tr ',' '\n' | sed 's/^/linux\//' | paste -s -d, -)" >> $GITHUB_OUTPUT
# First, build image for x86_64 as it will fail fast
#
- name: Build single-arch image (x86_64)
if: ${{ contains(matrix.arch, 'x86_64') }}
run: |
bundle exec rake docker:build['services/${{ matrix.service }}:*'] PLATFORM='linux/x86_64'
# Then, build image for aarch64 which, being emulated under qemu, is slower
#
# Start by enabling qemu for aarch64
- name: Enable aarch64 emulation (x86_64)
if: ${{ contains(matrix.arch, 'aarch64') }}
run: |
docker run --privileged --rm tonistiigi/binfmt --install arm64
- name: Build single-arch image (aarch64)
if: ${{ contains(matrix.arch, 'aarch64') }}
run: |
bundle exec rake docker:build['services/${{ matrix.service }}:*'] PLATFORM='linux/aarch64'
# Finally, assemble multi-arch image for a combined push to the registry
#
# This reruns docker build but layers are in the cache, so it's fast
- name: Log in to the Container Registry
run: |
echo ${{ secrets.GITHUB_TOKEN }} | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin
- name: Push release image (${{ join(matrix.arch, ', ') }})
if: ${{ inputs.push }}
run: |
bundle exec rake docker:build['services/${{ matrix.service }}:*'] PLATFORM='${{ steps.vars.outputs.DOCKER_PLATFORMS }}' PUSH=true
13 changes: 10 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,14 @@ on:
- "**"

jobs:
build:
name: Build
build-services:
name: Build Services
uses: ./.github/workflows/build-ruby.yml
permissions:
packages: write

build-ruby:
name: Build Ruby
uses: ./.github/workflows/build-ruby.yml
permissions:
packages: write
Expand All @@ -22,7 +28,8 @@ jobs:
success:
name: Success
needs:
- build
- build-services
- build-ruby
- nix
runs-on: ubuntu-24.04
steps:
Expand Down

0 comments on commit 4dfafeb

Please sign in to comment.