diff --git a/.github/workflows/autodep.yml b/.github/workflows/autodep.yml new file mode 100644 index 0000000..2a656ef --- /dev/null +++ b/.github/workflows/autodep.yml @@ -0,0 +1,66 @@ +env: + GO_VERSION: 1.19 + +on: + workflow_dispatch: + schedule: + - cron: "15 6 * * 1" # 6:15 UTC weekly on Monday + +jobs: + dep_update: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ env.GO_VERSION }} + + - name: Checkout + uses: actions/checkout@v3 + + - name: Update minor and patch-level dependencies + run: go get -t -u ./... + + - name: Tidy + run: go mod tidy + + - name: Create pull request + uses: peter-evans/create-pull-request@v4 + with: + title: "Update package dependencies + tidy" + body: | + This is a change initiated automatically on a weekly basis by a + GitHub Action that updates the projects dependencies to their latest + minor and patch-level versions. This lets us stay up to date + incrementally so that updates are less effort to get merged compared + to large monolithic updates, and gets us security updates more + expediently. + + If the build passes, you are probably A-OK to merge and deploy this. + If not, try to dig into what's not working and see if you can fix it + so that the dep train stays on its rails. + + Note that although minor/patch level changes are handled + automatically, notably major version changes like you'd find in + stripe-go are not and those upgrades need to be performed manually. + That should theoretically not be a problem if fixes are backported + to all previous majors, but in practice they are often not, so it's + worthwhile to occasionally look for new majors and integrate them. + branch: "dep-update" + commit-message: | + Update package dependencies + tidy + + Weekly update to the project's package dependencies initiated by an + automatic GitHub Action running on cron. Keeps upgrades less of a + monolithic task and lets security-related patches trickle in more + quickly. + author: "Bot " + committer: "Bot " + delete-branch: true + draft: true + reviewers: | + iand + assignees: | + iand diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..d0b8a53 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,48 @@ +env: + GO_VERSION: 1.19 + +on: + workflow_dispatch: + pull_request: + types: [opened, reopened,ready_for_review,synchronize] + push: + branches: + - main + - master +name: Check +jobs: + check: + runs-on: ubuntu-latest + steps: + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ env.GO_VERSION }} + - name: Get StaticCheck + run: go install honnef.co/go/tools/cmd/staticcheck@7586196b2bb05a248f1934d8087c759d05910e60 # Version 2022.1.2 (v0.3.2) + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Gomod + run: | + go mod tidy + if [[ -n $(git ls-files --other --exclude-standard --directory -- go.sum) ]]; then + echo "go.sum was added by go mod tidy" + exit 1 + fi + git diff --exit-code -- go.sum go.mod + - name: Gofmt + if: ${{ success() || failure() }} # run this step even if the previous one failed + run: | + out=$(gofmt -s -l .) + if [[ -n "$out" ]]; then + echo $out | awk '{print "::error file=" $0 ",line=0,col=0::File is not gofmt-ed."}' + exit 1 + fi + - name: Vet + if: ${{ success() || failure() }} # run this step even if the previous one failed + run: go vet ./... + - name: StaticCheck + if: ${{ success() || failure() }} # run this step even if the previous one failed + run: staticcheck ./... diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..cdc876a --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,50 @@ + +on: + workflow_dispatch: + pull_request: + types: [opened, reopened,ready_for_review,synchronize] + push: + branches: + - main + - master +name: Test +jobs: + test: + strategy: + matrix: + go-version: [1.17.x, 1.18.x, 1.19.x] + os: [ "ubuntu", "windows", "macos" ] + runs-on: ${{ matrix.os }}-latest + steps: + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go-version }} + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + - id: Cache + uses: actions/cache@v2 + with: + path: | + ~/go/pkg/mod # Module download cache + ~/.cache/go-build # Build cache (Linux) + ~/Library/Caches/go-build # Build cache (Mac) + '%LocalAppData%\go-build' # Build cache (Windows) + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + - name: Dependencies + run: go mod download + if: steps.cache.outputs.cache-hit != 'true' + - name: Test + run: go test ./... + - name: Test 32 bit + if: ${{ matrix.os != 'macos' }} # can't run 32 bit tests on OSX. + env: + GOARCH: 386 + run: go test ./... + - name: Test with race detector + if: ${{ matrix.os == 'ubuntu' }} # speed things up. Windows and OSX VMs are slow + run: go test -race ./...