mirror of
https://gitea.com/gitea/act_runner.git
synced 2026-10-29 03:16:43 +08:00
Update to [actionslib v1.2.0](https://gitea.com/gitea/actionslib/releases/tag/v1.2.0) and move logic to it. 1. `self:{owner}/{repo}[/{path}]@{ref}` in step `uses` resolves on the runner's Gitea instance, for https://github.com/go-gitea/gitea/issues/38990. 2. `strategy.job-index` and `strategy.job-total` come from Gitea when it sends them. 3. Container, services and `with` are evaluated once instead of on every use. 4. Fixes a flaky clone-lock test. Gitea PR: https://github.com/go-gitea/gitea/pull/39358 Docs PR: https://gitea.com/gitea/docs/pulls/553 --------- Co-authored-by: bircni <bircni@icloud.com> Reviewed-on: https://gitea.com/gitea/runner/pulls/1233 Reviewed-by: bircni <bircni@icloud.com> Co-authored-by: silverwind <2021+silverwind@noreply.gitea.com>
82 lines
2.0 KiB
Go
82 lines
2.0 KiB
Go
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
// Copyright 2022 The nektos/act Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package runner
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"gitea.com/gitea/runner/act/common"
|
|
"gitea.com/gitea/runner/act/container"
|
|
|
|
"gitea.dev/actionslib/pkg/model"
|
|
"github.com/kballard/go-shellquote"
|
|
)
|
|
|
|
type stepDocker struct {
|
|
Step *model.Step
|
|
RunContext *RunContext
|
|
env map[string]string
|
|
}
|
|
|
|
func (sd *stepDocker) pre() common.Executor { return common.NewPipelineExecutor() }
|
|
|
|
func (sd *stepDocker) main() common.Executor {
|
|
sd.env = map[string]string{}
|
|
|
|
return runStepExecutor(sd, stepStageMain, sd.runUsesContainer())
|
|
}
|
|
|
|
func (sd *stepDocker) post() common.Executor { return common.NewPipelineExecutor() }
|
|
|
|
func (sd *stepDocker) getRunContext() *RunContext {
|
|
return sd.RunContext
|
|
}
|
|
|
|
func (sd *stepDocker) getGithubContext(ctx context.Context) *model.GithubContext {
|
|
return sd.getRunContext().getGithubContext(ctx)
|
|
}
|
|
|
|
func (sd *stepDocker) getStepModel() *model.Step {
|
|
return sd.Step
|
|
}
|
|
|
|
func (sd *stepDocker) getEnv() *map[string]string {
|
|
return &sd.env
|
|
}
|
|
|
|
func (sd *stepDocker) getIfExpression(_ context.Context, _ stepStage) string {
|
|
return sd.Step.If.Value
|
|
}
|
|
|
|
func (sd *stepDocker) runUsesContainer() common.Executor {
|
|
rc := sd.RunContext
|
|
step := sd.Step
|
|
|
|
return func(ctx context.Context) error {
|
|
image := strings.TrimPrefix(step.Uses, "docker://")
|
|
cmd, err := shellquote.Split(step.With["args"])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var entrypoint []string
|
|
if entry := step.With["entrypoint"]; entry != "" {
|
|
entrypoint = []string{entry}
|
|
}
|
|
|
|
stepContainer := newStepContainer(ctx, sd, image, cmd, entrypoint, "")
|
|
|
|
return common.NewPipelineExecutor(
|
|
stepContainer.Pull(rc.Config.ForcePull),
|
|
stepContainer.Remove(),
|
|
stepContainer.Create(rc.Config.ContainerCapAdd, rc.Config.ContainerCapDrop),
|
|
stepContainer.Start(true),
|
|
).Finally(stepContainer.Close())(ctx)
|
|
}
|
|
}
|
|
|
|
var ContainerNewContainer = container.NewContainer
|