Never dreamt of creating and managing your GitLab projects from R? {gitlabr} is here to help you with that!
With {gitlabr}, you can interact with GitLab’s API to manage your projects, issues, merge requests, pipelines, wikis, and more.
Now, the automation of your regular tasks with GitLab is just a few lines of R code away.
You can install the most recent stable version from CRAN using:
To install the development version using devtools, type:
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 2.0.0 or higher. This {gitlabr} version uses the GitLab API v4.
R code using {gitlabr} to perform some common GitLab actions can look like this
api
https://gitlab.com/-/profile/personal_access_tokens
GITLAB_COM_TOKEN
with usethis::edit_r_environ()
and restart your sessionlibrary(gitlabr)
# You can verify your token works
# Sys.getenv("GITLAB_COM_TOKEN")
# connect as a fixed user to a GitLab instance for the session
set_gitlab_connection(
gitlab_url = "https://gitlab.com",
private_token = Sys.getenv("GITLAB_COM_TOKEN")
)
max_page
, otherwise the entire GitLab.com will be downloaded here…owned = FALSE
to retrieve all projects except ours.# a tibble is returned, as is always by {gitlabr} functions
gl_list_projects(max_page = 2, owned = FALSE)
#> # A tibble: 40 × 129
#> id name name_with_namespace path path_with_namespace created_at
#> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 57865685 nodejsappl… Arsalan Ahmed Zia … node… arsalanahmedzia_th… 2024-05-1…
#> 2 57865684 Self-Hoste… Anand R / Self-Hos… self… anandr72/self-host… 2024-05-1…
#> 3 57865661 cuda handcat / cuda cuda handcat/cuda 2024-05-1…
#> 4 57865656 TicTacToe Debeleac Vincenzzi… tict… Andreidoo/tictactoe 2024-05-1…
#> 5 57865597 Sparks Git… Nicolas Tatard / S… spar… tatardnicolas47/sp… 2024-05-1…
#> 6 57865595 Sparks Git… Patrick Poncy / Sp… spar… PatSopra/sparks-gi… 2024-05-1…
#> 7 57865594 Sparks Git… Emie Bourdeau / Sp… spar… Emie_Bourdeau/spar… 2024-05-1…
#> 8 57865590 ComMan UI ossama hassari / C… comm… ossamahassari98/co… 2024-05-1…
#> 9 57865581 Sparks Git… Raphaël Mechali / … spar… RaphaelMechali/spa… 2024-05-1…
#> 10 57865574 copy local… mvaskuri / copy lo… copy… mvaskuri1/copy-loc… 2024-05-1…
#> # ℹ 30 more rows
#> # ℹ 123 more variables: default_branch <chr>, ssh_url_to_repo <chr>,
#> # http_url_to_repo <chr>, web_url <chr>, readme_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>, container_registry_image_prefix <chr>, …
ID = 20384533
on GitLab.commain
, you need to specify it with gitlabr_options_set()
gl_list_files()
gl_list_files(project = my_project)
#> # A tibble: 2 × 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: 2 × 40
#> id iid project_id title description state created_at updated_at author.id
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 6952… 2 20384533 A se… The blog p… open… 2020-08-0… 2020-08-0… 4809823
#> 2 6952… 1 20384533 An e… No desc in… open… 2020-08-0… 2020-08-0… 4809823
#> # ℹ 31 more variables: author.username <chr>, author.name <chr>,
#> # author.state <chr>, author.locked <chr>, author.avatar_url <chr>,
#> # author.web_url <chr>, type <chr>, user_notes_count <chr>,
#> # merge_requests_count <chr>, upvotes <chr>, downvotes <chr>,
#> # confidential <chr>, issue_type <chr>, web_url <chr>,
#> # time_stats.time_estimate <chr>, time_stats.total_time_spent <chr>,
#> # task_completion_status.count <chr>, …
# create a new issue
new_feature_issue <- gl_create_issue(project = my_project, title = "Implement new feature")
# Your user ID
my_id <- 0000000
# assign issue to me
gl_assign_issue(
project = my_project,
issue_id = new_feature_issue$iid,
assignee_id = my_id
)
# Verify new issue is here
gl_list_issues(project = my_project, state = "opened")
# close issue
gl_close_issue(project = my_project, issue_id = new_feature_issue$iid)$state
Note that recent version of GitLab may have anti-spam on opening issues, leading to ERROR with gl_create_issue()
if you abuse the API. You will need to open the issue manually in this case.
If an API request is not already available in {gitlabr}, function gitlab()
allows to use any request of the GitLab API https://docs.gitlab.com/ce/api/.
For instance, the API documentation shows how to create a new project in https://docs.gitlab.com/ce/api/projects.html#create-project:
POST
projects
name
or path
(if name
not set)default_branch
is an attribute that can be set if wanted, but not requiredThe corresponding use of gitlab()
is:
Implement whatever suits your needs !
{gitlabr} can also be used to create a .gitlab-ci.yml
file to test, build and check an R package, a bookdown, … using GitLab’s CI software. Use gitlabr::use_gitlab_ci()
with a specific type
in your project and your CI should be ready to start in the next commit.
There are pre-defined templates:
bookdown-production.yml
bookdown.yml
check-coverage-pkgdown-renv.yml
check-coverage-pkgdown.yml
vignette("a-gitlabr", package = "gitlabr")
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 note that the gitlabr project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
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.