Skip to content

Release/2.10.0

Release/2.10.0 #196

Workflow file for this run

name: Publish
on:
push:
branches: [ main, develop ]
tags: ['*']
pull_request:
workflow_dispatch:
env:
REGISTRY: ghcr.io
REGISTRY_OLD: docker.io
BASE_IMAGE_REPO: python
BASE_IMAGE_TAG: '3.12.1-slim-bookworm'
# narg/NARG (number-of-CPU argument to pass to the builds) are based on OS-specific CPU counts in the GitHub-hosted GHA runners.
# checked 1/4/2024: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources
jobs:
test_docker:
runs-on: ubuntu-latest
env:
NARG: 2
TAG: gha-test
INT_TAG: gha-int-test
# This job runs for all events that trigger this workflow
steps:
- name: Concatenate env variables
run: |
echo "DL_CPP_TAG=${{ env.REGISTRY }}/${{ github.repository }}:${{ env.TAG }}" >> $GITHUB_ENV
echo "DL_CPP_INT_TAG=${{ env.REGISTRY }}/${{ github.repository }}:${{ env.INT_TAG }}" >> $GITHUB_ENV
- name: Checkout the repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: setup_buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker
- name: Build
id: build
uses: docker/build-push-action@v5
with:
context: .
push: false
load: true
build-args: |
img_user=${{ env.BASE_IMAGE_USER }}
img_repo=${{ env.BASE_IMAGE_REPO }}
img_tag=${{ env.BASE_IMAGE_TAG }}
build_type=Debug
build_examples=TRUE
enable_testing=TRUE
narg=${{ env.NARG }}
platforms: linux/amd64
tags: ${{ env.DL_CPP_TAG }}
- name: Build Integration Tests
id: build_int_tests
uses: docker/build-push-action@v5
with:
context: ./testing/integration
push: false
load: true
build-args: |
img_user=${{ env.REGISTRY }}/driplineorg
img_repo=dripline-cpp
img_tag=${{ env.TAG }}
platforms: linux/amd64
tags: ${{ env.DL_CPP_INT_TAG }}
- name: Unit Tests
run: |
docker run --rm ${{ env.DL_CPP_INT_TAG }} bash -c "
cd /usr/local/bin
./run_dl_tests"
- name: Integration Tests
run: |
cd testing/integration
./do-testing.sh ${{ env.INT_TAG }}
# For debugging
- name: Setup tmate session
if: ${{ ! success() }}
uses: mxschmitt/action-tmate@v3
test_builds:
runs-on: ${{ matrix.os }}
# This job runs for all events that trigger this workflow
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
include:
- os: ubuntu-latest
narg: 2
- os: macos-latest
narg: 3
steps:
- name: Checkout the repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install dependencies -- Mac
if: startsWith(matrix.os, 'macos')
run: |
brew install \
boost \
quill \
rabbitmq-c \
rapidjson \
yaml-cpp
- name: Install dependencies -- Linux
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y \
libboost-all-dev \
librabbitmq-dev \
rapidjson-dev \
libyaml-cpp-dev
git clone https://github.com/odygrd/quill.git
cd quill
git checkout v7.3.0
mkdir build
cd build
sudo cmake ..
sudo make -j${{ matrix.narg }} install
- name: Configure
run: |
mkdir build
cd build
cmake -DScarab_BUILD_PYTHON=FALSE -DDripline_ENABLE_TESTING=TRUE ..
- name: Build
run: |
cd build
make -j${{ matrix.narg }} install
- name: Run tests
run: |
cd build/testing
./run_dl_tests
# For debugging
- name: Setup tmate session
if: ${{ ! success() }}
uses: mxschmitt/action-tmate@v3
build_and_push:
runs-on: ubuntu-latest
env:
NARG: 2
# This job runs on push (limited above to develop, main and tags) and pull_requests marked read_for_review
# Pushing images is limited below to push events
if: |
github.event_name == 'push' ||
(github.event_name == 'pull_request' && github.event.pull_request.draft == false)
needs: [test_docker, test_builds]
strategy:
matrix:
build: [dev, release]
include:
- build: dev
build-type: DEBUG
build-examples: 'TRUE'
enable-testing: 'TRUE'
tag-suffix: '-dev'
do-integration: true
int-tag-suffix: '-int-test'
- build: release
build-type: RELEASE
build-examples: 'FALSE'
enable-testing: 'FALSE'
tag-suffix: ''
do-integration: false
int-tag-suffix: ''
steps:
- name: Checkout the repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Docker meta
id: docker_meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.REGISTRY_OLD }}/${{ github.repository }}
${{ env.REGISTRY }}/${{ github.repository }}
flavor: |
latest=auto
suffix=${{ matrix.tag-suffix }},onlatest=true
tags: |
type=semver,pattern={{raw}}
type=ref,event=branch
type=ref,event=pr
type=raw,value=latest,enable=${{ github.ref == format('refs/heads{0}', 'main') }}
- name: Docker meta - integration
id: docker_meta_integration
if: ${{ matrix.do-integration }}
uses: docker/metadata-action@v5
with:
images: |
${{ env.REGISTRY }}/${{ github.repository }}
flavor: |
latest=auto
suffix=${{ matrix.int-tag-suffix }},onlatest=true
tags: |
type=semver,pattern={{raw}}
type=ref,event=branch
type=ref,event=pr
type=raw,value=latest,enable=${{ github.ref == format('refs/heads{0}', 'main') }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: setup_buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-flags: --debug
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY_OLD }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
id: build_push
uses: docker/build-push-action@v5
with:
context: .
push: ${{ github.event_name == 'push' }} # limited to develop, main, and tags; don't push on PR
build-args: |
img_repo=${{ env.BASE_IMAGE_REPO }}
img_tag=${{ env.BASE_IMAGE_TAG }}
build_type=${{ matrix.build-type }}
build_examples=${{ matrix.build-examples }}
enable_testing=${{ matrix.enable-testing }}
narg=${{env.NARG }}
tags: ${{ steps.docker_meta.outputs.tags }}
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: Build and push - integration
id: build_push_integration
if: ${{ matrix.do-integration }}
uses: docker/build-push-action@v5
with:
context: ./testing/integration
push: ${{ github.event_name == 'push' }} # limited to develop, main, and tags; don't push on PR
build-args: |
img_user=${{ env.REGISTRY }}/driplineorg
img_repo=dripline-cpp
img_tag=latest-dev
tags: ${{ steps.docker_meta_integration.outputs.tags }}
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: Release
uses: softprops/action-gh-release@v1
if: ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags/') }}