1#!/usr/bin/env bash
2
3# shellcheck disable=SC2016
4find . -type f -name go.mod | sort | while read -r mod; do
5 dir="$(dirname "$mod")"
6 name="$(basename "$dir")"
7 # get the parent directory when the module is nested semver-style
8 if [[ "$name" =~ ^v[0-9]+.*$ ]]; then
9 ver="$(basename "$dir")"
10 dir="$(dirname "$dir")"
11 name="$(basename "$dir")-$ver"
12 fi
13
14 sum="$dir/go.sum"
15 echo "# auto-generated by scripts/builds. DO NOT EDIT.
16name: $name
17
18on:
19 push:
20 branches:
21 - main
22 pull_request:
23 paths:
24 - $(dirname "$mod" | cut -f2- -d/)/**
25 - .github/workflows/${name}.yml
26
27jobs:
28 build:
29 strategy:
30 matrix:
31 os: [ubuntu-latest, macos-latest, windows-latest]
32 runs-on: \${{ matrix.os }}
33 defaults:
34 run:
35 working-directory: $(dirname "$mod")
36 steps:
37 - uses: actions/checkout@v4
38 - uses: actions/setup-go@v5
39 with:
40 go-version-file: $mod
41 cache: true
42 cache-dependency-path: $sum
43 - run: go build -v ./...
44 - run: go test -race -v ./...
45
46 dependabot:
47 needs: [build]
48 runs-on: ubuntu-latest
49 permissions:
50 pull-requests: write
51 contents: write
52 if: \${{ github.actor == 'dependabot[bot]' && github.event_name == 'pull_request'}}
53 steps:
54 - id: metadata
55 uses: dependabot/fetch-metadata@v2
56 with:
57 github-token: \"\${{ secrets.GITHUB_TOKEN }}\"
58 - run: |
59 gh pr review --approve \"\$PR_URL\"
60 gh pr merge --squash --auto \"\$PR_URL\"
61 env:
62 PR_URL: \${{github.event.pull_request.html_url}}
63 GITHUB_TOKEN: \${{secrets.GITHUB_TOKEN}}
64
65 lint:
66 uses: charmbracelet/meta/.github/workflows/lint.yml@main
67 with:
68 directory: $(dirname "$mod")/...
69 golangci_path: .golangci.yml
70" >"./.github/workflows/${name}.yml"
71done