|
| 1 | +### Application Level Image CI |
| 2 | +### Dave Conroy <dave at tiredofit dot ca> |
| 3 | + |
| 4 | +name: 'build' |
| 5 | + |
| 6 | +on: |
| 7 | + push: |
| 8 | + paths: |
| 9 | + - '**' |
| 10 | + - '!README.md' |
| 11 | +jobs: |
| 12 | + docker: |
| 13 | + runs-on: ubuntu-latest |
| 14 | + steps: |
| 15 | + - name: Checkout |
| 16 | + uses: actions/checkout@v3 |
| 17 | + |
| 18 | + - name: Prepare |
| 19 | + id: prep |
| 20 | + run: | |
| 21 | + DOCKER_IMAGE=${GITHUB_REPOSITORY/docker-/} |
| 22 | + set -x |
| 23 | + if [[ $GITHUB_REF == refs/heads/* ]]; then |
| 24 | + if [[ $GITHUB_REF == refs/heads/*/* ]] ; then |
| 25 | + BRANCH="${DOCKER_IMAGE}:$(echo $GITHUB_REF | sed "s|refs/heads/||g" | sed "s|/|-|g")" |
| 26 | + else |
| 27 | + BRANCH=${GITHUB_REF#refs/heads/} |
| 28 | + fi |
| 29 | +
|
| 30 | + case ${BRANCH} in |
| 31 | + "main" | "master" ) |
| 32 | + BRANCHTAG="${DOCKER_IMAGE}:latest" |
| 33 | + ;; |
| 34 | + "develop" ) |
| 35 | + BRANCHTAG="${DOCKER_IMAGE}:develop" |
| 36 | + ;; |
| 37 | + * ) |
| 38 | + if [ -n "${{ secrets.LATEST }}" ] ; then |
| 39 | + if [ "${BRANCHTAG}" = "${{ secrets.LATEST }}" ]; then |
| 40 | + BRANCHTAG="${DOCKER_IMAGE}:${BRANCH},${DOCKER_IMAGE}:${BRANCH}-latest,${DOCKER_IMAGE}:latest" |
| 41 | + else |
| 42 | + BRANCHTAG="${DOCKER_IMAGE}:${BRANCH},${DOCKER_IMAGE}:${BRANCH}-latest" |
| 43 | + fi |
| 44 | + else |
| 45 | + BRANCHTAG="${DOCKER_IMAGE}:${BRANCH},${DOCKER_IMAGE}:${BRANCH}-latest" |
| 46 | + fi |
| 47 | + ;; |
| 48 | + esac |
| 49 | + fi |
| 50 | +
|
| 51 | +
|
| 52 | + if [[ $GITHUB_REF == refs/tags/* ]]; then |
| 53 | + GITTAG="${DOCKER_IMAGE}:$(echo $GITHUB_REF | sed 's|refs/tags/||g')" |
| 54 | + fi |
| 55 | +
|
| 56 | + if [ -n "${BRANCHTAG}" ] && [ -n "${GITTAG}" ]; then |
| 57 | + TAGS=${BRANCHTAG},${GITTAG} |
| 58 | + else |
| 59 | + TAGS="${BRANCHTAG}${GITTAG}" |
| 60 | + fi |
| 61 | +
|
| 62 | + echo ::set-output name=tags::${TAGS} |
| 63 | + echo ::set-output name=docker_image::${DOCKER_IMAGE} |
| 64 | +
|
| 65 | + - name: Set up QEMU |
| 66 | + uses: docker/setup-qemu-action@v2 |
| 67 | + with: |
| 68 | + platforms: all |
| 69 | + |
| 70 | + - name: Set up Docker Buildx |
| 71 | + id: buildx |
| 72 | + uses: docker/setup-buildx-action@v2 |
| 73 | + |
| 74 | + - name: Login to DockerHub |
| 75 | + if: github.event_name != 'pull_request' |
| 76 | + uses: docker/login-action@v2 |
| 77 | + with: |
| 78 | + username: ${{ secrets.DOCKER_USERNAME }} |
| 79 | + password: ${{ secrets.DOCKER_PASSWORD }} |
| 80 | + |
| 81 | + - name: Label |
| 82 | + id: Label |
| 83 | + run: | |
| 84 | + if [ -f "Dockerfile" ] ; then |
| 85 | + sed -i "/FROM .*/a LABEL tiredofit.image.git_repository=\"https://github.com/${GITHUB_REPOSITORY}\"" Dockerfile |
| 86 | + sed -i "/FROM .*/a LABEL tiredofit.image.git_commit=\"${GITHUB_SHA}\"" Dockerfile |
| 87 | + sed -i "/FROM .*/a LABEL tiredofit.image.git_committed_by=\"${GITHUB_ACTOR}\"" Dockerfile |
| 88 | + sed -i "/FROM .*/a LABEL tiredofit.image_build_date=\"$(date +'%Y-%m-%d %H:%M:%S')\"" Dockerfile |
| 89 | + if [ -f "CHANGELOG.md" ] ; then |
| 90 | + sed -i "/FROM .*/a LABEL tiredofit.image.git_changelog_version=\"$(head -n1 ./CHANGELOG.md | awk '{print $2}')\"" Dockerfile |
| 91 | + mkdir -p install/assets/.changelogs ; cp CHANGELOG.md install/assets/.changelogs/${GITHUB_REPOSITORY/\//_}.md |
| 92 | + fi |
| 93 | +
|
| 94 | + if [[ $GITHUB_REF == refs/tags/* ]]; then |
| 95 | + sed -i "/FROM .*/a LABEL tiredofit.image.git_tag=\"${GITHUB_REF#refs/tags/v}\"" Dockerfile |
| 96 | + fi |
| 97 | +
|
| 98 | + if [[ $GITHUB_REF == refs/heads/* ]]; then |
| 99 | + sed -i "/FROM .*/a LABEL tiredofit.image.git_branch=\"${GITHUB_REF#refs/heads/}\"" Dockerfile |
| 100 | + fi |
| 101 | + fi |
| 102 | +
|
| 103 | + - name: Build |
| 104 | + uses: docker/build-push-action@v3 |
| 105 | + with: |
| 106 | + builder: ${{ steps.buildx.outputs.name }} |
| 107 | + context: . |
| 108 | + file: ./Dockerfile |
| 109 | + platforms: linux/amd64 |
| 110 | + push: true |
| 111 | + tags: ${{ steps.prep.outputs.tags }} |
0 commit comments