1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-01-10 03:47:03 +02:00
goreleaser/pkg/context/context.go

110 lines
2.5 KiB
Go
Raw Normal View History

2017-04-14 20:39:32 +02:00
// Package context provides gorelease context which is passed through the
// pipeline.
//
// The context extends the standard library context and add a few more
// fields and other things, so pipes can gather data provided by previous
// pipes without really knowing each other.
2017-01-14 16:34:22 +02:00
package context
2017-02-23 21:01:54 +02:00
import (
ctx "context"
"os"
"strings"
2017-12-29 21:07:06 +02:00
"time"
2017-02-23 21:01:54 +02:00
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/pkg/config"
2017-02-23 21:01:54 +02:00
)
2017-01-14 16:34:22 +02:00
// GitInfo includes tags and diffs used in some point
type GitInfo struct {
2018-10-03 22:44:31 +02:00
CurrentTag string
Commit string
ShortCommit string
FullCommit string
URL string
2017-01-14 16:34:22 +02:00
}
// Env is the environment variables
type Env map[string]string
// Strings returns the current environment as a list of strings, suitable for
// os executions.
func (e Env) Strings() []string {
var result = make([]string, 0, len(e))
for k, v := range e {
result = append(result, k+"="+v)
}
return result
}
feat: add gitlab for releases (#1038) * outlines gitlab client integration * makes client parameter more explicit * adds gitlab url to config * changes releaseID to string to adapt to gitlab * updates to latest gitlab client lib 0.18 * fixes copy paster in gitlab upload func * fixes gitlab typo in config * adds gitlab token to env and context * release now uses the client factory method * skips brew pipe if it is not a github release * add github tokentype to publish tests * skips scoop pipe if it is not a github release * corrects brew skip msg * adds gitlab token to main test * adds gitlab to release docs * validates config and errors accordingly * adapt release pipe name to include gitlab * fixes gitlab client after testing * moves not-configured brew and scoop pipe checks as first check * adds more debug to gitlab client * adapts changelog generation for gitlab markdown * adds debug log for gitlab changelog * env needs to run before changelog pipe * moves gitlab default download url to default pipe * moves multiple releases check to from config to release pipe * release differs now for github and gitlab * adds debug gitlab release update msgs * moves env pipe as second after before because it determines the token type other pipes depend on * adaptes error check on gitlab release creation * Revert "adaptes error check on gitlab release creation" This reverts commit 032024571c76140f8e2207ee01cc08088f37594b. * simplifies gitlab client logic. removes comments * skips tls verification for gitlab client if specified in config * updates the docs * adds clarification that brew and scoop are not supported if it is a gitlab release * fixes copy paster in release.md * adds missing blob pipe in defaults and publish due to missing in merge * updates comment in gitlab client
2019-06-29 16:02:40 +02:00
// tokenType is either github or gitlab
type tokenType string
const (
// TokenTypeGitHub defines github as type of the token
TokenTypeGitHub tokenType = "github"
// TokenTypeGitLab defines gitlab as type of the token
TokenTypeGitLab tokenType = "gitlab"
)
2017-01-15 12:48:27 +02:00
// Context carries along some data through the pipes
2017-01-14 16:34:22 +02:00
type Context struct {
2017-02-23 21:01:54 +02:00
ctx.Context
2017-04-19 22:05:10 +02:00
Config config.Project
Env Env
2017-04-19 22:05:10 +02:00
Token string
feat: add gitlab for releases (#1038) * outlines gitlab client integration * makes client parameter more explicit * adds gitlab url to config * changes releaseID to string to adapt to gitlab * updates to latest gitlab client lib 0.18 * fixes copy paster in gitlab upload func * fixes gitlab typo in config * adds gitlab token to env and context * release now uses the client factory method * skips brew pipe if it is not a github release * add github tokentype to publish tests * skips scoop pipe if it is not a github release * corrects brew skip msg * adds gitlab token to main test * adds gitlab to release docs * validates config and errors accordingly * adapt release pipe name to include gitlab * fixes gitlab client after testing * moves not-configured brew and scoop pipe checks as first check * adds more debug to gitlab client * adapts changelog generation for gitlab markdown * adds debug log for gitlab changelog * env needs to run before changelog pipe * moves gitlab default download url to default pipe * moves multiple releases check to from config to release pipe * release differs now for github and gitlab * adds debug gitlab release update msgs * moves env pipe as second after before because it determines the token type other pipes depend on * adaptes error check on gitlab release creation * Revert "adaptes error check on gitlab release creation" This reverts commit 032024571c76140f8e2207ee01cc08088f37594b. * simplifies gitlab client logic. removes comments * skips tls verification for gitlab client if specified in config * updates the docs * adds clarification that brew and scoop are not supported if it is a gitlab release * fixes copy paster in release.md * adds missing blob pipe in defaults and publish due to missing in merge * updates comment in gitlab client
2019-06-29 16:02:40 +02:00
TokenType tokenType
2017-04-19 22:05:10 +02:00
Git GitInfo
Artifacts artifact.Artifacts
2017-04-19 22:05:10 +02:00
ReleaseNotes string
Version string
2017-04-29 12:49:22 +02:00
Snapshot bool
SkipPublish bool
SkipSign bool
2018-03-08 13:42:33 +02:00
SkipValidate bool
2017-07-05 03:53:50 +02:00
RmDist bool
PreRelease bool
2017-07-15 21:49:52 +02:00
Parallelism int
2019-01-19 20:57:58 +02:00
Semver Semver
}
// Semver represents a semantic version
type Semver struct {
Major int64
Minor int64
Patch int64
Prerelease string
}
2017-01-15 12:48:27 +02:00
// New context
func New(config config.Project) *Context {
2018-01-22 00:07:18 +02:00
return Wrap(ctx.Background(), config)
2017-12-29 21:07:06 +02:00
}
// NewWithTimeout new context with the given timeout
func NewWithTimeout(config config.Project, timeout time.Duration) (*Context, ctx.CancelFunc) {
ctx, cancel := ctx.WithTimeout(ctx.Background(), timeout)
2018-01-22 00:07:18 +02:00
return Wrap(ctx, config), cancel
2017-12-29 21:07:06 +02:00
}
2018-01-22 00:07:18 +02:00
// Wrap wraps an existing context
func Wrap(ctx ctx.Context, config config.Project) *Context {
2017-01-14 16:34:22 +02:00
return &Context{
2017-12-29 21:07:06 +02:00
Context: ctx,
2017-07-15 21:49:52 +02:00
Config: config,
Env: splitEnv(append(os.Environ(), config.Env...)),
2017-07-15 21:49:52 +02:00
Parallelism: 4,
2017-12-17 21:25:04 +02:00
Artifacts: artifact.New(),
2017-01-14 16:34:22 +02:00
}
}
func splitEnv(env []string) map[string]string {
r := map[string]string{}
for _, e := range env {
p := strings.SplitN(e, "=", 2)
r[p[0]] = p[1]
}
return r
}