💎 Gitlab.cr
Gitlab.cr is a GitLab API wrapper writes with Crystal Language. Inspired from gitlab gem for ruby version. No support GraphQL API
Build in crystal version >= v0.23.1, Docs Generated in latest commit.
Installation
dependencies:
gitlab:
github: icyleaf/gitlab.cr
Usage
require "gitlab"
# configuration
endpoint = "http://domain.com/api/v3"
token = "<token>"
# initialize a new client
g = Gitlab.client(endpoint, token)
# => #<Gitlab::Client:0x101653f20 @endpoint="http://localhost:10080/api/v3", @token="xxx">
# get the authenticated user
user = g.user
# => {"name" => "icyleaf", "username" => "icyleaf", "id" => 34, "state" => "active", "avatar_url" => "http://www.gravatar.com/avatar/38e1b2eb5d0a3fff4fb0ab8363c8f874?s=80&d=identicon", "web_url" => "http://gitlab.docker:10080/u/icyleaf", "created_at" => "2016-05-14T09:23:42.594+05:30", "is_admin" => true, "bio" => nil, "location" => nil, "skype" => "", "linkedin" => "", "twitter" => "", "website_url" => "", "last_sign_in_at" => "2016-05-14T09:24:00.575+05:30", "confirmed_at" => "2016-05-14T09:23:42.457+05:30", "email" => "[email protected]", "theme_id" => 2, "color_scheme_id" => 1, "projects_limit" => 8, "current_sign_in_at" => "2016-06-18T20:11:15.609+05:30", "identities" => [], "can_create_group" => true, "can_create_project" => true, "two_factor_enabled" => false, "external" => false, "private_token" => "xxx"}
# get the user's email
email = user["email"]
# => "[email protected]"
# get list of projects
projects = g.projects({ "per_page" => 5 })
# handle the exception
begin
pp g.delete_group(999)
rescue ex
pp ex.message
# Here has one variable "response" instance of Gitlab::HTTP::Response
# Friendly for developer to debug and control expressions.
pp ex.response.code
pp ex.response.body
end
# request not handled APIs
# example: request a GET method to call "/application/settings"
# get gitlab settings
g.get("/application/settings")
# update gitlab settings
g.put("/application/settings", { "signup_enabled" => "false" })
For more information, refer to API Documentation.
Progress
Built-in
- Http Client - Halite
- Exceptions
- Gitlab wrapper
- Authentication
- 100% Rspec Coveraged
Gitlab
Completed
- Users
- List Users -
users - Single user -
user(user_id) - User creation -
create_user - User modification -
edit_user - User deletion -
delete_user - Current user -
user - Block user -
block_user(user_id) - Unblock user -
unblock_user(user_id) - List SSH keys -
ssh_keys - List SSH keys for user -
ssh_keys(user_id) - Single SSH key
ssh_key(ssh_key_id) - Add SSH key -
create_ssh_key - Add SSH key for user -
create_ssh_key(user_id) - Delete SSH key for current user -
delete_ssh_key - Delete SSH key for given user -
delete_ssh_key(user_id) - List emails -
emails - List emails for user -
emails(user_id) - Single email -
email - Add email -
add_email - Add email for user -
add_email(user_id) - Delete email for current user -
delete_email - Delete email for given user -
delete_email(user_id)
- List Users -
- Session
- Login session -
session
- Login session -
- Projects (including setting Webhooks)
- Uploads
- Upload a file -
upload_file
- Upload a file -
- List projects -
projects- List owned projects -
owned_projects - List starred projects -
starred_projects - List ALL projects -
all_projects - Get single project -
project - Get project events -
project_events - Create project -
create_project - Create project for user -
create_project(user_id) - Edit project -
edit_project - Fork project -
fork_project - Star a project -
star_project - Unstar a project -
unstar_project - Archive a project -
archive_project - Unarchive a project -
unarchive_project - Remove project -
delete_project
- List owned projects -
- Team members
- List project team members -
project_members - Get project team member -
project_member - Add project team member -
add_project_member - Edit project team member -
edit_project_member - Remove project team member -
remove_project_member - Share project with group -
share_project
- List project team members -
- Hooks
- List project hooks -
project_hooks - Get project hook -
project_hook - Add project hook -
add_project_hook - Edit project hook -
edit_project_hook - Delete project hook -
remove_project_hook
- List project hooks -
- Branches
- List branches -
project_branchs - List single branch -
project_branch - Protect single branch -
protect_project_branch - Unprotect single branch -
unprotect_project_branch
- List branches -
- Admin fork relation
- Create a forked from/to relation between existing projects. -
create_fork_from - Delete an existing forked from relationship -
remove_fork_from
- Create a forked from/to relation between existing projects. -
- Search for projects by name -
project_search
- Uploads
- Repositories
- List repository tree -
tree - Raw blob content -
blow - Get an archive of the repository -
archive_project - Compare branches, tags or commits -
compare - Contributors -
contributors
- List repository tree -
- Repository File
- Gets a repository file -
get_file - Get raw file content -
file_contents - Create a file
- Edit a file
- Remove a file
- Gets a repository file -
- Commits
- List repository commits -
commits - Get a single commit -
commit - Get the diff of a commit -
commit_diff - Get the comments of a commit -
commit_coments - Post comment to commit -
create_commit_comment - Commit status
- Get the status of a commit -
commit_status - Post the build status to a commit -
update_commit_status
- Get the status of a commit -
- List repository commits -
- Branches
- List repository branches -
branches - Get single repository branch -
branch - Protect repository branch -
protect_branch - Unprotect repository branch -
unprotect_branch - Create repository branch -
create_branch - Delete repository branch -
delete_branch
- List repository branches -
- Merge Requests
- List merge requests -
merge_requests - Get single MR -
merge_request - Get single MR commits -
merge_request_commit - Get single MR changes -
merge_request_changes - Create MR -
create_merge_request - Update MR -
edit_merge_request - Delete a merge request -
delete_merge_request - Accept MR -
accept_merge_request - Cancel Merge When Build Succeeds -
cancel_merge_request_when_build_succeed - Comments on merge requests -
merge_request_comments - List issues that will close on merge -
merge_request_closed_issues - Subscribe to a merge request -
subscribe_merge_request - Unsubscribe from a merge request -
unsubscribe_merge_request
- List merge requests -
- Issues
- List issues -
issues - List project issues -
issues(project_id) - Single issue -
issue - New issue -
create_issue - Edit issue -
edit_issue/close_issue/reopen_issue - Delete an issue -
delete_issue - Move an issue -
move_issue - Subscribe to an issue -
subscribe_issue - Unsubscribe from an issue -
unsubscribe_issue - Comments on issues - Comments are done via the notes resource
- List issues -
- Keys
- Get SSH key with user by ID of an SSH key -
key
- Get SSH key with user by ID of an SSH key -
- Labels
- List labels -
labels - Create a new label -
create_label - Delete a label -
delete_label - Edit an existing label -
edit_labe - Subscribe to a label -
subscribe_label - Unsubscribe from a label -
unsubscribe_label
- List labels -
- Milestones
- List project milestones -
milestones - Get single milestone -
milestone - Create new milestone -
create_milestone - Edit milestone -
edit_milestone - Get all issues assigned to a single milestone -
milestone_issues - Get all merge requests of a given milestone. -
milestone_merge_requests
- List project milestones -
- Notes (comments)
- Issues
- List project issue notes -
issue_notes - Get single issue note -
issue_note - Create new issue note -
create_issue_note - Modify existing issue note -
edit_issue_note - Delete an issue note -
delete_issue_note
- List project issue notes -
- Snippets
- List all snippet notes -
snippet_notes - Get single snippet note -
snippet_note - Create new snippet note -
create_snippet_note - Modify existing snippet note -
edit_snippet_note - Delete a snippet note -
delete_snippet_note
- List all snippet notes -
- Merge Requests
- List all merge request notes -
merge_request_notes - Get single merge request note -
merge_request_note - Create new merge request note -
create_merge_request_note - Modify existing merge request note -
edit_merge_request_note - Delete a merge request note -
delete_merge_request_note
- List all merge request notes -
- Issues
- Deploy Keys
- List deploy keys -
deploy_keys - Single deploy key -
deploy_key - Add deploy key -
create_deploy_key - Delete deploy key -
remove_deploy_key
- List deploy keys -
- Groups
- List groups -
groups - List a group's projects -
group_projects - Details of a group -
group - New group -
create_group - Transfer project to group -
transfer_project_to_group - Update group -
edit_group - Remove group -
delete_group - Search for group -
group_search - Group members
- List group members -
group_members - Get member detail of group -
group_member - Add group member -
add_member_to_group - Edit group team member -
edit_member_to_group - Remove user team member -
remove_member_to_group
- List group members -
- Namespaces in groups - same as List group
- List groups -
- Tags
- List project repository tags -
tags - Get a single repository tag -
tag - Create a new tag -
create_tag - Delete a tag -
delete_tag - Create a new release -
create_release_notes - Update a release -
update_release_notes
- List project repository tags -
Todo (optional)
- Award Emoji
- Project Snippets
- Services
- System Hooks
- Settings
- Boards
- Gitlab CI
- Builds
- Jobs
- Runners
- Pipelines
Contributing
- Fork it
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- icyleaf - creator, maintainer