Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 '[email protected]'
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
Comment on lines +77 to +88
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Critical YAML syntax error: fix multi-line PR body.

Static analysis confirms line 81 causes a YAML parsing error because **Changes:** at the line start is interpreted as YAML syntax. The backslash-continued multi-line string is fragile.

Use a heredoc to avoid YAML parsing issues:

-            # 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"
+            # Create PR with explicit title and body instead of --fill
+            gh pr create \
+              --title "chore: update Docker versions" \
+              --body "$(cat <<'EOF'
+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.
+EOF
+)" \
+              --base main \
+              --head "$BRANCH_NAME"

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 actionlint (1.7.7)

81-81: could not parse as YAML: yaml: line 81: did not find expected alphabetic or numeric character

(syntax-check)

🪛 YAMLlint (1.37.1)

[error] 81-81: syntax error: expected alphabetic or numeric character, but found '*'

(syntax)

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