feat: move to forgejo sdk

This commit is contained in:
sinavir 2025-03-08 23:34:32 +01:00
parent d9bf396917
commit 9e053a1c5c
No known key found for this signature in database
35 changed files with 316 additions and 714 deletions

View file

@ -1,5 +1,5 @@
TEST?=./gitea
GOFMT_FILES?=$$(find . -name '*.go' |grep -v vendor)
TEST?=./forgejo
GOFMT ?= gofmt -s
ARCH?=$$(uname -m | sed 's/x86_64/amd64/g')
KERNEL?=$$(uname -s | tr '[:upper:]' '[:lower:]')

View file

@ -1,4 +1,4 @@
package gitea
package forgejo
import (
"crypto/tls"
@ -8,11 +8,11 @@ import (
"net/http"
"time"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging"
)
// Config is per-provider, specifies where to connect to gitea
// Config is per-provider, specifies where to connect to forgejo
type Config struct {
Token string
Username string
@ -22,7 +22,7 @@ type Config struct {
CACertFile string
}
// Client returns a *gitea.Client to interact with the configured gitea instance
// Client returns a *forgejo.Client to interact with the configured forgejo instance
func (c *Config) Client() (interface{}, error) {
if c.Token == "" && c.Username == "" {
@ -55,20 +55,20 @@ func (c *Config) Client() (interface{}, error) {
}
if c.BaseURL == "" {
c.BaseURL = "https://gitea.com"
c.BaseURL = "https://forgejo.com"
}
var client *gitea.Client
var client *forgejo.Client
var err error
if c.Token != "" {
client, err = gitea.NewClient(c.BaseURL, gitea.SetToken(c.Token), gitea.SetHTTPClient(httpClient))
client, err = forgejo.NewClient(c.BaseURL, forgejo.SetToken(c.Token), forgejo.SetHTTPClient(httpClient))
if err != nil {
return nil, err
}
}
if c.Username != "" {
client, err = gitea.NewClient(c.BaseURL, gitea.SetBasicAuth(c.Username, c.Password), gitea.SetHTTPClient(httpClient))
client, err = forgejo.NewClient(c.BaseURL, forgejo.SetBasicAuth(c.Username, c.Password), forgejo.SetHTTPClient(httpClient))
if err != nil {
return nil, err
}

View file

@ -1,11 +1,11 @@
package gitea
package forgejo
import (
"fmt"
"log"
"strings"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -51,9 +51,9 @@ func dataSourceGiteaOrg() *schema.Resource {
}
func dataSourceGiteaOrgRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var org *gitea.Organization
var org *forgejo.Organization
var err error
log.Printf("[INFO] Reading Gitea Org")

View file

@ -1,10 +1,10 @@
package gitea
package forgejo
import (
"fmt"
"strings"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -108,7 +108,7 @@ func dataSourceGiteaRepo() *schema.Resource {
}
func dataSourceGiteaRepoRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
usernameData, usernameOk := d.GetOk("username")
if !usernameOk {

View file

@ -0,0 +1 @@
package forgejo

View file

@ -0,0 +1 @@
package forgejo

View file

@ -0,0 +1 @@
package forgejo

View file

@ -1,11 +1,11 @@
package gitea
package forgejo
import (
"fmt"
"log"
"strings"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -55,9 +55,9 @@ func dataSourceGiteaUser() *schema.Resource {
}
func dataSourceGiteaUserRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var user *gitea.User
var user *forgejo.User
var err error
log.Printf("[INFO] Reading Gitea user")

View file

@ -1,4 +1,4 @@
package gitea
package forgejo
import (
"fmt"
@ -18,13 +18,13 @@ func TestAccDataSourceGiteaUser_basic(t *testing.T) {
{
Config: testAccDataGiteaUserConfigUsername(),
Check: resource.ComposeTestCheckFunc(
testAccDataSourceGiteaUser("data.gitea_user.foo"),
testAccDataSourceGiteaUser("data.forgejo_user.foo"),
),
},
{
Config: testAccDataGiteaUserConfigUsername(),
Check: resource.ComposeTestCheckFunc(
testAccDataSourceGiteaUser("data.gitea_user.self"),
testAccDataSourceGiteaUser("data.forgejo_user.self"),
),
},
},
@ -53,10 +53,10 @@ func testAccDataSourceGiteaUser(src string) resource.TestCheckFunc {
func testAccDataGiteaUserConfigUsername() string {
return fmt.Sprintf(`
data "gitea_user" "foo" {
data "forgejo_user" "foo" {
username = "test01"
}
data "gitea_user" "self" {
data "forgejo_user" "self" {
}
`)
}

View file

@ -0,0 +1 @@
package forgejo

View file

@ -1,4 +1,4 @@
package gitea
package forgejo
import (
"fmt"
@ -62,34 +62,32 @@ func Provider() *schema.Provider {
},
DataSourcesMap: map[string]*schema.Resource{
"gitea_user": dataSourceGiteaUser(),
"gitea_org": dataSourceGiteaOrg(),
// "gitea_team": dataSourceGiteaTeam(),
// "gitea_teams": dataSourceGiteaTeams(),
// "gitea_team_members": dataSourceGiteaTeamMembers(),
"gitea_repo": dataSourceGiteaRepo(),
// "gitea_repos": dataSourceGiteaRepos(),
"forgejo_user": dataSourceGiteaUser(),
"forgejo_org": dataSourceGiteaOrg(),
// "forgejo_team": dataSourceGiteaTeam(),
// "forgejo_teams": dataSourceGiteaTeams(),
// "forgejo_team_members": dataSourceGiteaTeamMembers(),
"forgejo_repo": dataSourceGiteaRepo(),
// "forgejo_repos": dataSourceGiteaRepos(),
},
ResourcesMap: map[string]*schema.Resource{
"gitea_org": resourceGiteaOrg(),
// "gitea_team": resourceGiteaTeam(),
// "gitea_repo": resourceGiteaRepo(),
"gitea_user": resourceGiteaUser(),
"gitea_oauth2_app": resourceGiteaOauthApp(),
"gitea_repository": resourceGiteaRepository(),
"gitea_fork": resourceGiteaFork(),
"gitea_public_key": resourceGiteaPublicKey(),
"gitea_team": resourceGiteaTeam(),
"gitea_team_membership": resourceGiteaTeamMembership(),
"gitea_team_members": resourceGiteaTeamMembers(),
"gitea_git_hook": resourceGiteaGitHook(),
"gitea_token": resourceGiteaToken(),
"gitea_repository_key": resourceGiteaRepositoryKey(),
"gitea_repository_webhook": resourceGiteaRepositoryWebhook(),
"gitea_repository_branch_protection": resourceGiteaRepositoryBranchProtection(),
"gitea_repository_actions_variable": resourceGiteaRepositoryActionsVariable(),
"gitea_repository_actions_secret": resourceGiteaRepositoryActionsSecret(),
"forgejo_org": resourceGiteaOrg(),
// "forgejo_team": resourceGiteaTeam(),
// "forgejo_repo": resourceGiteaRepo(),
"forgejo_user": resourceGiteaUser(),
"forgejo_oauth2_app": resourceGiteaOauthApp(),
"forgejo_repository": resourceGiteaRepository(),
"forgejo_fork": resourceGiteaFork(),
"forgejo_public_key": resourceGiteaPublicKey(),
"forgejo_team": resourceGiteaTeam(),
"forgejo_team_membership": resourceGiteaTeamMembership(),
"forgejo_team_members": resourceGiteaTeamMembers(),
"forgejo_git_hook": resourceGiteaGitHook(),
"forgejo_token": resourceGiteaToken(),
"forgejo_repository_key": resourceGiteaRepositoryKey(),
"forgejo_repository_webhook": resourceGiteaRepositoryWebhook(),
"forgejo_repository_branch_protection": resourceGiteaRepositoryBranchProtection(),
},
ConfigureFunc: providerConfigure,
@ -125,10 +123,10 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
func validateAPIURLVersion(value interface{}, key string) (ws []string, es []error) {
v := value.(string)
if strings.HasSuffix(v, "/api/v1") || strings.HasSuffix(v, "/api/v1/") {
es = append(es, fmt.Errorf("terraform-gitea-provider base URL format is incorrect; Please leave out API Path %s", v))
es = append(es, fmt.Errorf("terraform-forgejo-provider base URL format is incorrect; Please leave out API Path %s", v))
}
if strings.Contains(v, "localhost") && strings.Contains(v, ".") {
es = append(es, fmt.Errorf("terraform-gitea-provider base URL violates RFC 2606; Please do not define a subdomain for localhost!"))
es = append(es, fmt.Errorf("terraform-forgejo-provider base URL violates RFC 2606; Please do not define a subdomain for localhost!"))
}
return
}

View file

@ -1,4 +1,4 @@
package gitea
package forgejo
import (
"os"
@ -13,7 +13,7 @@ var testAccProvider *schema.Provider
func init() {
testAccProvider = Provider()
testAccProviders = map[string]*schema.Provider{
"gitea": testAccProvider,
"forgejo": testAccProvider,
}
}

View file

@ -1,10 +1,10 @@
package gitea
package forgejo
import (
"fmt"
"strconv"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -15,9 +15,9 @@ const (
)
func resourceForkCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var opts gitea.CreateForkOption
var opts forgejo.CreateForkOption
var org string
org = d.Get(forkOrganization).(string)
if org != "" {
@ -34,10 +34,10 @@ func resourceForkCreate(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceForkRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
var resp *forgejo.Response
if err != nil {
return err
@ -60,7 +60,7 @@ func resourceForkRead(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceForkDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
@ -69,7 +69,7 @@ func resourceForkDelete(d *schema.ResourceData, meta interface{}) (err error) {
}
repo, _, err := client.GetRepoByID(id)
var resp *gitea.Response
var resp *forgejo.Response
resp, err = client.DeleteRepo(repo.Owner.UserName, repo.Name)
@ -84,7 +84,7 @@ func resourceForkDelete(d *schema.ResourceData, meta interface{}) (err error) {
return
}
func setForkResourceData(repo *gitea.Repository, d *schema.ResourceData) (err error) {
func setForkResourceData(repo *forgejo.Repository, d *schema.ResourceData) (err error) {
d.SetId(fmt.Sprintf("%d", repo.ID))
@ -120,7 +120,7 @@ func resourceGiteaFork() *schema.Resource {
Description: "The organization that owns the forked repo",
},
},
Description: "`gitea_fork` manages repository fork to the current user or an organisation\n" +
Description: "`forgejo_fork` manages repository fork to the current user or an organisation\n" +
"Forking a repository to a dedicated user is currently unsupported\n" +
"Creating a fork using this resource without an organisation will create the fork in the executors name",
}

View file

@ -1,9 +1,9 @@
package gitea
package forgejo
import (
"fmt"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -15,7 +15,7 @@ const (
)
func resourceGitHookRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(GitHookUser).(string)
repo := d.Get(GitHookRepo).(string)
@ -33,13 +33,13 @@ func resourceGitHookRead(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceGitHookUpdate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(GitHookUser).(string)
repo := d.Get(GitHookRepo).(string)
name := d.Get(GitHookName).(string)
opts := gitea.EditGitHookOption{
opts := forgejo.EditGitHookOption{
Content: d.Get(GitHookContent).(string),
}
@ -62,7 +62,7 @@ func resourceGitHookUpdate(d *schema.ResourceData, meta interface{}) (err error)
}
func resourceGitHookDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(GitHookUser).(string)
repo := d.Get(GitHookRepo).(string)
@ -73,7 +73,7 @@ func resourceGitHookDelete(d *schema.ResourceData, meta interface{}) (err error)
return
}
func setGitHookResourceData(user string, repo string, gitHook *gitea.GitHook, d *schema.ResourceData) (err error) {
func setGitHookResourceData(user string, repo string, gitHook *forgejo.GitHook, d *schema.ResourceData) (err error) {
d.SetId(fmt.Sprintf("%s/%s/%s", user, repo, gitHook.Name))
d.Set(GitHookUser, user)
d.Set(GitHookRepo, repo)
@ -110,11 +110,11 @@ func resourceGiteaGitHook() *schema.Resource {
Description: "Content of the git hook",
},
},
Description: "`gitea_git_hook` manages git hooks on a repository.\n" +
Description: "`forgejo_git_hook` manages git hooks on a repository.\n" +
"import is currently not supported\n\n" +
"WARNING: using this resource requires to enable server side hooks" +
"which are known to cause [security issues](https://github.com/go-gitea/gitea/pull/13058)!\n\n" +
"which are known to cause [security issues](https://github.com/go-forgejo/forgejo/pull/13058)!\n\n" +
"if you want to procede, you need to enable server side hooks as stated" +
" [here](https://docs.gitea.io/en-us/config-cheat-sheet/#security-security)",
" [here](https://docs.forgejo.io/en-us/config-cheat-sheet/#security-security)",
}
}

View file

@ -1,9 +1,9 @@
package gitea
package forgejo
import (
"fmt"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -56,7 +56,7 @@ func resourceGiteaOauthApp() *schema.Resource {
Description: "Oauth2 Application client secret",
},
},
Description: "Handling [gitea oauth application](https://docs.gitea.io/en-us/oauth2-provider/) resources",
Description: "Handling [forgejo oauth application](https://docs.forgejo.io/en-us/oauth2-provider/) resources",
}
}
@ -80,7 +80,7 @@ func CollapseStringList(strlist []string) []interface{} {
}
func resourceOauth2AppUpcreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
redirectURIsSchema, redirectURIsSchemaOk := d.Get(oauth2KeyRedirectURIs).(*schema.Set)
@ -102,13 +102,13 @@ func resourceOauth2AppUpcreate(d *schema.ResourceData, meta interface{}) (err er
return fmt.Errorf("attribute %s must be set and must be a bool", oauth2KeyConfidentialClient)
}
opts := gitea.CreateOauth2Option{
opts := forgejo.CreateOauth2Option{
Name: name,
ConfidentialClient: confidentialClient,
RedirectURIs: redirectURIs,
}
var oauth2 *gitea.Oauth2
var oauth2 *forgejo.Oauth2
if d.IsNewResource() {
oauth2, _, err = client.CreateOauth2(opts)
@ -131,12 +131,12 @@ func resourceOauth2AppUpcreate(d *schema.ResourceData, meta interface{}) (err er
return
}
func searchOauth2AppByClientId(c *gitea.Client, id string) (res *gitea.Oauth2, err error) {
func searchOauth2AppByClientId(c *forgejo.Client, id string) (res *forgejo.Oauth2, err error) {
page := 1
for {
apps, _, err := c.ListOauth2(gitea.ListOauth2Option{
ListOptions: gitea.ListOptions{
apps, _, err := c.ListOauth2(forgejo.ListOauth2Option{
ListOptions: forgejo.ListOptions{
Page: page,
PageSize: 50,
},
@ -159,7 +159,7 @@ func searchOauth2AppByClientId(c *gitea.Client, id string) (res *gitea.Oauth2, e
}
func resourceOauth2AppRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
app, err := searchOauth2AppByClientId(client, d.Id())
@ -173,7 +173,7 @@ func resourceOauth2AppRead(d *schema.ResourceData, meta interface{}) (err error)
}
func resourceOauth2AppDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
app, err := searchOauth2AppByClientId(client, d.Id())
@ -186,7 +186,7 @@ func resourceOauth2AppDelete(d *schema.ResourceData, meta interface{}) (err erro
return
}
func setOAuth2ResourceData(app *gitea.Oauth2, d *schema.ResourceData) (err error) {
func setOAuth2ResourceData(app *forgejo.Oauth2, d *schema.ResourceData) (err error) {
d.SetId(app.ClientID)
for k, v := range map[string]interface{}{

View file

@ -1,10 +1,10 @@
package gitea
package forgejo
import (
"fmt"
"strconv"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -20,13 +20,13 @@ const (
)
// might come in handy if we want to stick to numeric IDs
func searchOrgByClientId(c *gitea.Client, id int64) (res *gitea.Organization, err error) {
func searchOrgByClientId(c *forgejo.Client, id int64) (res *forgejo.Organization, err error) {
page := 1
for {
orgs, _, err := c.AdminListOrgs(gitea.AdminListOrgsOptions{
ListOptions: gitea.ListOptions{
orgs, _, err := c.AdminListOrgs(forgejo.AdminListOrgsOptions{
ListOptions: forgejo.ListOptions{
Page: page,
PageSize: 50,
},
@ -49,12 +49,12 @@ func searchOrgByClientId(c *gitea.Client, id int64) (res *gitea.Organization, er
}
}
func getAllOrgRepos(c *gitea.Client, orgName string) (repos []string, err error) {
func getAllOrgRepos(c *forgejo.Client, orgName string) (repos []string, err error) {
page := 1
for {
repoBuffer, _, err := c.ListOrgRepos(orgName, gitea.ListOrgReposOptions{
ListOptions: gitea.ListOptions{
repoBuffer, _, err := c.ListOrgRepos(orgName, forgejo.ListOrgReposOptions{
ListOptions: forgejo.ListOptions{
Page: page,
PageSize: 50,
},
@ -76,9 +76,9 @@ func getAllOrgRepos(c *gitea.Client, orgName string) (repos []string, err error)
}
func resourceOrgRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var org *gitea.Organization
var org *forgejo.Organization
id, err := strconv.ParseInt(d.Id(), 10, 64)
@ -96,15 +96,15 @@ func resourceOrgRead(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceOrgCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
opts := gitea.CreateOrgOption{
opts := forgejo.CreateOrgOption{
Name: d.Get(orgName).(string),
FullName: d.Get(orgFullName).(string),
Description: d.Get(orgDescription).(string),
Website: d.Get(orgWebsite).(string),
Location: d.Get(orgLocation).(string),
Visibility: gitea.VisibleType(d.Get(orgVisibility).(string)),
Visibility: forgejo.VisibleType(d.Get(orgVisibility).(string)),
RepoAdminChangeTeamAccess: d.Get(RepoAdminChangeTeamAccess).(bool),
}
@ -120,10 +120,10 @@ func resourceOrgCreate(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceOrgUpdate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var org *gitea.Organization
var resp *gitea.Response
var org *forgejo.Organization
var resp *forgejo.Response
org, resp, err = client.GetOrg(d.Get(orgName).(string))
@ -135,12 +135,12 @@ func resourceOrgUpdate(d *schema.ResourceData, meta interface{}) (err error) {
}
}
opts := gitea.EditOrgOption{
opts := forgejo.EditOrgOption{
FullName: d.Get(orgFullName).(string),
Description: d.Get(orgDescription).(string),
Website: d.Get(orgWebsite).(string),
Location: d.Get(orgLocation).(string),
Visibility: gitea.VisibleType(d.Get(orgVisibility).(string)),
Visibility: forgejo.VisibleType(d.Get(orgVisibility).(string)),
}
client.EditOrg(d.Get(orgName).(string), opts)
@ -154,9 +154,9 @@ func resourceOrgUpdate(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceOrgDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var resp *gitea.Response
var resp *forgejo.Response
resp, err = client.DeleteOrg(d.Get(orgName).(string))
@ -171,7 +171,7 @@ func resourceOrgDelete(d *schema.ResourceData, meta interface{}) (err error) {
return
}
func setOrgResourceData(org *gitea.Organization, d *schema.ResourceData, repos *[]string) (err error) {
func setOrgResourceData(org *forgejo.Organization, d *schema.ResourceData, repos *[]string) (err error) {
d.SetId(fmt.Sprintf("%d", org.ID))
d.Set("name", org.UserName)
d.Set("full_name", org.FullName)
@ -250,7 +250,7 @@ func resourceGiteaOrg() *schema.Resource {
Elem: &schema.Schema{Type: schema.TypeString},
},
},
Description: "`gitea_org` manages a gitea organisation.\n\n" +
"Organisations are a way to group repositories and abstract permission management in a gitea instance.",
Description: "`forgejo_org` manages a forgejo organisation.\n\n" +
"Organisations are a way to group repositories and abstract permission management in a forgejo instance.",
}
}

View file

@ -1,10 +1,10 @@
package gitea
package forgejo
import (
"fmt"
"strconv"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -20,12 +20,12 @@ const (
)
func resourcePublicKeyRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
var pubKey *gitea.PublicKey
var resp *forgejo.Response
var pubKey *forgejo.PublicKey
pubKey, resp, err = client.GetPublicKey(id)
@ -44,11 +44,11 @@ func resourcePublicKeyRead(d *schema.ResourceData, meta interface{}) (err error)
}
func resourcePublicKeyCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var pubKey *gitea.PublicKey
var pubKey *forgejo.PublicKey
opts := gitea.CreateKeyOption{
opts := forgejo.CreateKeyOption{
Title: d.Get(PublicKeyTitle).(string),
Key: d.Get(PublicKey).(string),
ReadOnly: d.Get(PublicKeyReadOnlyFlag).(bool),
@ -69,11 +69,11 @@ func resourcePublicKeyUpdate(d *schema.ResourceData, meta interface{}) (err erro
}
func resourcePublicKeyDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
var resp *forgejo.Response
resp, err = client.AdminDeleteUserPublicKey(d.Get(PublicKeyUser).(string), int(id))
@ -88,7 +88,7 @@ func resourcePublicKeyDelete(d *schema.ResourceData, meta interface{}) (err erro
return
}
func setPublicKeyResourceData(pubKey *gitea.PublicKey, d *schema.ResourceData) (err error) {
func setPublicKeyResourceData(pubKey *forgejo.PublicKey, d *schema.ResourceData) (err error) {
d.SetId(fmt.Sprintf("%d", pubKey.ID))
d.Set(PublicKeyUser, d.Get(PublicKeyUser).(string))
d.Set(PublicKey, d.Get(PublicKey).(string))
@ -150,6 +150,6 @@ func resourceGiteaPublicKey() *schema.Resource {
Computed: true,
},
},
Description: "`gitea_public_key` manages ssh key that are associated with users.",
Description: "`forgejo_public_key` manages ssh key that are associated with users.",
}
}

View file

@ -1,4 +1,4 @@
package gitea
package forgejo
import (
"context"
@ -7,7 +7,7 @@ import (
"strconv"
"strings"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -52,12 +52,12 @@ const (
migrationLFSEndpoint string = "migration_lfs_endpoint"
)
func searchUserByName(c *gitea.Client, name string) (res *gitea.User, err error) {
func searchUserByName(c *forgejo.Client, name string) (res *forgejo.User, err error) {
page := 1
for {
users, _, err := c.AdminListUsers(gitea.AdminListUsersOptions{
ListOptions: gitea.ListOptions{
users, _, err := c.AdminListUsers(forgejo.AdminListUsersOptions{
ListOptions: forgejo.ListOptions{
Page: page,
PageSize: 50,
},
@ -81,10 +81,10 @@ func searchUserByName(c *gitea.Client, name string) (res *gitea.User, err error)
}
func resourceRepoRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
var resp *forgejo.Response
if err != nil {
return err
@ -107,10 +107,10 @@ func resourceRepoRead(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceRepoCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var repo *gitea.Repository
var resp *gitea.Response
var repo *forgejo.Repository
var resp *forgejo.Response
var orgRepo, hasAdmin bool
_, resp, err = client.GetOrg(d.Get(repoOwner).(string))
@ -119,7 +119,7 @@ func resourceRepoCreate(d *schema.ResourceData, meta interface{}) (err error) {
_, err := searchUserByName(client, d.Get(repoOwner).(string))
if err != nil {
if strings.Contains(err.Error(), "could not be found") {
return errors.New(fmt.Sprintf("Creation of repository cound not proceed as owner %s is not present in gitea", d.Get(repoOwner).(string)))
return errors.New(fmt.Sprintf("Creation of repository cound not proceed as owner %s is not present in forgejo", d.Get(repoOwner).(string)))
}
tflog.Warn(context.Background(), "Error query for users. Assuming missing permissions and proceding with user permissions")
hasAdmin = false
@ -140,11 +140,11 @@ func resourceRepoCreate(d *schema.ResourceData, meta interface{}) (err error) {
if cloneAddr != "" {
opts := gitea.MigrateRepoOption{
opts := forgejo.MigrateRepoOption{
RepoName: d.Get(repoName).(string),
RepoOwner: d.Get(repoOwner).(string),
CloneAddr: cloneAddr,
Service: gitea.GitServiceType(d.Get(migrationService).(string)),
Service: forgejo.GitServiceType(d.Get(migrationService).(string)),
Mirror: d.Get(repoMirror).(bool),
Private: d.Get(repoPrivateFlag).(bool),
Description: d.Get(repoDescription).(string),
@ -172,7 +172,7 @@ func resourceRepoCreate(d *schema.ResourceData, meta interface{}) (err error) {
repo, _, err = client.MigrateRepo(opts)
} else {
opts := gitea.CreateRepoOption{
opts := forgejo.CreateRepoOption{
Name: d.Get(repoName).(string),
Description: d.Get(repoDescription).(string),
Private: d.Get(repoPrivateFlag).(bool),
@ -207,9 +207,9 @@ func resourceRepoCreate(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceRepoUpdate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var repo *gitea.Repository
var repo *forgejo.Repository
var name string = d.Get(repoName).(string)
var description string = d.Get(repoDescription).(string)
@ -229,7 +229,7 @@ func resourceRepoUpdate(d *schema.ResourceData, meta interface{}) (err error) {
var allowManualMerge bool = d.Get(repoAllowManualMerge).(bool)
var autodetectManualMerge bool = d.Get(repoAutodetectManualMerge).(bool)
opts := gitea.EditRepoOption{
opts := forgejo.EditRepoOption{
Name: &name,
Description: &description,
Website: &website,
@ -269,14 +269,14 @@ func resourceRepoUpdate(d *schema.ResourceData, meta interface{}) (err error) {
}
func respurceRepoDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
client.DeleteRepo(d.Get(repoOwner).(string), d.Get(repoName).(string))
return
}
func setRepoResourceData(repo *gitea.Repository, d *schema.ResourceData) (err error) {
func setRepoResourceData(repo *forgejo.Repository, d *schema.ResourceData) (err error) {
d.SetId(fmt.Sprintf("%d", repo.ID))
d.Set("username", repo.Owner.UserName)
d.Set("name", repo.Name)
@ -345,7 +345,7 @@ func resourceGiteaRepository() *schema.Resource {
Optional: true,
Default: "Default",
Description: "The Issue Label configuration to be used in this repository.\n" +
"Need to exist in the gitea instance",
"Need to exist in the forgejo instance",
},
"gitignores": {
Type: schema.TypeString,
@ -354,7 +354,7 @@ func resourceGiteaRepository() *schema.Resource {
Default: "",
Description: "A specific gitignore that should be commited to the repository" +
"on creation if `auto_init` is set to `true`\n" +
"Need to exist in the gitea instance",
"Need to exist in the forgejo instance",
},
"license": {
Type: schema.TypeString,
@ -362,7 +362,7 @@ func resourceGiteaRepository() *schema.Resource {
Optional: true,
Default: "",
Description: "The license under which the source code of this repository should be.\n" +
"Need to exist in the gitea instance",
"Need to exist in the forgejo instance",
},
"readme": {
Type: schema.TypeString,
@ -518,7 +518,7 @@ func resourceGiteaRepository() *schema.Resource {
Required: false,
ForceNew: true,
Optional: true,
Description: "git/github/gitlab/gitea/gogs",
Description: "git/github/gitlab/forgejo/gogs",
},
"migration_service_auth_username": {
Type: schema.TypeString,
@ -589,7 +589,7 @@ func resourceGiteaRepository() *schema.Resource {
Computed: true,
},
},
Description: "`gitea_repository` manages a gitea repository.\n\n" +
Description: "`forgejo_repository` manages a forgejo repository.\n\n" +
"Per default this repository will be initializiled with the provided configuration (gitignore, License etc.).\n" +
"If the `username` property is set to a organisation name, the provider will try to look if this organisation exists " +
"and create the repository under the organisation scope.\n\n" +

View file

@ -1,9 +1,9 @@
package gitea
package forgejo
import (
"log"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -28,7 +28,7 @@ const (
repoBPApprovalWhitelistUsers string = "approval_whitelist_users"
repoBPApprovalWhitelistTeams string = "approval_whitelist_teams"
repoBPDismissStaleApprovals string = "dismiss_stale_approvals"
// not implemented in go-gitea-sdk
// not implemented in go-forgejo-sdk
// repoBPIgnoreStaleApprovals string = "ignore_stale_approvals"
repoBPEnableStatusCheck string = "enable_status_check"
@ -47,7 +47,7 @@ const (
)
func resourceRepositoryBranchProtectionRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(repoBPUsername).(string)
repo := d.Get(repoBPName).(string)
@ -96,7 +96,7 @@ func generateWhitelist(d *schema.ResourceData, listname string) (enabled bool, u
}
func resourceRepositoryBranchProtectionCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(repoBPUsername).(string)
repo := d.Get(repoBPName).(string)
@ -117,8 +117,8 @@ func resourceRepositoryBranchProtectionCreate(d *schema.ResourceData, meta inter
enableStatusCheck = true
}
bpOption := gitea.CreateBranchProtectionOption{
// BranchName is deprecated in gitea, but still required in go-gitea-sdk, therefore using RuleName
bpOption := forgejo.CreateBranchProtectionOption{
// BranchName is deprecated in forgejo, but still required in go-forgejo-sdk, therefore using RuleName
BranchName: d.Get(repoBPRuleName).(string),
RuleName: d.Get(repoBPRuleName).(string),
EnablePush: d.Get(repoBPEnablePush).(bool),
@ -155,7 +155,7 @@ func resourceRepositoryBranchProtectionCreate(d *schema.ResourceData, meta inter
}
func resourceRepositoryBranchProtectionUpdate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(repoBPUsername).(string)
repo := d.Get(repoBPName).(string)
@ -189,7 +189,7 @@ func resourceRepositoryBranchProtectionUpdate(d *schema.ResourceData, meta inter
protectedFilePatterns := d.Get(repoBPProtectedFilePatterns).(string)
unprotectedFilePatterns := d.Get(repoBPUnprotectedFilePatterns).(string)
bpOption := gitea.EditBranchProtectionOption{
bpOption := forgejo.EditBranchProtectionOption{
EnablePush: &enablePush,
EnablePushWhitelist: &enablePushWhitelist,
PushWhitelistUsernames: pushWhitelistUsernames,
@ -224,7 +224,7 @@ func resourceRepositoryBranchProtectionUpdate(d *schema.ResourceData, meta inter
}
func resourceRepositoryBranchProtectionDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(repoBPUsername).(string)
repo := d.Get(repoBPName).(string)
@ -237,7 +237,7 @@ func resourceRepositoryBranchProtectionDelete(d *schema.ResourceData, meta inter
return err
}
func setRepositoryBranchProtectionData(bp *gitea.BranchProtection, user string, repo string, d *schema.ResourceData) (err error) {
func setRepositoryBranchProtectionData(bp *forgejo.BranchProtection, user string, repo string, d *schema.ResourceData) (err error) {
d.SetId(bp.RuleName)
d.Set(repoBPUsername, user)
d.Set(repoBPName, repo)
@ -401,7 +401,7 @@ func resourceGiteaRepositoryBranchProtection() *schema.Resource {
are pushed to the branch, old approvals will be dismissed.`,
},
//
// not implemented in go-gitea-sdk
// not implemented in go-forgejo-sdk
//
// "ignore_stale_approvals": {
// Type: schema.TypeBool,

View file

@ -1,11 +1,11 @@
package gitea
package forgejo
import (
"fmt"
"strconv"
"strings"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -34,7 +34,7 @@ func resourceRepoKeyIdParts(d *schema.ResourceData) (bool, int64, int64, error)
}
func resourceRepoKeyRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
hasId, repoId, keyId, err := resourceRepoKeyIdParts(d)
if err != nil {
@ -71,7 +71,7 @@ func resourceRepoKeyRead(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceRepoKeyCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
repo, _, err := client.GetRepoByID(int64(d.Get(deployKeyRepoId).(int)))
@ -79,7 +79,7 @@ func resourceRepoKeyCreate(d *schema.ResourceData, meta interface{}) (err error)
return err
}
dk, _, err := client.CreateDeployKey(repo.Owner.UserName, repo.Name, gitea.CreateKeyOption{
dk, _, err := client.CreateDeployKey(repo.Owner.UserName, repo.Name, forgejo.CreateKeyOption{
Title: d.Get(deployKeyName).(string),
ReadOnly: d.Get(deployKeyReadOnly).(bool),
Key: d.Get(deployKeyKey).(string),
@ -94,7 +94,7 @@ func resourceRepoKeyCreate(d *schema.ResourceData, meta interface{}) (err error)
}
func respurceRepoKeyDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
hasId, repoId, keyId, err := resourceRepoKeyIdParts(d)
if err != nil {
@ -118,7 +118,7 @@ func respurceRepoKeyDelete(d *schema.ResourceData, meta interface{}) (err error)
return nil
}
func setRepoKeyResourceData(dk *gitea.DeployKey, repoId int64, d *schema.ResourceData) (err error) {
func setRepoKeyResourceData(dk *forgejo.DeployKey, repoId int64, d *schema.ResourceData) (err error) {
d.SetId(fmt.Sprintf("%d/%d", repoId, dk.ID))
d.Set(deployKeyRepoId, repoId)
d.Set(deployKeyReadOnly, dk.ReadOnly)
@ -163,7 +163,7 @@ func resourceGiteaRepositoryKey() *schema.Resource {
Description: "Name of the deploy key",
},
},
Description: "`gitea_repository_key` manages a deploy key for a single gitea_repository.\n\n" +
Description: "`forgejo_repository_key` manages a deploy key for a single forgejo_repository.\n\n" +
"Every key needs a unique name and unique key, i.e. no key can be added twice to the same repo",
}
}

View file

@ -1,9 +1,9 @@
package gitea
package forgejo
import (
"strconv"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -22,7 +22,7 @@ const (
)
func resourceRepositoryWebhookRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
if err != nil {
@ -48,7 +48,7 @@ func resourceRepositoryWebhookRead(d *schema.ResourceData, meta interface{}) (er
}
func resourceRepositoryWebhookCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(repoWebhookUsername).(string)
repo := d.Get(repoWebhookName).(string)
@ -68,8 +68,8 @@ func resourceRepositoryWebhookCreate(d *schema.ResourceData, meta interface{}) (
events = append(events, element.(string))
}
hookOption := gitea.CreateHookOption{
Type: gitea.HookType(d.Get(repoWebhookType).(string)),
hookOption := forgejo.CreateHookOption{
Type: forgejo.HookType(d.Get(repoWebhookType).(string)),
Config: config,
Events: events,
BranchFilter: d.Get(repoWebhookBranchFilter).(string),
@ -88,7 +88,7 @@ func resourceRepositoryWebhookCreate(d *schema.ResourceData, meta interface{}) (
}
func resourceRepositoryWebhookUpdate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(repoWebhookUsername).(string)
repo := d.Get(repoWebhookName).(string)
@ -114,7 +114,7 @@ func resourceRepositoryWebhookUpdate(d *schema.ResourceData, meta interface{}) (
active := d.Get(repoWebhookActive).(bool)
hookOption := gitea.EditHookOption{
hookOption := forgejo.EditHookOption{
Config: config,
Events: events,
BranchFilter: d.Get(repoWebhookBranchFilter).(string),
@ -138,7 +138,7 @@ func resourceRepositoryWebhookUpdate(d *schema.ResourceData, meta interface{}) (
}
func resourceRepositoryWebhookDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
user := d.Get(repoWebhookUsername).(string)
repo := d.Get(repoWebhookName).(string)
@ -155,7 +155,7 @@ func resourceRepositoryWebhookDelete(d *schema.ResourceData, meta interface{}) (
return
}
func setRepositoryWebhookData(hook *gitea.Hook, d *schema.ResourceData) (err error) {
func setRepositoryWebhookData(hook *forgejo.Hook, d *schema.ResourceData) (err error) {
d.SetId(strconv.FormatInt(hook.ID, 10))
d.Set(repoWebhookUsername, d.Get(repoWebhookUsername).(string))
@ -204,7 +204,7 @@ func resourceGiteaRepositoryWebhook() *schema.Resource {
"type": {
Type: schema.TypeString,
Required: true,
Description: "Webhook type, e.g. `gitea`",
Description: "Webhook type, e.g. `forgejo`",
},
"url": {
Type: schema.TypeString,

View file

@ -1,4 +1,4 @@
package gitea
package forgejo
import (
"errors"
@ -6,7 +6,7 @@ import (
"strconv"
"strings"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -22,12 +22,12 @@ const (
)
func resourceTeamRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
var team *gitea.Team
var resp *forgejo.Response
var team *forgejo.Team
team, resp, err = client.GetTeam(id)
@ -46,42 +46,42 @@ func resourceTeamRead(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceTeamCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var team *gitea.Team
var units []gitea.RepoUnitType
var team *forgejo.Team
var units []forgejo.RepoUnitType
if strings.Contains(d.Get(TeamUnits).(string), "repo.code") {
units = append(units, gitea.RepoUnitCode)
units = append(units, forgejo.RepoUnitCode)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.issues") {
units = append(units, gitea.RepoUnitIssues)
units = append(units, forgejo.RepoUnitIssues)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.ext_issues") {
units = append(units, gitea.RepoUnitExtIssues)
units = append(units, forgejo.RepoUnitExtIssues)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.wiki") {
units = append(units, gitea.RepoUnitWiki)
units = append(units, forgejo.RepoUnitWiki)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.pulls") {
units = append(units, gitea.RepoUnitPulls)
units = append(units, forgejo.RepoUnitPulls)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.releases") {
units = append(units, gitea.RepoUnitReleases)
units = append(units, forgejo.RepoUnitReleases)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.ext_wiki") {
units = append(units, gitea.RepoUnitExtWiki)
units = append(units, forgejo.RepoUnitExtWiki)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.projects") {
units = append(units, gitea.RepoUnitProjects)
units = append(units, forgejo.RepoUnitProjects)
}
includeAllRepos := d.Get(TeamIncludeAllReposFlag).(bool)
opts := gitea.CreateTeamOption{
opts := forgejo.CreateTeamOption{
Name: d.Get(TeamName).(string),
Description: d.Get(TeamDescription).(string),
Permission: gitea.AccessMode(d.Get(TeamPermissions).(string)),
Permission: forgejo.AccessMode(d.Get(TeamPermissions).(string)),
CanCreateOrgRepo: d.Get(TeamCreateRepoFlag).(bool),
IncludesAllRepositories: includeAllRepos,
Units: units,
@ -106,12 +106,12 @@ func resourceTeamCreate(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceTeamUpdate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
var team *gitea.Team
var resp *forgejo.Response
var team *forgejo.Team
team, resp, err = client.GetTeam(id)
@ -127,37 +127,37 @@ func resourceTeamUpdate(d *schema.ResourceData, meta interface{}) (err error) {
canCreateRepo := d.Get(TeamCreateRepoFlag).(bool)
includeAllRepos := d.Get(TeamIncludeAllReposFlag).(bool)
var units []gitea.RepoUnitType
var units []forgejo.RepoUnitType
if strings.Contains(d.Get(TeamUnits).(string), "repo.code") {
units = append(units, gitea.RepoUnitCode)
units = append(units, forgejo.RepoUnitCode)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.issues") {
units = append(units, gitea.RepoUnitIssues)
units = append(units, forgejo.RepoUnitIssues)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.ext_issues") {
units = append(units, gitea.RepoUnitExtIssues)
units = append(units, forgejo.RepoUnitExtIssues)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.wiki") {
units = append(units, gitea.RepoUnitWiki)
units = append(units, forgejo.RepoUnitWiki)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.pulls") {
units = append(units, gitea.RepoUnitPulls)
units = append(units, forgejo.RepoUnitPulls)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.releases") {
units = append(units, gitea.RepoUnitReleases)
units = append(units, forgejo.RepoUnitReleases)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.ext_wiki") {
units = append(units, gitea.RepoUnitExtWiki)
units = append(units, forgejo.RepoUnitExtWiki)
}
if strings.Contains(d.Get(TeamUnits).(string), "repo.projects") {
units = append(units, gitea.RepoUnitProjects)
units = append(units, forgejo.RepoUnitProjects)
}
opts := gitea.EditTeamOption{
opts := forgejo.EditTeamOption{
Name: d.Get(TeamName).(string),
Description: &description,
Permission: gitea.AccessMode(d.Get(TeamPermissions).(string)),
Permission: forgejo.AccessMode(d.Get(TeamPermissions).(string)),
CanCreateOrgRepo: &canCreateRepo,
IncludesAllRepositories: &includeAllRepos,
Units: units,
@ -184,11 +184,11 @@ func resourceTeamUpdate(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceTeamDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
var resp *forgejo.Response
resp, err = client.DeleteTeam(id)
@ -203,8 +203,8 @@ func resourceTeamDelete(d *schema.ResourceData, meta interface{}) (err error) {
return
}
func setTeamResourceData(team *gitea.Team, d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
func setTeamResourceData(team *forgejo.Team, d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*forgejo.Client)
if err := client.CheckServerVersionConstraint(">= 1.19.4"); err != nil {
d.Set(TeamOrg, d.Get(TeamOrg).(string))
} else {
@ -292,12 +292,12 @@ func resourceGiteaTeam() *schema.Resource {
Description: "List of Repositories that should be part of this team",
},
},
Description: "`gitea_team` manages Team that are part of an organisation.",
Description: "`forgejo_team` manages Team that are part of an organisation.",
}
}
func setTeamRepositories(team *gitea.Team, d *schema.ResourceData, meta interface{}, update bool) (err error) {
client := meta.(*gitea.Client)
func setTeamRepositories(team *forgejo.Team, d *schema.ResourceData, meta interface{}, update bool) (err error) {
client := meta.(*forgejo.Client)
org := d.Get(TeamOrg).(string)
@ -312,9 +312,9 @@ func setTeamRepositories(team *gitea.Team, d *schema.ResourceData, meta interfac
page := 1
for {
var existingRepositories []*gitea.Repository
existingRepositories, _, err = client.ListTeamRepositories(team.ID, gitea.ListTeamRepositoriesOptions{
ListOptions: gitea.ListOptions{
var existingRepositories []*forgejo.Repository
existingRepositories, _, err = client.ListTeamRepositories(team.ID, forgejo.ListTeamRepositoriesOptions{
ListOptions: forgejo.ListOptions{
Page: page,
PageSize: 50,
},

View file

@ -1,29 +1,29 @@
package gitea
package forgejo
import (
"fmt"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
const (
membersTeamID string = "team_id"
membersTeamID string = "team_id"
membersTeamMembers string = "members"
)
func getTeamMembers(team_id int, meta interface{}) (membersNames []string, err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var memberNames []string
var members []*gitea.User
var members []*forgejo.User
// Get all pages of users
page := 1
for {
// Set options for current page
opts := gitea.ListTeamMembersOptions{
ListOptions: gitea.ListOptions{Page: page, PageSize: 50},
opts := forgejo.ListTeamMembersOptions{
ListOptions: forgejo.ListOptions{Page: page, PageSize: 50},
}
// Get page of team members
@ -50,18 +50,18 @@ func getTeamMembers(team_id int, meta interface{}) (membersNames []string, err e
}
func resourceTeamMembersCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
team_id := d.Get(membersTeamID).(int)
var memberNames []string
var memberNames []string
// What if team already has member?
// What if user is already in the team?
// What if user does not exist?
// Add members to the team
for _, name := range d.Get(membersTeamMembers).(*schema.Set).List() {
_ , err = client.AddTeamMember(int64(team_id), name.(string))
_, err = client.AddTeamMember(int64(team_id), name.(string))
if err != nil {
return err
}
@ -88,12 +88,12 @@ func resourceTeamMembersRead(d *schema.ResourceData, meta interface{}) (err erro
}
func resourceTeamMembersDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
team_id := d.Get(membersTeamID).(int)
var memberNames []string
memberNames , err = getTeamMembers(team_id, meta)
memberNames, err = getTeamMembers(team_id, meta)
if err != nil {
return err
}
@ -135,16 +135,15 @@ func resourceGiteaTeamMembers() *schema.Resource {
"members": {
// TypeSet is better than TypeList because
// reordering the members will not trigger recreation
Type: schema.TypeSet,
Type: schema.TypeSet,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Required: true,
ForceNew: true,
ForceNew: true,
Description: "The user names of the members of the team.",
},
},
Description: "`gitea_team_members` manages all members of a single team. This resource will be recreated on member changes.",
Description: "`forgejo_team_members` manages all members of a single team. This resource will be recreated on member changes.",
}
}

View file

@ -1,46 +1,46 @@
package gitea
package forgejo
import (
"fmt"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
const (
membershipTeamID string = "team_id"
membershipUserName string = "username"
membershipTeamID string = "team_id"
membershipUserName string = "username"
)
func resourceTeamMembershipCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
team_id := d.Get(membershipTeamID).(int)
username := d.Get(membershipUserName).(string)
// Create the membership
_ , err = client.AddTeamMember(int64(team_id), username)
_, err = client.AddTeamMember(int64(team_id), username)
// What if the membership exists? Consider error messages
// Does this do anything? Will err not be return in the end anyway
if err != nil {
return
}
err = setTeamMembershipData(team_id, username, d)
return
}
func resourceTeamMembershipRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
var resp *gitea.Response
client := meta.(*forgejo.Client)
var resp *forgejo.Response
team_id := d.Get(membershipTeamID).(int)
username := d.Get(membershipUserName).(string)
// Attempt to get the user from the team. If the user is not a member of the team, this will return a 404
// Attempt to get the user from the team. If the user is not a member of the team, this will return a 404
_, resp, err = client.GetTeamMember(int64(team_id), username)
if err != nil {
return err
@ -59,7 +59,7 @@ func resourceTeamMembershipRead(d *schema.ResourceData, meta interface{}) (err e
}
func resourceTeamMembershipDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
team_id := d.Get(membershipTeamID).(int)
username := d.Get(membershipUserName).(string)
@ -76,7 +76,7 @@ func resourceTeamMembershipDelete(d *schema.ResourceData, meta interface{}) (err
func setTeamMembershipData(team_id int, username string, d *schema.ResourceData) (err error) {
// This can't be team or usename only as that would not be unique since the
// team can have multiple members and the user can have multiple memberships.
// team can have multiple members and the user can have multiple memberships.
d.SetId(fmt.Sprintf("%d_%s", team_id, username))
d.Set(membershipTeamID, team_id)
d.Set(membershipUserName, username)
@ -106,6 +106,6 @@ func resourceGiteaTeamMembership() *schema.Resource {
Description: "The username of the team member.",
},
},
Description: "`gitea_team_membership` manages a single user's membership of a single team.",
Description: "`forgejo_team_membership` manages a single user's membership of a single team.",
}
}

View file

@ -1,10 +1,10 @@
package gitea
package forgejo
import (
"fmt"
"strconv"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -16,35 +16,35 @@ const (
)
// validScopes contains the valid scopes for tokens as listed
// at https://docs.gitea.com/development/oauth2-provider#scopes
// at https://docs.forgejo.com/development/oauth2-provider#scopes
var validScopes = map[string]bool{
"all": true,
"read:activitypub": true,
"write:activitypub": true,
"read:admin": true,
"write:admin": true,
"read:issue": true,
"write:issue": true,
"read:misc": true,
"write:misc": true,
"read:notification": true,
"all": true,
"read:activitypub": true,
"write:activitypub": true,
"read:admin": true,
"write:admin": true,
"read:issue": true,
"write:issue": true,
"read:misc": true,
"write:misc": true,
"read:notification": true,
"write:notification": true,
"read:organization": true,
"read:organization": true,
"write:organization": true,
"read:package": true,
"write:package": true,
"read:repository": true,
"write:repository": true,
"read:user": true,
"write:user": true,
"read:package": true,
"write:package": true,
"read:repository": true,
"write:repository": true,
"read:user": true,
"write:user": true,
}
func searchTokenById(c *gitea.Client, id int64) (res *gitea.AccessToken, err error) {
func searchTokenById(c *forgejo.Client, id int64) (res *forgejo.AccessToken, err error) {
page := 1
for {
tokens, _, err := c.ListAccessTokens(gitea.ListAccessTokensOptions{
ListOptions: gitea.ListOptions{
tokens, _, err := c.ListAccessTokens(forgejo.ListAccessTokensOptions{
ListOptions: forgejo.ListOptions{
Page: page,
PageSize: 50,
},
@ -69,21 +69,21 @@ func searchTokenById(c *gitea.Client, id int64) (res *gitea.AccessToken, err err
func resourceTokenCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
// Create a list of valid scopes. Thrown an error if an invalid scope is found
var scopes []gitea.AccessTokenScope
var scopes []forgejo.AccessTokenScope
for _, s := range d.Get(TokenScopes).(*schema.Set).List() {
s := s.(string)
if validScopes[s] {
scopes = append(scopes, gitea.AccessTokenScope(s))
scopes = append(scopes, forgejo.AccessTokenScope(s))
} else {
return fmt.Errorf("Invalid token scope: '%s'", s)
}
}
opts := gitea.CreateAccessTokenOption{
Name: d.Get(TokenName).(string),
opts := forgejo.CreateAccessTokenOption{
Name: d.Get(TokenName).(string),
Scopes: scopes,
}
@ -100,9 +100,9 @@ func resourceTokenCreate(d *schema.ResourceData, meta interface{}) (err error) {
func resourceTokenRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var token *gitea.AccessToken
var token *forgejo.AccessToken
id, err := strconv.ParseInt(d.Id(), 10, 64)
@ -119,8 +119,8 @@ func resourceTokenRead(d *schema.ResourceData, meta interface{}) (err error) {
func resourceTokenDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
var resp *gitea.Response
client := meta.(*forgejo.Client)
var resp *forgejo.Response
resp, err = client.DeleteAccessToken(d.Get(TokenName).(string))
@ -135,7 +135,7 @@ func resourceTokenDelete(d *schema.ResourceData, meta interface{}) (err error) {
return
}
func setTokenResourceData(token *gitea.AccessToken, d *schema.ResourceData) (err error) {
func setTokenResourceData(token *forgejo.AccessToken, d *schema.ResourceData) (err error) {
d.SetId(fmt.Sprintf("%d", token.ID))
d.Set(TokenName, token.Name)
@ -183,8 +183,8 @@ func resourceGiteaToken() *schema.Resource {
Description: "List of string representations of scopes for the token",
},
},
Description: "`gitea_token` manages gitea Access Tokens.\n\n" +
"Due to upstream limitations (see https://gitea.com/gitea/go-sdk/issues/610) this resource\n" +
Description: "`forgejo_token` manages forgejo Access Tokens.\n\n" +
"Due to upstream limitations (see https://forgejo.com/forgejo/go-sdk/issues/610) this resource\n" +
"can only be used with username/password provider configuration.\n\n" +
"WARNING:\n" +
"Tokens will be stored in the terraform state!",

View file

@ -1,10 +1,10 @@
package gitea
package forgejo
import (
"fmt"
"strconv"
"code.gitea.io/sdk/gitea"
"codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
@ -31,12 +31,12 @@ const (
)
func resourceUserRead(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
var user *gitea.User
var resp *forgejo.Response
var user *forgejo.User
user, resp, err = client.GetUserByID(id)
@ -55,13 +55,13 @@ func resourceUserRead(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceUserCreate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var user *gitea.User
visibility := gitea.VisibleType(d.Get(userVisibility).(string))
var user *forgejo.User
visibility := forgejo.VisibleType(d.Get(userVisibility).(string))
changePassword := d.Get(userMustChangePassword).(bool)
opts := gitea.CreateUserOption{
opts := forgejo.CreateUserOption{
SourceID: 0,
LoginName: d.Get(userLoginName).(string),
Username: d.Get(userName).(string),
@ -86,11 +86,11 @@ func resourceUserCreate(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceUserUpdate(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
id, err := strconv.ParseInt(d.Id(), 10, 64)
var resp *gitea.Response
var user *gitea.User
var resp *forgejo.Response
var user *forgejo.User
user, resp, err = client.GetUserByID(id)
@ -115,10 +115,10 @@ func resourceUserUpdate(d *schema.ResourceData, meta interface{}) (err error) {
accessDenied := d.Get(userPhorbitLogin).(bool)
allowOrgs := d.Get(userAllowCreateOrgs).(bool)
restricted := d.Get(userRestricted).(bool)
visibility := gitea.VisibleType(d.Get(userVisibility).(string))
visibility := forgejo.VisibleType(d.Get(userVisibility).(string))
if d.Get(userForcePasswordChange).(bool) {
opts := gitea.EditUserOption{
opts := forgejo.EditUserOption{
SourceID: 0,
LoginName: d.Get(userLoginName).(string),
Email: &mail,
@ -144,7 +144,7 @@ func resourceUserUpdate(d *schema.ResourceData, meta interface{}) (err error) {
}
} else {
opts := gitea.EditUserOption{
opts := forgejo.EditUserOption{
SourceID: 0,
LoginName: d.Get(userLoginName).(string),
Email: &mail,
@ -177,9 +177,9 @@ func resourceUserUpdate(d *schema.ResourceData, meta interface{}) (err error) {
}
func resourceUserDelete(d *schema.ResourceData, meta interface{}) (err error) {
client := meta.(*gitea.Client)
client := meta.(*forgejo.Client)
var resp *gitea.Response
var resp *forgejo.Response
resp, err = client.AdminDeleteUser(d.Get(userName).(string))
@ -194,7 +194,7 @@ func resourceUserDelete(d *schema.ResourceData, meta interface{}) (err error) {
return
}
func setUserResourceData(user *gitea.User, d *schema.ResourceData) (err error) {
func setUserResourceData(user *forgejo.User, d *schema.ResourceData) (err error) {
d.SetId(fmt.Sprintf("%d", user.ID))
d.Set(userName, user.UserName)
d.Set(userEmail, user.Email)
@ -357,7 +357,7 @@ func resourceGiteaUser() *schema.Resource {
Description: "Flag if the user defined password should be overwritten or not",
},
},
Description: "`gitea_user` manages a native gitea user.\n\n" +
Description: "`forgejo_user` manages a native forgejo user.\n\n" +
"If you are using OIDC or other kinds of authentication mechanisms you can still try to manage" +
"ssh keys or other ressources this way",
}

View file

@ -1 +0,0 @@
package gitea

View file

@ -1 +0,0 @@
package gitea

View file

@ -1 +0,0 @@
package gitea

View file

@ -1 +0,0 @@
package gitea

View file

@ -1,205 +0,0 @@
package gitea
import (
"fmt"
"strings"
"code.gitea.io/sdk/gitea"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func resourceGiteaRepositoryActionsSecret() *schema.Resource {
return &schema.Resource{
Create: resourceGiteaRepositoryActionsSecretCreate,
Read: resourceGiteaRepositoryActionsSecretRead,
Update: resourceGiteaRepositoryActionsSecretUpdate,
Delete: resourceGiteaRepositoryActionsSecretDelete,
Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
},
Schema: map[string]*schema.Schema{
"repository_owner": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Owner of the repository.",
},
"repository": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Name of the repository.",
},
"secret_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Name of the secret.",
},
"secret_value": {
Type: schema.TypeString,
Required: true,
Description: "Value of the secret.",
Sensitive: true,
},
"created_at": {
Type: schema.TypeString,
Computed: true,
Description: "Date of 'actions_secret' creation.",
},
},
}
}
func resourceGiteaRepositoryActionsSecretCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
repoOwnerData, usernameOk := d.GetOk("repository_owner")
if !usernameOk {
return fmt.Errorf("name of repo owner must be passed")
}
repoOwner := strings.ToLower(repoOwnerData.(string))
repositoryData, nameOk := d.GetOk("repository")
if !nameOk {
return fmt.Errorf("CREATE name of repo must be passed")
}
repository := strings.ToLower(repositoryData.(string))
secretNameData, nameOk := d.GetOk("secret_name")
if !nameOk {
return fmt.Errorf("secret_name must be passed")
}
secretName := secretNameData.(string)
valueData, nameOk := d.GetOk("secret_value")
if !nameOk {
return fmt.Errorf("value must be passed")
}
value := valueData.(string)
_, err := client.CreateRepoActionSecret(repoOwner, repository, gitea.CreateSecretOption{
Name: secretName,
Data: value,
})
if err != nil {
return err
}
d.SetId(buildThreePartID(repoOwner, repository, secretName))
return resourceGiteaRepositoryActionsSecretRead(d, meta)
}
func resourceGiteaRepositoryActionsSecretUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
repoOwnerData, usernameOk := d.GetOk("repository_owner")
if !usernameOk {
return fmt.Errorf("name of repo owner must be passed")
}
repoOwner := strings.ToLower(repoOwnerData.(string))
repositoryData, nameOk := d.GetOk("repository")
if !nameOk {
return fmt.Errorf("name of repo must be passed")
}
repository := strings.ToLower(repositoryData.(string))
variableNameData, nameOk := d.GetOk("secret_name")
if !nameOk {
return fmt.Errorf("secret_name of repo must be passed")
}
variableName := variableNameData.(string)
valueData, nameOk := d.GetOk("secret_value")
if !nameOk {
return fmt.Errorf("secret_value must be passed")
}
value := valueData.(string)
_, err := client.CreateRepoActionSecret(repoOwner, repository, gitea.CreateSecretOption{
Name: variableName,
Data: value,
})
if err != nil {
return err
}
return resourceGiteaRepositoryActionsSecretRead(d, meta)
}
func resourceGiteaRepositoryActionsSecretRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
repoOwner, repository, secretName, _ := parseThreePartID(d.Id(), "repository_owner", "repository", "secret_name")
var requestedSecret *gitea.Secret
page := 0
for requestedSecret == nil {
page = page + 1
secrets, _, _ := client.ListRepoActionSecret(repoOwner, repository, gitea.ListRepoActionSecretOption{
ListOptions: gitea.ListOptions{
Page: page,
PageSize: 100,
},
})
if len(secrets) == 0 {
d.SetId("")
return nil
}
for _, secret := range secrets {
if secret.Name == secretName {
requestedSecret = secret
break
}
}
}
createdAtData, dateOk := d.GetOk("created_at")
if requestedSecret == nil {
d.SetId("")
return nil
}
if dateOk {
if requestedSecret.Created.String() != createdAtData.(string) {
d.SetId("")
return nil
}
}
if err := d.Set("repository_owner", repoOwner); err != nil {
return err
}
if err := d.Set("repository", repository); err != nil {
return err
}
if err := d.Set("secret_name", secretName); err != nil {
return err
}
if err := d.Set("created_at", requestedSecret.Created.String()); err != nil {
return err
}
return nil
}
func resourceGiteaRepositoryActionsSecretDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
repoOwner, repository, secretName, _ := parseThreePartID(d.Id(), "repository_owner", "repository", "secret_name")
_, err := client.DeleteRepoActionSecret(repoOwner, repository, secretName)
return err
}

View file

@ -1,195 +0,0 @@
package gitea
import (
"fmt"
"strings"
"code.gitea.io/sdk/gitea"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func resourceGiteaRepositoryActionsVariable() *schema.Resource {
return &schema.Resource{
Create: resourceGiteaRepositoryActionsVariableCreate,
Read: resourceGiteaRepositoryActionsVariableRead,
Update: resourceGiteaRepositoryActionsVariableUpdate,
Delete: resourceGiteaRepositoryActionsVariableDelete,
Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
},
Schema: map[string]*schema.Schema{
"repository_owner": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Owner of the repository.",
},
"repository": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Name of the repository.",
},
"variable_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Name of the variable.",
},
"value": {
Type: schema.TypeString,
Required: true,
Description: "Value of the variable.",
},
},
}
}
func resourceGiteaRepositoryActionsVariableCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
repoOwnerData, usernameOk := d.GetOk("repository_owner")
if !usernameOk {
return fmt.Errorf("name of repo owner must be passed")
}
repoOwner := strings.ToLower(repoOwnerData.(string))
nameData, nameOk := d.GetOk("repository")
if !nameOk {
return fmt.Errorf("CREATE name of repo must be passed")
}
name := strings.ToLower(nameData.(string))
variableNameData, nameOk := d.GetOk("variable_name")
if !nameOk {
return fmt.Errorf("variable_name of repo must be passed")
}
variableName := variableNameData.(string)
valueData, nameOk := d.GetOk("value")
if !nameOk {
return fmt.Errorf("value must be passed")
}
value := valueData.(string)
_, err := client.CreateRepoActionVariable(repoOwner, name, variableName, value)
if err != nil {
return err
}
d.SetId(buildThreePartID(repoOwner, name, variableName))
return resourceGiteaRepositoryActionsVariableRead(d, meta)
}
func resourceGiteaRepositoryActionsVariableUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
repoOwnerData, usernameOk := d.GetOk("repository_owner")
if !usernameOk {
return fmt.Errorf("name of repo owner must be passed")
}
repoOwner := strings.ToLower(repoOwnerData.(string))
repositoryData, nameOk := d.GetOk("repository")
if !nameOk {
return fmt.Errorf("READ name of repo must be passed")
}
repository := strings.ToLower(repositoryData.(string))
variableNameData, nameOk := d.GetOk("variable_name")
if !nameOk {
return fmt.Errorf("READ variable_name of repo must be passed")
}
variableName := variableNameData.(string)
valueData, nameOk := d.GetOk("value")
if !nameOk {
return fmt.Errorf("value must be passed")
}
value := valueData.(string)
_, err := client.UpdateRepoActionVariable(repoOwner, repository, variableName, value)
if err != nil {
return err
}
return resourceGiteaRepositoryActionsVariableRead(d, meta)
}
func resourceGiteaRepositoryActionsVariableRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
repoOwner, repository, variableName, err := parseThreePartID(d.Id(), "repository_owner", "repository", "variable_name")
if err != nil {
return err
}
variable, resp, err := client.GetRepoActionVariable(repoOwner, repository, variableName)
if err != nil {
if resp.StatusCode == 404 {
d.SetId("")
return nil
} else {
return err
}
}
if err = d.Set("repository_owner", repoOwner); err != nil {
return err
}
if err = d.Set("repository", repository); err != nil {
return err
}
if err = d.Set("variable_name", variableName); err != nil {
return err
}
if err = d.Set("value", variable.Value); err != nil {
return err
}
return nil
}
func resourceGiteaRepositoryActionsVariableDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitea.Client)
repoOwnerData, usernameOk := d.GetOk("repository_owner")
if !usernameOk {
return fmt.Errorf("name of repo owner must be passed")
}
repoOwner := strings.ToLower(repoOwnerData.(string))
repositoryData, nameOk := d.GetOk("repository")
if !nameOk {
return fmt.Errorf("name of repo must be passed")
}
repository := strings.ToLower(repositoryData.(string))
variableNameData, nameOk := d.GetOk("variable_name")
if !nameOk {
return fmt.Errorf("variable_name must be passed")
}
variableName := strings.ToLower(variableNameData.(string))
_, err := client.DeleteRepoActionVariable(repoOwner, repository, variableName)
return err
}
// format the strings into an id `a:b:c`
func buildThreePartID(a, b, c string) string {
return fmt.Sprintf("%s:%s:%s", a, b, c)
}
func parseThreePartID(id, left, center, right string) (string, string, string, error) {
parts := strings.SplitN(id, ":", 3)
if len(parts) != 3 {
return "", "", "", fmt.Errorf("unexpected ID format (%q). Expected %s:%s:%s", id, left, center, right)
}
return parts[0], parts[1], parts[2], nil
}

4
go.mod
View file

@ -5,14 +5,14 @@ go 1.22.7
toolchain go1.24.1
require (
code.gitea.io/sdk/gitea v0.20.0
codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2 v2.0.0
github.com/hashicorp/terraform-plugin-docs v0.20.1
github.com/hashicorp/terraform-plugin-log v0.9.0
github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0
)
require (
github.com/42wim/httpsig v1.2.1 // indirect
github.com/42wim/httpsig v1.2.2 // indirect
github.com/BurntSushi/toml v1.2.1 // indirect
github.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect

9
go.sum
View file

@ -1,9 +1,13 @@
code.gitea.io/sdk/gitea v0.20.0 h1:Zm/QDwwZK1awoM4AxdjeAQbxolzx2rIP8dDfmKu+KoU=
code.gitea.io/sdk/gitea v0.20.0/go.mod h1:faouBHC/zyx5wLgjmRKR62ydyvMzwWf3QnU0bH7Cw6U=
codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2 v0.20.0 h1:Zm/QDwwZK1awoM4AxdjeAQbxolzx2rIP8dDfmKu+KoU=
codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2 v0.20.0/go.mod h1:faouBHC/zyx5wLgjmRKR62ydyvMzwWf3QnU0bH7Cw6U=
codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2 v2.0.0 h1:DMrDRx/7ke6+IReKtbZ1ZwfuaXQfG4P3yn9O/z9a08Y=
codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2 v2.0.0/go.mod h1:9iyacQPbTwXp9klusoNOat2ZeFsWe+mmaDdZKywK220=
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
github.com/42wim/httpsig v1.2.1 h1:oLBxptMe9U4ZmSGtkosT8Dlfg31P3VQnAGq6psXv82Y=
github.com/42wim/httpsig v1.2.1/go.mod h1:P/UYo7ytNBFwc+dg35IubuAUIs8zj5zzFIgUCEl55WY=
github.com/42wim/httpsig v1.2.2 h1:ofAYoHUNs/MJOLqQ8hIxeyz2QxOz8qdSVvp3PX/oPgA=
github.com/42wim/httpsig v1.2.2/go.mod h1:P/UYo7ytNBFwc+dg35IubuAUIs8zj5zzFIgUCEl55WY=
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/Kunde21/markdownfmt/v3 v3.1.0 h1:KiZu9LKs+wFFBQKhrZJrFZwtLnCCWJahL+S+E/3VnM0=
@ -189,6 +193,7 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=

View file

@ -1,7 +1,7 @@
package main
import (
"git.dgnum.eu/mdebray/forgejo-terraform-provider/gitea"
"git.dgnum.eu/mdebray/forgejo-terraform-provider/forgejo"
"github.com/hashicorp/terraform-plugin-sdk/v2/plugin"
)
@ -9,5 +9,5 @@ var Version = "development"
func main() {
plugin.Serve(&plugin.ServeOpts{
ProviderFunc: gitea.Provider})
ProviderFunc: forgejo.Provider})
}