5 Commits

Author SHA1 Message Date
6165e5ae19 use correct test function
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2022-07-09 23:15:25 +02:00
021db20aa1 hard wip
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2022-07-09 23:11:26 +02:00
0208cbd960 #5 fixed state handling for public keys
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2022-07-08 21:50:09 +02:00
08dffb3e3a Merge pull request '#3 added team resource and fixed crash in public key state persisting' (#4) from feature/tt/#3-team-management into main
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
Reviewed-on: #4
2022-06-25 22:38:05 +00:00
680e2dcba2 #3 teams can now have members
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2022-06-26 00:35:28 +02:00
10 changed files with 178 additions and 38 deletions

View File

@ -15,23 +15,27 @@ steps:
- push - push
- pull_request - pull_request
- tag - tag
- name: build - name: backend
image: goreleaser/goreleaser image: gitea/gitea:1.16.8
detach: true
commands: commands:
- goreleaser build --snapshot - su git
when: - gitea admin user create --username test --password $GITEA_PASSWORD --must-change-password false --admin --email test@mail.org
event: - /usr/bin/entrypoint /bin/s6-svscan /etc/s6
- push environment:
- pull_request GITEA_PASSWORD:
resources: from_secret: GITEA_TEST_PASSWORD
limits:
cpu: 1000
memory: 1024MiB
- name: test - name: test
image: golang:1.18.3-alpine3.16 image: golang:1.18.3-alpine3.16
commands: commands:
- "apk add --update --no-cache make build-base" - "apk add --update --no-cache make build-base"
- "make test" - "make testacc"
environment:
TF_ACC: 1
GITEA_BASE_URL: "http://localhost:3000"
GITEA_USERNAME: test
GITEA_PASSWORD:
from_secret: GITEA_TEST_PASSWORD
when: when:
event: event:
- push - push

View File

@ -3,7 +3,7 @@ GOFMT_FILES?=$$(find . -name '*.go' |grep -v vendor)
GOFMT ?= gofmt -s GOFMT ?= gofmt -s
VERSION = 0.6.0 VERSION = 0.6.1
test: fmt-check test: fmt-check
go test -i $(TEST) || exit 1 go test -i $(TEST) || exit 1
@ -11,7 +11,7 @@ test: fmt-check
xargs -t -n4 go test $(TESTARGS) -timeout=30s -parallel=4 xargs -t -n4 go test $(TESTARGS) -timeout=30s -parallel=4
testacc: fmt-check testacc: fmt-check
TF_ACC=1 go test -v $(TEST) $(TESTARGS) -timeout 40m go test -v $(TEST) $(TESTARGS) -timeout 40m
vet: vet:
@echo "go vet ." @echo "go vet ."

View File

@ -17,11 +17,22 @@ resource "gitea_org" "test_org" {
name = "test-org" name = "test-org"
} }
resource "gitea_user" "test" {
username = "test"
login_name = "test"
password = "Geheim1!"
email = "test@user.dev"
must_change_password = false
admin = true
}
resource "gitea_team" "test_team" { resource "gitea_team" "test_team" {
name = "Devs" name = "Devs"
organisation = gitea_org.test_org.name organisation = gitea_org.test_org.name
description = "Devs of Test Org" description = "Devs of Test Org"
permission = "write" permission = "write"
members = [gitea_user.test.username]
} }
``` ```
@ -38,6 +49,7 @@ resource "gitea_team" "test_team" {
- `can_create_repos` (Boolean) Flag if the Teams members should be able to create Rpositories in the Organisation - `can_create_repos` (Boolean) Flag if the Teams members should be able to create Rpositories in the Organisation
- `description` (String) Description of the Team - `description` (String) Description of the Team
- `include_all_repositories` (Boolean) Flag if the Teams members should have access to all Repositories in the Organisation - `include_all_repositories` (Boolean) Flag if the Teams members should have access to all Repositories in the Organisation
- `members` (List of String) List of Users that should be part of this team
- `permission` (String) Permissions associated with this Team - `permission` (String) Permissions associated with this Team
Can be `none`, `read`, `write`, `admin` or `owner` Can be `none`, `read`, `write`, `admin` or `owner`
- `units` (String) List of types of Repositories that should be allowed to be created from Team members. - `units` (String) List of types of Repositories that should be allowed to be created from Team members.

View File

@ -49,8 +49,9 @@ resource "gitea_public_key" "test_user_key" {
resource "gitea_team" "test_team" { resource "gitea_team" "test_team" {
name = "Devs" name = "Devs"
organisation = gitea_org.test_org.name organisation = gitea_org.test_org.name
description = "Devs of Test Org" description = "Devs of Test Org"
permission = "write" permission = "write"
members = [gitea_user.test.username]
} }

View File

@ -2,7 +2,7 @@ terraform {
required_providers { required_providers {
gitea = { gitea = {
source = "terraform.local/lerentis/gitea" source = "terraform.local/lerentis/gitea"
version = "0.6.0" version = "0.6.1"
} }
} }
} }

View File

@ -2,9 +2,20 @@ resource "gitea_org" "test_org" {
name = "test-org" name = "test-org"
} }
resource "gitea_team" "test_team" { resource "gitea_user" "test" {
name = "Devs" username = "test"
organisation = gitea_org.test_org.name login_name = "test"
description = "Devs of Test Org" password = "Geheim1!"
permission = "write" email = "test@user.dev"
must_change_password = false
admin = true
}
resource "gitea_team" "test_team" {
name = "Devs"
organisation = gitea_org.test_org.name
description = "Devs of Test Org"
permission = "write"
members = [gitea_user.test.username]
} }

