2019-04-06 15:44:04 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"encoding/json"
|
|
|
|
"math"
|
|
|
|
"net/url"
|
|
|
|
"time"
|
|
|
|
|
2021-05-25 14:08:27 +02:00
|
|
|
"github.com/woodpecker-ci/woodpecker/cncd/pipeline/pipeline/interrupt"
|
|
|
|
"github.com/woodpecker-ci/woodpecker/cncd/pipeline/pipeline/rpc"
|
2019-04-06 15:44:04 +02:00
|
|
|
|
|
|
|
_ "github.com/joho/godotenv/autoload"
|
|
|
|
"github.com/urfave/cli"
|
|
|
|
)
|
|
|
|
|
|
|
|
var onceCommand = cli.Command{
|
|
|
|
Name: "once",
|
|
|
|
Usage: "execute one build",
|
|
|
|
Hidden: false,
|
|
|
|
Action: once,
|
|
|
|
Flags: []cli.Flag{
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "endpoint",
|
|
|
|
EnvVar: "PIPED_ENDPOINT,PIPED_SERVER",
|
|
|
|
Value: "ws://localhost:9999",
|
|
|
|
},
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "token",
|
|
|
|
EnvVar: "PIPED_TOKEN,PIPED_SECRET",
|
|
|
|
},
|
|
|
|
cli.DurationFlag{
|
|
|
|
Name: "backoff",
|
|
|
|
EnvVar: "PIPED_BACKOFF",
|
|
|
|
Value: time.Second * 15,
|
|
|
|
},
|
|
|
|
cli.IntFlag{
|
|
|
|
Name: "retry-limit",
|
|
|
|
EnvVar: "PIPED_RETRY_LIMIT",
|
|
|
|
Value: math.MaxInt32,
|
|
|
|
},
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "platform",
|
|
|
|
EnvVar: "PIPED_PLATFORM",
|
|
|
|
Value: "linux/amd64",
|
|
|
|
},
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "json",
|
|
|
|
EnvVar: "PIPED_JSON",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
func once(c *cli.Context) error {
|
|
|
|
endpoint, err := url.Parse(
|
|
|
|
c.String("endpoint"),
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
client, err := rpc.NewClient(
|
|
|
|
endpoint.String(),
|
|
|
|
rpc.WithRetryLimit(
|
|
|
|
c.Int("retry-limit"),
|
|
|
|
),
|
|
|
|
rpc.WithBackoff(
|
|
|
|
c.Duration("backoff"),
|
|
|
|
),
|
|
|
|
rpc.WithToken(
|
|
|
|
c.String("token"),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
defer client.Close()
|
|
|
|
|
|
|
|
ctx := context.Background()
|
|
|
|
ctx = interrupt.WithContextFunc(ctx, func() {
|
|
|
|
println("ctrl+c received, terminating process")
|
|
|
|
})
|
|
|
|
|
|
|
|
return run(ctx, &onceClient{client, c.String("json")}, rpc.NoFilter)
|
|
|
|
}
|
|
|
|
|
|
|
|
type onceClient struct {
|
|
|
|
*rpc.Client
|
|
|
|
json string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *onceClient) Next(ctx context.Context, filter rpc.Filter) (*rpc.Pipeline, error) {
|
|
|
|
in := []byte(c.json)
|
|
|
|
out := new(rpc.Pipeline)
|
|
|
|
err := json.Unmarshal(in, out)
|
|
|
|
return out, err
|
|
|
|
}
|