mirror of
https://gitea.com/gitea/act_runner.git
synced 2026-04-25 21:30:23 +08:00
Use `golangci-lint fmt` to format code, upgrading `.golangci.yml` to v2 and mirroring the linter configuration used by https://github.com/go-gitea/gitea. `gci` now handles import ordering into standard, project-local, blank, and default groups. Mirrors https://github.com/go-gitea/gitea/pull/37194. Changes: - Upgrade `.golangci.yml` to v2 format with the same linter set as gitea (minus `prealloc`, `unparam`, `testifylint`, `nilnil` which produced too many pre-existing issues) - Add path-based exclusions (`bodyclose`, `gosec` in tests; `gosec:G115`/`G117` globally) - Run lint via `make lint-go` in CI instead of `golangci/golangci-lint-action`, matching the pattern used by other Gitea repos - Apply safe auto-fixes (`modernize`, `perfsprint`, `usetesting`, etc.) - Add explanations to existing `//nolint` directives - Remove dead code (unused `newRemoteReusableWorkflow` and `networkName`), duplicate imports, and shadowed `max` builtins - Replace deprecated `docker/distribution/reference` with `distribution/reference` - Fix `Deprecated:` comment casing and simplify nil/len checks --- This PR was written with the help of Claude Opus 4.7 Reviewed-on: https://gitea.com/gitea/act/pulls/163 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: silverwind <me@silverwind.io> Co-committed-by: silverwind <me@silverwind.io>
55 lines
993 B
Go
55 lines
993 B
Go
package common
|
|
|
|
// CartesianProduct takes map of lists and returns list of unique tuples
|
|
func CartesianProduct(mapOfLists map[string][]any) []map[string]any {
|
|
listNames := make([]string, 0)
|
|
lists := make([][]any, 0)
|
|
for k, v := range mapOfLists {
|
|
listNames = append(listNames, k)
|
|
lists = append(lists, v)
|
|
}
|
|
|
|
listCart := cartN(lists...)
|
|
|
|
rtn := make([]map[string]any, 0)
|
|
for _, list := range listCart {
|
|
vMap := make(map[string]any)
|
|
for i, v := range list {
|
|
vMap[listNames[i]] = v
|
|
}
|
|
rtn = append(rtn, vMap)
|
|
}
|
|
return rtn
|
|
}
|
|
|
|
func cartN(a ...[]any) [][]any {
|
|
c := 1
|
|
for _, a := range a {
|
|
c *= len(a)
|
|
}
|
|
if c == 0 || len(a) == 0 {
|
|
return nil
|
|
}
|
|
p := make([][]any, c)
|
|
b := make([]any, c*len(a))
|
|
n := make([]int, len(a))
|
|
s := 0
|
|
for i := range p {
|
|
e := s + len(a)
|
|
pi := b[s:e]
|
|
p[i] = pi
|
|
s = e
|
|
for j, n := range n {
|
|
pi[j] = a[j][n]
|
|
}
|
|
for j := len(n) - 1; j >= 0; j-- {
|
|
n[j]++
|
|
if n[j] < len(a[j]) {
|
|
break
|
|
}
|
|
n[j] = 0
|
|
}
|
|
}
|
|
return p
|
|
}
|