Publish images to the Docker Library #10
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: Publish images to the Docker Library | |
on: | |
workflow_dispatch: | |
inputs: | |
pr: | |
description: 'Publish to the Docker Official Library' | |
required: true | |
type: boolean | |
default: true | |
draft: | |
description: 'Draft Pull Request' | |
required: true | |
type: boolean | |
env: | |
# Docker Library Git repository name (upstream): docker-library/official-images | |
docker_library: docker-library/official-images | |
# Docker Library Git repository name (local fork): ${{ github.actor }}/official-images or almalinux/docker-library-official-images | |
local_library: almalinux/docker-library-official-images | |
# Docker Library Git repository owner (local fork): ${{ github.actor }} or almalinux | |
library_owner: almalinux | |
jobs: | |
prepare-definitions: | |
name: "${{ matrix.version_major }} ${{ matrix.image_types }} definition preparing" | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
image_types: | |
- default | |
- minimal | |
version_major: | |
- 8 | |
- 9 | |
steps: | |
- | |
name: Checkout ${{ github.repository }}, branch '${{ matrix.version_major }}' | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ matrix.version_major }} | |
fetch-depth: 0 # Checkout all commits | |
- | |
name: Checkout ${{ env.local_library }}, branch 'master' | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ env.local_library }} | |
path: official-images | |
- | |
name: "Get need data for the definition" | |
run: | | |
# Dockerfile for specific version and image type (let's take platform amd64) | |
platform=amd64 | |
dockerfile=${{ matrix.image_types }}/${platform}/Dockerfile | |
test -f ${dockerfile} | |
# The recent commit of the Dockerfile | |
last_commit=$( git log -1 --format='%H' -- ${dockerfile} ) | |
echo "commit_hash=${last_commit}" >> $GITHUB_ENV | |
# Get tags from the Dockerfile | |
tags=$( grep 'Tags:' ${dockerfile} | sed "s/^[[:space:]]*#[[:space:]]*Tags: \(.*\)$/\1/" ) | |
echo "tags=${tags}" >> $GITHUB_ENV | |
[ -z "$last_commit-x" -o -z "$tags-x" ] && false | |
echo "[Debug]" | |
echo "tags=${tags}" | |
echo "commit_hash=${last_commit}" | |
- | |
name: "Render the definition" | |
uses: chuhlomin/render-template@v1 | |
with: | |
template: docker-library-definition.tmpl | |
result_path: official-images/library/almalinux.${{ matrix.version_major }}.${{ matrix.image_types }} | |
vars: | | |
tags: ${{ env.tags }} | |
commit_hash: ${{ env.commit_hash}} | |
version_major: ${{ matrix.version_major }} | |
image_type: ${{ matrix.image_types }} | |
- | |
name: "[Debug] Check definitions" | |
run: | | |
cat official-images/library/almalinux.${{ matrix.version_major }}.${{ matrix.image_types }} | |
# Upload 'official-images/library/almalinux.*' | |
- uses: actions/upload-artifact@v4 | |
name: Upload definitions for ${{ matrix.version_major }} ${{ matrix.image_types }} | |
with: | |
name: definition-${{ matrix.version_major }}.${{ matrix.image_types }} | |
path: official-images/library/almalinux.${{ matrix.version_major }}.${{ matrix.image_types }} | |
push-pr: | |
if: inputs.pr | |
name: "Create Pull Request with the new definition file" | |
runs-on: ubuntu-latest | |
needs: | |
- prepare-definitions | |
steps: | |
- | |
name: "Sync ${{ env.local_library }} with ${{ env.docker_library }}, branch 'master'" | |
run: | | |
# Sync ${{ env.local_library }} with ${{ env.docker_library }}, branch 'master' | |
gh auth login --with-token < <(echo ${{ secrets.GIT_HUB_TOKEN }}) | |
gh repo sync ${{ env.local_library }} --force --source ${{ env.docker_library }} --branch master | |
- | |
name: Checkout ${{ env.local_library }}, branch 'master' | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ env.local_library }} | |
path: official-images | |
token: ${{ secrets.GIT_HUB_TOKEN }} | |
fetch-depth: 0 # Checkout all commits | |
# Download uploaded above 'official-images/library/almalinux.*' | |
- uses: actions/download-artifact@v4 | |
name: Download all definitions | |
with: | |
pattern: definition-* | |
merge-multiple: true | |
path: official-images/library/ | |
- | |
name: "Create head of official-images/library/almalinux" | |
run: | | |
echo "# This file was generated on ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
Maintainers: The AlmaLinux OS Foundation <[email protected]> (@AlmaLinux) | |
GitRepo: ${{ github.server_url }}/${{ github.repository }}.git" > official-images/library/almalinux | |
- | |
name: "Merge definitions into official-images/library/almalinux" | |
run: | | |
# create official-images/library/almalinux | |
for file in $( ls -1 official-images/library/almalinux.*.* ); do | |
echo "" >> official-images/library/almalinux | |
cat $file >> official-images/library/almalinux | |
done | |
rm -f official-images/library/almalinux.*.* | |
echo "[Debug]" | |
cat official-images/library/almalinux | |
- | |
name: "Prepare date stamp" | |
run: | | |
# date stamp | |
date_stamp=$(date -u '+%Y%m%d') | |
echo "date_stamp=${date_stamp}" >> $GITHUB_ENV | |
[ -z "$date_stamp-x" ] && false | |
# [Debug] | |
echo "date_stamp=${date_stamp}" | |
- | |
name: "Prepare time stamp" | |
run: | | |
# time stamp | |
time_stamp=$(date -u '+%H:%M:%S') | |
echo "time_stamp=${time_stamp}" >> $GITHUB_ENV | |
[ -z "$time_stamp-x" ] && false | |
# [Debug] | |
echo "time_stamp=${time_stamp}" | |
- | |
name: "Commit and push official-images/library/almalinux" | |
uses: EndBug/add-and-commit@v9 | |
with: | |
cwd: official-images | |
default_author: user_info | |
pull: '--rebase --autostash' | |
message: "AlmaLinux auto-update - ${{ env.date_stamp }} ${{ env.time_stamp }}" | |
push: true | |
- | |
name: Create Pull Request for official-images/library/almalinux | |
run: | | |
# create pull request with 'gh pr create' | |
gh_opts='' | |
[ "${{ inputs.draft }}" = "true" ] && gh_opts='--draft' | |
title="Almalinux auto-update - ${{ env.date_stamp }} ${{ env.time_stamp }}" | |
body="This is an auto-generated commit. Any concern or issues, please contact or email AlmaLinux OS Foundation [email protected] (@AlmaLinux)" | |
cd official-images | |
gh auth login --with-token < <(echo ${{ secrets.GIT_HUB_TOKEN }}) | |
prs=$(gh pr list \ | |
--repo ${{ env.docker_library }} \ | |
--base master \ | |
--author ${{ env.library_owner}} \ | |
--json title \ | |
--jq 'length') | |
echo "${prs} pull request(s) found for the ${{ env.docker_library }} branch master." | |
if [ $prs -lt 1 ]; then | |
echo "Create pull request with 'gh pr create'" | |
gh pr create \ | |
--title "${title}" \ | |
--body "${body}" \ | |
--repo ${{ env.docker_library }} \ | |
--base master \ | |
${gh_opts} | |
fi |