Skip to content

Commit 0bb25f9

Browse files
committed
repo and repos data sources
1 parent e343951 commit 0bb25f9

File tree

5 files changed

+236
-0
lines changed

5 files changed

+236
-0
lines changed

docs/data-sources/repo.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "drone_repo Data Source - terraform-provider-drone"
4+
subcategory: ""
5+
description: |-
6+
Data source for retrieving a Drone repository
7+
---
8+
9+
# drone_repo (Data Source)
10+
11+
Data source for retrieving a Drone repository
12+
13+
14+
15+
<!-- schema generated by tfplugindocs -->
16+
## Schema
17+
18+
### Required
19+
20+
- `repository` (String)
21+
22+
### Read-Only
23+
24+
- `cancel_pulls` (Boolean)
25+
- `cancel_push` (Boolean)
26+
- `cancel_running` (Boolean)
27+
- `configuration` (String)
28+
- `id` (String) The ID of this resource.
29+
- `ignore_forks` (Boolean)
30+
- `ignore_pulls` (Boolean)
31+
- `protected` (Boolean)
32+
- `timeout` (Number)
33+
- `trusted` (Boolean)
34+
- `visibility` (String)
35+
36+

docs/data-sources/repos.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "drone_repos Data Source - terraform-provider-drone"
4+
subcategory: ""
5+
description: |-
6+
Data source for retrieving all repositories to which the user has explicit access in the host system
7+
---
8+
9+
# drone_repos (Data Source)
10+
11+
Data source for retrieving all repositories to which the user has explicit access in the host system
12+
13+
14+
15+
<!-- schema generated by tfplugindocs -->
16+
## Schema
17+
18+
### Read-Only
19+
20+
- `id` (String) The ID of this resource.
21+
- `repositories` (List of String)
22+
23+

drone/data_source_repo.go

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package drone
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"regexp"
7+
"terraform-provider-drone/drone/utils"
8+
9+
"github.com/drone/drone-go/drone"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
13+
)
14+
15+
func dataSourceRepo() *schema.Resource {
16+
return &schema.Resource{
17+
Description: "Data source for retrieving a Drone repository",
18+
ReadContext: dataSourceRepoRead,
19+
Schema: map[string]*schema.Schema{
20+
"cancel_pulls": {
21+
Type: schema.TypeBool,
22+
Computed: true,
23+
},
24+
"cancel_push": {
25+
Type: schema.TypeBool,
26+
Computed: true,
27+
},
28+
"cancel_running": {
29+
Type: schema.TypeBool,
30+
Computed: true,
31+
},
32+
"configuration": {
33+
Type: schema.TypeString,
34+
Computed: true,
35+
},
36+
"ignore_forks": {
37+
Type: schema.TypeBool,
38+
Computed: true,
39+
},
40+
"ignore_pulls": {
41+
Type: schema.TypeBool,
42+
Computed: true,
43+
},
44+
"protected": {
45+
Type: schema.TypeBool,
46+
Computed: true,
47+
},
48+
"repository": {
49+
Type: schema.TypeString,
50+
Required: true,
51+
ValidateFunc: validation.StringMatch(
52+
regexp.MustCompile("^[^/ ]+/[^/ ]+$"),
53+
"Invalid repository (e.g. octocat/hello-world)",
54+
),
55+
},
56+
"timeout": {
57+
Type: schema.TypeInt,
58+
Computed: true,
59+
},
60+
"trusted": {
61+
Type: schema.TypeBool,
62+
Computed: true,
63+
},
64+
"visibility": {
65+
Type: schema.TypeString,
66+
Computed: true,
67+
},
68+
},
69+
}
70+
}
71+
72+
func dataSourceRepoRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
73+
client := m.(drone.Client)
74+
75+
// Warning or errors can be collected in a slice type
76+
var diags diag.Diagnostics
77+
78+
// Refresh repository list
79+
if _, err := client.RepoListSync(); err != nil {
80+
return diag.FromErr(err)
81+
}
82+
83+
repository := d.Get("repository").(string)
84+
owner, name, err := utils.ParseRepo(repository)
85+
if err != nil {
86+
return diag.FromErr(err)
87+
}
88+
89+
repo, err := client.Repo(owner, name)
90+
if err != nil {
91+
diags = append(diags, diag.Diagnostic{
92+
Severity: diag.Error,
93+
Summary: fmt.Sprintf("Failed to read repo %s", repository),
94+
Detail: err.Error(),
95+
})
96+
97+
return diags
98+
}
99+
100+
d.Set("cancel_pulls", repo.CancelPulls)
101+
d.Set("cancel_push", repo.CancelPush)
102+
d.Set("cancel_running", repo.CancelRunning)
103+
d.Set("configuration", repo.Config)
104+
d.Set("ignore_forks", repo.IgnoreForks)
105+
d.Set("ignore_pulls", repo.IgnorePulls)
106+
d.Set("protected", repo.Protected)
107+
d.Set("timeout", repo.Timeout)
108+
d.Set("trusted", repo.Trusted)
109+
d.Set("visibility", repo.Visibility)
110+
111+
d.SetId(repository)
112+
113+
return diags
114+
}

drone/data_source_repos.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package drone
2+
3+
import (
4+
"context"
5+
"sort"
6+
7+
"terraform-provider-drone/drone/utils"
8+
9+
"github.com/drone/drone-go/drone"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
)
13+
14+
func dataSourceRepos() *schema.Resource {
15+
return &schema.Resource{
16+
Description: "Data source for retrieving all repositories to which the user has explicit access in the host system",
17+
ReadContext: dataSourceReposRead,
18+
Schema: map[string]*schema.Schema{
19+
"repositories": {
20+
Type: schema.TypeList,
21+
Elem: &schema.Schema{
22+
Type: schema.TypeString,
23+
},
24+
Computed: true,
25+
},
26+
},
27+
}
28+
}
29+
30+
func dataSourceReposRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
31+
client := m.(drone.Client)
32+
33+
// Warning or errors can be collected in a slice type
34+
var diags diag.Diagnostics
35+
36+
repos, err := client.RepoListSync()
37+
if err != nil {
38+
diags = append(diags, diag.Diagnostic{
39+
Severity: diag.Error,
40+
Summary: "Failed to retrieve repositories",
41+
Detail: err.Error(),
42+
})
43+
44+
return diags
45+
}
46+
47+
id := make([]string, 0)
48+
slugs := make([]string, 0)
49+
50+
for _, repo := range repos {
51+
id = append(id, repo.Slug)
52+
slugs = append(slugs, repo.Slug)
53+
}
54+
55+
sort.Strings(slugs)
56+
d.Set("repositories", slugs)
57+
58+
d.SetId(utils.BuildChecksumID(id))
59+
60+
return diags
61+
}

drone/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ func Provider() *schema.Provider {
3939
"drone_user": resourceUser(),
4040
},
4141
DataSourcesMap: map[string]*schema.Resource{
42+
"drone_repo": dataSourceRepo(),
43+
"drone_repos": dataSourceRepos(),
4244
"drone_template": dataSourceTemplate(),
4345
"drone_templates": dataSourceTemplates(),
4446
"drone_user": dataSourceUser(),

0 commit comments

Comments
 (0)