mirror of
https://github.com/go-gitea/gitea.git
synced 2026-09-26 14:43:39 +09:00
feat(actions): update actionslib, support self:, misc fixes (#39358)
Updates actionslib to https://gitea.com/gitea/actionslib/releases/tag/v1.2.1, moves workflow parsing into it and aligns behaviour with GitHub. 1. `uses:` supports `self:` (Gitea-only feature) and `$/` paths. 1. `strategy`, `matrix`, `max-parallel` and `fail-fast` accept expressions, including over `needs`. A job whose `name`, `runs-on` or `continue-on-error` reads `needs` is resolved once they finish. 1. A job `if:` may only read `github`, `needs`, `vars` and `inputs` and is decided before the matrix, as on github.com. 1. Matrix `fail-fast` cancels the other combinations, and `always()` jobs keep running when a run is cancelled. 1. Invalid workflow files, including a malformed `on:` and unknown or cyclic `needs`, show up on push as failed runs with the error. 1. A job whose `if:` or `concurrency:` fails to evaluate is skipped or failed with the error, instead of staying blocked. 1. Reusable workflows: a missing and an unreadable repository fail alike, public callers cannot use private workflows, nested jobs cannot exceed the caller's token permissions. 1. Runner labels match case-insensitively, and `runs-on` accepts an array from an expression. Runner PR: https://gitea.com/gitea/runner/pulls/1247 Docs PR: https://gitea.com/gitea/docs/pulls/553 Fixes: https://github.com/go-gitea/gitea/issues/38990 Fixes: https://github.com/go-gitea/gitea/issues/39382 Fixes: https://github.com/go-gitea/gitea/issues/32364 Fixes: https://github.com/go-gitea/gitea/issues/36077 Fixes: https://github.com/go-gitea/gitea/issues/23277 Fixes: https://github.com/go-gitea/gitea/issues/29020 Co-authored-by: Claude (Opus 5) <noreply@anthropic.com> Co-authored-by: Zettat123 <zettat123@gmail.com>
This commit is contained in:
@@ -4,36 +4,20 @@
|
||||
package actions
|
||||
|
||||
import (
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"gitea.dev/actionslib/pkg/model"
|
||||
actions_model "gitea.dev/models/actions"
|
||||
"gitea.dev/modules/log"
|
||||
)
|
||||
|
||||
// parseMaxParallel returns strategy.max-parallel for a job, 0 meaning unlimited.
|
||||
// GitHub accepts any YAML number here and casts it to an int, so 1.5 truncates to 1.
|
||||
// Expressions are not evaluated yet and fall back to unlimited.
|
||||
func parseMaxParallel(jobID, maxParallelString string) int {
|
||||
if maxParallelString == "" {
|
||||
return 0
|
||||
limit, err := model.Strategy{MaxParallelString: maxParallelString}.MaxParallel()
|
||||
if err != nil && !strings.Contains(maxParallelString, "${{") { // a deferred matrix placeholder's expression is evaluated at expansion
|
||||
log.Warn("job %s: %v, treating as unlimited", jobID, err)
|
||||
}
|
||||
maxParallel, err := strconv.ParseFloat(maxParallelString, 64)
|
||||
if err != nil || math.IsNaN(maxParallel) {
|
||||
// Both fall back to unlimited, but an expression is a gap in Gitea while a non-number is the
|
||||
// author's mistake, so dropping the cap must not be reported the same way.
|
||||
if strings.Contains(maxParallelString, "${{") {
|
||||
// TODO: evaluate it against the contexts `if:` and the matrix already resolve, so that an
|
||||
// expression can actually cap a job instead of quietly disabling the cap.
|
||||
log.Debug("job %s: max-parallel %q is an expression, which is not evaluated yet: treating as unlimited", jobID, maxParallelString)
|
||||
} else {
|
||||
log.Warn("job %s: max-parallel %q is not a number, treating as unlimited", jobID, maxParallelString)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
// a run can never hold more jobs than MaxJobNumPerRun, so clamping there keeps the cast total
|
||||
return int(min(max(maxParallel, 0), actions_model.MaxJobNumPerRun))
|
||||
return min(limit, actions_model.MaxJobNumPerRun)
|
||||
}
|
||||
|
||||
// maxParallelSlots counts the jobs holding a max-parallel slot. Slots are scoped by ParentJobID as
|
||||
|
||||
Reference in New Issue
Block a user