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

Add support for gitlab branch protection #68

Merged
merged 40 commits into from
May 2, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
b7d1f14
Add support for branch protection
waseem-h Oct 18, 2018
d9f1e4f
Add gitlab_project_branch_protection to provider
waseem-h Oct 18, 2018
8da2712
Update resource name
waseem-h Oct 18, 2018
8e029ca
Merge branch 'more-resources' of github.com:stakater/terraform-provid…
waseem-h Oct 18, 2018
7408b07
Update branch protection logic to recreate branch protection rule
waseem-h Oct 24, 2018
7ca347a
Don't update default branch
waseem-h Oct 24, 2018
ad51d17
Add default branch back
waseem-h Nov 27, 2018
e646c96
Add initial gitlab slack service implementation
hypnoglow Oct 16, 2018
cae98b9
Update slack service resource: rebase on go-gitlab vendor update, add…
Jan 22, 2019
d34380c
Update slack service resource: refactor update function
Jan 22, 2019
b71f32a
Update slack service resource: improve read func: handle 404
Jan 22, 2019
8fd7886
Add slack service tests
Jan 14, 2019
da07f0f
Update deploy key resource: allow imports
Feb 10, 2019
8fd3ac9
Add slack service resource doc
Jan 22, 2019
a8e6a0b
Update slack service tests: add import and improvments
Mar 4, 2019
6dfd2cb
Update slack service: fix parameters not updated when removed
Mar 5, 2019
394822b
Update user datasource: allow searching by id and add attributes
Mar 8, 2019
51afe1e
website: make example server URL non-clickable
nfagerlund Mar 22, 2019
149b695
fix project cluster acc test by adding a fake pem certificate
matejvelikonja Mar 25, 2019
7e77ac4
Update project_variable.html.markdown
xM8WVqaG Mar 28, 2019
e5a9d51
Update group_variable.html.markdown
xM8WVqaG Mar 28, 2019
07f5886
Update project_membership.html.markdown
xM8WVqaG Mar 28, 2019
7009bcd
Bump go-gitlab to v0.16.1
bilby91 Apr 10, 2019
9a67927
Updated access levels
usamaahmadkhan Apr 24, 2019
51b4200
Added test cases for protected branch
usamaahmadkhan Apr 24, 2019
748c721
Merge branch 'master' of https://github.com/terraform-providers/terra…
usamaahmadkhan Apr 24, 2019
2978c43
Documentation for branch protection
usamaahmadkhan Apr 24, 2019
8ff8d45
Fix acc tests
roidelapluie May 1, 2019
841b061
Merge commit 'refs/pull/112/head' of https://github.com/terraform-pro…
roidelapluie May 1, 2019
b47c9bf
Merge pull request #113 from xM8WVqaG/patch-1
roidelapluie May 1, 2019
959dabd
Merge pull request #96 from jorcau/implement-gitlab-service-slack
roidelapluie May 1, 2019
53ada7d
Merge pull request #97 from jorcau/add-import-deploy-keys
roidelapluie May 1, 2019
c9f379d
Merge pull request #102 from jorcau/update_user_datasource
roidelapluie May 1, 2019
91b4496
Merge pull request #108 from terraform-providers/mar19_example_url
roidelapluie May 1, 2019
287bf3f
Update CHANGELOG.md
roidelapluie May 1, 2019
6c62c66
Bump next version to 1.3.0
roidelapluie May 1, 2019
b87332d
Merge pull request #118 from terraform-providers/acctest
roidelapluie May 2, 2019
d94cf69
Merge commit 'refs/pull/114/head' of https://github.com/terraform-pro…
roidelapluie May 2, 2019
3ddf4ae
Fix test about slack
roidelapluie May 2, 2019
11c7e32
Merge branch 'more-resources' of gh:stakater/terraform-provider-gitlab
roidelapluie May 2, 2019
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
45 changes: 29 additions & 16 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,32 @@
dist: trusty
sudo: required
services:
- docker
language: go
go:
- "1.11.x"
env:
- GOFLAGS=-mod=vendor GO111MODULE=on GITLAB_BASE_URL=http://127.0.0.1:8080/api/v4 GITLAB_TOKEN=ACCTEST
matrix:
fast_finish: false
include:
- name: unit tests
env: MAKE_TARGET=test GOFLAGS=-mod=vendor GO111MODULE=on
go: "1.11.x"
- name: acceptance tests
env: MAKE_TARGET=testacc GOFLAGS=-mod=vendor GO111MODULE=on GITLAB_BASE_URL=http://127.0.0.1:8080/api/v4 GITLAB_TOKEN=ACCTEST
go: "1.11.x"
- name: govet tests
env: MAKE_TARGET=vet GOFLAGS=-mod=vendor GO111MODULE=on
go: "1.11.x"
- name: website tests
env: MAKE_TARGET=website-test GOFLAGS=-mod=vendor GO111MODULE=on
go: "1.11.x"
- name: unit tests (go 1.12)
env: MAKE_TARGET=test GOFLAGS=-mod=vendor GO111MODULE=on
go: "1.12.x"
- name: unit tests (go tip)
env: MAKE_TARGET=test GOFLAGS=-mod=vendor GO111MODULE=on
go: tip
allow_failures:
- name: unit tests (go tip)
env: MAKE_TARGET=test GOFLAGS=-mod=vendor GO111MODULE=on
go: tip
- name: unit tests (go 1.12)
env: MAKE_TARGET=test GOFLAGS=-mod=vendor GO111MODULE=on
go: "1.12.x"

