mirror of
https://gitea.com/gitea/act_runner.git
synced 2026-04-24 21:00:27 +08:00
Merges the `gitea.com/gitea/act` fork into this repository as the `act/` directory and consumes it as a local package. The `replace github.com/nektos/act => gitea.com/gitea/act` directive is removed; act's dependencies are merged into the root `go.mod`. - Imports rewritten: `github.com/nektos/act/pkg/...` → `gitea.com/gitea/act_runner/act/...` (flattened — `pkg/` boundary dropped to match the layout forgejo-runner adopted). - Dropped act's CLI (`cmd/`, `main.go`) and all upstream project files; kept the library tree + `LICENSE`. - Added `// Copyright <year> The Gitea Authors ...` / `// Copyright <year> nektos` headers to 104 `.go` files. - Pre-existing act lint violations annotated inline with `//nolint:<linter> // pre-existing issue from nektos/act`. `.golangci.yml` is unchanged vs `main`. - Makefile test target: `-race -short` (matches forgejo-runner). - Pre-existing integration test failures fixed: race in parallel executor (atomic counters); TestSetupEnv / command_test / expression_test / run_context_test updated to match gitea fork runtime; TestJobExecutor and TestActionCache gated on `testing.Short()`. Full `gitea/act` commit history is reachable via the second parent. Co-Authored-By: Claude (Opus 4.7) <noreply@anthropic.com>
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// Copyright 2020 The nektos/act Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
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
|
|
}
|