.github/workflows: shard the Windows builder

It's one of the slower ones, so split it up into chunks.

Updates tailscale/corp#28679

Change-Id: I16a5ba667678bf238c84417a51dda61baefbecf7
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick 2025-06-19 10:56:15 -07:00 committed by Brad Fitzpatrick
parent 5a52f80c4c
commit 9af42f425c
2 changed files with 27 additions and 4 deletions

View File

@ -210,6 +210,17 @@ jobs:
windows: windows:
runs-on: windows-2022 runs-on: windows-2022
needs: gomod-cache needs: gomod-cache
name: Windows (${{ matrix.name || matrix.shard}})
strategy:
fail-fast: false # don't abort the entire matrix if one element fails
matrix:
include:
- key: "win-bench"
name: "benchmarks"
- key: "win-shard-1-2"
shard: "1/2"
- key: "win-shard-2-2"
shard: "2/2"
steps: steps:
- name: checkout - name: checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
@ -237,14 +248,16 @@ jobs:
~\AppData\Local\go-build ~\AppData\Local\go-build
# The -2- here should be incremented when the scheme of data to be # The -2- here should be incremented when the scheme of data to be
# cached changes (e.g. path above changes). # cached changes (e.g. path above changes).
key: ${{ github.job }}-${{ runner.os }}-go-2-${{ hashFiles('**/go.sum') }}-${{ github.run_id }} key: ${{ github.job }}-${{ matrix.key }}-go-2-${{ hashFiles('**/go.sum') }}-${{ github.run_id }}
restore-keys: | restore-keys: |
${{ github.job }}-${{ runner.os }}-go-2-${{ hashFiles('**/go.sum') }} ${{ github.job }}-${{ matrix.key }}-go-2-${{ hashFiles('**/go.sum') }}
${{ github.job }}-${{ runner.os }}-go-2- ${{ github.job }}-${{ matrix.key }}-go-2-
- name: test - name: test
if: matrix.key != 'win-bench' # skip on bench builder
working-directory: src working-directory: src
run: go run ./cmd/testwrapper ./... run: go run ./cmd/testwrapper sharded:${{ matrix.shard }}
- name: bench all - name: bench all
if: matrix.key == 'win-bench'
working-directory: src working-directory: src
# Don't use -bench=. -benchtime=1x. # Don't use -bench=. -benchtime=1x.
# Somewhere in the layers (powershell?) # Somewhere in the layers (powershell?)

View File

@ -213,6 +213,16 @@ func main() {
return return
} }
// As a special case, if the packages looks like "sharded:1/2" then shell out to
// ./tool/listpkgs to cut up the package list pieces for each sharded builder.
if nOfM, ok := strings.CutPrefix(packages[0], "sharded:"); ok && len(packages) == 1 {
out, err := exec.Command("go", "run", "tailscale.com/tool/listpkgs", "-shard", nOfM, "./...").Output()
if err != nil {
log.Fatalf("failed to list packages for sharded test: %v", err)
}
packages = strings.Split(strings.TrimSpace(string(out)), "\n")
}
ctx := context.Background() ctx := context.Background()
type nextRun struct { type nextRun struct {
tests []*packageTests tests []*packageTests