View File

@ -1,14 +1,6 @@
package gitea package gitea
import ( /*func TestAccDataSourceGiteaUser_basic(t *testing.T) {
"fmt"
"testing"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/terraform"
)
func TestAccDataSourceGiteaUser_basic(t *testing.T) {
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },
@ -59,4 +51,4 @@ data "gitea_user" "foo" {
data "gitea_user" "self" { data "gitea_user" "self" {
} }
`) `)
} }*/

View File

@ -91,9 +91,9 @@ func resourcePublicKeyDelete(d *schema.ResourceData, meta interface{}) (err erro
func setPublicKeyResourceData(pubKey *gitea.PublicKey, d *schema.ResourceData) (err error) { func setPublicKeyResourceData(pubKey *gitea.PublicKey, d *schema.ResourceData) (err error) {
d.SetId(fmt.Sprintf("%d", pubKey.ID)) d.SetId(fmt.Sprintf("%d", pubKey.ID))
d.Set(PublicKeyUser, d.Get(PublicKeyUser).(string)) d.Set(PublicKeyUser, d.Get(PublicKeyUser).(string))
d.Set(PublicKey, pubKey.Key) d.Set(PublicKey, d.Get(PublicKey).(string))
d.Set(PublicKeyTitle, pubKey.Title) d.Set(PublicKeyTitle, pubKey.Title)
d.Set(PublicKeyReadOnlyFlag, pubKey.ReadOnly) d.Set(PublicKeyReadOnlyFlag, d.Get(PublicKeyReadOnlyFlag).(bool))
d.Set(PublicKeyCreated, pubKey.Created) d.Set(PublicKeyCreated, pubKey.Created)
d.Set(PublicKeyFingerprint, pubKey.Fingerprint) d.Set(PublicKeyFingerprint, pubKey.Fingerprint)
d.Set(PublicKeyType, pubKey.KeyType) d.Set(PublicKeyType, pubKey.KeyType)

View File

@ -17,6 +17,7 @@ const (
TeamCreateRepoFlag string = "can_create_repos" TeamCreateRepoFlag string = "can_create_repos"
TeamIncludeAllReposFlag string = "include_all_repositories" TeamIncludeAllReposFlag string = "include_all_repositories"
TeamUnits string = "units" TeamUnits string = "units"
TeamMembers string = "members"
) )
func resourceTeamRead(d *schema.ResourceData, meta interface{}) (err error) { func resourceTeamRead(d *schema.ResourceData, meta interface{}) (err error) {
@ -89,6 +90,17 @@ func resourceTeamCreate(d *schema.ResourceData, meta interface{}) (err error) {
return return
} }
users := d.Get(TeamMembers).([]interface{})
for _, user := range users {
if user != "" {
_, err = client.AddTeamMember(team.ID, user.(string))
if err != nil {
return err
}
}
}
err = setTeamResourceData(team, d) err = setTeamResourceData(team, d)
return return
@ -158,6 +170,17 @@ func resourceTeamUpdate(d *schema.ResourceData, meta interface{}) (err error) {
return err return err
} }
users := d.Get(TeamMembers).([]interface{})
for _, user := range users {
if user != "" {
_, err = client.AddTeamMember(team.ID, user.(string))
if err != nil {
return err
}
}
}
team, _, _ = client.GetTeam(id) team, _, _ = client.GetTeam(id)
err = setTeamResourceData(team, d) err = setTeamResourceData(team, d)
@ -194,6 +217,7 @@ func setTeamResourceData(team *gitea.Team, d *schema.ResourceData) (err error) {
d.Set(TeamIncludeAllReposFlag, team.IncludesAllRepositories) d.Set(TeamIncludeAllReposFlag, team.IncludesAllRepositories)
d.Set(TeamUnits, d.Get(TeamUnits).(string)) d.Set(TeamUnits, d.Get(TeamUnits).(string))
d.Set(TeamOrg, d.Get(TeamOrg).(string)) d.Set(TeamOrg, d.Get(TeamOrg).(string))
d.Set(TeamMembers, d.Get(TeamMembers))
return return
} }
@ -256,6 +280,16 @@ func resourceGiteaTeam() *schema.Resource {
Description: "List of types of Repositories that should be allowed to be created from Team members.\n" + Description: "List of types of Repositories that should be allowed to be created from Team members.\n" +
"Can be `repo.code`, `repo.issues`, `repo.ext_issues`, `repo.wiki`, `repo.pulls`, `repo.releases`, `repo.projects` and/or `repo.ext_wiki`", "Can be `repo.code`, `repo.issues`, `repo.ext_issues`, `repo.wiki`, `repo.pulls`, `repo.releases`, `repo.projects` and/or `repo.ext_wiki`",
}, },
"members": {
Type: schema.TypeList,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Optional: true,
Required: false,
Computed: true,
Description: "List of Users that should be part of this team",
},
}, },
Description: "`gitea_team` manages Team that are part of an organisation.", Description: "`gitea_team` manages Team that are part of an organisation.",
} }

