Skip to content

build

build #2634

Workflow file for this run

name: build
on:
push:
branches:
- main
schedule:
- cron: '25 */6 * * *'
workflow_dispatch:
jobs:
parent-image:
name: Check for updated parent image
runs-on: ubuntu-latest
outputs:
updated: ${{ steps.check.outputs.updated }}
steps:
- name: Check last push times
id: check
run: |
set -x
base_url='https://hub.docker.com/v2/repositories'
parent_url="${base_url}/jenkins/jenkins/tags/latest"
child_url="${base_url}/${{ secrets.DOCKER_HUB_USERNAME }}/jenkins-docker/tags/latest"
filter='.images|.[]|select(.architecture=="amd64")|.last_pushed'
parent_last_pushed="$(date -d "$(curl -s "${parent_url}" | jq -r "${filter}")" +%s)"
child_last_pushed="$(date -d "$(curl -s "${child_url}" | jq -r "${filter}")" +%s)"
if (( parent_last_pushed > child_last_pushed )); then
echo "updated=true" >> "${GITHUB_OUTPUT}"
else
echo "updated=false" >> "${GITHUB_OUTPUT}"
fi
build:
name: Build Docker image
runs-on: ubuntu-latest
needs: parent-image
if: needs.parent-image.outputs.updated == 'true'
steps:
- name: Check out repo
uses: actions/checkout@v3 # https://github.com/actions/checkout
- name: Set build variables
id: vars
run: |
set -ex
datetime="$(date --utc --iso-8601=seconds)"
echo "datetime=${datetime}" >> "${GITHUB_OUTPUT}"
docker_version="$(./get-latest-docker-release.sh stable)"
echo "docker_version=${docker_version}" >> "${GITHUB_OUTPUT}"
docker_compose_version="$(./get-latest-release-tag.sh docker compose)"
echo "docker_compose_version=${docker_compose_version}" >> "${GITHUB_OUTPUT}"
- name: Cache Docker layers
uses: actions/cache@v3 # https://github.com/actions/cache
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.job_number }}
restore-keys: ${{ runner.os }}-buildx-
- name: Log into Docker Hub
uses: docker/login-action@v2 # https://github.com/docker/login-action
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2 # https://github.com/marketplace/actions/docker-setup-buildx
- name: Build and push image
id: docker-build
uses: docker/build-push-action@v3 # https://github.com/docker/build-push-action
with:
context: .
file: ./Dockerfile
build-args: |
DOCKER_COMPOSE_VERSION=${{ steps.vars.outputs.docker_compose_version }}
DOCKER_VERSION=${{ steps.vars.outputs.docker_version }}
tags: |
${{ secrets.DOCKER_HUB_USERNAME }}/jenkins-docker:latest
labels: |
org.opencontainers.image.created=${{ steps.vars.outputs.datetime }}
org.opencontainers.image.revision=${{ github.sha }}
docker-compose-version=${{ steps.vars.outputs.docker_compose_version }}
docker-version=${{ steps.vars.outputs.docker_version }}
pull: true
push: true
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new
- name: Show image digest
run: echo ${{ steps.docker-build.outputs.digest }}
# https://github.com/docker/build-push-action/issues/252#issuecomment-744400434
- name: Move cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache