Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GitHub Actions: Notify Go Module Major Version Updates #716

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
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
68 changes: 68 additions & 0 deletions .github/workflows/go-mod-major.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/bin/sh

# A GitHub issue with this title and those labels (might be just one)
# will be created or, if it already exists and is open, will be reused.
GH_ISSUE_TITLE="Go Module Major Version Updates"
GH_ISSUE_LABELS="dependencies"

set -eu

# UPDATE_MSG will be altered from within check_updates()
UPDATE_MSG=""

# check_updates DIR check if any major updates are within DIR.
# Found updates are being added to UPDATE_MSG
check_updates() {
available_updates="$(gomajor list -major -dir "$1" 2>&1 \
| grep -v "no module versions found" \
| awk '{ print NR ". `" $0 "`" }')"

if [ -z "$available_updates" ]; then
echo "Nothing to do in $1"
return
fi

echo "Found $(echo "$available_updates" | wc -l) updates in $1"
UPDATE_MSG="$(cat <<EOF
$UPDATE_MSG

### Updates in \`$1\`
$available_updates

EOF
)"
}

for DIR in "$@"; do
check_updates "$DIR"
done

if [ -z "$UPDATE_MSG" ]; then
echo "Nothing to do at all :-)"
exit 0
fi

UPDATE_MSG="$(cat <<EOF
## $GH_ISSUE_TITLE
There are major version updates available for used Go modules.

$UPDATE_MSG
EOF
)"

active_issue="$(gh issue list \
--label "$GH_ISSUE_LABELS" \
--state "open" \
--search "in:title \"$GH_ISSUE_TITLE\"" \
--json "number" \
--jq ".[0].number")"

if [ -n "$active_issue" ]; then
gh issue comment "$active_issue" \
--body "$UPDATE_MSG"
else
gh issue create \
--title "$GH_ISSUE_TITLE" \
--label "$GH_ISSUE_LABELS" \
--body "$UPDATE_MSG"
fi
25 changes: 25 additions & 0 deletions .github/workflows/go-mod-major.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Go Module Major Update Check
on:
schedule:
- cron: '30 6 * * 1' # at 06:30 every Monday morning

jobs:
go_mod_update_issue:
name: Go Module Major Update Check and Issue Creation
runs-on: ubuntu-latest

permissions:
issues: write

steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: stable

- run: go install github.com/icholy/gomajor@latest

- run: .github/workflows/go-mod-major.sh "." "tests"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
Loading