github.RepositoryCollaborators
Explore with Pulumi AI
Provides a GitHub repository collaborators resource.
Note: github.RepositoryCollaborators cannot be used in conjunction with github.RepositoryCollaborator and github.TeamRepository or they will fight over what your policy should be.
This resource allows you to manage all collaborators for repositories in your organization or personal account. For organization repositories, collaborators can have explicit (and differing levels of) read, write, or administrator access to specific repositories, without giving the user full organization membership. For personal repositories, collaborators can only be granted write (implicitly includes read) permission.
When applied, an invitation will be sent to the user to become a collaborators on a repository. When destroyed, either the invitation will be cancelled or the collaborators will be removed from the repository.
This resource is authoritative. For adding a collaborator to a repo in a non-authoritative manner, use github.RepositoryCollaborator instead.
Further documentation on GitHub collaborators:
- Adding outside collaborators to your personal repositories
- Adding outside collaborators to repositories in your organization
- Converting an organization member to an outside collaborators
Example Usage
import * as pulumi from "@pulumi/pulumi";
import * as github from "@pulumi/github";
// Add collaborators to a repository
const someTeam = new github.Team("some_team", {
    name: "SomeTeam",
    description: "Some cool team",
});
const someRepo = new github.Repository("some_repo", {name: "some-repo"});
const someRepoCollaborators = new github.RepositoryCollaborators("some_repo_collaborators", {
    repository: someRepo.name,
    users: [{
        permission: "admin",
        username: "SomeUser",
    }],
    teams: [{
        permission: "pull",
        teamId: someTeam.slug,
    }],
});
import pulumi
import pulumi_github as github
# Add collaborators to a repository
some_team = github.Team("some_team",
    name="SomeTeam",
    description="Some cool team")
some_repo = github.Repository("some_repo", name="some-repo")
some_repo_collaborators = github.RepositoryCollaborators("some_repo_collaborators",
    repository=some_repo.name,
    users=[{
        "permission": "admin",
        "username": "SomeUser",
    }],
    teams=[{
        "permission": "pull",
        "team_id": some_team.slug,
    }])
