144 lines
4.8 KiB
YAML
144 lines
4.8 KiB
YAML
name: Docker
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
pull_request:
|
|
|
|
# Certain actions will only run when this is the main repo.
|
|
env:
|
|
MAIN_REPO: ncsa/traefik-certmanager
|
|
DOCKERHUB_ORG: ncsa
|
|
PLATFORM: "linux/amd64,linux/arm64"
|
|
|
|
jobs:
|
|
docker:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
packages: write
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
# calculate some variables that are used later
|
|
- name: version information
|
|
run: |
|
|
# find out what the BRANCH is, in case of a PR we will use the PR-<number>
|
|
if [ "${{ github.event.release.target_commitish }}" != "" ]; then
|
|
BRANCH="${{ github.event.release.target_commitish }}"
|
|
elif [[ $GITHUB_REF =~ pull ]]; then
|
|
BRANCH="$(echo $GITHUB_REF | sed 's#refs/pull/\([0-9]*\)/merge#PR-\1#')"
|
|
else
|
|
BRANCH=${GITHUB_REF##*/}
|
|
fi
|
|
|
|
# calculate the version and all tags
|
|
if [ "$BRANCH" == "main" ]; then
|
|
VERSION="$(awk '/^## / { print $2; exit }' CHANGELOG.md | sed -e 's/\[//' -e 's/\]//')"
|
|
tags="latest"
|
|
oldversion=""
|
|
tmpversion="${VERSION}"ƒ
|
|
while [ "${oldversion}" != "${tmpversion}" ]; do
|
|
oldversion="${tmpversion}"
|
|
tags="${tags} ${tmpversion}"
|
|
tmpversion=${tmpversion%.*}
|
|
done
|
|
else
|
|
VERSION="$BRANCH"
|
|
tags="$BRANCH"
|
|
fi
|
|
|
|
# should we push to dockerhub, and is there a README
|
|
DOCKERHUB_PUSH="false"
|
|
DOCKERHUB_README="false"
|
|
if [ "${{ github.repository }}" == "${{ env.MAIN_REPO }}" ]; then
|
|
if [ "${{ secrets.DOCKERHUB_USERNAME }}" != "" -a "${{ secrets.DOCKERHUB_PASSWORD }}" != "" ]; then
|
|
DOCKERHUB_PUSH="true"
|
|
if [ -e "README.md" ]; then
|
|
DOCKERHUB_README="true"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# create a list of all images to be pushed
|
|
REPO=${GITHUB_REPOSITORY,,}
|
|
IMAGE="${{ github.event.repository.name }}"
|
|
IMAGES=""
|
|
for tag in ${tags}; do
|
|
if [ "$DOCKERHUB_PUSH" == "true" ]; then
|
|
IMAGES="${IMAGES}${{ env.DOCKERHUB_ORG }}/${IMAGE}:${tag},"
|
|
fi
|
|
#IMAGES="${IMAGES}ghcr.io/${REPO}/${IMAGE}:${tag},"
|
|
done
|
|
IMAGES="${IMAGES%,*}"
|
|
|
|
# save the results in env
|
|
echo "BRANCH=${BRANCH}"
|
|
echo "VERSION=${VERSION}"
|
|
echo "DOCKERHUB_README=${DOCKERHUB_README}"
|
|
echo "DOCKERHUB_PUSH=${DOCKERHUB_PUSH}"
|
|
echo "IMAGES=${IMAGES}"
|
|
|
|
echo "BRANCH=${BRANCH}" >> $GITHUB_ENV
|
|
echo "VERSION=${VERSION}" >> $GITHUB_ENV
|
|
echo "DOCKERHUB_README=${DOCKERHUB_README}" >> $GITHUB_ENV
|
|
echo "DOCKERHUB_PUSH=${DOCKERHUB_PUSH}" >> $GITHUB_ENV
|
|
echo "IMAGES=${IMAGES}" >> $GITHUB_ENV
|
|
|
|
# setup docker build
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
id: buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Inspect Builder
|
|
run: |
|
|
echo "Name: ${{ steps.buildx.outputs.name }}"
|
|
echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}"
|
|
echo "Status: ${{ steps.buildx.outputs.status }}"
|
|
echo "Flags: ${{ steps.buildx.outputs.flags }}"
|
|
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
|
|
|
|
# login to registries
|
|
- name: Login to DockerHub
|
|
if: env.DOCKERHUB_PUSH == 'true'
|
|
uses: docker/login-action@v2
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: docker/login-action@v2
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
# build the docker images
|
|
- name: Build and push docker
|
|
uses: docker/build-push-action@v2
|
|
with:
|
|
push: true
|
|
platforms: ${{ env.PLATFORM }}
|
|
cache-from: type=gha
|
|
cache-to: type=gha
|
|
tags: ${{ env.IMAGES }}
|
|
build-args: |
|
|
BRANCH: ${{ env.BRANCH }}
|
|
VERSION=${{ env.VERSION }}
|
|
BUILDNUMBER=${{ github.run_number }}
|
|
GITSHA1=${{ github.sha }}
|
|
|
|
# this will update the README of the dockerhub repo
|
|
- name: Docker Hub Description
|
|
if: env.DOCKERHUB_README == 'true'
|
|
uses: peter-evans/dockerhub-description@v2
|
|
env:
|
|
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
|
|
DOCKERHUB_REPOSITORY: ${{ env.DOCKERHUB_ORG }}/${{ github.event.repository.name }}
|
|
README_FILEPATH: README.md
|