Main project workflow #90
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Main project workflow | |
on: | |
# Build on demand: | |
workflow_dispatch: | |
inputs: | |
tag: | |
description: 'Docker images tag' | |
required: true | |
push: | |
# Sequence of patterns matched against refs/heads | |
branches: | |
# Push events on master branch | |
- master | |
# Sequence of patterns matched against refs/tags | |
tags: | |
- v*.*.* # Push events to vx.y.z | |
pull_request: | |
branches: | |
- master | |
# Publish `vx.y.z` tags as releases: | |
#release: | |
# types: [published] | |
jobs: | |
format_style: | |
name: Check source code format | |
runs-on: ubuntu-latest | |
steps: | |
- | |
name: Check out the repo | |
uses: actions/checkout@v2 | |
- | |
name: Run frankwolf format | |
run: | | |
sources=$(find . -name "*.hpp" -o -name "*.cpp") | |
#docker run -i --rm -v $PWD:/data frankwolf/astyle ${sources} | |
#git diff --exit-code | |
# docker cannot write on host directory: | |
! docker run -i --rm -v $PWD:/data frankwolf/astyle --dry-run ${sources} | grep ^Formatted | |
build_and_push: | |
name: Build and push docker images to Docker Hub | |
runs-on: ubuntu-latest | |
#if: github.event_name == 'push' | |
steps: | |
- | |
name: Check out the repo | |
uses: actions/checkout@v2 | |
- | |
name: Login to Docker Hub | |
uses: docker/login-action@v1 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
# logout at job end: | |
logout: true | |
- | |
name: Login to GitHub Container Registry | |
uses: docker/login-action@v1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
# logout at job end: | |
logout: true | |
- | |
name: Build (but not push) builder image | |
id: docker_build1 | |
uses: docker/build-push-action@v2 | |
with: | |
tags: ghcr.io/testillano/http2comm_builder:local | |
file: Dockerfile.build | |
build-args: base_os=ubuntu | |
context: . | |
#push: true | |
- | |
name: Image digest | |
run: echo ${{ steps.docker_build1.outputs.digest }} | |
- | |
name: Build (but not push) project image | |
id: docker_build2 | |
uses: docker/build-push-action@v2 | |
with: | |
tags: ghcr.io/testillano/http2comm:local | |
file: Dockerfile | |
build-args: base_tag=local | |
context: . | |
#push: true | |
- | |
name: Image2 digest | |
run: echo ${{ steps.docker_build2.outputs.digest }} | |
- | |
name: Push images manually | |
run: | | |
# workflow dispatch event: | |
image_tag=${{ github.event.inputs.tag }} | |
echo Workflow dispatch image_tag=$image_tag | |
# Strip git ref prefix from version | |
[ -z "${image_tag}" ] && image_tag=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') | |
# Strip "v" prefix from tag name | |
[[ "${{ github.ref }}" == "refs/tags/"* ]] && image_tag=$(echo $image_tag | sed -e 's/^v//') | |
# Use Docker `latest` tag convention | |
[ "$image_tag" == "master" ] && image_tag=latest | |
echo Processed image_tag=$image_tag | |
for hub in docker.io ghcr.io | |
do | |
for imgbn in http2comm_builder http2comm | |
do | |
echo "Push '${imgbn}' image to '${hub}' hub" | |
docker tag ghcr.io/testillano/${imgbn}:local ${hub}/testillano/${imgbn}:${image_tag} | |
docker push ${hub}/testillano/${imgbn}:${image_tag} | |
done | |
done |