Skip to content
Merged
119 changes: 71 additions & 48 deletions .github/workflows/github-docker-registry-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,6 @@ jobs:
id: changes
run: echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | tr '\n' ' ')" >> $GITHUB_ENV

- name: Write Docker versions to file
# This step writes the Docker and Docker Compose versions to a file
run: |
echo "- $(docker --version)" > docker-versions.txt
echo "- $(docker compose version)" >> docker-versions.txt

- name: Authenticate GH CLI
# This step authenticates the GitHub CLI
run: gh auth login --with-token <<< "${{ secrets.GITHUB_TOKEN }}"
Expand All @@ -50,28 +44,65 @@ jobs:
run: |
git config --global user.name 'GitHub Action'
git config --global user.email 'action@github.com'
git checkout -b docker-versions-update

# Ensure we start from a clean main branch
git fetch origin main
git checkout main
git reset --hard origin/main

# Create unique branch name to avoid conflicts
BRANCH_NAME="docker-versions-update-$(date +%s)"
git checkout -b "$BRANCH_NAME"

# Write Docker versions to file
echo "- $(docker --version)" > docker-versions.txt
echo "- $(docker compose version)" >> docker-versions.txt

# Only add the specific file we want
git add docker-versions.txt
if git diff-index --quiet HEAD --; then
echo "No changes to commit"

# Check if there are actually changes to commit
if git diff --cached --quiet; then
echo "No changes to docker-versions.txt, skipping PR creation"
else
git commit -m "Update Docker versions"
git push origin docker-versions-update
echo 'y' | gh pr create --fill
# Check if an open PR already exists
EXISTING_PR=$(gh pr list --base main --state open --search "chore: update Docker versions in:title" --json number --jq '.[0].number // empty')
if [ -n "$EXISTING_PR" ]; then
echo "Open PR #$EXISTING_PR already exists for Docker version updates, skipping PR creation"
echo "You can view it at: $(gh pr view $EXISTING_PR --json url --jq '.url')"
else
git commit -m "chore: update Docker versions"
git push origin "$BRANCH_NAME"
# Create PR with explicit title and body instead of --fill
gh pr create \
--title "chore: update Docker versions" \
--body "Automated update of docker-versions.txt with current Docker and Docker Compose versions.

**Changes:**
- Updated Docker version information
- Updated Docker Compose version information

