1
0
Fork 0
mirror of https://github.com/TheLartians/ModernCppStarter.git synced 2025-08-30 21:51:12 +02:00
ModernCppStarter/.github/workflows/docker-cd.yml
2022-04-06 00:02:18 +02:00

94 lines
3 KiB
YAML

name: run Docker CD
on:
push:
tags:
- "v*.*.*"
workflow_dispatch:
inputs:
tag:
description: "Test scenario tag"
required: true
default: "test"
set-latest-tag:
description: "Also set the 'latest' tag with this run? (y/n)"
required: true
default: "n"
env:
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm_modules
jobs:
build:
name: CD build docker and push to DockerHub
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: handle manual workflow start and prepare docker image tag(s)
id: docker-tags
shell: bash
run: |
if [[ "x${{ github.event.inputs.tag }}" != "x" ]]; then
echo "Workflow started via workflow_dispatch! Parameters: tag=${{ github.event.inputs.tag }}, set-latest-tag=${{ github.event.inputs.set-latest-tag }}"
tag="${{ github.event.inputs.tag }}"
else
echo "Workflow started via push with tag! Complete tag: ${GITHUB_REF:10}"
tag="${GITHUB_REF:11}"
fi
if [[ "x${{ github.event.inputs.set-latest-tag }}" == "xy" || "x${{ github.event.inputs.tag }}" == "x" ]]; then
tags="${{ secrets.DOCKERHUB_USERNAME }}/greeter-webapi:$tag, ${{ secrets.DOCKERHUB_USERNAME }}/greeter-webapi:latest"
echo "Docker image release tags: $tags"
else
tags="${{ secrets.DOCKERHUB_USERNAME }}/greeter-webapi:$tag"
echo "Docker image release tag: $tags"
fi
echo ::set-output name=tags::$tags
#
# configure and build in GitHub CI as smoke test
# speed up configure step by installing boost as system lib, also use Ninja for faster builds
- name: speed up configure and build
shell: bash
run: sudo apt-get update && sudo apt-get install -y libboost-all-dev ninja-build
# use GitHub cache to cache dependencies
- uses: actions/cache@v2
with:
path: "**/cpm_modules"
key: ${{ github.workflow }}-cpm-modules-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }}
- name: configure
run: cmake -S standalone -B build -G Ninja -D CMAKE_BUILD_TYPE=Release
- name: build
run: cmake --build build
#
# end GitHub CI local build
- name: set up Docker Buildx for multi-platform support
uses: docker/setup-buildx-action@v1
- name: set up QEMU for multi-platform support
uses: docker/setup-qemu-action@v1
- name: login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: build Docker image and push to DockerHub
uses: docker/build-push-action@v2
with:
file: ./standalone/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.docker-tags.outputs.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max