From f516eed2635de30f609f73c344cc9b17c1b8a382 Mon Sep 17 00:00:00 2001 From: Rob Kooper Date: Sun, 9 Oct 2022 16:18:42 -0500 Subject: [PATCH] github actions --- .github/workflows/docker.yml | 144 +++++++++++++++++++++++++++++++++ .github/workflows/release.yaml | 37 +++++++++ 2 files changed, 181 insertions(+) create mode 100644 .github/workflows/docker.yml create mode 100644 .github/workflows/release.yaml diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..e3b7ba1 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,144 @@ +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 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..c6497c5 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,37 @@ +name: Create Release + +on: + push: + branches: + - main + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: get release info + id: release_info + run: | + version="$(awk '/^## / { print tolower($2) }' CHANGELOG.md | head -1)" + changelog="$(sed -e "1,/^## ${version}/d" -e "/^## /,\$d" CHANGELOG.md)" + changelog="${changelog//'%'/'%25'}" + changelog="${changelog//$'\n'/'%0A'}" + changelog="${changelog//$'\r'/'%0D'}" + echo "::set-output name=version::$version" + echo "::set-output name=changelog::$changelog" + + - name: create release + if: github.event_name == 'push' && github.ref == 'refs/heads/main' && steps.release_info.outputs.version != 'unreleased' + uses: actions/create-release@v1 + id: create_release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.release_info.outputs.version }} + release_name: Release ${{ steps.release_info.outputs.version }} + body: ${{ steps.release_info.outputs.changelog }}