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- 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