You can install the most recent stable version from CRAN using:
install.packages("gitlabr")
To install the development version using devtools, type:
devtools::install_github("statnmap/gitlabr")
See the CONTRIBUTING.md for instructions on how to run tests locally and contributor information.
GitLab 11.6 or higher is generally recommended when using {gitlabr} version 1.1.6 or higher. This {gitlabr} version uses the GitLab API v4.
R code using {gitlabr} to perform some common GitLab actions can look like this
Create a TOKEN on your Gitlab instance with scopes: api
Store your token in .Renviron with usethis::edit_r_environ()
and restart your session
Set a connection to GitLab instance
library(gitlabr)
# Add: GITLAB_COM_TOKEN=YourTokenHere
# You can verify it worked
# Sys.getenv("GITLAB_COM_TOKEN")
# connect as a fixed user to a gitlab instance
my_gitlab <- gl_connection(
gitlab_url = "https://gitlab.com",
private_token = Sys.getenv("GITLAB_COM_TOKEN"))
# a function is returned
# its first argument is the request (name or function), optionally followed by parameters
# Set the connection for the session
set_gitlab_connection(my_gitlab)
max_page
, otherwise the entire GitLab.com will be downloaded here…
# a tibble is returned, as is always by {gitlabr} functions
gl_list_projects(max_page = 2)
#> # A tibble: 200 x 122
#> id description name name_with_names… path path_with_names… created_at
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 2222… "" Stud… Nagendra Gude /… stud… Nagendrak12/stu… 2020-11-0…
#> 2 2222… "" php2 Amelle / php2 php2 amelleouldselma… 2020-11-0…
#> 3 2222… "" Limi… Slobodan Radova… limi… slobodan-radova… 2020-11-0…
#> 4 2222… "" My s… menna hany / My… my-s… menna_hany/my-s… 2020-11-0…
#> 5 2222… "Proyecto … Proy… Ivana Sosa Cord… proy… ivanasosacorder… 2020-11-0…
#> 6 2222… <NA> sami… dgcscfvs / sami… sami… dgcscfvs/samina… 2020-11-0…
#> 7 2222… "" test indhumathi v / … test indhumathi.devo… 2020-11-0…
#> 8 2222… "ska-rfi-s… ska-… ska-telescope /… ska-… ska-telescope/s… 2020-11-0…
#> 9 2222… "" mind… aubrey mindoro … mind… aubreymindoro67… 2020-11-0…
#> 10 2222… "" tp-a… Mathieu DE SOUS… tp-a… m.desousa/tp-an… 2020-11-0…
#> # … with 190 more rows, and 115 more variables: default_branch <chr>,
#> # ssh_url_to_repo <chr>, http_url_to_repo <chr>, web_url <chr>,
#> # forks_count <chr>, star_count <chr>, last_activity_at <chr>,
#> # namespace.id <chr>, namespace.name <chr>, namespace.path <chr>,
#> # namespace.kind <chr>, namespace.full_path <chr>,
#> # namespace.avatar_url <chr>, namespace.web_url <chr>, `_links.self` <chr>,
#> # `_links.issues` <chr>, `_links.merge_requests` <chr>,
#> # `_links.repo_branches` <chr>, `_links.labels` <chr>, `_links.events` <chr>,
#> # `_links.members` <chr>, packages_enabled <chr>, empty_repo <chr>,
#> # archived <chr>, visibility <chr>, owner.id <chr>, owner.name <chr>,
#> # owner.username <chr>, owner.state <chr>, owner.avatar_url <chr>,
#> # owner.web_url <chr>, resolve_outdated_diff_discussions <chr>,
#> # container_registry_enabled <chr>,
#> # container_expiration_policy.cadence <chr>,
#> # container_expiration_policy.enabled <chr>,
#> # container_expiration_policy.keep_n <chr>,
#> # container_expiration_policy.older_than <chr>,
#> # container_expiration_policy.name_regex <chr>,
#> # container_expiration_policy.next_run_at <chr>, issues_enabled <chr>,
#> # merge_requests_enabled <chr>, wiki_enabled <chr>, jobs_enabled <chr>,
#> # snippets_enabled <chr>, service_desk_enabled <chr>,
#> # service_desk_address <chr>, can_create_merge_request_in <chr>,
#> # issues_access_level <chr>, repository_access_level <chr>,
#> # merge_requests_access_level <chr>, forking_access_level <chr>,
#> # wiki_access_level <chr>, builds_access_level <chr>,
#> # snippets_access_level <chr>, pages_access_level <chr>,
#> # shared_runners_enabled <chr>, lfs_enabled <chr>, creator_id <chr>,
#> # import_status <chr>, open_issues_count <chr>, ci_default_git_depth <chr>,
#> # ci_forward_deployment_enabled <chr>, public_jobs <chr>,
#> # build_timeout <chr>, auto_cancel_pending_pipelines <chr>,
#> # ci_config_path <chr>, only_allow_merge_if_pipeline_succeeds <chr>,
#> # request_access_enabled <chr>,
#> # only_allow_merge_if_all_discussions_are_resolved <chr>,
#> # remove_source_branch_after_merge <chr>,
#> # printing_merge_request_link_enabled <chr>, merge_method <chr>,
#> # auto_devops_enabled <chr>, auto_devops_deploy_strategy <chr>,
#> # autoclose_referenced_issues <chr>, approvals_before_merge <chr>,
#> # mirror <chr>, external_authorization_classification_label <chr>,
#> # readme_url <chr>, forked_from_project.id <chr>,
#> # forked_from_project.description <chr>, forked_from_project.name <chr>,
#> # forked_from_project.name_with_namespace <chr>,
#> # forked_from_project.path <chr>,
#> # forked_from_project.path_with_namespace <chr>,
#> # forked_from_project.created_at <chr>,
#> # forked_from_project.default_branch <chr>,
#> # forked_from_project.ssh_url_to_repo <chr>,
#> # forked_from_project.http_url_to_repo <chr>,
#> # forked_from_project.web_url <chr>, forked_from_project.readme_url <chr>,
#> # forked_from_project.forks_count <chr>,
#> # forked_from_project.star_count <chr>,
#> # forked_from_project.last_activity_at <chr>,
#> # forked_from_project.namespace.id <chr>,
#> # forked_from_project.namespace.name <chr>,
#> # forked_from_project.namespace.path <chr>,
#> # forked_from_project.namespace.kind <chr>,
#> # forked_from_project.namespace.full_path <chr>,
#> # forked_from_project.namespace.web_url <chr>, …
ID = 20384533
on GitLab.com
my_project <- 20384533 #repo.rtask",
gl_list_files
gl_list_files(project = my_project)
#> # A tibble: 2 x 5
#> id name type path mode
#> <chr> <chr> <chr> <chr> <chr>
#> 1 9c66eff9a1f6f34b6d9108ef07d76f8ce4c4e47f NEWS.md blob NEWS.md 100644
#> 2 c36b681bb31b80cbd090f07c95f09788c88629a6 example.txt blob example.txt 100644
gl_list_issues
gl_list_issues(project = my_project)
#> # A tibble: 13 x 51
#> id iid project_id title state created_at updated_at closed_at
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 7249… 13 20384533 Impl… clos… 2020-10-1… 2020-10-1… 2020-10-…
#> 2 7249… 12 20384533 Impl… clos… 2020-10-1… 2020-10-1… 2020-10-…
#> 3 7249… 11 20384533 Impl… clos… 2020-10-1… 2020-10-1… 2020-10-…
#> 4 7249… 10 20384533 Impl… clos… 2020-10-1… 2020-10-1… 2020-10-…
#> 5 7249… 9 20384533 Impl… clos… 2020-10-1… 2020-10-1… 2020-10-…
#> 6 7249… 8 20384533 Impl… clos… 2020-10-1… 2020-10-1… 2020-10-…
#> 7 7249… 7 20384533 Impl… clos… 2020-10-1… 2020-10-1… 2020-10-…
#> 8 7186… 6 20384533 Impl… clos… 2020-09-2… 2020-09-2… 2020-09-…
#> 9 6972… 5 20384533 Impl… clos… 2020-08-1… 2020-08-1… 2020-08-…
#> 10 6972… 4 20384533 Impl… clos… 2020-08-1… 2020-08-1… 2020-08-…
#> 11 6972… 3 20384533 Impl… clos… 2020-08-1… 2020-08-1… 2020-08-…
#> 12 6952… 2 20384533 A se… open… 2020-08-0… 2020-08-0… <NA>
#> 13 6952… 1 20384533 An e… open… 2020-08-0… 2020-08-0… <NA>
#> # … with 43 more variables: closed_by.id <chr>, closed_by.name <chr>,
#> # closed_by.username <chr>, closed_by.state <chr>,
#> # closed_by.avatar_url <chr>, closed_by.web_url <chr>, assignees.id <chr>,
#> # assignees.name <chr>, assignees.username <chr>, assignees.state <chr>,
#> # assignees.avatar_url <chr>, assignees.web_url <chr>, author.id <chr>,
#> # author.name <chr>, author.username <chr>, author.state <chr>,
#> # author.avatar_url <chr>, author.web_url <chr>, assignee.id <chr>,
#> # assignee.name <chr>, assignee.username <chr>, assignee.state <chr>,
#> # assignee.avatar_url <chr>, assignee.web_url <chr>, user_notes_count <chr>,
#> # merge_requests_count <chr>, upvotes <chr>, downvotes <chr>,
#> # confidential <chr>, web_url <chr>, time_stats.time_estimate <chr>,
#> # time_stats.total_time_spent <chr>, task_completion_status.count <chr>,
#> # task_completion_status.completed_count <chr>, has_tasks <chr>,
#> # `_links.self` <chr>, `_links.notes` <chr>, `_links.award_emoji` <chr>,
#> # `_links.project` <chr>, references.short <chr>, references.relative <chr>,
#> # references.full <chr>, description <chr>
# create a new issue
new_feature_issue <- gl_new_issue(title = "Implement new feature", project = my_project)
# statnmap user ID
my_id <- 4809823
# assign issue to me
gl_assign_issue(new_feature_issue$iid,
assignee_id = my_id,
project = my_project)
#> # A tibble: 1 x 44
#> id iid project_id title state created_at updated_at assignees.id
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 7385… 14 20384533 Impl… open… 2020-11-0… 2020-11-0… 4809823
#> # … with 36 more variables: assignees.name <chr>, assignees.username <chr>,
#> # assignees.state <chr>, assignees.avatar_url <chr>, assignees.web_url <chr>,
#> # author.id <chr>, author.name <chr>, author.username <chr>,
#> # author.state <chr>, author.avatar_url <chr>, author.web_url <chr>,
#> # assignee.id <chr>, assignee.name <chr>, assignee.username <chr>,
#> # assignee.state <chr>, assignee.avatar_url <chr>, assignee.web_url <chr>,
#> # user_notes_count <chr>, merge_requests_count <chr>, upvotes <chr>,
#> # downvotes <chr>, confidential <chr>, web_url <chr>,
#> # time_stats.time_estimate <chr>, time_stats.total_time_spent <chr>,
#> # task_completion_status.count <chr>,
#> # task_completion_status.completed_count <chr>, has_tasks <chr>,
#> # `_links.self` <chr>, `_links.notes` <chr>, `_links.award_emoji` <chr>,
#> # `_links.project` <chr>, references.short <chr>, references.relative <chr>,
#> # references.full <chr>, subscribed <chr>
# Verify new issue is here
gl_list_issues(state = "opened", my_project)
#> # A tibble: 3 x 44
#> id iid project_id title state created_at updated_at assignees.id
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 7385… 14 20384533 Impl… open… 2020-11-0… 2020-11-0… 4809823
#> 2 6952… 2 20384533 A se… open… 2020-08-0… 2020-08-0… <NA>
#> 3 6952… 1 20384533 An e… open… 2020-08-0… 2020-08-0… <NA>
#> # … with 36 more variables: assignees.name <chr>, assignees.username <chr>,
#> # assignees.state <chr>, assignees.avatar_url <chr>, assignees.web_url <chr>,
#> # author.id <chr>, author.name <chr>, author.username <chr>,
#> # author.state <chr>, author.avatar_url <chr>, author.web_url <chr>,
#> # assignee.id <chr>, assignee.name <chr>, assignee.username <chr>,
#> # assignee.state <chr>, assignee.avatar_url <chr>, assignee.web_url <chr>,
#> # user_notes_count <chr>, merge_requests_count <chr>, upvotes <chr>,
#> # downvotes <chr>, confidential <chr>, web_url <chr>,
#> # time_stats.time_estimate <chr>, time_stats.total_time_spent <chr>,
#> # task_completion_status.count <chr>,
#> # task_completion_status.completed_count <chr>, has_tasks <chr>,
#> # `_links.self` <chr>, `_links.notes` <chr>, `_links.award_emoji` <chr>,
#> # `_links.project` <chr>, references.short <chr>, references.relative <chr>,
#> # references.full <chr>, description <chr>
# close issue
gl_close_issue(new_feature_issue$iid, project = my_project)$state
#> [1] "closed"
vignette("quick-start-guide-to-gitlabr")
Note that the {gitlabr} package was originally created by Jirka Lewandowski. The present repository is a fork to be able to continue development of this package.
You’re welcome to contribute to {gitlabr} by editing the source code, adding more convenience functions, filing issues, etc. CONTRIBUTING.md compiles some information helpful in that process.
Please also note the Code of Conduct.