Skip to content

Dependency upgrade check #28

Dependency upgrade check

Dependency upgrade check #28

Workflow file for this run

name: Dependency upgrade check
on:
schedule:
- cron: '0 6 * * *' # daily at 06:00 UTC
workflow_dispatch:
permissions:
contents: read
jobs:
upgrade:
name: Upgrade and test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6.0.2
- uses: actions/setup-go@v6.3.0
with:
go-version: stable # always latest released Go
check-latest: true
- name: Upgrade all dependencies
id: upgrade
run: |
go get -u -t ./...
go mod tidy
if git diff --quiet go.mod go.sum; then
echo "changed=false" >> "$GITHUB_OUTPUT"
else
echo "changed=true" >> "$GITHUB_OUTPUT"
echo "=== go.mod diff ==="
git diff go.mod
fi
- name: Check go version drift
id: godrift
run: |
mod_go=$(grep '^go ' go.mod | awk '{print $2}')
runtime_go=$(go env GOVERSION | sed 's/go//')
if [ "$mod_go" != "$runtime_go" ]; then
echo "go.mod go=$mod_go but runtime=$runtime_go"
echo "drifted=true" >> "$GITHUB_OUTPUT"
else
echo "drifted=false" >> "$GITHUB_OUTPUT"
fi
- name: Run tests (if deps changed or go version drifted)
if: steps.upgrade.outputs.changed == 'true' || steps.godrift.outputs.drifted == 'true'
run: go test ./... -count=1 -race
- name: Check for newer golangci-lint
id: lintdrift
run: |
pinned=$(grep 'GOLANGCI_LINT_VERSION:' .github/workflows/ci.yml | awk '{print $2}')
latest=$(curl -fsSL https://api.github.com/repos/golangci/golangci-lint/releases/latest | jq -r '.tag_name')
echo "pinned=$pinned latest=$latest"
echo "latest=$latest" >> "$GITHUB_OUTPUT"
if [ "$pinned" != "$latest" ]; then
echo "drifted=true" >> "$GITHUB_OUTPUT"
else
echo "drifted=false" >> "$GITHUB_OUTPUT"
fi
- name: Run golangci-lint (new version or on dep/go changes)
if: steps.lintdrift.outputs.drifted == 'true' || steps.upgrade.outputs.changed == 'true' || steps.godrift.outputs.drifted == 'true'
uses: golangci/golangci-lint-action@v9.2.0
with:
version: ${{ steps.lintdrift.outputs.latest }}