1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-01-08 03:31:59 +02:00
goreleaser/internal/client/client.go
dependabot[bot] 27aa6871cb
chore(deps): bump github.com/golangci/golangci-lint from 1.31.0 to 1.32.2 (#1882)
* chore(deps): bump github.com/golangci/golangci-lint

Bumps [github.com/golangci/golangci-lint](https://github.com/golangci/golangci-lint) from 1.31.0 to 1.32.2.
- [Release notes](https://github.com/golangci/golangci-lint/releases)
- [Changelog](https://github.com/golangci/golangci-lint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/golangci/golangci-lint/compare/v1.31.0...v1.32.2)

Signed-off-by: dependabot[bot] <support@github.com>

* fix: lint issues

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

* refactor: lint issues

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Carlos Alexandro Becker <caarlos0@gmail.com>
2020-11-10 11:15:03 -03:00

103 lines
2.6 KiB
Go

// Package client contains the client implementations for several providers.
package client
import (
"errors"
"fmt"
"os"
"github.com/apex/log"
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/pkg/config"
"github.com/goreleaser/goreleaser/pkg/context"
)
// Info of the repository.
type Info struct {
Description string
Homepage string
URL string
}
type Repo struct {
Owner string
Name string
}
func (r Repo) String() string {
if r.Owner == "" && r.Name == "" {
return ""
}
return r.Owner + "/" + r.Name
}
// Client interface.
type Client interface {
CloseMilestone(ctx *context.Context, repo Repo, title string) (err error)
CreateRelease(ctx *context.Context, body string) (releaseID string, err error)
ReleaseURLTemplate(ctx *context.Context) (string, error)
CreateFile(ctx *context.Context, commitAuthor config.CommitAuthor, repo Repo, content []byte, path, message string) (err error)
Upload(ctx *context.Context, releaseID string, artifact *artifact.Artifact, file *os.File) (err error)
}
// New creates a new client depending on the token type.
func New(ctx *context.Context) (Client, error) {
log.WithField("type", ctx.TokenType).Debug("token type")
if ctx.TokenType == context.TokenTypeGitHub {
return NewGitHub(ctx, ctx.Token)
}
if ctx.TokenType == context.TokenTypeGitLab {
return NewGitLab(ctx, ctx.Token)
}
if ctx.TokenType == context.TokenTypeGitea {
return NewGitea(ctx, ctx.Token)
}
return nil, nil
}
func NewWithToken(ctx *context.Context, token string) (Client, error) {
if ctx.TokenType == context.TokenTypeGitHub {
return NewGitHub(ctx, token)
}
if ctx.TokenType == context.TokenTypeGitLab {
return NewGitLab(ctx, token)
}
if ctx.TokenType == context.TokenTypeGitea {
return NewGitea(ctx, token)
}
return nil, nil
}
// ErrNoMilestoneFound is an error when no milestone is found.
type ErrNoMilestoneFound struct {
Title string
}
func (e ErrNoMilestoneFound) Error() string {
return fmt.Sprintf("no milestone found: %s", e.Title)
}
// RetriableError is an error that will cause the action to be retried.
type RetriableError struct {
Err error
}
func (e RetriableError) Error() string {
return e.Err.Error()
}
// NotImplementedError happens when trying to use something a client does not
// implement.
type NotImplementedError struct {
TokenType context.TokenType
}
func (e NotImplementedError) Error() string {
return fmt.Sprintf("not implemented for %s", e.TokenType)
}
// IsNotImplementedErr returns true if given error is a NotImplementedError.
func IsNotImplementedErr(err error) bool {
return errors.As(err, &NotImplementedError{})
}