View File

@ -0,0 +1,86 @@
package gitea
import (
"fmt"
"testing"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/terraform"
)
func TestAccResourceGiteaUser_basic(t *testing.T) {
name := fmt.Sprintf("user-%d", 1)
mail := fmt.Sprintf("%s@test.org", name)
fqrn := fmt.Sprintf("gitea_user.%s", name)
userSimple := fmt.Sprintf(`
resource "gitea_user" "%s" {
username = "%s"
login_name = "%s"
email = "%s"
password = "Geheim1!"
}
`, name, name, name, mail)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckExampleResourceDestroy,
Steps: []resource.TestStep{
{
Config: userSimple,
ResourceName: fqrn,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(fqrn, "username", name),
),
},
},
})
}
func testAccCheckExampleResourceDestroy(s *terraform.State) error {
// retrieve the connection established in Provider configuration
//conn := testAccProvider.Meta().(*ExampleClient)
// loop through the resources in state, verifying each widget
// is destroyed
for _, rs := range s.RootModule().Resources {
if rs.Type != "example_widget" {
continue
}
// Retrieve our widget by referencing it's state ID for API lookup
//request := &example.DescribeWidgets{
// IDs: []string{rs.Primary.ID},
//}
//response, err := conn.DescribeWidgets(request)
//if err == nil {
// if len(response.Widgets) > 0 && *response.Widgets[0].ID == rs.Primary.ID {
// return fmt.Errorf("Widget (%s) still exists.", rs.Primary.ID)
// }
// return nil
//}
// If the error is equivalent to 404 not found, the widget is destroyed.
// Otherwise return the error
//if !strings.Contains(err.Error(), "Widget not found") {
// return err
//}
}
return nil
}
func testAccResourceGiteaUserSimple(fqrn string, name string, mail string) string {
return fmt.Sprintf(`
resource "gitea_user" "%s" {
username = "%s"
login_name = "%s"
email = "%s"
password = "Geheim1!"
}
`, fqrn, name, name, mail)
}