Ruby gems API
- Tier: Free, Premium, Ultimate
- Offering: GitLab Self-Managed, GitLab Dedicated
Use this API to interact with the Ruby gems and Bundler package manager clients.
This API is used by the Ruby gems and Bundler package manager clients and is generally not meant for manual consumption. This API is under development and is not ready for production use due to limited functionality.
These endpoints do not adhere to the standard API authentication methods. See the Ruby gems registry documentation for details on which headers and token types are supported. Undocumented authentication methods might be removed in the future.
Enable the Ruby gems API
The Ruby gems API for GitLab is behind a feature flag that is disabled by default. GitLab administrators with access to the GitLab Rails console can enable this API for your instance.
To enable it:
Feature.enable(:rubygem_packages)To disable it:
Feature.disable(:rubygem_packages)To enable or disable it for specific projects:
Feature.enable(:rubygem_packages, Project.find(1))
Feature.disable(:rubygem_packages, Project.find(2))Download a gem file
Download a gem:
GET projects/:id/packages/rubygems/gems/:file_name| Attribute | Type | Required | Description |
|---|---|---|---|
id | string | yes | The ID or full path of the project. |
file_name | string | yes | The name of the .gem file. |
curl --header "Authorization:<personal_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/packages/rubygems/gems/my_gem-1.0.0.gem"Write the output to file:
curl --header "Authorization:<personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/rubygems/gems/my_gem-1.0.0.gem" >> my_gem-1.0.0.gemThis writes the downloaded file to my_gem-1.0.0.gem in the current directory.
Fetch a list of dependencies
Fetch a list of dependencies for a list of gems.
The response is a marshalled array of hashes for all versions of the requested gems. Because the response is marshalled, you can store it in a file.
GET projects/:id/packages/rubygems/api/v1/dependencies| Attribute | Type | Required | Description |
|---|---|---|---|
id | string | yes | The ID or full path of the project. |
gems | string | no | Comma-separated list of gems to fetch dependencies for. |
curl --header "Authorization:<personal_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/packages/rubygems/api/v1/dependencies?gems=my_gem,foo"If Ruby is installed, you can use the following
Ruby command to read the response. For this to work, you must
either set your credentials in ~/.gem/credentials,
or pass your access token to the request:
$ ruby -ropen-uri -rpp -e \
'pp Marshal.load(URI.open("https://gitlab.example.com/api/v4/projects/1/packages/rubygems/api/v1/dependencies?gems=my_gem,rails,foo", "Authorization" => <personal_access_token>))'
[{:name=>"my_gem", :number=>"0.0.1", :platform=>"ruby", :dependencies=>[]},
{:name=>"my_gem",
:number=>"0.0.3",
:platform=>"ruby",
:dependencies=>
[["dependency_1", "~> 1.2.3"],
["dependency_2", "= 3.0.0"],
["dependency_3", ">= 1.0.0"],
["dependency_4", ">= 0"]]},
{:name=>"my_gem",
:number=>"0.0.2",
:platform=>"ruby",
:dependencies=>
[["dependency_1", "~> 1.2.3"],
["dependency_2", "= 3.0.0"],
["dependency_3", ">= 1.0.0"],
["dependency_4", ">= 0"]]},
{:name=>"foo",
:number=>"0.0.2",
:platform=>"ruby",
:dependencies=>
["dependency_2", "= 3.0.0"],
["dependency_4", ">= 0"]]}]Upload a gem
Upload a gem:
POST projects/:id/packages/rubygems/api/v1/gems| Attribute | Type | Required | Description |
|---|---|---|---|
id | string | yes | The ID or full path of the project. |
curl --request POST \
--upload-file path/to/my_gem_file.gem \
--header "Authorization:<personal_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/packages/rubygems/api/v1/gems"