2022-08-14 13:29:00 +08:00
|
|
|
package runtime
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
|
|
|
"gitea.com/gitea/act_runner/client"
|
2022-08-17 14:26:58 +08:00
|
|
|
runnerv1 "gitea.com/gitea/proto-go/runner/v1"
|
2022-08-14 13:29:00 +08:00
|
|
|
|
2022-10-14 10:55:49 +08:00
|
|
|
"github.com/bufbuild/connect-go"
|
2022-09-03 20:57:32 +08:00
|
|
|
log "github.com/sirupsen/logrus"
|
2022-08-14 13:29:00 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
// Runner runs the pipeline.
|
|
|
|
type Runner struct {
|
2022-10-16 23:51:53 +08:00
|
|
|
Machine string
|
|
|
|
ForgeInstance string
|
|
|
|
Environ map[string]string
|
|
|
|
Client client.Client
|
2022-08-14 13:29:00 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// Run runs the pipeline stage.
|
2022-09-25 18:54:00 +08:00
|
|
|
func (s *Runner) Run(ctx context.Context, task *runnerv1.Task) error {
|
2022-09-03 20:57:32 +08:00
|
|
|
l := log.
|
2022-09-25 18:54:00 +08:00
|
|
|
WithField("task.id", task.Id)
|
2022-08-14 13:29:00 +08:00
|
|
|
l.Info("start running pipeline")
|
2022-09-01 15:09:22 +08:00
|
|
|
|
2022-10-14 10:55:49 +08:00
|
|
|
// update runner status
|
|
|
|
// running: idle -> active
|
|
|
|
// stopped: active -> idle
|
|
|
|
if _, err := s.Client.UpdateRunner(
|
|
|
|
ctx,
|
|
|
|
connect.NewRequest(&runnerv1.UpdateRunnerRequest{
|
|
|
|
Status: runnerv1.RunnerStatus_RUNNER_STATUS_ACTIVE,
|
|
|
|
}),
|
|
|
|
); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
l.Info("update runner status to active")
|
|
|
|
defer func() {
|
|
|
|
if _, err := s.Client.UpdateRunner(
|
|
|
|
ctx,
|
|
|
|
connect.NewRequest(&runnerv1.UpdateRunnerRequest{
|
|
|
|
Status: runnerv1.RunnerStatus_RUNNER_STATUS_IDLE,
|
|
|
|
}),
|
|
|
|
); err != nil {
|
|
|
|
log.Errorln("update status error:", err.Error())
|
|
|
|
}
|
|
|
|
l.Info("update runner status to idle")
|
|
|
|
}()
|
|
|
|
|
2022-10-16 23:51:53 +08:00
|
|
|
return NewTask(s.ForgeInstance, task.Id, s.Client).Run(ctx, task)
|
2022-08-14 13:29:00 +08:00
|
|
|
}
|