package main
import (
	"github.com/pulumi/pulumi-github/sdk/v6/go/github"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		// Add collaborators to a repository
		someTeam, err := github.NewTeam(ctx, "some_team", &github.TeamArgs{
			Name:        pulumi.String("SomeTeam"),
			Description: pulumi.String("Some cool team"),
		})
		if err != nil {
			return err
		}
		someRepo, err := github.NewRepository(ctx, "some_repo", &github.RepositoryArgs{
			Name: pulumi.String("some-repo"),
		})
		if err != nil {
			return err
		}
		_, err = github.NewRepositoryCollaborators(ctx, "some_repo_collaborators", &github.RepositoryCollaboratorsArgs{
			Repository: someRepo.Name,
			Users: github.RepositoryCollaboratorsUserArray{
				&github.RepositoryCollaboratorsUserArgs{
					Permission: pulumi.String("admin"),
					Username:   pulumi.String("SomeUser"),
				},
			},
			Teams: github.RepositoryCollaboratorsTeamArray{
				&github.RepositoryCollaboratorsTeamArgs{
					Permission: pulumi.String("pull"),
					TeamId:     someTeam.Slug,
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Github = Pulumi.Github;
return await Deployment.RunAsync(() => 
{
    // Add collaborators to a repository
    var someTeam = new Github.Team("some_team", new()
    {
        Name = "SomeTeam",
        Description = "Some cool team",
    });
    var someRepo = new Github.Repository("some_repo", new()
    {
        Name = "some-repo",
    });
    var someRepoCollaborators = new Github.RepositoryCollaborators("some_repo_collaborators", new()
    {
        Repository = someRepo.Name,
        Users = new[]
        {
            new Github.Inputs.RepositoryCollaboratorsUserArgs
            {
                Permission = "admin",
                Username = "SomeUser",
            },
        },
        Teams = new[]
        {
            new Github.Inputs.RepositoryCollaboratorsTeamArgs
            {
                Permission = "pull",
                TeamId = someTeam.Slug,
            },
        },
    });
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.github.Team;
import com.pulumi.github.TeamArgs;
import com.pulumi.github.Repository;
import com.pulumi.github.RepositoryArgs;
import com.pulumi.github.RepositoryCollaborators;
import com.pulumi.github.RepositoryCollaboratorsArgs;
import com.pulumi.github.inputs.RepositoryCollaboratorsUserArgs;
import com.pulumi.github.inputs.RepositoryCollaboratorsTeamArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }
    public static void stack(Context ctx) {
        // Add collaborators to a repository
        var someTeam = new Team("someTeam", TeamArgs.builder()
            .name("SomeTeam")
            .description("Some cool team")
            .build());
        var someRepo = new Repository("someRepo", RepositoryArgs.builder()
            .name("some-repo")
            .build());
        var someRepoCollaborators = new RepositoryCollaborators("someRepoCollaborators", RepositoryCollaboratorsArgs.builder()
            .repository(someRepo.name())
            .users(RepositoryCollaboratorsUserArgs.builder()
                .permission("admin")
                .username("SomeUser")
                .build())
            .teams(RepositoryCollaboratorsTeamArgs.builder()
                .permission("pull")
                .teamId(someTeam.slug())
                .build())
            .build());
    }
}
resources:
  # Add collaborators to a repository
  someTeam:
    type: github:Team
    name: some_team
    properties:
      name: SomeTeam
      description: Some cool team
  someRepo:
    type: github:Repository
    name: some_repo
    properties:
      name: some-repo
  someRepoCollaborators:
    type: github:RepositoryCollaborators
    name: some_repo_collaborators
    properties:
      repository: ${someRepo.name}
      users:
        - permission: admin
          username: SomeUser
      teams:
        - permission: pull
          teamId: ${someTeam.slug}
Create RepositoryCollaborators Resource
Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.
Constructor syntax
new RepositoryCollaborators(name: string, args: RepositoryCollaboratorsArgs, opts?: CustomResourceOptions);@overload
def RepositoryCollaborators(resource_name: str,
                            args: RepositoryCollaboratorsArgs,
                            opts: Optional[ResourceOptions] = None)
@overload
def RepositoryCollaborators(resource_name: str,
                            opts: Optional[ResourceOptions] = None,
                            repository: Optional[str] = None,
                            ignore_teams: Optional[Sequence[RepositoryCollaboratorsIgnoreTeamArgs]] = None,
                            teams: Optional[Sequence[RepositoryCollaboratorsTeamArgs]] = None,
                            users: Optional[Sequence[RepositoryCollaboratorsUserArgs]] = None)func NewRepositoryCollaborators(ctx *Context, name string, args RepositoryCollaboratorsArgs, opts ...ResourceOption) (*RepositoryCollaborators, error)public RepositoryCollaborators(string name, RepositoryCollaboratorsArgs args, CustomResourceOptions? opts = null)
public RepositoryCollaborators(String name, RepositoryCollaboratorsArgs args)
public RepositoryCollaborators(String name, RepositoryCollaboratorsArgs args, CustomResourceOptions options)
type: github:RepositoryCollaborators
properties: # The arguments to resource properties.
options: # Bag of options to control resource's behavior.
Parameters
- name string
- The unique name of the resource.
- args RepositoryCollaboratorsArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- resource_name str
- The unique name of the resource.
- args RepositoryCollaboratorsArgs
- The arguments to resource properties.
- opts ResourceOptions
- Bag of options to control resource's behavior.
- ctx Context
- Context object for the current deployment.
- name string
- The unique name of the resource.
- args RepositoryCollaboratorsArgs
- The arguments to resource properties.
- opts ResourceOption
- Bag of options to control resource's behavior.
- name string
- The unique name of the resource.
- args RepositoryCollaboratorsArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- name String
- The unique name of the resource.
- args RepositoryCollaboratorsArgs
- The arguments to resource properties.
- options CustomResourceOptions
- Bag of options to control resource's behavior.
Constructor example
The following reference example uses placeholder values for all input properties.
var repositoryCollaboratorsResource = new Github.RepositoryCollaborators("repositoryCollaboratorsResource", new()
{
    Repository = "string",
    IgnoreTeams = new[]
    {
        new Github.Inputs.RepositoryCollaboratorsIgnoreTeamArgs
        {
            TeamId = "string",
        },
    },
    Teams = new[]
    {
        new Github.Inputs.RepositoryCollaboratorsTeamArgs
        {
            TeamId = "string",
            Permission = "string",
        },
    },
    Users = new[]
    {
        new Github.Inputs.RepositoryCollaboratorsUserArgs
        {
            Username = "string",
            Permission = "string",
        },
    },
});
example, err := github.NewRepositoryCollaborators(ctx, "repositoryCollaboratorsResource", &github.RepositoryCollaboratorsArgs{
	Repository: pulumi.String("string"),
	IgnoreTeams: github.RepositoryCollaboratorsIgnoreTeamArray{
		&github.RepositoryCollaboratorsIgnoreTeamArgs{
			TeamId: pulumi.String("string"),
		},
	},
	Teams: github.RepositoryCollaboratorsTeamArray{
		&github.RepositoryCollaboratorsTeamArgs{
			TeamId:     pulumi.String("string"),
			Permission: pulumi.String("string"),
		},
	},
	Users: github.RepositoryCollaboratorsUserArray{
		&github.RepositoryCollaboratorsUserArgs{
			Username:   pulumi.String("string"),
			Permission: pulumi.String("string"),
		},
	},
})
var repositoryCollaboratorsResource = new RepositoryCollaborators("repositoryCollaboratorsResource", RepositoryCollaboratorsArgs.builder()
    .repository("string")
    .ignoreTeams(RepositoryCollaboratorsIgnoreTeamArgs.builder()
        .teamId("string")
        .build())
    .teams(RepositoryCollaboratorsTeamArgs.builder()
        .teamId("string")
        .permission("string")
        .build())
    .users(RepositoryCollaboratorsUserArgs.builder()
        .username("string")
        .permission("string")
        .build())
    .build());
repository_collaborators_resource = github.RepositoryCollaborators("repositoryCollaboratorsResource",
    repository="string",
    ignore_teams=[{
        "team_id": "string",
    }],
    teams=[{
        "team_id": "string",
        "permission": "string",
    }],
    users=[{
        "username": "string",
        "permission": "string",
    }])
const repositoryCollaboratorsResource = new github.RepositoryCollaborators("repositoryCollaboratorsResource", {
    repository: "string",
    ignoreTeams: [{
        teamId: "string",
    }],
    teams: [{
        teamId: "string",
        permission: "string",
    }],
    users: [{
        username: "string",
        permission: "string",
    }],
});
type: github:RepositoryCollaborators
properties:
    ignoreTeams:
        - teamId: string
    repository: string
    teams:
        - permission: string
          teamId: string
    users:
        - permission: string
          username: string
RepositoryCollaborators Resource Properties
To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.
Inputs
In Python, inputs that are objects can be passed either as argument classes or as dictionary literals.
The RepositoryCollaborators resource accepts the following input properties:
- Repository string
- The GitHub repository.
- IgnoreTeams List<RepositoryCollaborators Ignore Team> 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- Teams
List<RepositoryCollaborators Team> 
- List of teams to grant access to the repository.
- Users
List<RepositoryCollaborators User> 
- List of users to grant access to the repository.
- Repository string
- The GitHub repository.
- IgnoreTeams []RepositoryCollaborators Ignore Team Args 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- Teams
[]RepositoryCollaborators Team Args 
- List of teams to grant access to the repository.
- Users
[]RepositoryCollaborators User Args 
- List of users to grant access to the repository.
- repository String
- The GitHub repository.
- ignoreTeams List<RepositoryCollaborators Ignore Team> 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- teams
List<RepositoryCollaborators Team> 
- List of teams to grant access to the repository.
- users
List<RepositoryCollaborators User> 
- List of users to grant access to the repository.
- repository string
- The GitHub repository.
- ignoreTeams RepositoryCollaborators Ignore Team[] 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- teams
RepositoryCollaborators Team[] 
- List of teams to grant access to the repository.
- users
RepositoryCollaborators User[] 
- List of users to grant access to the repository.
- repository str
- The GitHub repository.
- ignore_teams Sequence[RepositoryCollaborators Ignore Team Args] 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- teams
Sequence[RepositoryCollaborators Team Args] 
- List of teams to grant access to the repository.
- users
Sequence[RepositoryCollaborators User Args] 
- List of users to grant access to the repository.
- repository String
- The GitHub repository.
- ignoreTeams List<Property Map>
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- teams List<Property Map>
- List of teams to grant access to the repository.
- users List<Property Map>
- List of users to grant access to the repository.
Outputs
All input properties are implicitly available as output properties. Additionally, the RepositoryCollaborators resource produces the following output properties:
- Id string
- The provider-assigned unique ID for this managed resource.
- InvitationIds Dictionary<string, string>
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- Id string
- The provider-assigned unique ID for this managed resource.
- InvitationIds map[string]string
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- id String
- The provider-assigned unique ID for this managed resource.
- invitationIds Map<String,String>
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- id string
- The provider-assigned unique ID for this managed resource.
- invitationIds {[key: string]: string}
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- id str
- The provider-assigned unique ID for this managed resource.
- invitation_ids Mapping[str, str]
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- id String
- The provider-assigned unique ID for this managed resource.
- invitationIds Map<String>
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
Look up Existing RepositoryCollaborators Resource
Get an existing RepositoryCollaborators resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.
public static get(name: string, id: Input<ID>, state?: RepositoryCollaboratorsState, opts?: CustomResourceOptions): RepositoryCollaborators@staticmethod
def get(resource_name: str,
        id: str,
        opts: Optional[ResourceOptions] = None,
        ignore_teams: Optional[Sequence[RepositoryCollaboratorsIgnoreTeamArgs]] = None,
        invitation_ids: Optional[Mapping[str, str]] = None,
        repository: Optional[str] = None,
        teams: Optional[Sequence[RepositoryCollaboratorsTeamArgs]] = None,
        users: Optional[Sequence[RepositoryCollaboratorsUserArgs]] = None) -> RepositoryCollaboratorsfunc GetRepositoryCollaborators(ctx *Context, name string, id IDInput, state *RepositoryCollaboratorsState, opts ...ResourceOption) (*RepositoryCollaborators, error)public static RepositoryCollaborators Get(string name, Input<string> id, RepositoryCollaboratorsState? state, CustomResourceOptions? opts = null)public static RepositoryCollaborators get(String name, Output<String> id, RepositoryCollaboratorsState state, CustomResourceOptions options)resources:  _:    type: github:RepositoryCollaborators    get:      id: ${id}- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- resource_name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- IgnoreTeams List<RepositoryCollaborators Ignore Team> 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- InvitationIds Dictionary<string, string>
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- Repository string
- The GitHub repository.
- Teams
List<RepositoryCollaborators Team> 
- List of teams to grant access to the repository.
- Users
List<RepositoryCollaborators User> 
- List of users to grant access to the repository.
- IgnoreTeams []RepositoryCollaborators Ignore Team Args 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- InvitationIds map[string]string
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- Repository string
- The GitHub repository.
- Teams
[]RepositoryCollaborators Team Args 
- List of teams to grant access to the repository.
- Users
[]RepositoryCollaborators User Args 
- List of users to grant access to the repository.
- ignoreTeams List<RepositoryCollaborators Ignore Team> 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- invitationIds Map<String,String>
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- repository String
- The GitHub repository.
- teams
List<RepositoryCollaborators Team> 
- List of teams to grant access to the repository.
- users
List<RepositoryCollaborators User> 
- List of users to grant access to the repository.
- ignoreTeams RepositoryCollaborators Ignore Team[] 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- invitationIds {[key: string]: string}
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- repository string
- The GitHub repository.
- teams
RepositoryCollaborators Team[] 
- List of teams to grant access to the repository.
- users
RepositoryCollaborators User[] 
- List of users to grant access to the repository.
- ignore_teams Sequence[RepositoryCollaborators Ignore Team Args] 
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- invitation_ids Mapping[str, str]
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- repository str
- The GitHub repository.
- teams
Sequence[RepositoryCollaborators Team Args] 
- List of teams to grant access to the repository.
- users
Sequence[RepositoryCollaborators User Args] 
- List of users to grant access to the repository.
- ignoreTeams List<Property Map>
- List of teams to ignore when checking for repository access. This supports ignoring teams granted access at an organizational level.
- invitationIds Map<String>
- Map of usernames to invitation ID for any users added as part of creation of this resource to
be used in github.UserInvitationAccepter.
- repository String
- The GitHub repository.
- teams List<Property Map>
- List of teams to grant access to the repository.
- users List<Property Map>
- List of users to grant access to the repository.
Supporting Types
RepositoryCollaboratorsIgnoreTeam, RepositoryCollaboratorsIgnoreTeamArgs        
- TeamId string
- ID or slug of the team to ignore.
- TeamId string
- ID or slug of the team to ignore.
- teamId String
- ID or slug of the team to ignore.
- teamId string
- ID or slug of the team to ignore.
- team_id str
- ID or slug of the team to ignore.
- teamId String
- ID or slug of the team to ignore.
RepositoryCollaboratorsTeam, RepositoryCollaboratorsTeamArgs      
- TeamId string
- The GitHub team id or the GitHub team slug.
- Permission string
- The permission of the outside collaborators for the repository.
Must be one of pull,triage,push,maintain,adminor the name of an existing custom repository role within the organisation. Defaults topull. Must bepushfor personal repositories. Defaults topush.
- TeamId string
- The GitHub team id or the GitHub team slug.
- Permission string
- The permission of the outside collaborators for the repository.
Must be one of pull,triage,push,maintain,adminor the name of an existing custom repository role within the organisation. Defaults topull. Must bepushfor personal repositories. Defaults topush.
- teamId String
- The GitHub team id or the GitHub team slug.
- permission String
- The permission of the outside collaborators for the repository.
Must be one of pull,triage,push,maintain,adminor the name of an existing custom repository role within the organisation. Defaults topull. Must bepushfor personal repositories. Defaults topush.
- teamId string
- The GitHub team id or the GitHub team slug.
- permission string
- The permission of the outside collaborators for the repository.
Must be one of pull,triage,push,maintain,adminor the name of an existing custom repository role within the organisation. Defaults topull. Must bepushfor personal repositories. Defaults topush.
- team_id str
- The GitHub team id or the GitHub team slug.
- permission str
- The permission of the outside collaborators for the repository.
Must be one of pull,triage,push,maintain,adminor the name of an existing custom repository role within the organisation. Defaults topull. Must bepushfor personal repositories. Defaults topush.
- teamId String
- The GitHub team id or the GitHub team slug.
- permission String
- The permission of the outside collaborators for the repository.
Must be one of pull,triage,push,maintain,adminor the name of an existing custom repository role within the organisation. Defaults topull. Must bepushfor personal repositories. Defaults topush.
RepositoryCollaboratorsUser, RepositoryCollaboratorsUserArgs      
- Username string
- The user to add to the repository as a collaborator.
- Permission string
- The permission of the outside collaborators for the repository.
Must be one of pull,push,maintain,triageoradminor the name of an existing custom repository role within the organization for organization-owned repositories. Must bepushfor personal repositories. Defaults topush.
- Username string
- The user to add to the repository as a collaborator.
- Permission string
- The permission of the outside collaborators for the repository.
Must be one of pull,push,maintain,triageoradminor the name of an existing custom repository role within the organization for organization-owned repositories. Must bepushfor personal repositories. Defaults topush.
- username String
- The user to add to the repository as a collaborator.
- permission String
- The permission of the outside collaborators for the repository.
Must be one of pull,push,maintain,triageoradminor the name of an existing custom repository role within the organization for organization-owned repositories. Must bepushfor personal repositories. Defaults topush.
- username string
- The user to add to the repository as a collaborator.
- permission string
- The permission of the outside collaborators for the repository.
Must be one of pull,push,maintain,triageoradminor the name of an existing custom repository role within the organization for organization-owned repositories. Must bepushfor personal repositories. Defaults topush.
- username str
- The user to add to the repository as a collaborator.
- permission str
- The permission of the outside collaborators for the repository.
Must be one of pull,push,maintain,triageoradminor the name of an existing custom repository role within the organization for organization-owned repositories. Must bepushfor personal repositories. Defaults topush.
- username String
- The user to add to the repository as a collaborator.
- permission String
- The permission of the outside collaborators for the repository.
Must be one of pull,push,maintain,triageoradminor the name of an existing custom repository role within the organization for organization-owned repositories. Must bepushfor personal repositories. Defaults topush.
Import
GitHub Repository Collaborators can be imported using the name name, e.g.
$ pulumi import github:index/repositoryCollaborators:RepositoryCollaborators collaborators terraform
To learn more about importing existing cloud resources, see Importing resources.
Package Details
- Repository
- GitHub pulumi/pulumi-github
- License
- Apache-2.0
- Notes
- This Pulumi package is based on the githubTerraform Provider.