Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GitHub user #14570

Merged
merged 3 commits into from
May 17, 2017
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 118 additions & 0 deletions builtin/providers/github/data_source_github_user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package github

import (
"context"
"log"
"strconv"

"github.com/hashicorp/terraform/helper/schema"
)

func dataSourceGithubUser() *schema.Resource {
return &schema.Resource{
Read: dataSourceGithubUserRead,

Schema: map[string]*schema.Schema{
"username": &schema.Schema{
Type: schema.TypeString,
Required: true,
},
"login": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"avatar_url": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"gravatar_id": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"site_admin": &schema.Schema{
Type: schema.TypeBool,
Computed: true,
},
"name": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"company": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"blog": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"location": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"email": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"bio": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"public_repos": &schema.Schema{
Type: schema.TypeInt,
Computed: true,
},
"public_gists": &schema.Schema{
Type: schema.TypeInt,
Computed: true,
},
"followers": &schema.Schema{
Type: schema.TypeInt,
Computed: true,
},
"following": &schema.Schema{
Type: schema.TypeInt,
Computed: true,
},
"created_at": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"updated_at": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
},
}
}

func dataSourceGithubUserRead(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Refreshing Gitub User: %s", d.Id())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On an initial run the id is nil, could change the log statement to print the username as it's a required parameter

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, I can use that indeed.


username := d.Get("username").(string)
client := meta.(*Organization).client

user, _, err := client.Users.Get(context.TODO(), username)
if err != nil {
return err
}

d.SetId(strconv.Itoa(*user.ID))
d.Set("login", *user.Login)
d.Set("avatar_url", *user.AvatarURL)
d.Set("gravatar_id", *user.GravatarID)
d.Set("site_admin", *user.SiteAdmin)
d.Set("company", *user.Company)
d.Set("blog", *user.Blog)
d.Set("location", *user.Location)
d.Set("name", *user.Name)
d.Set("email", *user.Email)
d.Set("bio", *user.Bio)
d.Set("public_repos", *user.PublicRepos)
d.Set("public_gists", *user.PublicGists)
d.Set("followers", *user.Followers)
d.Set("following", *user.Following)
d.Set("created_at", *user.CreatedAt)
d.Set("updated_at", *user.UpdatedAt)

return nil
}
4 changes: 4 additions & 0 deletions builtin/providers/github/provider.go
Original file line number Diff line number Diff line change
@@ -44,6 +44,10 @@ func Provider() terraform.ResourceProvider {
"github_branch_protection": resourceGithubBranchProtection(),
},

DataSourcesMap: map[string]*schema.Resource{
"github_user": dataSourceGithubUser(),
},

ConfigureFunc: providerConfigure,
}
}
43 changes: 43 additions & 0 deletions website/source/docs/providers/github/d/user.html.markdown
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
layout: "github"
page_title: "Github: github_user"
sidebar_current: "docs-github-datasource-user"
description: |-
Get information on a Github user.
---

# github\_user

Use this data source to retrieve information about a Github user.

## Example Usage

```
data "github_user" "example" {
username = "example"
}
```

## Argument Reference

* `username` - (Required) The username.

## Attributes Reference

* `login` - the user's login.
* `avatar_url` - the user's avatar URL.
* `gravatar_id` - the user's gravatar ID.
* `site_admin` - whether the user is a Github admin.
* `name` - the user's full name.
* `company` - the user's company name.
* `blog` - the user's blog location.
* `location` - the user's location.
* `email` - the user's email.
* `bio` - the user's bio.
* `public_repos` - the number of public repositories.
* `public_gists` - the number of public gists.
* `followers` - the number of followers.
* `following` - the number of following users.
* `created_at` - the creation date.
* `updated_at` - the update date.

10 changes: 10 additions & 0 deletions website/source/layouts/github.erb
Original file line number Diff line number Diff line change
@@ -10,6 +10,16 @@
<a href="/docs/providers/github/index.html">GitHub Provider</a>
</li>

<li<%= sidebar_current(/^docs-github-datasource/) %>>
<a href="#">Data Sources</a>
<ul class="nav nav-visible">

<li<%= sidebar_current("docs-github-datasource-user") %>>
<a href="/docs/providers/github/d/user.html">github_user</a>
</li>
</ul>
</li>

<li<%= sidebar_current("docs-github-resource") %>>
<a href="#">Resources</a>
<ul class="nav nav-visible">