install:
# This script is used by the Travis build to install a cookie for
Expand All @@ -17,15 +37,8 @@ install:
- bash scripts/start-gitlab.sh

script:
- make test
- make testacc
- make vet
- make website-test
- make $MAKE_TARGET

branches:
only:
- master
matrix:
fast_finish: true
allow_failures:
- go: tip
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
## 1.2.1 (Unreleased)
## 1.3.0 (Unreleased)

FEATURES:
* **New Resource:** `gitlab_service_slack` ([#96](https://github.com/terraform-providers/terraform-provider-gitlab/issues/96))

ENHANCEMENTS:
* Support for request/response logging when >`DEBUG` severity is set ([#93](https://github.com/terraform-providers/terraform-provider-gitlab/issues/93))
* Datasource `gitlab_user` supports user_id, email lookup and return lots of new attributes ([#102](https://github.com/terraform-providers/terraform-provider-gitlab/issues/102))
* Resource `gitlab_deploy_key` can now be imported ([#197](https://github.com/terraform-providers/terraform-provider-gitlab/issues/97))

BUGFIXES:
* Documentation fixes ([#108](https://github.com/terraform-providers/terraform-provider-gitlab/issues/108), [#113](https://github.com/terraform-providers/terraform-provider-gitlab/issues/113))

## 1.2.0 (February 19, 2019)

Expand Down
2 changes: 1 addition & 1 deletion gitlab/data_source_gitlab_project.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func dataSourceGitlabProjectRead(d *schema.ResourceData, meta interface{}) error

v, _ := d.GetOk("id")

found, _, err := client.Projects.GetProject(v)
found, _, err := client.Projects.GetProject(v, nil)
if err != nil {
return err
}
Expand Down
214 changes: 177 additions & 37 deletions gitlab/data_source_gitlab_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,124 @@ func dataSourceGitlabUser() *schema.Resource {
return &schema.Resource{
Read: dataSourceGitlabUserRead,
Schema: map[string]*schema.Schema{
"email": {
Type: schema.TypeString,
"user_id": {
Type: schema.TypeInt,
Computed: true,
Optional: true,
ConflictsWith: []string{
"username",
"email",
},
},
"username": {
Type: schema.TypeString,
Computed: true,
Optional: true,
ConflictsWith: []string{
"user_id",
"email",
},
},
"email": {
Type: schema.TypeString,
Computed: true,
Optional: true,
ConflictsWith: []string{
"user_id",
"username",
},
},
"name": {
Type: schema.TypeString,
Computed: true,
},
"is_admin": {
Type: schema.TypeBool,
Computed: true,
},
"can_create_group": {
Type: schema.TypeBool,
Computed: true,
},
"can_create_project": {
Type: schema.TypeBool,
Computed: true,
},
"projects_limit": {
Type: schema.TypeInt,
Computed: true,
},
"created_at": {
Type: schema.TypeString,
Computed: true,
},
"state": {
Type: schema.TypeString,
Computed: true,
},
"external": {
Type: schema.TypeBool,
Computed: true,
},
"extern_uid": {
Type: schema.TypeString,
Computed: true,
},
"organization": {
Type: schema.TypeString,
Computed: true,
},
"two_factor_enabled": {
Type: schema.TypeBool,
Computed: true,
},
"user_provider": {
Type: schema.TypeString,
Computed: true,
},
"avatar_url": {
Type: schema.TypeString,
Computed: true,
},
"bio": {
Type: schema.TypeString,
Computed: true,
},
"location": {
Type: schema.TypeString,
Computed: true,
},
"skype": {
Type: schema.TypeString,
Computed: true,
},
"linkedin": {
Type: schema.TypeString,
Computed: true,
},
"twitter": {
Type: schema.TypeString,
Computed: true,
},
"website_url": {
Type: schema.TypeString,
Computed: true,
},
"theme_id": {
Type: schema.TypeInt,
Computed: true,
},
"color_scheme_id": {
Type: schema.TypeInt,
Computed: true,
},
"last_sign_in_at": {
Type: schema.TypeString,
Computed: true,
},
"current_sign_in_at": {
Type: schema.TypeString,
Computed: true,
},
},
}
Expand All @@ -28,48 +139,77 @@ func dataSourceGitlabUser() *schema.Resource {
func dataSourceGitlabUserRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*gitlab.Client)

var user *gitlab.User
var err error

log.Printf("[INFO] Reading Gitlab user")

searchEmail := strings.ToLower(d.Get("email").(string))
userName := strings.ToLower(d.Get("username").(string))
var q *string
if searchEmail != "" {
q = &searchEmail
} else {
q = &userName
}
query := &gitlab.ListUsersOptions{
Search: q,
}
users, _, err := client.Users.ListUsers(query)
if err != nil {
return err
}
userIDData, userIDOk := d.GetOk("user_id")
usernameData, usernameOk := d.GetOk("username")
emailData, emailOk := d.GetOk("email")

var found *gitlab.User
if userIDOk {
// Get user by id
user, _, err = client.Users.GetUser(userIDData.(int))
if err != nil {
return err
}
} else if usernameOk || emailOk {
username := strings.ToLower(usernameData.(string))
email := strings.ToLower(emailData.(string))

if searchEmail != "" {
for _, user := range users {
if strings.ToLower(user.Email) == searchEmail {
found = user
break
}
listUsersOptions := &gitlab.ListUsersOptions{}
if usernameOk {
// Get user by username
listUsersOptions.Username = gitlab.String(username)
} else {
// Get user by email
listUsersOptions.Search = gitlab.String(email)
}
} else {
for _, user := range users {
if strings.ToLower(user.Username) == userName {
found = user
break
}

var users []*gitlab.User
users, _, err = client.Users.ListUsers(listUsersOptions)
if err != nil {
return err
}

if len(users) == 0 {
return fmt.Errorf("couldn't find a user matching: %s%s", username, email)
} else if len(users) != 1 {
return fmt.Errorf("more than one user found matching: %s%s", username, email)
}
}

if found == nil {
return fmt.Errorf("The email '%s' does not match any user email", searchEmail)
user = users[0]
} else {
return fmt.Errorf("one and only one of user_id, username or email must be set")
}
d.SetId(fmt.Sprintf("%d", found.ID))
d.Set("name", found.Name)
d.Set("username", found.Username)
d.Set("email", found.Email)

d.Set("user_id", user.ID)
d.Set("username", user.Username)
d.Set("email", user.Email)
d.Set("name", user.Name)
d.Set("is_admin", user.IsAdmin)
d.Set("can_create_group", user.CanCreateGroup)
d.Set("can_create_project", user.CanCreateProject)
d.Set("projects_limit", user.ProjectsLimit)
d.Set("state", user.State)
d.Set("external", user.External)
d.Set("extern_uid", user.ExternUID)
d.Set("created_at", user.CreatedAt)
d.Set("organization", user.Organization)
d.Set("two_factor_enabled", user.TwoFactorEnabled)
d.Set("provider", user.Provider)
d.Set("avatar_url", user.AvatarURL)
d.Set("bio", user.Bio)
d.Set("location", user.Location)
d.Set("skype", user.Skype)
d.Set("linkedin", user.Linkedin)
d.Set("twitter", user.Twitter)
d.Set("website_url", user.WebsiteURL)
d.Set("theme_id", user.ThemeID)
d.Set("color_scheme_id", user.ColorSchemeID)

d.SetId(fmt.Sprintf("%d", user.ID))

return nil
}
Loading