implement gitea_fork

This commit is contained in:
Judd Wilcox 2022-10-01 06:56:10 -05:00
parent e7ad54b0a4
commit 480994bfa9
5 changed files with 145 additions and 6 deletions

View File

@ -3,7 +3,7 @@ GOFMT_FILES?=$$(find . -name '*.go' |grep -v vendor)
GOFMT ?= gofmt -s GOFMT ?= gofmt -s
VERSION = 0.8.0 VERSION = 0.9.0
test: fmt-check test: fmt-check
go test -i $(TEST) || exit 1 go test -i $(TEST) || exit 1

View File

@ -17,7 +17,7 @@ terraform {
required_providers { required_providers {
gitea = { gitea = {
source = "Lerentis/gitea" source = "Lerentis/gitea"
version = "0.8.0" version = "0.9.0"
} }
} }
} }

31
docs/resources/fork.md Normal file
View File

@ -0,0 +1,31 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "gitea_fork Resource - terraform-provider-gitea"
subcategory: ""
description: |-
gitea_fork manages repository fork
---
# gitea_fork (Resource)
`gitea_fork` manages repository fork
<!-- schema generated by tfplugindocs -->
## Schema
### Required
- `owner` (String) The owner or owning organization of the repository to fork
- `repo` (String) The name of the repository to fork
### Optional
- `organization` (String) The organization that owns the forked repo
### Read-Only
- `id` (String) The ID of this resource.

View File

@ -72,12 +72,13 @@ func Provider() *schema.Provider {
}, },
ResourcesMap: map[string]*schema.Resource{ ResourcesMap: map[string]*schema.Resource{
"gitea_org": resourceGiteaOrg(), "gitea_org": resourceGiteaOrg(),
// "gitea_team": resourceGiteaTeam(), // "gitea_team": resourceGiteaTeam(),
// "gitea_repo": resourceGiteaRepo(), // "gitea_repo": resourceGiteaRepo(),
"gitea_user": resourceGiteaUser(), "gitea_user": resourceGiteaUser(),
"gitea_oauth2_app": resourceGiteaOauthApp(), "gitea_oauth2_app": resourceGiteaOauthApp(),
"gitea_repository": resourceGiteaRepository(), "gitea_repository": resourceGiteaRepository(),
"gitea_fork": resourceGiteaFork(),
"gitea_public_key": resourceGiteaPublicKey(), "gitea_public_key": resourceGiteaPublicKey(),
"gitea_team": resourceGiteaTeam(), "gitea_team": resourceGiteaTeam(),
"gitea_git_hook": resourceGiteaGitHook(), "gitea_git_hook": resourceGiteaGitHook(),

View File

@ -0,0 +1,107 @@
package gitea
import (
"fmt"
"strconv"
"code.gitea.io/sdk/gitea"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
const (
forkOwner string = "owner"
forkRepo string = "repo"
forkOrganization string = "organization"
)
func resourceForkCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
var opts gitea.CreateForkOption
var org string
org = d.Get(forkOrganization).(string)
if org != "" {
opts.Organization = &org
}
repo, _, err := client.CreateFork(d.Get(forkOwner).(string),
d.Get(forkRepo).(string),
opts)
if err == nil {
err = setForkResourceData(repo, d)
}
return err
}
func resourceForkRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
if err != nil {
return err
}
repo, resp, err := client.GetRepoByID(id)
if err != nil {
if resp.StatusCode == 404 {
d.SetId("")
return nil
} else {
return err
}
}
err = setForkResourceData(repo, d)
return
}
func resourceForkDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client.DeleteRepo(d.Get(forkOrganization).(string), d.Get(forkRepo).(string))
return
}
func setForkResourceData(repo *gitea.Repository, d *schema.ResourceData) (err error) {
d.SetId(fmt.Sprintf("%d", repo.ID))
return
}
func resourceGiteaFork() *schema.Resource {
return &schema.Resource{
Read: resourceForkRead,
Create: resourceForkCreate,
Delete: resourceForkDelete,
Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
},
Schema: map[string]*schema.Schema{
"owner": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "The owner or owning organization of the repository to fork",
},
"repo": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "The name of the repository to fork",
},
"organization": {
Type: schema.TypeString,
Required: false,
Optional: true,
ForceNew: true,
Description: "The organization that owns the forked repo",
},
},
Description: "`gitea_fork` manages repository fork",
}
}