Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions github/resource_github_branch_default.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,20 @@ package github
import (
"context"
"errors"
"log"
"net/http"

"github.com/google/go-github/v84/github"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func resourceGithubBranchDefault() *schema.Resource {
return &schema.Resource{
Create: resourceGithubBranchDefaultCreate,
Read: resourceGithubBranchDefaultRead,
Delete: resourceGithubBranchDefaultDelete,
Update: resourceGithubBranchDefaultUpdate,
CreateContext: resourceGithubBranchDefaultCreate,
ReadContext: resourceGithubBranchDefaultRead,
DeleteContext: resourceGithubBranchDefaultDelete,
UpdateContext: resourceGithubBranchDefaultUpdate,
Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
},
Expand Down Expand Up @@ -51,47 +52,45 @@ func resourceGithubBranchDefault() *schema.Resource {
}
}

func resourceGithubBranchDefaultCreate(d *schema.ResourceData, meta any) error {
func resourceGithubBranchDefaultCreate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
client := meta.(*Owner).v3client
owner := meta.(*Owner).name
repoName := d.Get("repository").(string)
defaultBranch := d.Get("branch").(string)
rename := d.Get("rename").(bool)

ctx := context.Background()

repository, _, err := client.Repositories.Get(ctx, owner, repoName)
if err != nil {
return err
return diag.FromErr(err)
}

if *repository.DefaultBranch != defaultBranch {
if rename {
if _, _, err := client.Repositories.RenameBranch(ctx, owner, repoName, *repository.DefaultBranch, defaultBranch); err != nil {
return err
return diag.FromErr(err)
}
} else {
repository := &github.Repository{
DefaultBranch: &defaultBranch,
}

if _, _, err := client.Repositories.Edit(ctx, owner, repoName, repository); err != nil {
return err
return diag.FromErr(err)
}
}
}

d.SetId(repoName)

return resourceGithubBranchDefaultRead(d, meta)
return resourceGithubBranchDefaultRead(ctx, d, meta)
}

func resourceGithubBranchDefaultRead(d *schema.ResourceData, meta any) error {
func resourceGithubBranchDefaultRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
client := meta.(*Owner).v3client
owner := meta.(*Owner).name
repoName := d.Id()

ctx := context.WithValue(context.Background(), ctxId, d.Id())
ctx = context.WithValue(ctx, ctxId, d.Id())
if !d.IsNewResource() {
ctx = context.WithValue(ctx, ctxEtag, d.Get("etag").(string))
}
Expand All @@ -104,13 +103,15 @@ func resourceGithubBranchDefaultRead(d *schema.ResourceData, meta any) error {
return nil
}
if ghErr.Response.StatusCode == http.StatusNotFound {
log.Printf("[INFO] Removing repository %s/%s from state because it no longer exists in GitHub",
owner, repoName)
tflog.Info(ctx, "Removing repository from state because it no longer exists in GitHub", map[string]any{
"owner": owner,
"repository": repoName,
})
d.SetId("")
return nil
}
}
return err
return diag.FromErr(err)
}

if repository.DefaultBranch == nil {
Expand All @@ -124,7 +125,7 @@ func resourceGithubBranchDefaultRead(d *schema.ResourceData, meta any) error {
return nil
}

func resourceGithubBranchDefaultDelete(d *schema.ResourceData, meta any) error {
func resourceGithubBranchDefaultDelete(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
client := meta.(*Owner).v3client
owner := meta.(*Owner).name
repoName := d.Id()
Expand All @@ -133,38 +134,37 @@ func resourceGithubBranchDefaultDelete(d *schema.ResourceData, meta any) error {
DefaultBranch: nil,
}

ctx := context.Background()

_, _, err := client.Repositories.Edit(ctx, owner, repoName, repository)
return err
if err != nil {
return diag.FromErr(err)
}
return nil
}

func resourceGithubBranchDefaultUpdate(d *schema.ResourceData, meta any) error {
func resourceGithubBranchDefaultUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
client := meta.(*Owner).v3client
owner := meta.(*Owner).name
repoName := d.Id()
defaultBranch := d.Get("branch").(string)
rename := d.Get("rename").(bool)

ctx := context.Background()

if rename {
repository, _, err := client.Repositories.Get(ctx, owner, repoName)
if err != nil {
return err
return diag.FromErr(err)
}
if _, _, err := client.Repositories.RenameBranch(ctx, owner, repoName, *repository.DefaultBranch, defaultBranch); err != nil {
return err
return diag.FromErr(err)
}
} else {
repository := &github.Repository{
DefaultBranch: &defaultBranch,
}

if _, _, err := client.Repositories.Edit(ctx, owner, repoName, repository); err != nil {
return err
return diag.FromErr(err)
}
}

return resourceGithubBranchDefaultRead(d, meta)
return resourceGithubBranchDefaultRead(ctx, d, meta)
}