provider

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 15, 2023 License: MIT Imports: 11 Imported by: 6

Documentation

Overview

The provider package contains the release recovery logic of the various project hosting systems. For each system, there is a file that implements the UpdaterProvider interface. Thus, for GitHub and GitLab systems, we will have github.go and gitlab.go files, respectively.

UpdaterProvider

// It is the interface that every release provider should implement, as it has all the
// expected method definitions for querying, caching and restoring cached release.
type UpdaterProvider interface {
	// FetchLastRelease queries provider for the last release of a project.
	FetchLastRelease(client HTTPClientPlugin) (*Release, error)

	// CacheRelease writes the release passed as parameter to the file system.
	CacheRelease(release Release) error

	// RestoreCacheRelease retores a cached release.
	// It returns nil if no release has been cached yet.
	RestoreCacheRelease() (*Release, error)
}

GitHub provider implementation

// GithubProvider is a provider for getting releases from Github.
type GitlabProvider struct {
	Host        string
	Port        uint
	Ssl         bool
	ProjectPath string
	Timeout     time.Duration
}

func (provider GithubProvider) FetchLastRelease(client HTTPClientPlugin) (*Release, error) {
	// ...
}

func (GithubProvider) CacheRelease(r Release) error {
	return serializeRelease(&r)
}

func (GithubProvider) RestoreCacheRelease() (*Release, error) {
	return deserializeRelease()
}

GitLab provider implementation

// GitlabProvider is a provider for getting releases from Gitlab.
type GitlabProvider struct {
	Host        string
	Port        uint
	Ssl         bool
	ProjectPath string
	Timeout     time.Duration
}

func (provider GitlabProvider) FetchLastRelease(client HTTPClientPlugin) (*Release, error) {
	// ...
}

func (GitlabProvider) CacheRelease(r Release) error {
	return serializeRelease(&r)
}

func (GitlabProvider) RestoreCacheRelease() (*Release, error) {
	return deserializeRelease()
}

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Comparator

type Comparator interface {
	CompareTo(r2 *Release) int
}

Comparator is an interface that provides methods for comparing two releases.

type GithubProvider

type GithubProvider struct {
	Host        string
	Port        uint
	Ssl         bool
	ProjectPath string
	Timeout     time.Duration
}

GithubProvider is a provider for getting releases from Github.

func (GithubProvider) CacheRelease

func (GithubProvider) CacheRelease(r Release) error

func (GithubProvider) FetchLastRelease

func (provider GithubProvider) FetchLastRelease(client HTTPClientPlugin) (*Release, error)

func (GithubProvider) RestoreCacheRelease

func (GithubProvider) RestoreCacheRelease() (*Release, error)

type GithubRelease

type GithubRelease struct {
	Name        string    `json:"tag_name"`
	Body        string    `json:"body"`
	PublishedAt time.Time `json:"published_at"`
	Assets      []struct {
		Name string `json:"name"`
		URL  string `json:"browser_download_url"`
	} `json:"assets"`
}

GithubRelease is a representation - in JSON form - of what Github returns when the target service is called.

func (*GithubRelease) CompareTo

func (r1 *GithubRelease) CompareTo(r2 *GithubRelease) int

type GitlabProvider

type GitlabProvider struct {
	Host        string
	Port        uint
	Ssl         bool
	ProjectPath string
	Timeout     time.Duration
}

GitlabProvider is a provider for getting releases from Gitlab.

func (GitlabProvider) CacheRelease

func (GitlabProvider) CacheRelease(r Release) error

func (GitlabProvider) FetchLastRelease

func (provider GitlabProvider) FetchLastRelease(client HTTPClientPlugin) (*Release, error)

func (GitlabProvider) RestoreCacheRelease

func (GitlabProvider) RestoreCacheRelease() (*Release, error)

type GitlabRelease

type GitlabRelease struct {
	Name        string    `json:"tag_name"`
	Description string    `json:"description"`
	ReleaseAt   time.Time `json:"released_at"`
	Assets      struct {
		Links []struct {
			Name string `json:"name"`
			URL  string `json:"url"`
		} `json:"links"`
	} `json:"assets"`
}

GitlabRelease is a representation - in JSON form - of what Gitlab returns when the target service is called.

func (*GitlabRelease) CompareTo

func (r1 *GitlabRelease) CompareTo(r2 *GitlabRelease) int

type HTTPClientDecorator

type HTTPClientDecorator struct {
	Client http.Client
}

func (*HTTPClientDecorator) Do

func (decorator *HTTPClientDecorator) Do(req *http.Request) (*http.Response, error)

type HTTPClientPlugin

type HTTPClientPlugin interface {
	Do(req *http.Request) (*http.Response, error)
}

type Release

type Release struct {
	Name        string    `json:"name"`
	Description string    `json:"description"`
	ReleasedAt  time.Time `json:"releasedAt"`
	Assets      []struct {
		Name string `json:"name"`
		URL  string `json:"url"`
	} `json:"assets"`
}

Release is a structured data type that abstracts the release of a project.

func (*Release) CompareTo

func (r1 *Release) CompareTo(r2 *Release) int

CompareTo compares release r1 with release r2. It returns 1, 0 or -1 if it is greater, equal or lesser.

type UpdaterProvider

type UpdaterProvider interface {
	// FetchLastRelease queries provider for the last release of a project.
	FetchLastRelease(client HTTPClientPlugin) (*Release, error)

	// CacheRelease writes the release passed as parameter to the file system.
	CacheRelease(release Release) error

	// RestoreCacheRelease retores a cached release.
	// It returns nil if no release has been cached yet.
	RestoreCacheRelease() (*Release, error)
}

It is the interface that every release provider should implement, as it has all the expected method definitions for querying, caching and restoring cached release.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL