build #4476
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |