mirror of https://code.forgejo.org/forgejo/runner
update protocol
parent
2babadbc94
commit
5903c08c14
91
cmd/damon.go
91
cmd/damon.go
|
@ -4,7 +4,10 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
"strings"
|
"strings"
|
||||||
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
|
@ -16,12 +19,22 @@ type Message struct {
|
||||||
Version int //
|
Version int //
|
||||||
Type int // message type, 1 register 2 error
|
Type int // message type, 1 register 2 error
|
||||||
RunnerUUID string // runner uuid
|
RunnerUUID string // runner uuid
|
||||||
|
BuildUUID string // build uuid
|
||||||
ErrCode int // error code
|
ErrCode int // error code
|
||||||
ErrContent string // errors message
|
ErrContent string // errors message
|
||||||
EventName string
|
EventName string
|
||||||
EventPayload string
|
EventPayload string
|
||||||
|
JobID string // only run the special job, empty means run all the jobs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
MsgTypeRegister = iota + 1 // register
|
||||||
|
MsgTypeError // error
|
||||||
|
MsgTypeRequestBuild // request build task
|
||||||
|
MsgTypeIdle // no task
|
||||||
|
MsgTypeBuildResult // build result
|
||||||
|
)
|
||||||
|
|
||||||
func runDaemon(ctx context.Context, input *Input) func(cmd *cobra.Command, args []string) error {
|
func runDaemon(ctx context.Context, input *Input) func(cmd *cobra.Command, args []string) error {
|
||||||
log.Info().Msgf("Starting runner daemon")
|
log.Info().Msgf("Starting runner daemon")
|
||||||
|
|
||||||
|
@ -56,7 +69,7 @@ func runDaemon(ctx context.Context, input *Input) func(cmd *cobra.Command, args
|
||||||
// register the client
|
// register the client
|
||||||
msg := Message{
|
msg := Message{
|
||||||
Version: 1,
|
Version: 1,
|
||||||
Type: 1,
|
Type: MsgTypeRegister,
|
||||||
RunnerUUID: "111111",
|
RunnerUUID: "111111",
|
||||||
}
|
}
|
||||||
bs, err := json.Marshal(&msg)
|
bs, err := json.Marshal(&msg)
|
||||||
|
@ -109,20 +122,80 @@ func runDaemon(ctx context.Context, input *Input) func(cmd *cobra.Command, args
|
||||||
switch msg.Version {
|
switch msg.Version {
|
||||||
case 1:
|
case 1:
|
||||||
switch msg.Type {
|
switch msg.Type {
|
||||||
case 1:
|
case MsgTypeRegister:
|
||||||
log.Info().Msgf("received message: %s", message)
|
log.Info().Msgf("received registered success: %s", message)
|
||||||
case 2:
|
conn.WriteJSON(&Message{
|
||||||
case 4:
|
Version: 1,
|
||||||
|
Type: MsgTypeRequestBuild,
|
||||||
|
RunnerUUID: msg.RunnerUUID,
|
||||||
|
})
|
||||||
|
case MsgTypeError:
|
||||||
|
log.Info().Msgf("received error msessage: %s", message)
|
||||||
|
conn.WriteJSON(&Message{
|
||||||
|
Version: 1,
|
||||||
|
Type: MsgTypeRequestBuild,
|
||||||
|
RunnerUUID: msg.RunnerUUID,
|
||||||
|
})
|
||||||
|
case MsgTypeIdle:
|
||||||
log.Info().Msgf("received no task")
|
log.Info().Msgf("received no task")
|
||||||
case 3:
|
conn.WriteJSON(&Message{
|
||||||
|
Version: 1,
|
||||||
|
Type: MsgTypeRequestBuild,
|
||||||
|
RunnerUUID: msg.RunnerUUID,
|
||||||
|
})
|
||||||
|
case MsgTypeRequestBuild:
|
||||||
switch msg.EventName {
|
switch msg.EventName {
|
||||||
case "push":
|
case "push":
|
||||||
input := Input{
|
input := Input{
|
||||||
forgeInstance: "github.com",
|
forgeInstance: "github.com",
|
||||||
|
reuseContainers: true,
|
||||||
}
|
}
|
||||||
if err := runTask(context.Background(), &input, ""); err != nil {
|
|
||||||
log.Error().Msgf("run task failed: %v", err)
|
ctx, cancel := context.WithTimeout(context.Background(), time.Hour)
|
||||||
|
defer cancel()
|
||||||
|
sigs := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||||
|
done := make(chan error)
|
||||||
|
go func(chan error) {
|
||||||
|
done <- runTask(ctx, &input, "")
|
||||||
|
}(done)
|
||||||
|
|
||||||
|
c := time.NewTicker(time.Second)
|
||||||
|
defer c.Stop()
|
||||||
|
|
||||||
|
END:
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-sigs:
|
||||||
|
cancel()
|
||||||
|
log.Info().Msgf("cancel task")
|
||||||
|
break END
|
||||||
|
case err := <-done:
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Msgf("runTask failed: %v", err)
|
||||||
|
conn.WriteJSON(&Message{
|
||||||
|
Version: 1,
|
||||||
|
Type: MsgTypeBuildResult,
|
||||||
|
RunnerUUID: msg.RunnerUUID,
|
||||||
|
BuildUUID: msg.BuildUUID,
|
||||||
|
ErrCode: 1,
|
||||||
|
ErrContent: err.Error(),
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
log.Error().Msgf("runTask success")
|
||||||
|
conn.WriteJSON(&Message{
|
||||||
|
Version: 1,
|
||||||
|
Type: MsgTypeBuildResult,
|
||||||
|
RunnerUUID: msg.RunnerUUID,
|
||||||
|
BuildUUID: msg.BuildUUID,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
break END
|
||||||
|
case <-c.C:
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
log.Warn().Msgf("unknow event %s with payload %s", msg.EventName, msg.EventPayload)
|
log.Warn().Msgf("unknow event %s with payload %s", msg.EventName, msg.EventPayload)
|
||||||
}
|
}
|
||||||
|
|
23
cmd/root.go
23
cmd/root.go
|
@ -7,9 +7,11 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/nektos/act/pkg/artifacts"
|
"github.com/nektos/act/pkg/artifacts"
|
||||||
|
"github.com/nektos/act/pkg/common"
|
||||||
"github.com/nektos/act/pkg/model"
|
"github.com/nektos/act/pkg/model"
|
||||||
"github.com/nektos/act/pkg/runner"
|
"github.com/nektos/act/pkg/runner"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -60,7 +62,10 @@ func (i *Input) newPlatforms() map[string]string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Execute(ctx context.Context) {
|
func Execute(ctx context.Context) {
|
||||||
input := Input{}
|
input := Input{
|
||||||
|
reuseContainers: true,
|
||||||
|
forgeInstance: "gitea.com",
|
||||||
|
}
|
||||||
|
|
||||||
rootCmd := &cobra.Command{
|
rootCmd := &cobra.Command{
|
||||||
Use: "act [event name to run]\nIf no event name passed, will default to \"on: push\"",
|
Use: "act [event name to run]\nIf no event name passed, will default to \"on: push\"",
|
||||||
|
@ -103,6 +108,17 @@ func getWorkflowsPath() (string, error) {
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type StepHook struct{}
|
||||||
|
|
||||||
|
func (hook *StepHook) Levels() []logrus.Level {
|
||||||
|
return logrus.AllLevels
|
||||||
|
}
|
||||||
|
|
||||||
|
func (hook *StepHook) Fire(entry *logrus.Entry) error {
|
||||||
|
fmt.Printf("====== %#v \n ", entry)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func runTask(ctx context.Context, input *Input, jobID string) error {
|
func runTask(ctx context.Context, input *Input, jobID string) error {
|
||||||
workflowsPath, err := getWorkflowsPath()
|
workflowsPath, err := getWorkflowsPath()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -177,6 +193,11 @@ func runTask(ctx context.Context, input *Input, jobID string) error {
|
||||||
return fmt.Errorf("New config failed: %v", err)
|
return fmt.Errorf("New config failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log := logrus.StandardLogger()
|
||||||
|
log.AddHook(&StepHook{})
|
||||||
|
|
||||||
|
ctx = common.WithLogger(ctx, log)
|
||||||
|
|
||||||
cancel := artifacts.Serve(ctx, input.artifactServerPath, input.artifactServerPort)
|
cancel := artifacts.Serve(ctx, input.artifactServerPath, input.artifactServerPort)
|
||||||
|
|
||||||
executor := r.NewPlanExecutor(plan).Finally(func(ctx context.Context) error {
|
executor := r.NewPlanExecutor(plan).Finally(func(ctx context.Context) error {
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -6,6 +6,7 @@ require (
|
||||||
github.com/gorilla/websocket v1.4.2
|
github.com/gorilla/websocket v1.4.2
|
||||||
github.com/nektos/act v0.2.26
|
github.com/nektos/act v0.2.26
|
||||||
github.com/rs/zerolog v1.26.1
|
github.com/rs/zerolog v1.26.1
|
||||||
|
github.com/sirupsen/logrus v1.8.1
|
||||||
github.com/spf13/cobra v1.4.0
|
github.com/spf13/cobra v1.4.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -56,7 +57,6 @@ require (
|
||||||
github.com/rivo/uniseg v0.2.0 // indirect
|
github.com/rivo/uniseg v0.2.0 // indirect
|
||||||
github.com/robfig/cron v1.2.0 // indirect
|
github.com/robfig/cron v1.2.0 // indirect
|
||||||
github.com/sergi/go-diff v1.2.0 // indirect
|
github.com/sergi/go-diff v1.2.0 // indirect
|
||||||
github.com/sirupsen/logrus v1.8.1 // indirect
|
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
github.com/xanzy/ssh-agent v0.3.1 // indirect
|
github.com/xanzy/ssh-agent v0.3.1 // indirect
|
||||||
go.opencensus.io v0.23.0 // indirect
|
go.opencensus.io v0.23.0 // indirect
|
||||||
|
|
Loading…
Reference in New Issue