forked from integrations/terraform-provider-github
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request integrations#109 from terraform-providers/f-new-ds…
…-repository New Data Source: github_repository
- Loading branch information
Showing
5 changed files
with
360 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,167 @@ | ||
package github | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
"log" | ||
"strings" | ||
|
||
"github.com/hashicorp/terraform/helper/schema" | ||
) | ||
|
||
func dataSourceGithubRepository() *schema.Resource { | ||
return &schema.Resource{ | ||
Read: dataSourceGithubRepositoryRead, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"full_name": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
ConflictsWith: []string{"name"}, | ||
}, | ||
"name": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
ConflictsWith: []string{"full_name"}, | ||
}, | ||
|
||
"description": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"homepage_url": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"private": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"has_issues": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"has_projects": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"has_downloads": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"has_wiki": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"allow_merge_commit": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"allow_squash_merge": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"allow_rebase_merge": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"default_branch": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"archived": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"topics": { | ||
Type: schema.TypeList, | ||
Elem: &schema.Schema{Type: schema.TypeString}, | ||
Computed: true, | ||
}, | ||
"html_url": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"ssh_clone_url": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"svn_url": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"git_clone_url": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"http_clone_url": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func dataSourceGithubRepositoryRead(d *schema.ResourceData, meta interface{}) error { | ||
client := meta.(*Organization).client | ||
|
||
orgName := meta.(*Organization).name | ||
var repoName string | ||
|
||
if fullName, ok := d.GetOk("full_name"); ok { | ||
var err error | ||
orgName, repoName, err = splitRepoFullName(fullName.(string)) | ||
if err != nil { | ||
return err | ||
} | ||
} | ||
if name, ok := d.GetOk("name"); ok { | ||
repoName = name.(string) | ||
} | ||
|
||
if repoName == "" { | ||
return fmt.Errorf("One of %q or %q has to be provided", "full_name", "name") | ||
} | ||
|
||
log.Printf("[DEBUG] Reading GitHub repository %s/%s", orgName, repoName) | ||
repo, _, err := client.Repositories.Get(context.TODO(), orgName, repoName) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
d.SetId(repoName) | ||
|
||
d.Set("name", repoName) | ||
d.Set("description", repo.Description) | ||
d.Set("homepage_url", repo.Homepage) | ||
d.Set("private", repo.Private) | ||
d.Set("has_issues", repo.HasIssues) | ||
d.Set("has_wiki", repo.HasWiki) | ||
d.Set("allow_merge_commit", repo.AllowMergeCommit) | ||
d.Set("allow_squash_merge", repo.AllowSquashMerge) | ||
d.Set("allow_rebase_merge", repo.AllowRebaseMerge) | ||
d.Set("has_downloads", repo.HasDownloads) | ||
d.Set("full_name", repo.FullName) | ||
d.Set("default_branch", repo.DefaultBranch) | ||
d.Set("html_url", repo.HTMLURL) | ||
d.Set("ssh_clone_url", repo.SSHURL) | ||
d.Set("svn_url", repo.SVNURL) | ||
d.Set("git_clone_url", repo.GitURL) | ||
d.Set("http_clone_url", repo.CloneURL) | ||
d.Set("archived", repo.Archived) | ||
|
||
err = d.Set("topics", flattenStringList(repo.Topics)) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func splitRepoFullName(fullName string) (string, string, error) { | ||
parts := strings.Split(fullName, "/") | ||
if len(parts) != 2 { | ||
return "", "", fmt.Errorf("Unexpected full name format (%q), expected org/repo_name", fullName) | ||
} | ||
return parts[0], parts[1], nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
package github | ||
|
||
import ( | ||
"fmt" | ||
"regexp" | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform/helper/resource" | ||
) | ||
|
||
func TestAccGithubRepositoryDataSource_fullName_noMatchReturnsError(t *testing.T) { | ||
fullName := "klsafj_23434_doesnt_exist/not-exists" | ||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { | ||
testAccPreCheck(t) | ||
}, | ||
Providers: testAccProviders, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testAccCheckGithubRepositoryDataSourceConfig_fullName(fullName), | ||
ExpectError: regexp.MustCompile(`Not Found`), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func TestAccGithubRepositoryDataSource_name_noMatchReturnsError(t *testing.T) { | ||
name := "not-exists" | ||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { | ||
testAccPreCheck(t) | ||
}, | ||
Providers: testAccProviders, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testAccCheckGithubRepositoryDataSourceConfig_name(name), | ||
ExpectError: regexp.MustCompile(`Not Found`), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func TestAccGithubRepositoryDataSource_fullName_existing(t *testing.T) { | ||
fullName := "terraformtesting/test-repo" | ||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { | ||
testAccPreCheck(t) | ||
}, | ||
Providers: testAccProviders, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testAccCheckGithubRepositoryDataSourceConfig_fullName(fullName), | ||
Check: testRepoCheck(), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func TestAccGithubRepositoryDataSource_name_existing(t *testing.T) { | ||
name := "test-repo" | ||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { | ||
testAccPreCheck(t) | ||
}, | ||
Providers: testAccProviders, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testAccCheckGithubRepositoryDataSourceConfig_name(name), | ||
Check: testRepoCheck(), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testRepoCheck() resource.TestCheckFunc { | ||
return resource.ComposeAggregateTestCheckFunc( | ||
resource.TestCheckResourceAttr("data.github_repository.test", "id", "test-repo"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "name", "test-repo"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "private", "false"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "description", "Test description, used in GitHub Terraform provider acceptance test."), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "homepage_url", "http://www.example.com"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "has_issues", "true"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "has_wiki", "true"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "allow_merge_commit", "true"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "allow_squash_merge", "true"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "allow_rebase_merge", "true"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "has_downloads", "true"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "full_name", "terraformtesting/test-repo"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "default_branch", "master"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "html_url", "https://github.com/terraformtesting/test-repo"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "ssh_clone_url", "git@github.com:terraformtesting/test-repo.git"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "svn_url", "https://github.com/terraformtesting/test-repo"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "git_clone_url", "git://github.com/terraformtesting/test-repo.git"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "http_clone_url", "https://github.com/terraformtesting/test-repo.git"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "archived", "false"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "topics.#", "2"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "topics.0", "second-test-topic"), | ||
resource.TestCheckResourceAttr("data.github_repository.test", "topics.1", "test-topic"), | ||
) | ||
} | ||
|
||
func testAccCheckGithubRepositoryDataSourceConfig_fullName(fullName string) string { | ||
return fmt.Sprintf(` | ||
data "github_repository" "test" { | ||
full_name = "%s" | ||
} | ||
`, fullName) | ||
} | ||
|
||
func testAccCheckGithubRepositoryDataSourceConfig_name(name string) string { | ||
return fmt.Sprintf(` | ||
data "github_repository" "test" { | ||
name = "%s" | ||
} | ||
`, name) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
--- | ||
layout: "github" | ||
page_title: "GitHub: github_repository" | ||
sidebar_current: "docs-github-datasource-repository" | ||
description: |- | ||
Get details about GitHub repository | ||
--- | ||
|
||
# github_repository | ||
|
||
Use this data source to retrieve information about a GitHub repository. | ||
|
||
## Example Usage | ||
|
||
```hcl | ||
data "github_repository" "example" { | ||
full_name = "hashicorp/terraform" | ||
} | ||
``` | ||
|
||
## Argument Reference | ||
|
||
The following arguments are supported: | ||
|
||
* `name` - (Optional) The name of the repository. | ||
|
||
* `full_name` - (Optional) Full name of the repository (in `org/name` format). | ||
|
||
## Attributes Reference | ||
|
||
* `description` - A description of the repository. | ||
|
||
* `homepage_url` - URL of a page describing the project. | ||
|
||
* `private` - Whether the repository is private. | ||
|
||
* `has_issues` - Whether the repository has GitHub Issues enabled. | ||
|
||
* `has_projects` - Whether the repository has the GitHub Projects enabled. | ||
|
||
* `has_wiki` - Whether the repository has the GitHub Wiki enabled. | ||
|
||
* `allow_merge_commit` - Whether the repository allows merge commits. | ||
|
||
* `allow_squash_merge` - Whether the repository allows squash merges. | ||
|
||
* `allow_rebase_merge` - Whether the repository allows rebase merges. | ||
|
||
* `has_downloads` - Whether the repository has Downloads feature enabled. | ||
|
||
* `default_branch` - The name of the default branch of the repository. | ||
|
||
* `archived` - Whether the repository is archived. | ||
|
||
* `topics` - The list of topics of the repository. | ||
|
||
* `html_url` - URL to the repository on the web. | ||
|
||
* `ssh_clone_url` - URL that can be provided to `git clone` to clone the | ||
repository via SSH. | ||
|
||
* `http_clone_url` - URL that can be provided to `git clone` to clone the | ||
repository via HTTPS. | ||
|
||
* `git_clone_url` - URL that can be provided to `git clone` to clone the | ||
repository anonymously via the git protocol. | ||
|
||
* `svn_url` - URL that can be provided to `svn checkout` to check out | ||
the repository via GitHub's Subversion protocol emulation. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters