💎 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.26.0, 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
- Service Status (Not Gitlab API)
- Check service available - 
available? 
 - Check service available - 
 - 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 - 
 - Version
- Get Gitlab version - 
version 
 - Get Gitlab version - 
 
Todo (optional)
- Award Emoji
 - Project Snippets
 - Services
 - System Hooks
 - Settings
 - Boards
 - Gitlab CI
- Builds
 - Jobs
 - Runners
 - Pipelines
 
 
Help and Discussion
You can browse the API documents:
http://icyleaf.github.io/gitlab.cr/
You can browse the Changelog:
https://github.com/icyleaf/gitlab.cr/blob/master/CHANGELOG.md
If you have found a bug, please create a issue here:
https://github.com/icyleaf/gitlab.cr/issues/new
How to Contribute
Your contributions are always welcome! Please submit a pull request or create an issue to add a new question, bug or feature to the list.
All Contributors are on the wall.
You may also like
- halite - HTTP Requests Client with a chainable REST API, built-in sessions and loggers.
 - markd - Yet another markdown parser built for speed, Compliant to CommonMark specification.
 - poncho - A .env parser/loader improved for performance.
 - popcorn - Easy and Safe casting from one type to another.
 - fast-crystal - 💨 Writing Fast Crystal 😍 -- Collect Common Crystal idioms.
 
License
MIT License © icyleaf