mirror of
https://github.com/actions/runner.git
synced 2025-12-10 04:06:57 +00:00
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
167 lines
7.6 KiB
YAML
167 lines
7.6 KiB
YAML
name: "Docker/Buildx Version Upgrade"
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "0 0 * * 1" # Run every Monday at midnight
|
|
workflow_dispatch: # Allow manual triggering
|
|
|
|
jobs:
|
|
check-versions:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
DOCKER_SHOULD_UPDATE: ${{ steps.check_docker_version.outputs.SHOULD_UPDATE }}
|
|
DOCKER_LATEST_VERSION: ${{ steps.check_docker_version.outputs.LATEST_VERSION }}
|
|
DOCKER_CURRENT_VERSION: ${{ steps.check_docker_version.outputs.CURRENT_VERSION }}
|
|
BUILDX_SHOULD_UPDATE: ${{ steps.check_buildx_version.outputs.SHOULD_UPDATE }}
|
|
BUILDX_LATEST_VERSION: ${{ steps.check_buildx_version.outputs.LATEST_VERSION }}
|
|
BUILDX_CURRENT_VERSION: ${{ steps.check_buildx_version.outputs.CURRENT_VERSION }}
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Check Docker version
|
|
id: check_docker_version
|
|
shell: bash
|
|
run: |
|
|
# Extract current Docker version from Dockerfile
|
|
current_version=$(grep "ARG DOCKER_VERSION=" ./images/Dockerfile | cut -d'=' -f2)
|
|
|
|
# Fetch latest Docker Engine version from Docker's download site
|
|
# This gets the latest Linux static binary version which matches what's used in the Dockerfile
|
|
latest_version=$(curl -s https://download.docker.com/linux/static/stable/x86_64/ | grep -o 'docker-[0-9]*\.[0-9]*\.[0-9]*\.tgz' | sort -V | tail -n 1 | sed 's/docker-\(.*\)\.tgz/\1/')
|
|
|
|
# Extra check to ensure we got a valid version
|
|
if [[ ! $latest_version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
echo "Failed to retrieve a valid Docker version"
|
|
exit 1
|
|
fi
|
|
|
|
should_update=0
|
|
[ "$current_version" != "$latest_version" ] && should_update=1
|
|
|
|
echo "CURRENT_VERSION=${current_version}" >> $GITHUB_OUTPUT
|
|
echo "LATEST_VERSION=${latest_version}" >> $GITHUB_OUTPUT
|
|
echo "SHOULD_UPDATE=${should_update}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Check Buildx version
|
|
id: check_buildx_version
|
|
shell: bash
|
|
run: |
|
|
# Extract current Buildx version from Dockerfile
|
|
current_version=$(grep "ARG BUILDX_VERSION=" ./images/Dockerfile | cut -d'=' -f2)
|
|
|
|
# Fetch latest Buildx version
|
|
latest_version=$(curl -s https://api.github.com/repos/docker/buildx/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
|
|
|
should_update=0
|
|
[ "$current_version" != "$latest_version" ] && should_update=1
|
|
|
|
echo "CURRENT_VERSION=${current_version}" >> $GITHUB_OUTPUT
|
|
echo "LATEST_VERSION=${latest_version}" >> $GITHUB_OUTPUT
|
|
echo "SHOULD_UPDATE=${should_update}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Create annotations for versions
|
|
run: |
|
|
docker_should_update="${{ steps.check_docker_version.outputs.SHOULD_UPDATE }}"
|
|
buildx_should_update="${{ steps.check_buildx_version.outputs.SHOULD_UPDATE }}"
|
|
|
|
# Show annotation if only Docker needs update
|
|
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."
|
|
fi
|
|
|
|
# Show annotation if only Buildx needs update
|
|
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."
|
|
fi
|
|
|
|
# Show annotation when both are current
|
|
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."
|
|
fi
|
|
|
|
update-versions:
|
|
permissions:
|
|
pull-requests: write
|
|
contents: write
|
|
needs: [check-versions]
|
|
if: ${{ needs.check-versions.outputs.DOCKER_SHOULD_UPDATE == 1 && needs.check-versions.outputs.BUILDX_SHOULD_UPDATE == 1 }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Update Docker version
|
|
shell: bash
|
|
run: |
|
|
latest_version="${{ needs.check-versions.outputs.DOCKER_LATEST_VERSION }}"
|
|
current_version="${{ needs.check-versions.outputs.DOCKER_CURRENT_VERSION }}"
|
|
|
|
# Update version in Dockerfile
|
|
sed -i "s/ARG DOCKER_VERSION=$current_version/ARG DOCKER_VERSION=$latest_version/g" ./images/Dockerfile
|
|
|
|
- name: Update Buildx version
|
|
shell: bash
|
|
run: |
|
|
latest_version="${{ needs.check-versions.outputs.BUILDX_LATEST_VERSION }}"
|
|
current_version="${{ needs.check-versions.outputs.BUILDX_CURRENT_VERSION }}"
|
|
|
|
# Update version in Dockerfile
|
|
sed -i "s/ARG BUILDX_VERSION=$current_version/ARG BUILDX_VERSION=$latest_version/g" ./images/Dockerfile
|
|
|
|
- name: Commit changes and create Pull Request
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
# Setup branch and commit information
|
|
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 }}"
|
|
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
|
|
git config --global user.name "github-actions[bot]"
|
|
git config --global user.email "<41898282+github-actions[bot]@users.noreply.github.com>"
|
|
|
|
# Create branch or switch to it if it exists
|
|
if git show-ref --quiet refs/remotes/origin/$branch_name; then
|
|
git fetch origin
|
|
git checkout -B "$branch_name" origin/$branch_name
|
|
else
|
|
git checkout -b "$branch_name"
|
|
fi
|
|
|
|
# Commit and push changes
|
|
git commit -a -m "$commit_message"
|
|
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
|
|
gh pr create -B main -H "$branch_name" \
|
|
--title "$pr_title" \
|
|
--label "dependencies" \
|
|
--label "dependencies-weekly-check" \
|
|
--label "dependencies-not-dependabot" \
|
|
--label "docker" \
|
|
--body-file pr_body.txt
|