github.com/redhat-appstudio/e2e-tests@v0.0.0-20240520140907-9709f6f59323/pkg/clients/github/repositories.go (about)

     1  package github
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"github.com/google/go-github/v44/github"
     9  	. "github.com/onsi/ginkgo/v2"
    10  )
    11  
    12  func (g *Github) CheckIfReleaseExist(owner, repositoryName, releaseURL string) bool {
    13  	urlParts := strings.Split(releaseURL, "/")
    14  	tagName := urlParts[len(urlParts)-1]
    15  	_, _, err := g.client.Repositories.GetReleaseByTag(context.Background(), owner, repositoryName, tagName)
    16  	if err != nil {
    17  		GinkgoWriter.Printf("GetReleaseByTag %s returned error in repo %s : %v\n", tagName, repositoryName, err)
    18  		return false
    19  	}
    20  	GinkgoWriter.Printf("Release tag %s is found in repository %s \n", tagName, repositoryName)
    21  	return true
    22  }
    23  
    24  func (g *Github) DeleteRelease(owner, repositoryName, releaseURL string) bool {
    25  	urlParts := strings.Split(releaseURL, "/")
    26  	tagName := urlParts[len(urlParts)-1]
    27  	release, _, err := g.client.Repositories.GetReleaseByTag(context.Background(), owner, repositoryName, tagName)
    28  	if err != nil {
    29  		GinkgoWriter.Printf("GetReleaseByTag returned error in repo %s : %v\n", repositoryName, err)
    30  		return false
    31  	}
    32  
    33  	_, err = g.client.Repositories.DeleteRelease(context.Background(), owner, repositoryName, *release.ID)
    34  	if err != nil {
    35  		GinkgoWriter.Printf("DeleteRelease returned error: %v", err)
    36  	}
    37  	GinkgoWriter.Printf("Release tag %s is deleted in repository %s \n", tagName, repositoryName)
    38  	return true
    39  }
    40  
    41  func (g *Github) CheckIfRepositoryExist(repository string) bool {
    42  	_, resp, err := g.client.Repositories.Get(context.Background(), g.organization, repository)
    43  	if err != nil {
    44  		GinkgoWriter.Printf("error when sending request to Github API: %v\n", err)
    45  		return false
    46  	}
    47  	GinkgoWriter.Printf("repository %s status request to github: %d\n", repository, resp.StatusCode)
    48  	return resp.StatusCode == 200
    49  }
    50  
    51  func (g *Github) CreateFile(repository, pathToFile, fileContent, branchName string) (*github.RepositoryContentResponse, error) {
    52  	opts := &github.RepositoryContentFileOptions{
    53  		Message: github.String("e2e test commit message"),
    54  		Content: []byte(fileContent),
    55  		Branch:  github.String(branchName),
    56  	}
    57  
    58  	file, _, err := g.client.Repositories.CreateFile(context.Background(), g.organization, repository, pathToFile, opts)
    59  	if err != nil {
    60  		return nil, fmt.Errorf("error when creating file contents: %v", err)
    61  	}
    62  
    63  	return file, nil
    64  }
    65  
    66  func (g *Github) GetFile(repository, pathToFile, branchName string) (*github.RepositoryContent, error) {
    67  	opts := &github.RepositoryContentGetOptions{}
    68  	if branchName != "" {
    69  		opts.Ref = fmt.Sprintf(HEADS, branchName)
    70  	}
    71  	file, _, _, err := g.client.Repositories.GetContents(context.Background(), g.organization, repository, pathToFile, opts)
    72  	if err != nil {
    73  		return nil, fmt.Errorf("error when listing file contents: %v", err)
    74  	}
    75  
    76  	return file, nil
    77  }
    78  
    79  func (g *Github) UpdateFile(repository, pathToFile, newContent, branchName, fileSHA string) (*github.RepositoryContentResponse, error) {
    80  	opts := &github.RepositoryContentGetOptions{}
    81  	if branchName != "" {
    82  		opts.Ref = fmt.Sprintf(HEADS, branchName)
    83  	}
    84  	newFileContent := &github.RepositoryContentFileOptions{
    85  		Message: github.String("e2e test commit message"),
    86  		SHA:     github.String(fileSHA),
    87  		Content: []byte(newContent),
    88  		Branch:  github.String(branchName),
    89  	}
    90  	updatedFile, _, err := g.client.Repositories.UpdateFile(context.Background(), g.organization, repository, pathToFile, newFileContent)
    91  	if err != nil {
    92  		return nil, fmt.Errorf("error when updating a file on github: %v", err)
    93  	}
    94  
    95  	return updatedFile, nil
    96  }
    97  
    98  func (g *Github) DeleteFile(repository, pathToFile, branchName string) error {
    99  	getOpts := &github.RepositoryContentGetOptions{}
   100  	deleteOpts := &github.RepositoryContentFileOptions{}
   101  
   102  	if branchName != "" {
   103  		getOpts.Ref = fmt.Sprintf(HEADS, branchName)
   104  		deleteOpts.Branch = github.String(branchName)
   105  	}
   106  	file, _, _, err := g.client.Repositories.GetContents(context.Background(), g.organization, repository, pathToFile, getOpts)
   107  	if err != nil {
   108  		return fmt.Errorf("error when listing file contents on github: %v", err)
   109  	}
   110  
   111  	deleteOpts = &github.RepositoryContentFileOptions{
   112  		Message: github.String("delete test files"),
   113  		SHA:     github.String(file.GetSHA()),
   114  	}
   115  
   116  	_, _, err = g.client.Repositories.DeleteFile(context.Background(), g.organization, repository, pathToFile, deleteOpts)
   117  	if err != nil {
   118  		return fmt.Errorf("error when deleting file on github: %v", err)
   119  	}
   120  	return nil
   121  }
   122  
   123  func (g *Github) GetAllRepositories() ([]*github.Repository, error) {
   124  
   125  	opt := &github.RepositoryListByOrgOptions{
   126  		ListOptions: github.ListOptions{
   127  			PerPage: 100,
   128  		},
   129  	}
   130  	var allRepos []*github.Repository
   131  	for {
   132  		repos, resp, err := g.client.Repositories.ListByOrg(context.Background(), g.organization, opt)
   133  		if err != nil {
   134  			return nil, err
   135  		}
   136  		allRepos = append(allRepos, repos...)
   137  		if resp.NextPage == 0 {
   138  			break
   139  		}
   140  		opt.Page = resp.NextPage
   141  	}
   142  	return allRepos, nil
   143  }
   144  
   145  func (g *Github) DeleteRepository(repository *github.Repository) error {
   146  	GinkgoWriter.Printf("Deleting repository %s\n", *repository.Name)
   147  	_, err := g.client.Repositories.Delete(context.Background(), g.organization, *repository.Name)
   148  	if err != nil {
   149  		return err
   150  	}
   151  	return nil
   152  }