From 9884192a65caa9d9810f3ef8a5e8130f723200f1 Mon Sep 17 00:00:00 2001 From: jolheiser Date: Sun, 14 Feb 2021 12:30:05 -0600 Subject: [PATCH] Use repo default branch Signed-off-by: jolheiser --- handler/permissions_handler.go | 10 +++++----- main.go | 16 ++++++++-------- types/types.go | 7 ++++--- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/handler/permissions_handler.go b/handler/permissions_handler.go index 2368470..4451aa0 100644 --- a/handler/permissions_handler.go +++ b/handler/permissions_handler.go @@ -19,7 +19,7 @@ import ( const ( configFile = ".DEREK.yml" - configURLFormat = "https://github.com/%s/%s/raw/master/%s" + configURLFormat = "https://github.com/%s/%s/raw/%s/%s" ) func EnabledFeature(attemptedFeature string, config *types.DerekRepoConfig) bool { @@ -92,10 +92,10 @@ func validateRedirectURL(url string) error { // GetPrivateRepoConfig returns the configuration for derek // for the specified repository. Since the repository is // private we use the github API to fetch `.DEREK.yml`. -func GetPrivateRepoConfig(owner, repository string, installation int, config config.Config) (*types.DerekRepoConfig, error) { +func GetPrivateRepoConfig(owner, repository, branch string, installation int, config config.Config) (*types.DerekRepoConfig, error) { client, ctx := makeClient(installation, config) response, err := client.Repositories.DownloadContents(ctx, owner, repository, configFile, &github.RepositoryContentGetOptions{ - Ref: "master", + Ref: branch, }) if err != nil { return nil, fmt.Errorf("unable to download config file: %s", err) @@ -117,12 +117,12 @@ func GetPrivateRepoConfig(owner, repository string, installation int, config con // repository. The repository has to be public since this function // will fetch the file from the CDN. If you are trying to fetch // the config from a private repo use `GetPrivateRepoConfig` instead. -func GetRepoConfig(owner string, repository string) (*types.DerekRepoConfig, error) { +func GetRepoConfig(owner, repository, branch string) (*types.DerekRepoConfig, error) { client := http.Client{ Timeout: 30 * time.Second, } - configFile := fmt.Sprintf(configURLFormat, owner, repository, configFile) + configFile := fmt.Sprintf(configURLFormat, owner, repository, branch, configFile) bytesConfig, err := readConfigFromURL(client, configFile) if err != nil { return nil, err diff --git a/main.go b/main.go index 862bd8b..0bd3d7a 100644 --- a/main.go +++ b/main.go @@ -86,9 +86,9 @@ func handleEvent(eventType string, bytesIn []byte, config config.Config) error { var derekConfig *types.DerekRepoConfig if req.Repository.Private { - derekConfig, err = handler.GetPrivateRepoConfig(req.Repository.Owner.Login, req.Repository.Name, req.Installation.ID, config) + derekConfig, err = handler.GetPrivateRepoConfig(req.Repository.Owner.Login, req.Repository.Name, req.Repository.DefaultBranch, req.Installation.ID, config) } else { - derekConfig, err = handler.GetRepoConfig(req.Repository.Owner.Login, req.Repository.Name) + derekConfig, err = handler.GetRepoConfig(req.Repository.Owner.Login, req.Repository.Name, req.Repository.DefaultBranch) } if err != nil { @@ -146,9 +146,9 @@ func handleEvent(eventType string, bytesIn []byte, config config.Config) error { var derekConfig *types.DerekRepoConfig if req.Repository.Private { - derekConfig, err = handler.GetPrivateRepoConfig(req.Repository.Owner.Login, req.Repository.Name, req.Installation.ID, config) + derekConfig, err = handler.GetPrivateRepoConfig(req.Repository.Owner.Login, req.Repository.Name, req.Repository.DefaultBranch, req.Installation.ID, config) } else { - derekConfig, err = handler.GetRepoConfig(req.Repository.Owner.Login, req.Repository.Name) + derekConfig, err = handler.GetRepoConfig(req.Repository.Owner.Login, req.Repository.Name, req.Repository.DefaultBranch) } if err != nil { return fmt.Errorf("Unable to access maintainers file at: %s/%s\nError: %s", @@ -183,9 +183,9 @@ func handleEvent(eventType string, bytesIn []byte, config config.Config) error { var derekConfig *types.DerekRepoConfig if req.Repository.Private { - derekConfig, err = handler.GetPrivateRepoConfig(req.Repository.Owner.Login, req.Repository.Name, req.Installation.ID, config) + derekConfig, err = handler.GetPrivateRepoConfig(req.Repository.Owner.Login, req.Repository.Name, req.Repository.DefaultBranch, req.Installation.ID, config) } else { - derekConfig, err = handler.GetRepoConfig(req.Repository.Owner.Login, req.Repository.Name) + derekConfig, err = handler.GetRepoConfig(req.Repository.Owner.Login, req.Repository.Name, req.Repository.DefaultBranch) } if err != nil { @@ -223,12 +223,12 @@ func handleEvent(eventType string, bytesIn []byte, config config.Config) error { var derekConfig *types.DerekRepoConfig if req.Repo.GetPrivate() { - derekConfig, err = handler.GetPrivateRepoConfig(req.Repo.Owner.GetLogin(), req.Repo.GetName(), int(req.Installation.GetID()), config) + derekConfig, err = handler.GetPrivateRepoConfig(req.Repo.Owner.GetLogin(), req.Repo.GetName(), req.Repo.GetDefaultBranch(), int(req.Installation.GetID()), config) if err != nil { return fmt.Errorf("unable to get private repo config: %s", err) } } else { - derekConfig, err = handler.GetRepoConfig(req.Repo.Owner.GetLogin(), req.Repo.GetName()) + derekConfig, err = handler.GetRepoConfig(req.Repo.Owner.GetLogin(), req.Repo.GetName(), req.Repo.GetDefaultBranch()) if err != nil { return fmt.Errorf("unable to get repo config: %s", err) } diff --git a/types/types.go b/types/types.go index 0e4809d..c01447f 100644 --- a/types/types.go +++ b/types/types.go @@ -4,9 +4,10 @@ package types type Repository struct { - Owner Owner `json:"owner"` - Name string `json:"name"` - Private bool `json:"private"` + Owner Owner `json:"owner"` + Name string `json:"name"` + Private bool `json:"private"` + DefaultBranch string `json:"default_branch"` } type Owner struct {