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 }