Skip to content

Commit b432f61

Browse files
committed
feat: add forgejo_team_repository resource
Adds a new `forgejo_team_repository` resource for managing team-to-repository assignments. This enables fine-grained, per-repository team access control as an alternative to the `includes_all_repositories` boolean on the team resource. The resource uses existing Forgejo SDK methods: - AddTeamRepository (PUT /api/v1/teams/{id}/repos/{org}/{repo}) - RemoveTeamRepository (DELETE /api/v1/teams/{id}/repos/{org}/{repo}) - ListTeamRepositories (GET /api/v1/teams/{id}/repos) All attributes require replacement (no in-place updates). Import is supported using org_name/team_name/repo_name format, consistent with the forgejo_team import identifier convention. Closes #114 Closes #154
1 parent 9d3515d commit b432f61

5 files changed

Lines changed: 460 additions & 7 deletions

File tree

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,14 @@ Some resources support import into Terraform state.
193193
Importing is useful for bringing existing, manually created resources under Terraform management.
194194
Each resource defines its own import identifier, which uniquely identifies the resource to be imported:
195195

196-
| Resource | Import Identifier |
197-
| ---------------------------- | --------------------------------------------------- |
198-
| `forgejo_repository` | `<<<repo_owner>>>/<<<repo_name>>>` |
199-
| `forgejo_repository_webhook` | `<<<repo_owner>>>/<<<repo_name>>>/<<<webhook_id>>>` |
200-
| `forgejo_branch_protection` | `<<<repo_owner>>>/<<<repo_name>>>/<<<branch>>>` |
201-
| `forgejo_user` | `<<<login>>>` |
202-
| `forgejo_team` | `<<<org_name>>>/<<<team_name>>>` |
196+
| Resource | Import Identifier |
197+
| ---------------------------- | ------------------------------------------------------- |
198+
| `forgejo_repository` | `<<<repo_owner>>>/<<<repo_name>>>` |
199+
| `forgejo_repository_webhook` | `<<<repo_owner>>>/<<<repo_name>>>/<<<webhook_id>>>` |
200+
| `forgejo_branch_protection` | `<<<repo_owner>>>/<<<repo_name>>>/<<<branch>>>` |
201+
| `forgejo_user` | `<<<login>>>` |
202+
| `forgejo_team` | `<<<org_name>>>/<<<team_name>>>` |
203+
| `forgejo_team_repository` | `<<<org_name>>>/<<<team_name>>>/<<<repo_name>>>` |
203204

204205
Refer to the `examples/` directory for more import examples.
205206

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Import using the org_name/team_name/repo_name.
2+
terraform import forgejo_team_repository.example test_org/org_test_team/test_repo
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
terraform {
2+
required_providers {
3+
forgejo = {
4+
source = "svalabs/forgejo"
5+
}
6+
}
7+
}
8+
9+
provider "forgejo" {
10+
host = "http://localhost:3000"
11+
}
12+
13+
# Organization
14+
resource "forgejo_organization" "owner" {
15+
name = "test_org"
16+
}
17+
18+
# Team
19+
resource "forgejo_team" "team" {
20+
organization_id = forgejo_organization.owner.id
21+
name = "org_test_team"
22+
23+
units_map = {
24+
"repo.code" = "read"
25+
}
26+
}
27+
28+
# Repository
29+
resource "forgejo_repository" "repo" {
30+
owner = forgejo_organization.owner.name
31+
name = "test_repo"
32+
}
33+
34+
# Team repository
35+
resource "forgejo_team_repository" "membership" {
36+
team_id = forgejo_team.team.id
37+
owner = forgejo_organization.owner.name
38+
repository = forgejo_repository.repo.name
39+
}

internal/provider/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ func (p *forgejoProvider) Resources(_ context.Context) []func() resource.Resourc
271271
NewBranchProtectionResource,
272272
NewTeamResource,
273273
NewTeamMemberResource,
274+
NewTeamRepositoryResource,
274275
NewUserResource,
275276
}
276277
}

0 commit comments

Comments
 (0)