gitproviders

package
v0.3.1 Latest Latest
Warning

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

Go to latest
Published: Oct 8, 2021 License: MPL-2.0 Imports: 11 Imported by: 7

README

Cache system of gitproviders pkg

How it works

This cache system works through Cassettes. A Cassette is a yaml file that stores all the interactions made towards the github api where that same Cassette was involved. This file is generated the first time the tests using the same cassette are run. If the file exists, that cassette will be used to emulate the previously recorded responses.

How to implement a Cassette recorder

Set up environment variables
  • GITHUB_TOKEN is used for authentication.
  • GITHUB_ORG is used to specify the Github organization we want to test with.
  • GITHUB_USER is used to specify the Github account we want to test with.

Note: Only GITHUB_TOKEN is a must, the other can be set as needed.

Set up a recorder

To initialize the recorder, use the function getTestClientWithCassette:

client, recorder, err := getTestClientWithCassette("CASSETTE_NAME", "provider name")
  • client is the object from fluxcd/go-git-providers that was injected with the recorder and makes the api calls.
  • recorder is the object from dnaeon/go-vcr that helps to save the yaml file which is triggered by using recorder.Done().
  • CASSETTE_NAME name of the Cassette.
Complete implementation example using ginkgo
var _ = Describe("create github repo", func() {
	accounts := getAccounts()  

    var gitProvider defaultGitProvider
	var recorder *recorder.Recorder
	var err error
	BeforeEach(func() {
	    var client gitprovider.Client
		client, recorder, err = getTestClientWithCassette("CASSETTE_ID", "provider name")
		Expect(err).NotTo(HaveOccurred())
		gitProvider = defaultGitProvider{
			provider: client,
		}
	})

	It("should create a repository successfully", func() {
		err = gitProvider.CreateRepository(repoName, accounts.GithubOrgName, true)
		Expect(err).NotTo(HaveOccurred())
	})

	AfterEach(func() {
	    // delete org repo
		ctx := context.Background()
		orgRepoRef := NewOrgRepositoryRef(github.DefaultDomain, accounts.GithubOrgName, repoName)
		org, err := client.OrgRepositories().Get(ctx, orgRepoRef)
		Expect(err).NotTo(HaveOccurred())
		err = org.Delete(ctx)
		Expect(err).NotTo(HaveOccurred())
		// save Cassette in pkg/gitproviders/cache/CASSETTE_ID.yaml
		err = recorder.Stop()
		Expect(err).NotTo(HaveOccurred())
	})

})

Troubleshooting

  • If you face the error Requested interaction not found it means there is an api call that was not saved in the Cassette when it was created.
  • If you added more interactions to an existing test you will need to regenerate the Cassette yaml. To do so remove yaml file and rerun the test. Otherwise, you will get the previous error.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewOrgRepositoryRef

func NewOrgRepositoryRef(domain, org, repoName string) gitprovider.OrgRepositoryRef

Types

type AccountTypeGetter added in v0.3.1

type AccountTypeGetter func(provider gitprovider.Client, domain string, owner string) (ProviderAccountType, error)

type Config added in v0.2.2

type Config struct {
	// Provider defines the GitProvider.
	Provider GitProviderName

	// Hostname is the HTTP/S hostname of the Provider,
	// e.g. github.example.com.
	Hostname string

	// Token contains the token used to authenticate with the
	// Provider.
	Token string
}

Config defines the configuration for connecting to a GitProvider.

type GitProvider added in v0.2.2

type GitProvider interface {
	RepositoryExists(ctx context.Context, name string, owner string) (bool, error)
	DeployKeyExists(ctx context.Context, owner, repoName string) (bool, error)
	GetDefaultBranch(ctx context.Context, url string) (string, error)
	GetRepoVisibility(ctx context.Context, url string) (*gitprovider.RepositoryVisibility, error)
	UploadDeployKey(ctx context.Context, owner, repoName string, deployKey []byte) error
	CreatePullRequest(ctx context.Context, owner string, repoName string, prInfo PullRequestInfo) (gitprovider.PullRequest, error)
	GetCommits(ctx context.Context, owner string, repoName, targetBranch string, pageSize int, pageToken int) ([]gitprovider.Commit, error)
	GetProviderDomain() string
}

GitProvider Handler

func New added in v0.1.0

func New(config Config, owner string, getAccountType AccountTypeGetter) (GitProvider, error)

func NewDryRun added in v0.3.1

func NewDryRun() (GitProvider, error)

type GitProviderName added in v0.2.2

type GitProviderName string

GitProviderName holds a Git provider definition.

const (
	GitProviderGitHub GitProviderName = "github"
	GitProviderGitLab GitProviderName = "gitlab"
)

type NormalizedRepoURL added in v0.2.5

type NormalizedRepoURL struct {
	// contains filtered or unexported fields
}

func NewNormalizedRepoURL added in v0.2.5

func NewNormalizedRepoURL(uri string) (NormalizedRepoURL, error)

func (NormalizedRepoURL) Owner added in v0.2.5

func (n NormalizedRepoURL) Owner() string

func (NormalizedRepoURL) Protocol added in v0.2.5

func (NormalizedRepoURL) Provider added in v0.2.5

func (n NormalizedRepoURL) Provider() GitProviderName

func (NormalizedRepoURL) RepositoryName added in v0.2.5

func (n NormalizedRepoURL) RepositoryName() string

func (NormalizedRepoURL) String added in v0.2.5

func (n NormalizedRepoURL) String() string

func (NormalizedRepoURL) URL added in v0.2.5

func (n NormalizedRepoURL) URL() *url.URL

type ProviderAccountType added in v0.0.4

type ProviderAccountType string
const (
	AccountTypeUser ProviderAccountType = "user"
	AccountTypeOrg  ProviderAccountType = "organization"
)

func GetAccountType added in v0.0.4

func GetAccountType(provider gitprovider.Client, domain string, owner string) (ProviderAccountType, error)

type PullRequestInfo added in v0.3.1

type PullRequestInfo struct {
	Title         string
	Description   string
	CommitMessage string
	TargetBranch  string
	NewBranch     string
	Files         []gitprovider.CommitFile
}

type RepositoryURLProtocol added in v0.2.5

type RepositoryURLProtocol string
const RepositoryURLProtocolHTTPS RepositoryURLProtocol = "https"
const RepositoryURLProtocolSSH RepositoryURLProtocol = "ssh"

Directories

Path Synopsis
Code generated by counterfeiter.
Code generated by counterfeiter.

Jump to

Keyboard shortcuts

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