Skip to content

Main project workflow #90

Main project workflow

Main project workflow #90

Workflow file for this run

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