// Copyright 2023 Woodpecker Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package plugin import ( "time" "github.com/urfave/cli/v2" ) const ( EventTypePush = "push" EventTypePullRequest = "pull_request" EventTypeTag = "tag" EventTypeDeployment = "deployment" EventTypeCron = "cron" EventTypeManual = "manual" ) // Pipeline defines runtime metadata for a pipeline. type Pipeline struct { Number int64 `json:"number,omitempty"` Status string `json:"status,omitempty"` Event string `json:"event,omitempty"` URL string `json:"url,omitempty"` DeployTarget string `json:"target,omitempty"` Created time.Time `json:"created,omitempty"` Started time.Time `json:"started,omitempty"` Finished time.Time `json:"finished,omitempty"` Parent int64 `json:"parent,omitempty"` // Deprecated: Please use URL instead. Link string `json:"link,omitempty"` } func pipelineFlags() []cli.Flag { return []cli.Flag{ &cli.Int64Flag{ Name: "pipeline.number", Usage: "pipeline number", EnvVars: []string{ "CI_PIPELINE_NUMBER", "DRONE_BUILD_NUMBER", }, }, &cli.StringFlag{ Name: "pipeline.status", Usage: "pipeline status", EnvVars: []string{ "CI_PIPELINE_STATUS", "DRONE_BUILD_STATUS", }, }, &cli.StringFlag{ Name: "pipeline.event", Usage: "pipeline event", EnvVars: []string{ "CI_PIPELINE_EVENT", "DRONE_BUILD_EVENT", }, }, &cli.StringFlag{ Name: "pipeline.url", Aliases: []string{"pipeline.link"}, Usage: "pipeline url", EnvVars: []string{ "CI_PIPELINE_URL", "CI_PIPELINE_LINK", "DRONE_BUILD_LINK", }, }, &cli.StringFlag{ Name: "pipeline.deploy-target", Usage: "pipeline deployment target", EnvVars: []string{ "CI_PIPELINE_DEPLOY_TARGET", "DRONE_DEPLOY_TO", }, }, &cli.Int64Flag{ Name: "pipeline.created", Usage: "pipeline creation time", EnvVars: []string{ "CI_PIPELINE_CREATED", "DRONE_BUILD_CREATED", }, }, &cli.Int64Flag{ Name: "pipeline.started", Usage: "pipeline start time", EnvVars: []string{ "CI_PIPELINE_STARTED", "DRONE_BUILD_STARTED", }, }, &cli.Int64Flag{ Name: "pipeline.finished", Usage: "pipeline finish time", EnvVars: []string{ "CI_PIPELINE_FINISHED", "DRONE_BUILD_FINISHED", }, }, &cli.Int64Flag{ Name: "pipeline.parent", Usage: "pipeline parent", EnvVars: []string{ "CI_PIPELINE_PARENT", "DRONE_BUILD_PARENT", }, }, } } func pipelineFromContext(c *cli.Context) Pipeline { return Pipeline{ Number: c.Int64("pipeline.number"), Status: c.String("pipeline.status"), Event: c.String("pipeline.event"), URL: c.String("pipeline.url"), Link: c.String("pipeline.url"), DeployTarget: c.String("pipeline.deploy-target"), Created: time.Unix(c.Int64("pipeline.created"), 0), Started: time.Unix(c.Int64("pipeline.started"), 0), Finished: time.Unix(c.Int64("pipeline.finished"), 0), Parent: c.Int64("pipeline.parent"), } }