mirror of
https://github.com/actions/runner.git
synced 2025-12-11 04:46:58 +00:00
feat: add automated Docker BuildX dependency management workflow (#4029)
This commit is contained in:
55
.github/workflows/docker-buildx-upgrade.yml
vendored
55
.github/workflows/docker-buildx-upgrade.yml
vendored
@@ -2,8 +2,8 @@ name: "Docker/Buildx Version Upgrade"
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 0 * * 1' # Run every Monday at midnight
|
- cron: "0 9 * * 1" # Weekly on Monday at 9 AM UTC (independent of other dependencies)
|
||||||
workflow_dispatch: # Allow manual triggering
|
workflow_dispatch: # Allow manual triggering
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-versions:
|
check-versions:
|
||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
echo "Failed to retrieve a valid Docker version"
|
echo "Failed to retrieve a valid Docker version"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
should_update=0
|
should_update=0
|
||||||
[ "$current_version" != "$latest_version" ] && should_update=1
|
[ "$current_version" != "$latest_version" ] && should_update=1
|
||||||
|
|
||||||
@@ -64,17 +64,17 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
docker_should_update="${{ steps.check_docker_version.outputs.SHOULD_UPDATE }}"
|
docker_should_update="${{ steps.check_docker_version.outputs.SHOULD_UPDATE }}"
|
||||||
buildx_should_update="${{ steps.check_buildx_version.outputs.SHOULD_UPDATE }}"
|
buildx_should_update="${{ steps.check_buildx_version.outputs.SHOULD_UPDATE }}"
|
||||||
|
|
||||||
# Show annotation if only Docker needs update
|
# Show annotation if only Docker needs update
|
||||||
if [[ "$docker_should_update" == "1" && "$buildx_should_update" == "0" ]]; then
|
if [[ "$docker_should_update" == "1" && "$buildx_should_update" == "0" ]]; then
|
||||||
echo "::warning ::Docker version (${{ steps.check_docker_version.outputs.LATEST_VERSION }}) needs update but Buildx is current. Only updating when both need updates."
|
echo "::warning ::Docker version (${{ steps.check_docker_version.outputs.LATEST_VERSION }}) needs update but Buildx is current. Only updating when both need updates."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Show annotation if only Buildx needs update
|
# Show annotation if only Buildx needs update
|
||||||
if [[ "$docker_should_update" == "0" && "$buildx_should_update" == "1" ]]; then
|
if [[ "$docker_should_update" == "0" && "$buildx_should_update" == "1" ]]; then
|
||||||
echo "::warning ::Buildx version (${{ steps.check_buildx_version.outputs.LATEST_VERSION }}) needs update but Docker is current. Only updating when both need updates."
|
echo "::warning ::Buildx version (${{ steps.check_buildx_version.outputs.LATEST_VERSION }}) needs update but Docker is current. Only updating when both need updates."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Show annotation when both are current
|
# Show annotation when both are current
|
||||||
if [[ "$docker_should_update" == "0" && "$buildx_should_update" == "0" ]]; then
|
if [[ "$docker_should_update" == "0" && "$buildx_should_update" == "0" ]]; then
|
||||||
echo "::warning ::Latest Docker version is ${{ steps.check_docker_version.outputs.LATEST_VERSION }} and Buildx version is ${{ steps.check_buildx_version.outputs.LATEST_VERSION }}. No updates needed."
|
echo "::warning ::Latest Docker version is ${{ steps.check_docker_version.outputs.LATEST_VERSION }} and Buildx version is ${{ steps.check_buildx_version.outputs.LATEST_VERSION }}. No updates needed."
|
||||||
@@ -90,25 +90,25 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Update Docker version
|
- name: Update Docker version
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
latest_version="${{ needs.check-versions.outputs.DOCKER_LATEST_VERSION }}"
|
latest_version="${{ needs.check-versions.outputs.DOCKER_LATEST_VERSION }}"
|
||||||
current_version="${{ needs.check-versions.outputs.DOCKER_CURRENT_VERSION }}"
|
current_version="${{ needs.check-versions.outputs.DOCKER_CURRENT_VERSION }}"
|
||||||
|
|
||||||
# Update version in Dockerfile
|
# Update version in Dockerfile
|
||||||
sed -i "s/ARG DOCKER_VERSION=$current_version/ARG DOCKER_VERSION=$latest_version/g" ./images/Dockerfile
|
sed -i "s/ARG DOCKER_VERSION=$current_version/ARG DOCKER_VERSION=$latest_version/g" ./images/Dockerfile
|
||||||
|
|
||||||
- name: Update Buildx version
|
- name: Update Buildx version
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
latest_version="${{ needs.check-versions.outputs.BUILDX_LATEST_VERSION }}"
|
latest_version="${{ needs.check-versions.outputs.BUILDX_LATEST_VERSION }}"
|
||||||
current_version="${{ needs.check-versions.outputs.BUILDX_CURRENT_VERSION }}"
|
current_version="${{ needs.check-versions.outputs.BUILDX_CURRENT_VERSION }}"
|
||||||
|
|
||||||
# Update version in Dockerfile
|
# Update version in Dockerfile
|
||||||
sed -i "s/ARG BUILDX_VERSION=$current_version/ARG BUILDX_VERSION=$latest_version/g" ./images/Dockerfile
|
sed -i "s/ARG BUILDX_VERSION=$current_version/ARG BUILDX_VERSION=$latest_version/g" ./images/Dockerfile
|
||||||
|
|
||||||
- name: Commit changes and create Pull Request
|
- name: Commit changes and create Pull Request
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -117,7 +117,7 @@ jobs:
|
|||||||
branch_name="feature/docker-buildx-upgrade"
|
branch_name="feature/docker-buildx-upgrade"
|
||||||
commit_message="Upgrade Docker to v${{ needs.check-versions.outputs.DOCKER_LATEST_VERSION }} and Buildx to v${{ needs.check-versions.outputs.BUILDX_LATEST_VERSION }}"
|
commit_message="Upgrade Docker to v${{ needs.check-versions.outputs.DOCKER_LATEST_VERSION }} and Buildx to v${{ needs.check-versions.outputs.BUILDX_LATEST_VERSION }}"
|
||||||
pr_title="Update Docker to v${{ needs.check-versions.outputs.DOCKER_LATEST_VERSION }} and Buildx to v${{ needs.check-versions.outputs.BUILDX_LATEST_VERSION }}"
|
pr_title="Update Docker to v${{ needs.check-versions.outputs.DOCKER_LATEST_VERSION }} and Buildx to v${{ needs.check-versions.outputs.BUILDX_LATEST_VERSION }}"
|
||||||
|
|
||||||
# Configure git
|
# Configure git
|
||||||
git config --global user.name "github-actions[bot]"
|
git config --global user.name "github-actions[bot]"
|
||||||
git config --global user.email "<41898282+github-actions[bot]@users.noreply.github.com>"
|
git config --global user.email "<41898282+github-actions[bot]@users.noreply.github.com>"
|
||||||
@@ -129,16 +129,35 @@ jobs:
|
|||||||
else
|
else
|
||||||
git checkout -b "$branch_name"
|
git checkout -b "$branch_name"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Commit and push changes
|
# Commit and push changes
|
||||||
git commit -a -m "$commit_message"
|
git commit -a -m "$commit_message"
|
||||||
git push --force origin "$branch_name"
|
git push --force origin "$branch_name"
|
||||||
|
|
||||||
|
# Create PR body using here-doc for proper formatting
|
||||||
|
cat > pr_body.txt << 'EOF'
|
||||||
|
Automated Docker and Buildx version update:
|
||||||
|
|
||||||
|
- Docker: ${{ needs.check-versions.outputs.DOCKER_CURRENT_VERSION }} → ${{ needs.check-versions.outputs.DOCKER_LATEST_VERSION }}
|
||||||
|
- Buildx: ${{ needs.check-versions.outputs.BUILDX_CURRENT_VERSION }} → ${{ needs.check-versions.outputs.BUILDX_LATEST_VERSION }}
|
||||||
|
|
||||||
|
This update ensures we're using the latest stable Docker and Buildx versions for security and performance improvements.
|
||||||
|
|
||||||
|
**Release notes:** https://docs.docker.com/engine/release-notes/
|
||||||
|
|
||||||
|
**Next steps:**
|
||||||
|
- Review the version changes
|
||||||
|
- Verify container builds work as expected
|
||||||
|
- Test multi-platform builds if applicable
|
||||||
|
- Merge when ready
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Autogenerated by [Docker/Buildx Version Upgrade Workflow](https://github.com/actions/runner/blob/main/.github/workflows/docker-buildx-upgrade.yml)
|
||||||
|
EOF
|
||||||
|
|
||||||
# Create PR
|
# Create PR
|
||||||
pr_body="Upgrades Docker version from ${{ needs.check-versions.outputs.DOCKER_CURRENT_VERSION }} to ${{ needs.check-versions.outputs.DOCKER_LATEST_VERSION }} and Docker Buildx version from ${{ needs.check-versions.outputs.BUILDX_CURRENT_VERSION }} to ${{ needs.check-versions.outputs.BUILDX_LATEST_VERSION }}.\n\n"
|
|
||||||
pr_body+="Release notes: https://docs.docker.com/engine/release-notes/\n\n"
|
|
||||||
pr_body+="---\n\nAutogenerated by [Docker/Buildx Version Upgrade Workflow](https://github.com/actions/runner/blob/main/.github/workflows/docker-buildx-upgrade.yml)"
|
|
||||||
|
|
||||||
gh pr create -B main -H "$branch_name" \
|
gh pr create -B main -H "$branch_name" \
|
||||||
--title "$pr_title" \
|
--title "$pr_title" \
|
||||||
--body "$pr_body"
|
--label "dependency" \
|
||||||
|
--body-file pr_body.txt
|
||||||
|
|||||||
Reference in New Issue
Block a user