Skip to content

Update Go Version

Update Go Version #61

name: Update Go Version
on:
schedule:
# Runs every day at midnight UTC
- cron: '0 0 * * *'
workflow_dispatch:
# Allows manual triggering of the workflow
jobs:
update-go-version:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Import bot's GPG key for signing commits
id: import-gpg
uses: crazy-max/ghaction-import-gpg@cb9bde2e2525e640591a934b1fd28eef1dcaf5e5 # v6.2.0
with:
gpg_private_key: ${{ secrets.BUILD_KEY }}
passphrase: ${{ secrets.BUILD_PASSPHRASE }}
git_config_global: true
git_user_signingkey: true
git_commit_gpgsign: true
- name: Set up Go
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
with:
go-version: '1.x'
- name: Get latest Go version
id: get-latest-go
run: |
latest_go_version=$(curl -s https://go.dev/VERSION?m=text)
latest_go_version=${latest_go_version#go} # Strip the 'go' prefix
echo "Latest Go version: $latest_go_version"
echo "::set-output name=latest_go_version::$latest_go_version"
- name: Get current Go version from go.mod
id: get-current-go
run: |
current_go_version=$(go mod edit -json | jq -r '.Go')
echo "Current Go version: $current_go_version"
echo "::set-output name=current_go_version::$current_go_version"
- name: Check if branch exists on remote
id: check-branch
run: |
branch_name=update-go-version-${{ steps.get-latest-go.outputs.latest_go_version }}
if git ls-remote --exit-code --heads origin $branch_name; then
echo "Branch $branch_name already exists on the remote."
echo "::set-output name=branch_not_exist::false"
else
echo "::set-output name=branch_not_exist::true"
fi
- name: Check if Go version needs update
id: check-update
run: |
if [ "${{ steps.get-latest-go.outputs.latest_go_version }}" != "${{ steps.get-current-go.outputs.current_go_version }}" ]; then
echo "::set-output name=update_needed::true"
else
echo "::set-output name=update_needed::false"
fi
- name: Update go.mod with latest Go version
id: update-go-mod
if: ${{ steps.check-update.outputs.update_needed == 'true' && steps.check-branch.outputs.branch_not_exist == 'true'}}
run: |
latest_go_version=${{ steps.get-latest-go.outputs.latest_go_version }}
echo "Updating go.mod to use Go version: $latest_go_version"
go mod edit -go=$latest_go_version
go mod tidy
branch_name=update-go-version-$latest_go_version
git checkout -b $branch_name
git add go.mod go.sum
git commit -S -m "Update Go version to $latest_go_version"
git push --set-upstream origin $branch_name
echo "::set-output name=branch::$branch_name"
- name: Install GitHub CLI
run: sudo apt-get install gh
- name: Create pull request
if: ${{ steps.check-update.outputs.update_needed == 'true' && steps.check-branch.outputs.branch_not_exist == 'true'}}
run: |
gh pr create -B main -H ${{ steps.update-go-mod.outputs.branch }} \
--title "Update Go version to ${{ steps.get-latest-go.outputs.latest_go_version }}" \
--body "This PR updates the Go version in the go.mod file to the latest available version."
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}