diff --git a/.chglog/config.yml b/.chglog/config.yml
index a34ec0b..944ec73 100755
--- a/.chglog/config.yml
+++ b/.chglog/config.yml
@@ -2,7 +2,7 @@ style: github
template: CHANGELOG.tpl.md
info:
title: CHANGELOG
- repository_url: https://github.com/thegeeklab/drone-plugin-lib
+ repository_url: https://github.com/thegeeklab/wp-plugin-go
options:
commit_groups:
title_maps:
diff --git a/.drone.yml b/.drone.yml
deleted file mode 100644
index 9077e84..0000000
--- a/.drone.yml
+++ /dev/null
@@ -1,161 +0,0 @@
----
-kind: pipeline
-name: test
-
-platform:
- os: linux
- arch: amd64
-
-steps:
- - name: deps
- image: golang:1.20
- commands:
- - make deps
- volumes:
- - name: godeps
- path: /go
-
- - name: lint
- image: golang:1.20
- commands:
- - make lint
- volumes:
- - name: godeps
- path: /go
-
- - name: test
- image: golang:1.20
- commands:
- - make test
- volumes:
- - name: godeps
- path: /go
-
-volumes:
- - name: godeps
- temp: {}
-
-trigger:
- ref:
- - refs/heads/main
- - refs/tags/**
- - refs/pull/**
-
----
-kind: pipeline
-name: release
-
-platform:
- os: linux
- arch: amd64
-
-steps:
- - name: changelog-generate
- image: thegeeklab/git-chglog
- commands:
- - git fetch -tq
- - git-chglog --no-color --no-emoji -o CHANGELOG.md ${DRONE_TAG:---next-tag unreleased unreleased}
-
- - name: changelog-format
- image: thegeeklab/alpine-tools
- commands:
- - prettier CHANGELOG.md
- - prettier -w CHANGELOG.md
-
- - name: publish
- image: plugins/github-release
- settings:
- api_key:
- from_secret: github_token
- note: CHANGELOG.md
- overwrite: true
- title: ${DRONE_TAG}
- when:
- ref:
- - refs/tags/**
-
-image_pull_secrets:
- - docker_config
-
-trigger:
- ref:
- - refs/heads/main
- - refs/tags/**
- - refs/pull/**
-
-depends_on:
- - test
-
----
-kind: pipeline
-name: docs
-
-platform:
- os: linux
- arch: amd64
-
-steps:
- - name: markdownlint
- image: thegeeklab/markdownlint-cli
- commands:
- - markdownlint 'README.md' 'CONTRIBUTING.md'
-
- - name: spellcheck
- image: thegeeklab/alpine-tools
- commands:
- - spellchecker --files 'README.md' 'CONTRIBUTING.md' -d .dictionary -p spell indefinite-article syntax-urls --no-suggestions
- environment:
- FORCE_COLOR: true
- NPM_CONFIG_LOGLEVEL: error
-
-trigger:
- ref:
- - refs/heads/main
- - refs/tags/**
- - refs/pull/**
-
-depends_on:
- - release
-
----
-kind: pipeline
-name: notifications
-
-platform:
- os: linux
- arch: amd64
-
-steps:
- - name: matrix
- image: thegeeklab/drone-matrix
- settings:
- homeserver:
- from_secret: matrix_homeserver
- password:
- from_secret: matrix_password
- roomid:
- from_secret: matrix_roomid
- template: "Status: **{{ .Build.Status }}**
Build: [{{ .Repo.Owner }}/{{ .Repo.Name }}]({{ .Build.Link }}){{ if .Build.Branch }} ({{ .Build.Branch }}){{ end }} by {{ .Commit.Author }}
Message: {{ .Commit.Message.Title }}"
- username:
- from_secret: matrix_username
- when:
- status:
- - success
- - failure
-
-trigger:
- ref:
- - refs/heads/main
- - refs/tags/**
- status:
- - success
- - failure
-
-depends_on:
- - docs
-
----
-kind: signature
-hmac: 1821966cd39f3db56d3ac90e1c75f488b9eb09644791399a2a259a008d8a2985
-
-...
diff --git a/.github/settings.yml b/.github/settings.yml
index 716867a..1371f99 100644
--- a/.github/settings.yml
+++ b/.github/settings.yml
@@ -1,7 +1,7 @@
repository:
- name: drone-plugin-lib
- description: Helper library for writing Drone CI plugins
- topics: drone, drone-plugin
+ name: wp-plugin-go
+ description: Helper library for writing Woodpecker CI plugins
+ topics: woodpecker, wp-plugin
private: false
has_issues: true
@@ -50,7 +50,9 @@ branches:
required_status_checks:
strict: false
contexts:
- - continuous-integration/drone/pr
+ - ci/woodpecker/pr/test
+ - ci/woodpecker/pr/release
+ - ci/woodpecker/pr/container
enforce_admins: true
required_linear_history: true
restrictions: null
diff --git a/.gitignore b/.gitignore
index 7a8b35d..3a2f843 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,6 @@
/dist/
/release/
-/drone-plugin-lib*
+/wp-plugin-go*
coverage.out
CHANGELOG.md
diff --git a/.golangci.yml b/.golangci.yml
index 342bde5..59fd161 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -95,3 +95,7 @@ linters-settings:
gofumpt:
extra-rules: true
lang-version: "1.20"
+ tagliatelle:
+ case:
+ rules:
+ json: snake
diff --git a/.prettierignore b/.prettierignore
index 23a4f05..135c35d 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,3 +1,2 @@
-.drone.yml
*.tpl.md
LICENSE
diff --git a/.woodpecker/notify.yml b/.woodpecker/notify.yml
new file mode 100644
index 0000000..d4ee06b
--- /dev/null
+++ b/.woodpecker/notify.yml
@@ -0,0 +1,31 @@
+---
+when:
+ - event: [tag]
+ - event: [push, manual]
+ branch:
+ - ${CI_REPO_DEFAULT_BRANCH}
+
+runs_on: [success, failure]
+
+steps:
+ matrix:
+ image: quay.io/thegeeklab/drone-matrix
+ settings:
+ homeserver:
+ from_secret: matrix_homeserver
+ password:
+ from_secret: matrix_password
+ roomid:
+ from_secret: matrix_roomid
+ template: >-
+ Status: **{{ .Build.Status }}**
+ Build: [{{ .Repo.Owner }}/{{ .Repo.Name }}]({{ .Build.Link }}){{ if .Build.Branch }} ({{ .Build.Branch }}){{ end }} by {{ .Commit.Author }}
+ Message: {{ .Commit.Message.Title }}
+ username:
+ from_secret: matrix_username
+ when:
+ - status: [success, failure]
+
+depends_on:
+ - test
+ - release
diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml
new file mode 100644
index 0000000..a431ae6
--- /dev/null
+++ b/.woodpecker/release.yml
@@ -0,0 +1,41 @@
+---
+when:
+ - event: [pull_request, tag]
+ - event: [push, manual]
+ branch:
+ - ${CI_REPO_DEFAULT_BRANCH}
+
+steps:
+ checksum:
+ image: docker.io/alpine
+ commands:
+ - sha256sum retry > sha256sum.txt
+
+ changelog-generate:
+ image: quay.io/thegeeklab/git-chglog
+ commands:
+ - git fetch -tq
+ - git-chglog --no-color --no-emoji -o CHANGELOG.md ${CI_COMMIT_TAG:---next-tag unreleased unreleased}
+
+ changelog-format:
+ image: quay.io/thegeeklab/alpine-tools
+ commands:
+ - prettier CHANGELOG.md
+ - prettier -w CHANGELOG.md
+
+ publish-github:
+ image: docker.io/plugins/github-release
+ settings:
+ api_key:
+ from_secret: github_token
+ files:
+ - retry
+ - sha256sum.txt
+ note: CHANGELOG.md
+ overwrite: true
+ title: ${CI_COMMIT_TAG}
+ when:
+ - event: [tag]
+
+depends_on:
+ - test
diff --git a/.woodpecker/test.yml b/.woodpecker/test.yml
new file mode 100644
index 0000000..01952de
--- /dev/null
+++ b/.woodpecker/test.yml
@@ -0,0 +1,22 @@
+---
+when:
+ - event: [pull_request, tag]
+ - event: [push, manual]
+ branch:
+ - ${CI_REPO_DEFAULT_BRANCH}
+
+steps:
+ deps:
+ image: docker.io/library/golang:1.20
+ commands:
+ - make deps
+
+ lint:
+ image: docker.io/library/golang:1.20
+ commands:
+ - make lint
+
+ test:
+ image: docker.io/library/golang:1.20
+ commands:
+ - make test
diff --git a/Makefile b/Makefile
index bb0a135..9f16fe8 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@ GOFUMPT_PACKAGE_VERSION := v0.5.0
# renovate: datasource=github-releases depName=golangci/golangci-lint
GOLANGCI_LINT_PACKAGE_VERSION := v1.53.3
-EXECUTABLE := drone-plugin-lib
+EXECUTABLE := wp-plugin-go
DIST := dist
DIST_DIRS := $(DIST)
@@ -30,8 +30,8 @@ endif
TAGS ?= netgo
ifndef VERSION
- ifneq ($(DRONE_TAG),)
- VERSION ?= $(subst v,,$(DRONE_TAG))
+ ifneq ($(CI_COMMIT_TAG),)
+ VERSION ?= $(subst v,,$(CI_COMMIT_TAG))
else
VERSION ?= $(shell git rev-parse --short HEAD)
endif
diff --git a/README.md b/README.md
index c87c898..87e50fb 100644
--- a/README.md
+++ b/README.md
@@ -1,35 +1,31 @@
-# drone-plugin-lib
+# wp-plugin-go
-[![Build Status](https://img.shields.io/drone/build/thegeeklab/drone-plugin-lib?logo=drone&server=https%3A%2F%2Fdrone.thegeeklab.de)](https://drone.thegeeklab.de/thegeeklab/drone-plugin-lib)
-[![Go Report Card](https://goreportcard.com/badge/github.com/thegeeklab/drone-plugin-lib)](https://goreportcard.com/report/github.com/thegeeklab/drone-plugin-lib)
-[![GitHub contributors](https://img.shields.io/github/contributors/thegeeklab/drone-plugin-lib)](https://github.com/thegeeklab/drone-plugin-lib/graphs/contributors)
-[![Source: GitHub](https://img.shields.io/badge/source-github-blue.svg?logo=github&logoColor=white)](https://github.com/thegeeklab/drone-plugin-lib)
-[![License: Apache-2.0](https://img.shields.io/github/license/thegeeklab/drone-plugin-lib)](https://github.com/thegeeklab/drone-plugin-lib/blob/main/LICENSE)
+[![Build Status](https://ci.thegeeklab.de/api/badges/thegeeklab/wp-plugin-go/status.svg)](https://ci.thegeeklab.de/repos/thegeeklab/wp-plugin-go)
+[![Go Report Card](https://goreportcard.com/badge/github.com/thegeeklab/wp-plugin-go)](https://goreportcard.com/report/github.com/thegeeklab/wp-plugin-go)
+[![GitHub contributors](https://img.shields.io/github/contributors/thegeeklab/wp-plugin-go)](https://github.com/thegeeklab/wp-plugin-go/graphs/contributors)
+[![Source: GitHub](https://img.shields.io/badge/source-github-blue.svg?logo=github&logoColor=white)](https://github.com/thegeeklab/wp-plugin-go)
+[![License: Apache-2.0](https://img.shields.io/github/license/thegeeklab/wp-plugin-go)](https://github.com/thegeeklab/wp-plugin-go/blob/main/LICENSE)
-Helper library to reduce the boilerplate code for writing Drone CI plugins.
+Helper library to reduce the boilerplate code for writing Woodpecker CI plugins.
## Usage
### Download the package
```Shell
-go get -d github.com/thegeeklab/drone-plugin-lib/v2/errors
-go get -d github.com/thegeeklab/drone-plugin-lib/v2/urfave
-go get -d github.com/thegeeklab/drone-plugin-lib/v2/drone
+go get -d github.com/thegeeklab/wp-plugin-go/woodpecker
```
### Import the package
```Go
-import "github.com/thegeeklab/drone-plugin-lib/v2/errors"
-import "github.com/thegeeklab/drone-plugin-lib/v2/urfave"
-import "github.com/thegeeklab/drone-plugin-lib/v2/drone"
+import "github.com/thegeeklab/wp-plugin-go/woodpecker"
```
## Contributors
-Special thanks to all [contributors](https://github.com/thegeeklab/drone-plugin-lib/graphs/contributors). If you would like to contribute, please see the [instructions](https://github.com/thegeeklab/drone-plugin-lib/blob/main/CONTRIBUTING.md).
+Special thanks to all [contributors](https://github.com/thegeeklab/wp-plugin-go/graphs/contributors). If you would like to contribute, please see the [instructions](https://github.com/thegeeklab/wp-plugin-go/blob/main/CONTRIBUTING.md).
## License
-This project is licensed under the Apache-2.0 License - see the [LICENSE](https://github.com/thegeeklab/drone-plugin-lib/blob/main/LICENSE) file for details.
+This project is licensed under the Apache-2.0 License - see the [LICENSE](https://github.com/thegeeklab/wp-plugin-go/blob/main/LICENSE) file for details.
diff --git a/drone/build.go b/drone/build.go
deleted file mode 100644
index 2aa14f7..0000000
--- a/drone/build.go
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-import (
- "time"
-)
-
-// Build represents a build of a repository.
-type Build struct {
- // Branch defines the branch name of the build.
- Branch string
-
- // PullRequest number of the build.
- PullRequest int
-
- // Tag of the build.
- Tag string
-
- // SourceBranch for the pull request.
- SourceBranch string
-
- // TargetBranch for the pull request.
- TargetBranch string
-
- // Number for the build.
- Number int
-
- // Parent build number for the build.
- Parent int
-
- // Event that triggered the build.
- Event string
-
- // Action that triggered the build. This value is used to differentiate
- // bettween a pull request being opened vs synchronized.
- Action string
-
- // Status of the build.
- Status string
-
- // Link to the build.
- Link string
-
- // Created time of the build.
- Created time.Time
-
- // Started time of the build.
- Started time.Time
-
- // Finished time of the build.
- Finished time.Time
-
- // DeployTo the environment.
- DeployTo string
-
- // DeployID for the environment.
- DeployID int
-
- // FailedStages of the build.
- FailedStages []string
-
- // FailedSteps of the build.
- FailedSteps []string
-}
diff --git a/drone/calver.go b/drone/calver.go
deleted file mode 100644
index 9ec6a5f..0000000
--- a/drone/calver.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2020, the Drone Plugins project authors.
-
-package drone
-
-// CalVer represents the calendar version of the currently running build.
-//
-// This value is only applicable for tags. If the tag cannot be parsed into
-// a calendar version then the value will be empty.
-type CalVer struct {
- // Version is the full calendar version.
- Version string
-
- // Major is the major version.
- Major string
-
- // Minor is the minor version.
- Minor string
-
- // Micro is the micro version.
- Micro string
-
- // Modifier is a modifier for the version.
- Modifier string
-
- // Short is the short version.
- //
- // This does not include the modifier.
- Short string
-}
-
-func (c CalVer) String() string {
- return c.Version
-}
diff --git a/drone/commit.go b/drone/commit.go
deleted file mode 100644
index 189fe7d..0000000
--- a/drone/commit.go
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-import "strings"
-
-type (
- // Commit represents the current commit being built.
- Commit struct {
- // SHA for the current commit.
- SHA string
-
- // Before contains the commit sha before the patch is applied.
- Before string
-
- // After contains the commit sha after the patch is applied.
- After string
-
- // Ref for the current commit.
- Ref string
-
- // Branch target for the push or pull request. This may be empty for
- // tag events.
- Branch string
-
- // Link to the commit or object in the source control management system.
- Link string
-
- // Message for the current commit.
- Message Message
-
- // Author of the commit.
- Author Author
- }
-
- // Author of a Commit.
- Author struct {
- // Username of the Commit author.
- Username string
- // Name of the Commit author.
- Name string
- // Email for the Commit author.
- Email string
- // Avatar for the Commit author.
- Avatar string
- }
-
- // Message for a Commit.
- Message struct {
- // Title for the Commit.
- Title string
- // Body of the Commit message.
- Body string
- }
-)
-
-func (c Commit) String() string {
- return c.SHA
-}
-
-func (a Author) String() string {
- return a.Username
-}
-
-func (m Message) String() string {
- if m.Body == "" {
- return m.Title
- }
-
- return m.Title + "\n\n" + m.Body
-}
-
-// ParseMessage takes a full commit message and translates it into a Message.
-func ParseMessage(msg string) Message {
- splitMsg := strings.Split(msg, "\n")
-
- return Message{
- Title: strings.TrimSpace(splitMsg[0]),
- Body: strings.TrimSpace(strings.Join(splitMsg[1:], "\n")),
- }
-}
diff --git a/drone/network.go b/drone/network.go
deleted file mode 100644
index 4938864..0000000
--- a/drone/network.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-import (
- "context"
- "net/http"
-)
-
-// Network contains options for connecting to the network.
-type Network struct {
- // Context for making network requests.
- //
- // If `trace` logging is requested the context will use `httptrace` to
- // capture all network requests.
- //nolint:containedctx
- Context context.Context
-
- /// Whether SSL verification is skipped
- SkipVerify bool
-
- // Client for making network requests.
- Client *http.Client
-}
diff --git a/drone/pipeline.go b/drone/pipeline.go
deleted file mode 100644
index 67d0555..0000000
--- a/drone/pipeline.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-// Pipeline being executed.
-//
-// Represents the full Drone environment that the plugin is executing in.
-type Pipeline struct {
- Build Build
- Repo Repo
- Commit Commit
- Stage Stage
- Step Step
- SemVer SemVer
- CalVer CalVer
- System System
-}
diff --git a/drone/plugin.go b/drone/plugin.go
deleted file mode 100644
index c0fc773..0000000
--- a/drone/plugin.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-// Plugin is an interface for a Drone plugin written in Go.
-//
-// This is a higly opinionated interface for what a Plugin should do. Its
-// not required that a plugin author follow it.
-type Plugin interface {
- // Validate checks the inputs to the Plugin and verifies that the
- // configuration is correct before executing.
- //
- // An error is returned if there are any issues with the current
- // configuration, such as missing information or files not being
- // present. A Plugin may choose to populate additional information to
- // ensure a successful execution, for example if a URL is parsed
- // successfully it can be stored off for later use.
- //
- // Validate needs to be called before Execute.
- Validate() error
-
- // Execute runs the plugin in the current configuration.
- //
- // An error is returned if the Plugin did not run successfully that
- // describes the runtime error.
- //
- // Execute needs to be called after Validate.
- Execute() error
-}
diff --git a/drone/repo.go b/drone/repo.go
deleted file mode 100644
index bc25f71..0000000
--- a/drone/repo.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-// Repo represents the repository for the build.
-type Repo struct {
- // Slug for the full name of a repo.
- Slug string
-
- // SCM for the used SCM.
- SCM string
-
- // Owner for the repo owner.
- Owner string
-
- // Name for the repo name.
- Name string
-
- // Link for the link to the repo.
- Link string
-
- // Branch for the default branch of the repo.
- Branch string
-
- // HTTPURL for the clone URL via HTTP.
- HTTPURL string
-
- // SSHURL for the clone URL via SSH
- SSHURL string
-
- // Visbility for the visbility of the repo.
- Visibility string
-
- // Private to show if the repo is private.
- Private bool
-}
-
-func (r Repo) String() string {
- return r.Slug
-}
diff --git a/drone/semver.go b/drone/semver.go
deleted file mode 100644
index 054431c..0000000
--- a/drone/semver.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-// SemVer represents the semantic version of the currently running build.
-//
-// This value is only applicable for tags. If the tag cannot be parsed into
-// a semantic version then SemVer.Error will have the reason.
-type SemVer struct {
- // Version is the full semantic version.
- Version string
-
- // Major version number.
- Major string
-
- // Minor version number.
- Minor string
-
- // Patch version number.
- Patch string
-
- // Prerelease version.
- Prerelease string
-
- // Build version number.
- //
- // This is signified by a + at the end of the tag.
- Build string
-
- // Short version of the semantic version string where labels and
- // metadata are truncated.
- Short string
-
- // Error is the semantic version parsing error if the tag was invalid.
- Error string
-}
-
-func (s SemVer) String() string {
- return s.Version
-}
diff --git a/drone/stage.go b/drone/stage.go
deleted file mode 100644
index f4c7849..0000000
--- a/drone/stage.go
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-import "time"
-
-// Stage represents a build stage.
-type Stage struct {
- // Kind is the kind of resource being executed.
- //
- // This value is sourced from the `kind` attribute in the yaml
- // configuration file
- Kind string
-
- // Type is the type of resource being executed.
- Type string
-
- // Name is the name for the current running build stage.
- Name string
-
- // Number is the stage number for the current running build stage.
- Number int
-
- // Machine provides the name of the host machine on which the build
- // stage is currently running.
- Machine string
-
- // OS is the target operating system for the current build stage.
- OS string
-
- // Arch is the platform architecture of the current build stage.
- Arch string
-
- // Variant is the target architecture variant for the current build
- // stage.
- Variant string
-
- // Version is OS version for the current build stage.
- Version string
-
- // Status is the status for the current running build stage.
- //
- // If all of the stage's steps are passing, the status defaults to
- // success.
- Status string
-
- // Started is the unix timestamp for when a build stage was started by
- // the runner.
- Started time.Time
-
- // Finished is the unix timestamp for when the pipeline is finished.
- //
- // A running pipleine cannot have a finish timestamp, therefore, the
- // system aways sets this value to the current timestamp.
- Finished time.Time
-
- // DependsOn is a list of dependencies for the current build stage.
- DependsOn []string
-}
-
-func (s Stage) String() string {
- return s.Name
-}
diff --git a/drone/step.go b/drone/step.go
deleted file mode 100644
index 92b03f1..0000000
--- a/drone/step.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-// Step represents the currently running step within the stage.
-type Step struct {
- // Name for the name of the current step.
- Name string
-
- // Number is the numeric value of the step.
- Number int
-}
-
-func (s Step) String() string {
- return s.Name
-}
diff --git a/drone/system.go b/drone/system.go
deleted file mode 100644
index 3d136e5..0000000
--- a/drone/system.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package drone
-
-// System represents the available system variables.
-type System struct {
- // Proto for the system protocol.
- Proto string
-
- // Host for the system host name.
- Host string
-
- // Version for the system version.
- Version string
-}
-
-func (s System) String() string {
- return s.Host
-}
diff --git a/go.mod b/go.mod
index 1ba44cc..65aac0d 100644
--- a/go.mod
+++ b/go.mod
@@ -1,11 +1,13 @@
-module github.com/thegeeklab/drone-plugin-lib/v2
+module github.com/thegeeklab/wp-plugin-go/woodpecker
go 1.20
require (
github.com/Masterminds/sprig/v3 v3.2.3
- github.com/sirupsen/logrus v1.9.3
+ github.com/joho/godotenv v1.5.1
+ github.com/rs/zerolog v1.30.0
github.com/urfave/cli/v2 v2.25.5
+ golang.org/x/net v0.2.0
)
require (
@@ -15,11 +17,14 @@ require (
github.com/google/uuid v1.1.1 // indirect
github.com/huandu/xstrings v1.3.3 // indirect
github.com/imdario/mergo v0.3.11 // indirect
+ github.com/mattn/go-colorable v0.1.12 // indirect
+ github.com/mattn/go-isatty v0.0.14 // indirect
github.com/mitchellh/copystructure v1.0.0 // indirect
github.com/mitchellh/reflectwalk v1.0.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/shopspring/decimal v1.2.0 // indirect
github.com/spf13/cast v1.3.1 // indirect
+ github.com/stretchr/testify v1.7.0 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
golang.org/x/crypto v0.3.0 // indirect
golang.org/x/sys v0.2.0 // indirect
diff --git a/go.sum b/go.sum
index 247613a..fef8692 100644
--- a/go.sum
+++ b/go.sum
@@ -4,29 +4,39 @@ github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7Y
github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
+github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4=
github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA=
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
+github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
+github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
+github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
+github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ=
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY=
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
+github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c=
+github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
-github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
-github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -47,14 +57,16 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
diff --git a/trace/http.go b/trace/http.go
deleted file mode 100644
index 10d6139..0000000
--- a/trace/http.go
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package trace
-
-import (
- "context"
- "crypto/tls"
- "net/http/httptrace"
- "net/textproto"
-
- "github.com/sirupsen/logrus"
-)
-
-// HTTP uses httptrace to log all network activity for HTTP requests.
-func HTTP(ctx context.Context) context.Context {
- return httptrace.WithClientTrace(ctx, &httptrace.ClientTrace{
- GetConn: func(hostPort string) {
- logrus.WithField("host-port", hostPort).Trace("ClientTrace.GetConn")
- },
-
- GotConn: func(connInfo httptrace.GotConnInfo) {
- logrus.WithFields(logrus.Fields{
- "local-address": connInfo.Conn.LocalAddr(),
- "remote-address": connInfo.Conn.RemoteAddr(),
- "reused": connInfo.Reused,
- "was-idle": connInfo.WasIdle,
- "idle-time": connInfo.IdleTime,
- }).Trace("ClientTrace.GoConn")
- },
-
- PutIdleConn: func(err error) {
- logrus.WithField("error", err).Trace("ClientTrace.GoConn")
- },
-
- GotFirstResponseByte: func() {
- logrus.Trace("ClientTrace.GotFirstResponseByte")
- },
-
- Got100Continue: func() {
- logrus.Trace("ClientTrace.Got100Continue")
- },
-
- Got1xxResponse: func(code int, header textproto.MIMEHeader) error {
- logrus.WithFields(logrus.Fields{
- "code": code,
- "header": header,
- }).Trace("ClientTrace.Got1xxxResponse")
-
- return nil
- },
-
- DNSStart: func(dnsInfo httptrace.DNSStartInfo) {
- logrus.WithField("host", dnsInfo.Host).Trace("ClientTrace.DNSStart")
- },
-
- DNSDone: func(dnsInfo httptrace.DNSDoneInfo) {
- logrus.WithFields(logrus.Fields{
- "addresses": dnsInfo.Addrs,
- "error": dnsInfo.Err,
- "coalesced": dnsInfo.Coalesced,
- }).Trace("ClientTrace.DNSDone")
- },
-
- ConnectStart: func(network, addr string) {
- logrus.WithFields(logrus.Fields{
- "network": network,
- "address": addr,
- }).Trace("ClientTrace.ConnectStart")
- },
-
- ConnectDone: func(network, addr string, err error) {
- logrus.WithFields(logrus.Fields{
- "network": network,
- "address": addr,
- "error": err,
- }).Trace("ClientTrace.ConnectDone")
- },
-
- TLSHandshakeStart: func() {
- logrus.Trace("ClientTrace.TLSHandshakeStart")
- },
-
- TLSHandshakeDone: func(connState tls.ConnectionState, err error) {
- logrus.WithFields(logrus.Fields{
- "version": connState.Version,
- "handshake-complete": connState.HandshakeComplete,
- "did-resume": connState.DidResume,
- "cipher-suite": connState.CipherSuite,
- "negotiated-protocol": connState.NegotiatedProtocol,
- "server-name": connState.ServerName,
- "error": err,
- }).Trace("ClientTrace.TLSHandshakeDone")
- },
-
- WroteHeaderField: func(key string, value []string) {
- logrus.WithFields(logrus.Fields{
- "key": key,
- "values": value,
- }).Trace("ClientTrace.WroteHeaderField")
- },
-
- WroteHeaders: func() {
- logrus.Trace("ClientTrace.WroteHeaders")
- },
-
- Wait100Continue: func() {
- logrus.Trace("ClientTrace.Wait100Continue")
- },
-
- WroteRequest: func(reqInfo httptrace.WroteRequestInfo) {
- logrus.WithField("error", reqInfo.Err).Trace("ClientTrace.WroteRequest")
- },
- })
-}
diff --git a/urfave/build.go b/urfave/build.go
deleted file mode 100644
index 77b406b..0000000
--- a/urfave/build.go
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "time"
-
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/urfave/cli/v2"
-)
-
-// buildFlags has the cli.Flags for the drone.Build.
-func buildFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.StringFlag{
- Name: "build.branch",
- Usage: "build branch",
- EnvVars: []string{"DRONE_BRANCH"},
- Category: category,
- },
- &cli.IntFlag{
- Name: "build.pull-request",
- Usage: "build pull request",
- EnvVars: []string{"DRONE_PULL_REQUEST"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.tag",
- Usage: "build tag",
- EnvVars: []string{"DRONE_TAG"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.source-branch",
- Usage: "build source branch",
- EnvVars: []string{"DRONE_SOURCE_BRANCH"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.target-branch",
- Usage: "build target branch",
- EnvVars: []string{"DRONE_TARGET_BRANCH"},
- Category: category,
- },
- &cli.IntFlag{
- Name: "build.number",
- Usage: "build number",
- EnvVars: []string{"DRONE_BUILD_NUMBER"},
- Category: category,
- },
- &cli.IntFlag{
- Name: "build.parent",
- Usage: "build parent",
- EnvVars: []string{"DRONE_BUILD_PARENT"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.event",
- Usage: "build event",
- EnvVars: []string{"DRONE_BUILD_EVENT"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.action",
- Usage: "build action",
- EnvVars: []string{"DRONE_BUILD_ACTION"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.status",
- Usage: "build status",
- EnvVars: []string{"DRONE_BUILD_STATUS"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.link",
- Usage: "build link",
- EnvVars: []string{"DRONE_BUILD_LINK"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.created",
- Usage: "build created",
- EnvVars: []string{"DRONE_BUILD_CREATED"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.started",
- Usage: "build started",
- EnvVars: []string{"DRONE_BUILD_STARTED"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.finished",
- Usage: "build finished",
- EnvVars: []string{"DRONE_BUILD_FINISHED"},
- Category: category,
- },
- &cli.StringFlag{
- Name: "build.deploy-to",
- Usage: "build deploy to",
- EnvVars: []string{"DRONE_DEPLOY_TO"},
- Category: category,
- },
- &cli.IntFlag{
- Name: "build.deploy-id",
- Usage: "build deploy id",
- EnvVars: []string{"DRONE_DEPLOY_ID"},
- Category: category,
- },
- &cli.StringSliceFlag{
- Name: "build.failed-stages",
- Usage: "build failed stages",
- EnvVars: []string{"DRONE_FAILED_STAGES"},
- Category: category,
- },
- &cli.StringSliceFlag{
- Name: "build.failed-steps",
- Usage: "build failed steps",
- EnvVars: []string{"DRONE_FAILED_STEPS"},
- Category: category,
- },
- }
-}
-
-// buildFromContext creates a drone.Build from the cli.Context.
-func buildFromContext(ctx *cli.Context) drone.Build {
- return drone.Build{
- Branch: ctx.String("build.branch"),
- PullRequest: ctx.Int("build.pull-request"),
- Tag: ctx.String("build.tag"),
- SourceBranch: ctx.String("build.source-branch"),
- TargetBranch: ctx.String("build.target-branch"),
- Number: ctx.Int("build.number"),
- Parent: ctx.Int("build.parent"),
- Event: ctx.String("build.event"),
- Action: ctx.String("build.action"),
- Status: ctx.String("build.status"),
- Link: ctx.String("build.link"),
- Created: time.Unix(ctx.Int64("build.created"), 0),
- Started: time.Unix(ctx.Int64("build.started"), 0),
- Finished: time.Unix(ctx.Int64("build.finished"), 0),
- DeployTo: ctx.String("build.deploy-to"),
- DeployID: ctx.Int("build.deploy-id"),
- FailedStages: ctx.StringSlice("build.failed-stages"),
- FailedSteps: ctx.StringSlice("build.failed-steps"),
- }
-}
diff --git a/urfave/calver.go b/urfave/calver.go
deleted file mode 100644
index 5c2f183..0000000
--- a/urfave/calver.go
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) 2020, the Drone Plugins project authors.
-
-package urfave
-
-import (
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/urfave/cli/v2"
-)
-
-// calVerFlags has the cli.Flags for the drone.CalVer.
-func calVerFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.StringFlag{
- Name: "calver.version",
- Usage: "calver version",
- EnvVars: []string{
- "DRONE_CALVER",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "calver.major",
- Usage: "calver major",
- EnvVars: []string{
- "DRONE_CALVER_MAJOR",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "calver.minor",
- Usage: "calver minor",
- EnvVars: []string{
- "DRONE_CALVER_MINOR",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "calver.micro",
- Usage: "calver micro",
- EnvVars: []string{
- "DRONE_CALVER_MICRO",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "calver.modifier",
- Usage: "calver modifier",
- EnvVars: []string{
- "DRONE_CALVER_MODIFIER",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "calver.short",
- Usage: "calver short",
- EnvVars: []string{
- "DRONE_CALVER_SHORT",
- },
- Category: category,
- },
- }
-}
-
-// calVerFromContext creates a drone.CalVer from the cli.Context.
-func calVerFromContext(ctx *cli.Context) drone.CalVer {
- return drone.CalVer{
- Version: ctx.String("calver.version"),
- Major: ctx.String("calver.major"),
- Minor: ctx.String("calver.minor"),
- Micro: ctx.String("calver.micro"),
- Modifier: ctx.String("calver.modifier"),
- Short: ctx.String("calver.short"),
- }
-}
diff --git a/urfave/commit.go b/urfave/commit.go
deleted file mode 100644
index b87616c..0000000
--- a/urfave/commit.go
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/urfave/cli/v2"
-)
-
-// commitFlags has the cli.Flags for the drone.Commit.
-func commitFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.StringFlag{
- Name: "commit.sha",
- Usage: "commit sha",
- EnvVars: []string{
- "DRONE_COMMIT",
- "DRONE_COMMIT_SHA",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "commit.before",
- Usage: "commit before",
- EnvVars: []string{
- "DRONE_COMMIT_BEFORE",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "commit.after",
- Usage: "commit after",
- EnvVars: []string{
- "DRONE_COMMIT_AFTER",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "commit.ref",
- Usage: "commit ref",
- EnvVars: []string{
- "DRONE_COMMIT_REF",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "commit.branch",
- Usage: "commit branch",
- EnvVars: []string{
- "DRONE_COMMIT_BRANCH",
- },
- Category: category,
- }, &cli.StringFlag{
- Name: "commit.link",
- Usage: "commit link",
- EnvVars: []string{
- "DRONE_COMMIT_LINK",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "commit.message",
- Usage: "commit message",
- EnvVars: []string{
- "DRONE_COMMIT_MESSAGE",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "commit.author",
- Usage: "commit author",
- EnvVars: []string{
- "DRONE_COMMIT_AUTHOR",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "commit.author-name",
- Usage: "commit author name",
- EnvVars: []string{
- "DRONE_COMMIT_AUTHOR_NAME",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "commit.author-email",
- Usage: "commit author email",
- EnvVars: []string{
- "DRONE_COMMIT_AUTHOR_EMAIL",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "commit.author-avatar",
- Usage: "commit author avatar",
- EnvVars: []string{
- "DRONE_COMMIT_AUTHOR_AVATAR",
- },
- Category: category,
- },
- }
-}
-
-// commitFromContext creates a drone.Commit from the cli.Context.
-func commitFromContext(ctx *cli.Context) drone.Commit {
- return drone.Commit{
- SHA: ctx.String("commit.sha"),
- Before: ctx.String("commit.before"),
- After: ctx.String("commit.after"),
- Ref: ctx.String("commit.ref"),
- Branch: ctx.String("commit.branch"),
- Link: ctx.String("commit.link"),
- Message: drone.ParseMessage(ctx.String("commit.message")),
- Author: drone.Author{
- Username: ctx.String("commit.author"),
- Name: ctx.String("commit.author-name"),
- Email: ctx.String("commit.author-email"),
- Avatar: ctx.String("commit.author-avatar"),
- },
- }
-}
diff --git a/urfave/logging.go b/urfave/logging.go
deleted file mode 100644
index 874a834..0000000
--- a/urfave/logging.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "github.com/sirupsen/logrus"
- "github.com/urfave/cli/v2"
-)
-
-// loggingFlags has the cli.Flags for logging config.
-func loggingFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.StringFlag{
- Name: "log-level",
- Usage: "log level",
- EnvVars: []string{"PLUGIN_LOG_LEVEL"},
- Category: category,
- },
- }
-}
-
-// LoggingFromContext sets the logrus logging level.
-func LoggingFromContext(ctx *cli.Context) {
- lvl, err := logrus.ParseLevel(ctx.String("log-level"))
- if err != nil {
- lvl = logrus.InfoLevel
- }
-
- logrus.SetLevel(lvl)
-}
diff --git a/urfave/network.go b/urfave/network.go
deleted file mode 100644
index 39653d7..0000000
--- a/urfave/network.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "context"
- "crypto/tls"
- "net"
- "net/http"
- "time"
-
- "github.com/sirupsen/logrus"
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/thegeeklab/drone-plugin-lib/v2/trace"
- "github.com/urfave/cli/v2"
-)
-
-const (
- NetDailerTimeout = 30 * time.Second
- HTTPTransportIdleTimeout = 90 * time.Second
- HTTPTransportTLSHandshakeTimeout = 10 * time.Second
- HTTPTransportMaxIdleConns = 100
-)
-
-// networkFlags has the cli.Flags for the drone.Network.
-func networkFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.BoolFlag{
- Name: "transport.skip-verify",
- Usage: "skip ssl verify",
- EnvVars: []string{"PLUGIN_SKIP_VERIFY"},
- Category: category,
- },
- }
-}
-
-// NetworkFromContext creates a drone.Network from the cli.Context.
-func NetworkFromContext(ctx *cli.Context) drone.Network {
- dialer := &net.Dialer{
- Timeout: NetDailerTimeout,
- KeepAlive: NetDailerTimeout,
- DualStack: true,
- }
-
- transport := &http.Transport{
- Proxy: http.ProxyFromEnvironment,
- DialContext: dialer.DialContext,
- MaxIdleConns: HTTPTransportMaxIdleConns,
- IdleConnTimeout: HTTPTransportIdleTimeout,
- TLSHandshakeTimeout: HTTPTransportTLSHandshakeTimeout,
- ExpectContinueTimeout: 1 * time.Second,
- }
-
- context := context.Background()
- skipVerify := ctx.Bool("transport.skip-verify")
-
- if skipVerify {
- logrus.Warning("ssl verification is turned off")
-
- transport.TLSClientConfig = &tls.Config{
- //nolint:gosec
- InsecureSkipVerify: true,
- }
- }
-
- if ctx.String("log-level") == logrus.TraceLevel.String() {
- context = trace.HTTP(context)
- }
-
- client := &http.Client{
- Transport: transport,
- }
-
- return drone.Network{
- Context: context,
- SkipVerify: skipVerify,
- Client: client,
- }
-}
diff --git a/urfave/repo.go b/urfave/repo.go
deleted file mode 100644
index b19e2c7..0000000
--- a/urfave/repo.go
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/urfave/cli/v2"
-)
-
-// repoFlags has the cli.Flags for the drone.Repo.
-func repoFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.StringFlag{
- Name: "repo.slug",
- Usage: "repo slug",
- EnvVars: []string{
- "DRONE_REPO",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "repo.scm",
- Usage: "repo scm",
- EnvVars: []string{
- "DRONE_REPO_SCM",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "repo.owner",
- Usage: "repo owner",
- EnvVars: []string{
- "DRONE_REPO_OWNER",
- "DRONE_REPO_NAMESPACE",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "repo.name",
- Usage: "repo name",
- EnvVars: []string{
- "DRONE_REPO_NAME",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "repo.link",
- Usage: "repo link",
- EnvVars: []string{
- "DRONE_REPO_LINK",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "repo.branch",
- Usage: "repo branch",
- EnvVars: []string{
- "DRONE_REPO_BRANCH",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "repo.http-url",
- Usage: "repo http url",
- EnvVars: []string{
- "DRONE_REMOTE_URL",
- "DRONE_GIT_HTTP_URL",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "repo.ssh-url",
- Usage: "repo ssh url",
- EnvVars: []string{
- "DRONE_GIT_SSH_URL",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "repo.visibility",
- Usage: "repo visibility",
- EnvVars: []string{
- "DRONE_REPO_VISIBILITY",
- },
- Category: category,
- },
- &cli.BoolFlag{
- Name: "repo.private",
- Usage: "repo private",
- EnvVars: []string{
- "DRONE_REPO_PRIVATE",
- },
- Category: category,
- },
- }
-}
-
-// repoFromContext creates a drone.Repo from the cli.Context.
-func repoFromContext(ctx *cli.Context) drone.Repo {
- return drone.Repo{
- Slug: ctx.String("repo.slug"),
- SCM: ctx.String("repo.scm"),
- Owner: ctx.String("repo.owner"),
- Name: ctx.String("repo.name"),
- Link: ctx.String("repo.link"),
- Branch: ctx.String("repo.branch"),
- HTTPURL: ctx.String("repo.http-url"),
- SSHURL: ctx.String("repo.ssh-url"),
- Visibility: ctx.String("repo.visibility"),
- Private: ctx.Bool("repo.private"),
- }
-}
diff --git a/urfave/semver.go b/urfave/semver.go
deleted file mode 100644
index 3dd7fb4..0000000
--- a/urfave/semver.go
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/urfave/cli/v2"
-)
-
-// semVerFlags has the cli.Flags for the drone.SemVer.
-func semVerFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.StringFlag{
- Name: "semver.version",
- Usage: "semver version",
- EnvVars: []string{
- "DRONE_SEMVER",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "semver.major",
- Usage: "semver major",
- EnvVars: []string{
- "DRONE_SEMVER_MAJOR",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "semver.minor",
- Usage: "semver minor",
- EnvVars: []string{
- "DRONE_SEMVER_MINOR",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "semver.patch",
- Usage: "semver patch",
- EnvVars: []string{
- "DRONE_SEMVER_PATCH",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "semver.prerelease",
- Usage: "semver prerelease",
- EnvVars: []string{
- "DRONE_SEMVER_PRERELEASE",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "semver.build",
- Usage: "semver build",
- EnvVars: []string{
- "DRONE_SEMVER_BUILD",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "semver.short",
- Usage: "semver short",
- EnvVars: []string{
- "DRONE_SEMVER_SHORT",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "semver.error",
- Usage: "semver error",
- EnvVars: []string{
- "DRONE_SEMVER_ERROR",
- },
- Category: category,
- },
- }
-}
-
-// semVerFromContext creates a drone.SemVer from the cli.Context.
-func semVerFromContext(ctx *cli.Context) drone.SemVer {
- return drone.SemVer{
- Version: ctx.String("semver.version"),
- Major: ctx.String("semver.major"),
- Minor: ctx.String("semver.minor"),
- Patch: ctx.String("semver.patch"),
- Prerelease: ctx.String("semver.prerelease"),
- Build: ctx.String("semver.build"),
- Short: ctx.String("semver.short"),
- Error: ctx.String("semver.error"),
- }
-}
diff --git a/urfave/stage.go b/urfave/stage.go
deleted file mode 100644
index 9d25d30..0000000
--- a/urfave/stage.go
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "time"
-
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/urfave/cli/v2"
-)
-
-// stageFlags has the cli.Flags for the drone.Stage.
-func stageFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.StringFlag{
- Name: "stage.kind",
- Usage: "stage kind",
- EnvVars: []string{
- "DRONE_STAGE_KIND",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "stage.type",
- Usage: "stage type",
- EnvVars: []string{
- "DRONE_STAGE_TYPE",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "stage.name",
- Usage: "stage name",
- EnvVars: []string{
- "DRONE_STAGE_NAME",
- },
- Category: category,
- },
- &cli.IntFlag{
- Name: "stage.number",
- Usage: "stage number",
- EnvVars: []string{
- "DRONE_STAGE_NUMBER",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "stage.machine",
- Usage: "stage machine",
- EnvVars: []string{
- "DRONE_STAGE_MACHINE",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "stage.os",
- Usage: "stage os",
- EnvVars: []string{
- "DRONE_STAGE_OS",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "stage.arch",
- Usage: "stage arch",
- EnvVars: []string{
- "DRONE_STAGE_ARCH",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "stage.variant",
- Usage: "stage variant",
- EnvVars: []string{
- "DRONE_STAGE_VARIANT",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "stage.version",
- Usage: "stage version",
- EnvVars: []string{
- "DRONE_STAGE_VERSION",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "stage.status",
- Usage: "stage status",
- EnvVars: []string{
- "DRONE_STAGE_STATUS",
- },
- Category: category,
- },
- &cli.Int64Flag{
- Name: "stage.started",
- Usage: "stage started",
- EnvVars: []string{
- "DRONE_STAGE_STARTED",
- },
- Category: category,
- },
- &cli.Int64Flag{
- Name: "stage.finished",
- Usage: "stage finished",
- EnvVars: []string{
- "DRONE_STAGE_FINISHED",
- },
- Category: category,
- },
- &cli.StringSliceFlag{
- Name: "stage.depends-on",
- Usage: "stage depends on",
- EnvVars: []string{
- "DRONE_STAGE_DEPENDS_ON",
- },
- Category: category,
- },
- }
-}
-
-// stageFromContext creates a drone.Stage from the cli.Context.
-func stageFromContext(ctx *cli.Context) drone.Stage {
- return drone.Stage{
- Kind: ctx.String("stage.kind"),
- Type: ctx.String("stage.type"),
- Name: ctx.String("stage.name"),
- Number: ctx.Int("stage.number"),
- Machine: ctx.String("stage.machine"),
- OS: ctx.String("stage.os"),
- Arch: ctx.String("stage.arch"),
- Variant: ctx.String("stage.variant"),
- Version: ctx.String("stage.version"),
- Status: ctx.String("stage.status"),
- Started: time.Unix(ctx.Int64("stage.started"), 0),
- Finished: time.Unix(ctx.Int64("stage.finished"), 0),
- DependsOn: ctx.StringSlice("stage.depends-on"),
- }
-}
diff --git a/urfave/step.go b/urfave/step.go
deleted file mode 100644
index 7181e1d..0000000
--- a/urfave/step.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/urfave/cli/v2"
-)
-
-// stepFlags has the cli.Flags for the drone.Step.
-func stepFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.StringFlag{
- Name: "step.name",
- Usage: "step name",
- EnvVars: []string{
- "DRONE_STEP_NAME",
- },
- Category: category,
- },
- &cli.IntFlag{
- Name: "step.number",
- Usage: "step number",
- EnvVars: []string{
- "DRONE_STEP_NUMBER",
- },
- Category: category,
- },
- }
-}
-
-// stepFromContext creates a drone.Step from the cli.Context.
-func stepFromContext(ctx *cli.Context) drone.Step {
- return drone.Step{
- Name: ctx.String("step.name"),
- Number: ctx.Int("step.number"),
- }
-}
diff --git a/urfave/system.go b/urfave/system.go
deleted file mode 100644
index 05e250b..0000000
--- a/urfave/system.go
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/urfave/cli/v2"
-)
-
-// systemFlags has the cli.Flags for the drone.System.
-func systemFlags(category string) []cli.Flag {
- return []cli.Flag{
- &cli.StringFlag{
- Name: "system.proto",
- Usage: "system proto",
- EnvVars: []string{
- "DRONE_SYSTEM_PROTO",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "system.host",
- Usage: "system host",
- EnvVars: []string{
- "DRONE_SYSTEM_HOST",
- "DRONE_SYSTEM_HOSTNAME",
- },
- Category: category,
- },
- &cli.StringFlag{
- Name: "system.version",
- Usage: "system version",
- EnvVars: []string{
- "DRONE_SYSTEM_VERSION",
- },
- Category: category,
- },
- }
-}
-
-// systemFromContext creates a drone.System from the cli.Context.
-func systemFromContext(ctx *cli.Context) drone.System {
- return drone.System{
- Proto: ctx.String("system.proto"),
- Host: ctx.String("system.host"),
- Version: ctx.String("system.version"),
- }
-}
diff --git a/urfave/urfave.go b/urfave/urfave.go
deleted file mode 100644
index 8ce9d2c..0000000
--- a/urfave/urfave.go
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2019, Drone Plugins project authors
-// Copyright (c) 2021, Robert Kaussow
-
-// Use of this source code is governed by an Apache 2.0 license that can be
-// found in the LICENSE file.
-
-package urfave
-
-import (
- "github.com/thegeeklab/drone-plugin-lib/v2/drone"
- "github.com/urfave/cli/v2"
-)
-
-const (
- FlagsBuildCategory = "Drone Build Flags"
- FlagsRepoCategory = "Drone Repo Flags"
- FlagsCommitCategory = "Drone Commit Flags"
- FlagsStageCategory = "Drone Stage Flags"
- FlagsStepCategory = "Drone Step Flags"
- FlagsVersioningCategory = "Drone Versioning Flags"
- FlagsSystemCategory = "Drone System Flags"
- FlagsPluginCategory = "Plugin Flags"
-)
-
-// Flags has the cli.Flags for the Drone plugin.
-func Flags() []cli.Flag {
- flags := []cli.Flag{}
-
- flags = append(flags, buildFlags(FlagsBuildCategory)...)
- flags = append(flags, repoFlags(FlagsRepoCategory)...)
- flags = append(flags, commitFlags(FlagsCommitCategory)...)
- flags = append(flags, stageFlags(FlagsStageCategory)...)
- flags = append(flags, stepFlags(FlagsStepCategory)...)
- flags = append(flags, semVerFlags(FlagsVersioningCategory)...)
- flags = append(flags, calVerFlags(FlagsVersioningCategory)...)
- flags = append(flags, systemFlags(FlagsSystemCategory)...)
- flags = append(flags, networkFlags(FlagsPluginCategory)...)
- flags = append(flags, loggingFlags(FlagsPluginCategory)...)
-
- return flags
-}
-
-// PipelineFromContext creates a drone.Pipeline from the cli.Context.
-func PipelineFromContext(ctx *cli.Context) drone.Pipeline {
- return drone.Pipeline{
- Build: buildFromContext(ctx),
- Repo: repoFromContext(ctx),
- Commit: commitFromContext(ctx),
- Stage: stageFromContext(ctx),
- Step: stepFromContext(ctx),
- SemVer: semVerFromContext(ctx),
- CalVer: calVerFromContext(ctx),
- System: systemFromContext(ctx),
- }
-}
diff --git a/woodpecker/commit.go b/woodpecker/commit.go
new file mode 100644
index 0000000..202ed9d
--- /dev/null
+++ b/woodpecker/commit.go
@@ -0,0 +1,206 @@
+// 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 (
+ "github.com/urfave/cli/v2"
+)
+
+type (
+ // Commit defines runtime metadata for a commit.
+ Commit struct {
+ Sha string `json:"sha,omitempty"`
+ Ref string `json:"ref,omitempty"`
+ Refspec string `json:"refspec,omitempty"`
+ PullRequest string `json:"pull_request,omitempty"`
+ SourceBranch string `json:"source_branch,omitempty"`
+ TargetBranch string `json:"target_branch,omitempty"`
+ Branch string `json:"branch,omitempty"`
+ Tag string `json:"tag,omitempty"`
+ Message string `json:"message,omitempty"`
+ Author Author `json:"author,omitempty"`
+ }
+
+ // Author defines runtime metadata for a commit author.
+ Author struct {
+ Name string `json:"name,omitempty"`
+ Email string `json:"email,omitempty"`
+ Avatar string `json:"avatar,omitempty"`
+ }
+)
+
+func currFlags(category string) []cli.Flag {
+ return []cli.Flag{
+ &cli.StringFlag{
+ Name: "commit.sha",
+ Usage: "commit SHA",
+ EnvVars: []string{"CI_COMMIT_SHA"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.ref",
+ Usage: "commit ref",
+ EnvVars: []string{"CI_COMMIT_REF"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.refspec",
+ Usage: "commit refspec",
+ EnvVars: []string{"CI_COMMIT_REFSPEC"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.pull-request",
+ Usage: "commit pull request",
+ EnvVars: []string{"CI_COMMIT_PULL_REQUEST"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.source-branch",
+ Usage: "commit source branch",
+ EnvVars: []string{"CI_COMMIT_SOURCE_BRANCH"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.target-branch",
+ Usage: "commit target branch",
+ EnvVars: []string{"CI_COMMIT_TARGET_BRANCH"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.branch",
+ Usage: "commit branch",
+ EnvVars: []string{"CI_COMMIT_BRANCH"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.tag",
+ Usage: "commit tag",
+ EnvVars: []string{"CI_COMMIT_TAG"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.message",
+ Usage: "commit message",
+ EnvVars: []string{"CI_COMMIT_MESSAGE"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.author.name",
+ Usage: "commit author name",
+ EnvVars: []string{"CI_COMMIT_AUTHOR"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.author.email",
+ Usage: "commit author email",
+ EnvVars: []string{"CI_COMMIT_AUTHOR_EMAIL"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "commit.author.avatar",
+ Usage: "commit author avatar",
+ EnvVars: []string{"CI_COMMIT_AUTHOR_AVATAR"},
+ Category: category,
+ },
+ }
+}
+
+func currFromContext(c *cli.Context) Commit {
+ return Commit{
+ Sha: c.String("commit.sha"),
+ Ref: c.String("commit.ref"),
+ Refspec: c.String("commit.refspec"),
+ PullRequest: c.String("commit.pull-request"),
+ SourceBranch: c.String("commit.source-branch"),
+ TargetBranch: c.String("commit.target-branch"),
+ Branch: c.String("commit.branch"),
+ Tag: c.String("commit.tag"),
+ Message: c.String("commit.message"),
+ Author: Author{
+ Name: c.String("commit.author.name"),
+ Email: c.String("commit.author.email"),
+ Avatar: c.String("commit.author.avatar"),
+ },
+ }
+}
+
+func prevFlags(category string) []cli.Flag {
+ return []cli.Flag{
+ &cli.StringFlag{
+ Name: "prev.commit.sha",
+ Usage: "previous commit SHA",
+ EnvVars: []string{"CI_PREV_COMMIT_SHA"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "prev.commit.ref",
+ Usage: "previous commit ref",
+ EnvVars: []string{"CI_PREV_COMMIT_REF"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "prev.commit.refspec",
+ Usage: "previous commit refspec",
+ EnvVars: []string{"CI_PREV_COMMIT_REFSPEC"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "prev.commit.branch",
+ Usage: "previous commit branch",
+ EnvVars: []string{"CI_PREV_COMMIT_BRANCH"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "prev.commit.message",
+ Usage: "previous commit message",
+ EnvVars: []string{"CI_PREV_COMMIT_MESSAGE"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "prev.commit.author.name",
+ Usage: "previous commit author name",
+ EnvVars: []string{"CI_PREV_COMMIT_AUTHOR"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "prev.commit.author.email",
+ Usage: "previous commit author email",
+ EnvVars: []string{"CI_PREV_COMMIT_AUTHOR_EMAIL"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "prev.commit.author.avatar",
+ Usage: "previous commit author avatar",
+ EnvVars: []string{"CI_PREV_COMMIT_AUTHOR_AVATAR"},
+ Category: category,
+ },
+ }
+}
+
+func prevFromContext(c *cli.Context) Commit {
+ return Commit{
+ Sha: c.String("prev.commit.sha"),
+ Ref: c.String("prev.commit.ref"),
+ Refspec: c.String("prev.commit.refspec"),
+ Branch: c.String("prev.commit.branch"),
+ Message: c.String("prev.commit.message"),
+ Author: Author{
+ Name: c.String("prev.commit.author.name"),
+ Email: c.String("prev.commit.author.email"),
+ Avatar: c.String("prev.commit.author.avatar"),
+ },
+ }
+}
diff --git a/woodpecker/flags.go b/woodpecker/flags.go
new file mode 100644
index 0000000..b571cad
--- /dev/null
+++ b/woodpecker/flags.go
@@ -0,0 +1,47 @@
+// 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 (
+ "github.com/urfave/cli/v2"
+)
+
+const (
+ FlagsRepositoryCategory = "Woodpecker Repository Flags"
+ FlagsPipelineCategory = "Woodpecker Pipeline Flags"
+ FlagsCommitCategory = "Woodpecker Commit Flags"
+ FlagsStepCategory = "Woodpecker Step Flags"
+ FlagsSystemCategory = "Woodpecker System Flags"
+ FlagsPluginCategory = "Plugin Flags"
+)
+
+// Flags has the cli.Flags for the Woodpecker plugin.
+func Flags() []cli.Flag {
+ flags := make([]cli.Flag, 0)
+
+ // Pipeline flags
+ flags = append(flags, repositoryFlags(FlagsRepositoryCategory)...)
+ flags = append(flags, pipelineFlags(FlagsPipelineCategory)...)
+ flags = append(flags, currFlags(FlagsCommitCategory)...)
+ flags = append(flags, prevFlags(FlagsCommitCategory)...)
+ flags = append(flags, stepFlags(FlagsStepCategory)...)
+ flags = append(flags, systemFlags(FlagsSystemCategory)...)
+
+ // Plugin flags
+ flags = append(flags, loggingFlags(FlagsPluginCategory)...)
+ flags = append(flags, httpClientFlags(FlagsPluginCategory)...)
+
+ return flags
+}
diff --git a/woodpecker/http.go b/woodpecker/http.go
new file mode 100644
index 0000000..ae4ebd7
--- /dev/null
+++ b/woodpecker/http.go
@@ -0,0 +1,112 @@
+// 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 (
+ "context"
+ "crypto/tls"
+ "crypto/x509"
+ "net"
+ "net/http"
+ "time"
+
+ "github.com/rs/zerolog/log"
+ "github.com/urfave/cli/v2"
+ "golang.org/x/net/proxy"
+)
+
+const (
+ NetDailerTimeout = 30 * time.Second
+ HTTPTransportIdleTimeout = 90 * time.Second
+ HTTPTransportTLSHandshakeTimeout = 10 * time.Second
+ HTTPTransportMaxIdleConns = 100
+)
+
+func httpClientFlags(category string) []cli.Flag {
+ return []cli.Flag{
+ &cli.BoolFlag{
+ Name: "transport.skip-verify",
+ Usage: "skip ssl verify",
+ EnvVars: []string{"CI_SKIP_VERIFY"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "transport.socks-proxy",
+ Usage: "socks proxy address",
+ EnvVars: []string{"SOCKS_PROXY"},
+ Hidden: true,
+ },
+ &cli.BoolFlag{
+ Name: "transport.socks-proxy-off",
+ Usage: "socks proxy ignored",
+ EnvVars: []string{"SOCKS_PROXY_OFF"},
+ Hidden: true,
+ },
+ }
+}
+
+func HTTPClientFromContext(ctx *cli.Context) *http.Client {
+ var (
+ skip = ctx.Bool("transport.skip-verify")
+ socks = ctx.String("transport.socks-proxy")
+ socksoff = ctx.Bool("transport.socks-proxy-off")
+ )
+
+ certs, err := x509.SystemCertPool()
+ if err != nil {
+ log.Error().Err(err).Msg("failed to find system CA certs")
+ }
+
+ tlsConfig := &tls.Config{
+ RootCAs: certs,
+ InsecureSkipVerify: skip, //nolint:gosec
+ }
+
+ transport := &http.Transport{
+ TLSClientConfig: tlsConfig,
+ Proxy: http.ProxyFromEnvironment,
+ MaxIdleConns: HTTPTransportMaxIdleConns,
+ IdleConnTimeout: HTTPTransportIdleTimeout,
+ TLSHandshakeTimeout: HTTPTransportTLSHandshakeTimeout,
+ ExpectContinueTimeout: 1 * time.Second,
+ }
+
+ dialer := &net.Dialer{
+ Timeout: NetDailerTimeout,
+ KeepAlive: NetDailerTimeout,
+ DualStack: true,
+ }
+
+ if len(socks) != 0 && !socksoff {
+ proxyDialer, err := proxy.SOCKS5("tcp", socks, nil, dialer)
+ if err != nil {
+ log.Error().Err(err).Msg("failed to create socks proxy")
+ }
+
+ if contextDialer, ok := proxyDialer.(proxy.ContextDialer); ok {
+ transport.DialContext = contextDialer.DialContext
+ } else {
+ transport.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {
+ return proxyDialer.Dial(network, addr)
+ }
+ }
+ } else {
+ transport.DialContext = dialer.DialContext
+ }
+
+ return &http.Client{
+ Transport: transport,
+ }
+}
diff --git a/woodpecker/logger.go b/woodpecker/logger.go
new file mode 100644
index 0000000..df7cd12
--- /dev/null
+++ b/woodpecker/logger.go
@@ -0,0 +1,58 @@
+// 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 (
+ "os"
+
+ "github.com/rs/zerolog"
+ "github.com/rs/zerolog/log"
+ "github.com/urfave/cli/v2"
+)
+
+func loggingFlags(category string) []cli.Flag {
+ return []cli.Flag{
+ &cli.StringFlag{
+ Name: "log-level",
+ Usage: "log level",
+ EnvVars: []string{"CI_LOG_LEVEL"},
+ Value: "info",
+ Category: category,
+ },
+ }
+}
+
+// SetupConsoleLogger sets up the console logger.
+func SetupConsoleLogger(c *cli.Context) error {
+ level := c.String("log-level")
+
+ lvl, err := zerolog.ParseLevel(level)
+ if err != nil {
+ log.Fatal().Msgf("unknown logging level: %s", level)
+ }
+
+ zerolog.SetGlobalLevel(lvl)
+ log.Logger = zerolog.New(zerolog.ConsoleWriter{
+ Out: os.Stdout,
+ PartsExclude: []string{zerolog.TimestampFieldName},
+ }).With().Timestamp().Logger()
+
+ if zerolog.GlobalLevel() <= zerolog.DebugLevel {
+ log.Logger = log.With().Caller().Logger()
+ log.Log().Msgf("LogLevel = %s", zerolog.GlobalLevel().String())
+ }
+
+ return nil
+}
diff --git a/woodpecker/metadata.go b/woodpecker/metadata.go
new file mode 100644
index 0000000..5c7a818
--- /dev/null
+++ b/woodpecker/metadata.go
@@ -0,0 +1,41 @@
+// 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 (
+ "github.com/urfave/cli/v2"
+)
+
+// Metadata defines runtime metadata.
+type Metadata struct {
+ Repository Repository `json:"repo,omitempty"`
+ Pipeline Pipeline `json:"curr,omitempty"`
+ Curr Commit `json:"commit,omitempty"`
+ Prev Commit `json:"prev,omitempty"`
+ Step Step `json:"step,omitempty"`
+ System System `json:"sys,omitempty"`
+}
+
+// MetadataFromContext creates a Metadata from the cli.Context.
+func MetadataFromContext(ctx *cli.Context) Metadata {
+ return Metadata{
+ Repository: repositoryFromContext(ctx),
+ Pipeline: pipelineFromContext(ctx),
+ Curr: currFromContext(ctx),
+ Prev: prevFromContext(ctx),
+ Step: stepFromContext(ctx),
+ System: systemFromContext(ctx),
+ }
+}
diff --git a/woodpecker/pipeline.go b/woodpecker/pipeline.go
new file mode 100644
index 0000000..8aa0d43
--- /dev/null
+++ b/woodpecker/pipeline.go
@@ -0,0 +1,107 @@
+// 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"
+)
+
+// 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"`
+ Link string `json:"link,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"`
+}
+
+func pipelineFlags(category string) []cli.Flag {
+ return []cli.Flag{
+ &cli.Int64Flag{
+ Name: "pipeline.number",
+ Usage: "pipeline number",
+ EnvVars: []string{"CI_PIPELINE_NUMBER"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "pipeline.status",
+ Usage: "pipeline status",
+ EnvVars: []string{"CI_PIPELINE_STATUS"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "pipeline.event",
+ Usage: "pipeline event",
+ EnvVars: []string{"CI_PIPELINE_EVENT"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "pipeline.link",
+ Usage: "pipeline link",
+ EnvVars: []string{"CI_PIPELINE_LINK"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "pipeline.deploy-target",
+ Usage: "pipeline deployment target",
+ EnvVars: []string{"CI_PIPELINE_DEPLOY_TARGET"},
+ Category: category,
+ },
+ &cli.Int64Flag{
+ Name: "pipeline.created",
+ Usage: "pipeline creation time",
+ EnvVars: []string{"CI_PIPELINE_CREATED"},
+ Category: category,
+ },
+ &cli.Int64Flag{
+ Name: "pipeline.started",
+ Usage: "pipeline start time",
+ EnvVars: []string{"CI_PIPELINE_STARTED"},
+ Category: category,
+ },
+ &cli.Int64Flag{
+ Name: "pipeline.finished",
+ Usage: "pipeline finish time",
+ EnvVars: []string{"CI_PIPELINE_FINISHED"},
+ Category: category,
+ },
+ &cli.Int64Flag{
+ Name: "pipeline.parent",
+ Usage: "pipeline parent",
+ EnvVars: []string{"CI_PIPELINE_PARENT"},
+ Category: category,
+ },
+ }
+}
+
+func pipelineFromContext(c *cli.Context) Pipeline {
+ return Pipeline{
+ Number: c.Int64("pipeline.number"),
+ Status: c.String("pipeline.status"),
+ Event: c.String("pipeline.event"),
+ Link: c.String("pipeline.link"),
+ 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"),
+ }
+}
diff --git a/woodpecker/plugin.go b/woodpecker/plugin.go
new file mode 100644
index 0000000..578605b
--- /dev/null
+++ b/woodpecker/plugin.go
@@ -0,0 +1,101 @@
+// 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 (
+ "context"
+ "net/http"
+ "os"
+
+ "github.com/joho/godotenv"
+ "github.com/rs/zerolog/log"
+ "github.com/urfave/cli/v2"
+)
+
+// Options defines the options for the plugin.
+type Options struct {
+ // Name of the plugin.
+ Name string
+ // Description of the plugin.
+ Description string
+ // Version of the plugin.
+ Version string
+ // Flags of the plugin.
+ Flags []cli.Flag
+ // Execute function of the plugin.
+ Execute ExecuteFunc
+}
+
+// Plugin defines the plugin instance.
+type Plugin struct {
+ app *cli.App
+ execute ExecuteFunc
+ client *http.Client
+ // Metadata of the current pipeline.
+ Metadata Metadata
+}
+
+// ExecuteFunc defines the function that is executed by the plugin.
+type ExecuteFunc func(ctx context.Context) error
+
+// New plugin instance.
+func New(opt Options) *Plugin {
+ if _, err := os.Stat("/run/woodpecker/env"); err == nil {
+ _ = godotenv.Overload("/run/woodpecker/env")
+ }
+
+ app := &cli.App{
+ Name: opt.Name,
+ Description: opt.Description,
+ Version: opt.Version,
+ Flags: append(opt.Flags, Flags()...),
+ }
+
+ plugin := &Plugin{
+ app: app,
+ execute: opt.Execute,
+ }
+ plugin.app.Action = plugin.action
+
+ return plugin
+}
+
+func (p *Plugin) action(ctx *cli.Context) error {
+ if err := SetupConsoleLogger(ctx); err != nil {
+ return err
+ }
+
+ p.Metadata = MetadataFromContext(ctx)
+ p.client = HTTPClientFromContext(ctx)
+
+ if p.execute == nil {
+ panic("plugin execute function is not set")
+ }
+
+ return p.execute(ctx.Context)
+}
+
+// HTTPClient returns the http.Client instance.
+func (p *Plugin) HTTPClient() *http.Client {
+ return p.client
+}
+
+// Run the plugin.
+func (p *Plugin) Run() {
+ if err := p.app.Run(os.Args); err != nil {
+ log.Error().Err(err).Msg("execution failed")
+ os.Exit(1)
+ }
+}
diff --git a/woodpecker/repo.go b/woodpecker/repo.go
new file mode 100644
index 0000000..77e22b6
--- /dev/null
+++ b/woodpecker/repo.go
@@ -0,0 +1,81 @@
+// 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 (
+ "github.com/urfave/cli/v2"
+)
+
+// Repository defines runtime metadata for a repository.
+type Repository struct {
+ Name string `json:"name,omitempty"`
+ Owner string `json:"owner,omitempty"`
+ Link string `json:"link,omitempty"`
+ CloneURL string `json:"clone_url,omitempty"`
+ Private bool `json:"private,omitempty"`
+ Branch string `json:"default_branch,omitempty"`
+}
+
+func repositoryFlags(category string) []cli.Flag {
+ return []cli.Flag{
+ &cli.StringFlag{
+ Name: "repo.name",
+ Usage: "repo name",
+ EnvVars: []string{"CI_REPO_NAME"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "repo.owner",
+ Usage: "repo owner",
+ EnvVars: []string{"CI_REPO_OWNER"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "repo.link",
+ Usage: "repo link",
+ EnvVars: []string{"CI_REPO_LINK"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "repo.clone-url",
+ Usage: "repo clone url",
+ EnvVars: []string{"CI_REPO_CLONE_URL"},
+ Category: category,
+ },
+ &cli.BoolFlag{
+ Name: "repo.private",
+ Usage: "repo private",
+ EnvVars: []string{"CI_REPO_PRIVATE"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "repo.default-branch",
+ Usage: "repo default branch",
+ EnvVars: []string{"CI_REPO_DEFAULT_BRANCH"},
+ Category: category,
+ },
+ }
+}
+
+func repositoryFromContext(c *cli.Context) Repository {
+ return Repository{
+ Name: c.String("repo.name"),
+ Owner: c.String("repo.owner"),
+ Link: c.String("repo.link"),
+ CloneURL: c.String("repo.clone-url"),
+ Private: c.Bool("repo.private"),
+ Branch: c.String("repo.default-branch"),
+ }
+}
diff --git a/woodpecker/step.go b/woodpecker/step.go
new file mode 100644
index 0000000..c643013
--- /dev/null
+++ b/woodpecker/step.go
@@ -0,0 +1,59 @@
+// 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"
+)
+
+// Step defines runtime metadata for a step.
+type Step struct {
+ Number int `json:"number,omitempty"`
+ Started time.Time `json:"started,omitempty"`
+ Finished time.Time `json:"finished,omitempty"`
+}
+
+func stepFlags(category string) []cli.Flag {
+ return []cli.Flag{
+ &cli.IntFlag{
+ Name: "step.number",
+ Usage: "step number",
+ EnvVars: []string{"CI_STEP_NUMBER"},
+ Category: category,
+ },
+ &cli.Int64Flag{
+ Name: "step.started",
+ Usage: "step start time",
+ EnvVars: []string{"CI_STEP_STARTED"},
+ Category: category,
+ },
+ &cli.Int64Flag{
+ Name: "step.finished",
+ Usage: "step finish time",
+ EnvVars: []string{"CI_STEP_FINISHED"},
+ Category: category,
+ },
+ }
+}
+
+func stepFromContext(c *cli.Context) Step {
+ return Step{
+ Number: c.Int("step.number"),
+ Started: time.Unix(c.Int64("step.started"), 0),
+ Finished: time.Unix(c.Int64("step.finished"), 0),
+ }
+}
diff --git a/woodpecker/system.go b/woodpecker/system.go
new file mode 100644
index 0000000..3f1ee1d
--- /dev/null
+++ b/woodpecker/system.go
@@ -0,0 +1,76 @@
+// 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 (
+ "github.com/urfave/cli/v2"
+)
+
+// System defines runtime metadata for a ci/cd system.
+type System struct {
+ Name string `json:"name,omitempty"`
+ Host string `json:"host,omitempty"`
+ Link string `json:"link,omitempty"`
+ Platform string `json:"arch,omitempty"`
+ Version string `json:"version,omitempty"`
+}
+
+func systemFlags(category string) []cli.Flag {
+ return []cli.Flag{
+ &cli.StringFlag{
+ Name: "system.name",
+ Usage: "system name",
+ EnvVars: []string{"CI_SYSTEM_NAME"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "system.host",
+ Usage: "system host",
+ EnvVars: []string{"CI_SYSTEM_HOST"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "system.link",
+ Usage: "system link",
+ EnvVars: []string{"CI_SYSTEM_LINK"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "system.arch",
+ Usage: "system arch",
+ EnvVars: []string{"CI_SYSTEM_PLATFORM"},
+ Category: category,
+ },
+ &cli.StringFlag{
+ Name: "system.version",
+ Usage: "system version",
+ EnvVars: []string{"CI_SYSTEM_VERSION"},
+ Category: category,
+ },
+ }
+}
+
+func systemFromContext(ctx *cli.Context) System {
+ link := ctx.String("system.link")
+ host := ctx.String("system.host")
+
+ return System{
+ Name: ctx.String("system.name"),
+ Host: host,
+ Link: link,
+ Platform: ctx.String("system.arch"),
+ Version: ctx.String("system.version"),
+ }
+}
diff --git a/drone/types.go b/woodpecker/types.go
similarity index 98%
rename from drone/types.go
rename to woodpecker/types.go
index c1a5b5a..e18693d 100644
--- a/drone/types.go
+++ b/woodpecker/types.go
@@ -1,4 +1,4 @@
-package drone
+package plugin
import (
"strings"
diff --git a/drone/types_test.go b/woodpecker/types_test.go
similarity index 97%
rename from drone/types_test.go
rename to woodpecker/types_test.go
index eacca0b..29dfdec 100644
--- a/drone/types_test.go
+++ b/woodpecker/types_test.go
@@ -1,4 +1,4 @@
-package drone
+package plugin
import (
"reflect"