@@ -604,8 +604,16 @@ func resourceGithubRepositoryRulesetCreate(d *schema.ResourceData, meta any) err
604604 repoName := d .Get ("repository" ).(string )
605605 ctx := context .Background ()
606606
607+ // Check if repository is archived - cannot create rulesets on archived repos (attempts PUT on read-only resource)
608+ repo , _ , err := client .Repositories .Get (ctx , owner , repoName )
609+ if err != nil {
610+ return err
611+ }
612+ if repo .GetArchived () {
613+ return fmt .Errorf ("cannot create ruleset on archived repository %s/%s" , owner , repoName )
614+ }
615+
607616 var ruleset * github.Ruleset
608- var err error
609617
610618 ruleset , _ , err = client .Repositories .CreateRuleset (ctx , owner , repoName , rulesetReq )
611619 if err != nil {
@@ -649,6 +657,7 @@ func resourceGithubRepositoryRulesetRead(d *schema.ResourceData, meta any) error
649657 return nil
650658 }
651659 }
660+ return err
652661 }
653662
654663 if ruleset == nil {
@@ -686,6 +695,16 @@ func resourceGithubRepositoryRulesetUpdate(d *schema.ResourceData, meta any) err
686695
687696 ctx := context .WithValue (context .Background (), ctxId , rulesetID )
688697
698+ // Check if repository is archived - skip update if it is
699+ repo , _ , err := client .Repositories .Get (ctx , owner , repoName )
700+ if err != nil {
701+ return err
702+ }
703+ if repo .GetArchived () {
704+ log .Printf ("[INFO] Repository %s/%s is archived, skipping ruleset update" , owner , repoName )
705+ return nil
706+ }
707+
689708 var ruleset * github.Ruleset
690709 // Use UpdateRulesetNoBypassActor here instead of UpdateRuleset *if* bypass_actors has changed.
691710 // UpdateRuleset uses `omitempty` on BypassActors, causing empty arrays to be omitted from the JSON.
@@ -717,7 +736,7 @@ func resourceGithubRepositoryRulesetDelete(d *schema.ResourceData, meta any) err
717736
718737 log .Printf ("[DEBUG] Deleting repository ruleset: %s/%s: %d" , owner , repoName , rulesetID )
719738 _ , err = client .Repositories .DeleteRuleset (ctx , owner , repoName , rulesetID )
720- return err
739+ return handleArchivedRepoDelete ( err , "repository ruleset" , fmt . Sprintf ( "%d" , rulesetID ), owner , repoName )
721740}
722741
723742func resourceGithubRepositoryRulesetImport (d * schema.ResourceData , meta any ) ([]* schema.ResourceData , error ) {
0 commit comments