This PR only contains changes to \`docker-versions.txt\` and no other files." \
--base main \
--head "$BRANCH_NAME"
fi
fi

- name: Check for Dockerfile and context changes
# This step checks for changes in Dockerfile and context
run: |
HAS_DOCKER_CHANGES=false
for file in ${{ env.files }}; do
if [[ $file =~ (^|/)Dockerfile($|/)|(^|/)dockerfiles/ ]]; then
echo "Dockerfile or dockerfiles directory has changed."
echo "Changed file: $file"
if [[ "$file" =~ (^|/)Dockerfile($|/)|(^|/)dockerfiles/ ]]; then
echo "Dockerfile or dockerfiles directory has changed: $file"
HAS_DOCKER_CHANGES=true
break
fi
done

if (( $? == 0 )); then

echo "HAS_DOCKER_CHANGES=$HAS_DOCKER_CHANGES" >> $GITHUB_ENV

if [[ "$HAS_DOCKER_CHANGES" == "false" ]]; then
echo "No Dockerfile or context directory changes. Skipping Docker image build and push steps."
echo "Changed files: ${{ env.files }}"
fi
Expand All @@ -87,7 +118,7 @@ jobs:
-
name: Login to GitHub Container Registry
# This step logs in to GHCR
if: contains(env.files, 'Dockerfile')
if: env.HAS_DOCKER_CHANGES == 'true' && env.IS_FORK != 'true'
uses: docker/login-action@v3
with:
registry: ghcr.io
Expand All @@ -103,91 +134,83 @@ jobs:
echo "BRANCH=$BRANCH_NAME" >> $GITHUB_ENV
id: extract_branch

- name: Extract branch name and set BRANCH environment variable
# This step extracts the branch name and sets the BRANCH environment variable
shell: bash
run: |
BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/} | sed -e 's#/#-#g')
if [[ "$BRANCH_NAME" == "main" ]]; then BRANCH_NAME=""; fi
echo "BRANCH=$BRANCH_NAME" >> $GITHUB_ENV

- name: Set repository name to lowercase
# This step sets the repository name to lowercase
run: echo "REPO_NAME=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV

- name: Build and push a simple jenkins controller
# This step builds and pushes a simple Jenkins controller
if: contains(env.files, 'dockerfiles/Dockerfile') || contains(env.files, 'dockerfiles/')
if: (contains(env.files, 'dockerfiles/Dockerfile') || contains(env.files, 'dockerfiles/')) && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles
platforms: linux/amd64, linux/aarch64
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:simple_controller_${{ env.BRANCH }}

- name: Build and push the jenkins agent for maven tutorial
# This step builds and pushes the Jenkins agent for the Maven tutorial
if: contains(env.files, 'dockerfiles/maven/Dockerfile')
if: contains(env.files, 'dockerfiles/maven/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/maven
platforms: linux/amd64, linux/aarch64
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:maven_agent_${{ env.BRANCH }}

- name: Build and push the jenkins agent for python tutorial
# This step builds and pushes the Jenkins agent for the Python tutorial
if: contains(env.files, 'dockerfiles/python/Dockerfile')
if: contains(env.files, 'dockerfiles/python/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/python
platforms: linux/amd64, linux/aarch64
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:python_agent_${{ env.BRANCH }}

- name: Build and push the jenkins agent for node tutorial
# This step builds and pushes the Jenkins agent for the Node.js tutorial
if: contains(env.files, 'dockerfiles/node/Dockerfile')
if: contains(env.files, 'dockerfiles/node/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/node
platforms: linux/amd64, linux/aarch64
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:node_agent_${{ env.BRANCH }}

- name: Build and push the jenkins agent for the sidekick container
# This step builds and pushes the Jenkins agent for the sidekick container
if: contains(env.files, 'dockerfiles/sidekick/Dockerfile')
if: contains(env.files, 'dockerfiles/sidekick/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/sidekick
platforms: linux/amd64, linux/aarch64
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:sidekick_${{ env.BRANCH }}

- name: Build and push the jenkins agent for the agent-finding container
# This step builds and pushes the Jenkins agent for the agent-finding container
if: contains(env.files, 'dockerfiles/agent-discovery/Dockerfile')
if: contains(env.files, 'dockerfiles/agent-discovery/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/agent-discovery/
platforms: linux/amd64, linux/aarch64
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:agent_discovery_${{ env.BRANCH }}

- name: Build and push the jenkins agent for multi-branch controller
# This step builds and pushes the Jenkins agent for the multi-branch controller
if: contains(env.files, 'dockerfiles/multi/Dockerfile')
if: contains(env.files, 'dockerfiles/multi/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/multi
platforms: linux/amd64, linux/aarch64
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:multi_controller_${{ env.BRANCH }}

- name: Build and push the jenkins agent for Android
# This step builds and pushes the Jenkins agent for Android
if: contains(env.files, 'dockerfiles/android/Dockerfile')
if: contains(env.files, 'dockerfiles/android/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/android
Expand All @@ -197,7 +220,7 @@ jobs:

- name: Build and push the jenkins agent for golang tutorial
# This step builds and pushes the Jenkins agent for the Golang tutorial
if: contains(env.files, 'dockerfiles/golang/Dockerfile')
if: contains(env.files, 'dockerfiles/golang/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/golang
Expand All @@ -207,20 +230,20 @@ jobs:

- name: Build and push the jenkins agent for cpp tutorial
# This step builds and pushes the Jenkins agent for the C++ tutorial
if: contains(env.files, 'dockerfiles/cpp/Dockerfile')
if: contains(env.files, 'dockerfiles/cpp/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/cpp
platforms: linux/amd64, linux/aarch64
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:cpp_${{ env.BRANCH }}

- name: Build and push the jenkins agent for dotnet tutorial
# This step builds and pushes the Jenkins agent for the C++ tutorial
if: contains(env.files, 'dockerfiles/dotnet/Dockerfile')
# This step builds and pushes the Jenkins agent for the .NET tutorial
if: contains(env.files, 'dockerfiles/dotnet/') && env.IS_FORK != 'true'
uses: docker/build-push-action@v6
with:
context: ./dockerfiles/dotnet
platforms: linux/amd64, linux/aarch64
platforms: linux/amd64, linux/arm64
push: true
tags: ghcr.io/${{ env.REPO_NAME }}/jenkinsci-tutorials:dotnet_${{ env.BRANCH }}
Loading