Skip to content

Commit bf4ef2c

Browse files
committed
adding logic to account for when no bypass actors are set
1 parent 9beeea8 commit bf4ef2c

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

Diff for: reporulesetbot/handler.go

+7
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,13 @@ func (h *RulesetHandler) handleRulesetEdited(ctx context.Context, event *Ruleset
162162
continue
163163
}
164164

165+
if len(ruleset.BypassActors) == 0 {
166+
logger.Info().Msgf("Ruleset %s in the organization %s does not have any bypass actors.", ruleset.Name, orgName)
167+
if err := removeBypassActors(client, orgName, rulesetID); err != nil {
168+
return errors.Wrapf(err, "Failed to remove bypass actors from ruleset %s in organization %s", eventRulesetName, orgName)
169+
}
170+
}
171+
165172
if err := editRuleset(ctx, client, orgName, rulesetID, ruleset, logger); err != nil {
166173
return errors.Wrapf(err, "Failed to edit ruleset %s in organization %s", eventRulesetName, orgName)
167174
}

Diff for: reporulesetbot/ruleset.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -237,16 +237,16 @@ func shouldProcessBypassActor(bypassActor *github.BypassActor) bool {
237237

238238
// isManagedRuleset returns true if the ruleset is managed by this App.
239239
func isManagedRuleset(event *RulesetEvent, ruleset *github.Ruleset, logger zerolog.Logger) bool {
240-
241240
if event.Changes.Name.From != "" && ruleset.Name == event.Changes.Name.From {
242241
logger.Info().Msgf("Ruleset name was changed from %s to %s in the organization %s.", event.Changes.Name.From, event.Ruleset.Name, event.Organization.GetLogin())
243-
return ruleset.Name == event.Changes.Name.From
242+
return true
244243
}
245244

246245
if ruleset.Name != event.Ruleset.Name {
247-
logger.Info().Msgf("Ruleset %s in the organization %s is not managed by this App.", event.Ruleset.Name, event.Organization.GetLogin())
246+
logger.Info().Msgf("Ruleset %s does not match the event ruleset %s in the organization %s.", ruleset.Name, event.Ruleset.Name, event.Organization.GetLogin())
248247
return false
249248
}
249+
250250
logger.Info().Msgf("Ruleset %s in the organization %s is managed by this App.", event.Ruleset.Name, event.Organization.GetLogin())
251251
return true
252252
}

Diff for: reporulesetbot/utils.go

+29
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package reporulesetbot
22

33
import (
4+
"bytes"
45
"context"
6+
"encoding/json"
7+
"fmt"
58
"net/http"
69
"net/url"
710
"os"
@@ -206,3 +209,29 @@ func getRulesetFiles(dir string) ([]string, error) {
206209

207210
return ruleSetFiles, nil
208211
}
212+
213+
// removeBypassActors edits the ruleset to remove the bypass actors.
214+
func removeBypassActors(client *github.Client, orgName string, rulesetID int64) error {
215+
216+
payload := map[string]interface{}{
217+
"bypass_actors": []interface{}{},
218+
}
219+
220+
data, err := json.Marshal(payload)
221+
if err != nil {
222+
return errors.Wrap(err, "Failed to marshal JSON payload")
223+
}
224+
225+
body := bytes.NewReader(data)
226+
227+
req, err := http.NewRequest("PUT", fmt.Sprintf("https://api.github.com/orgs/%s/rulesets/%d", orgName, rulesetID), body)
228+
if err != nil {
229+
return errors.Wrap(err, "Failed to create new request")
230+
}
231+
_, err = client.BareDo(context.Background(), req)
232+
if err != nil {
233+
return errors.Wrap(err, "Failed to remove bypass actors")
234+
}
235+
236+
return nil
237+
}

0 commit comments

Comments
 (0)