RPM Package Registry

Publish RPM packages for your user or organization.

Requirements

To work with the RPM registry, you need to use a package manager like yum or dnf to consume packages.

The following examples use dnf.

Configuring the package registry using dnf5

To register the RPM registry add the url to the list of known sources:

dnf config-manager addrepo --from-repofile=https://forgejo.example.com/api/packages/{owner}/{group}.repo
PlaceholderDescription
ownerThe owner of the package.
groupOptional: Everything, e.g. empty, el7, rocky/el9, test/fc38.

Example:

# without a group
dnf config-manager addrepo --from-repofile=https://forgejo.example.com/api/packages/testuser/rpm.repo

# with the group 'centos/el7'
dnf config-manager addrepo --from-repofile=https://forgejo.example.com/api/packages/testuser/rpm/centos/el7.repo

If the registry is private, provide credentials in the url. You can use a personal access token:

dnf config-manager addrepo --from-repofile=https://{username}:{your_token}@forgejo.example.com/api/packages/{owner}/{group}.repo

You have to add the credentials to the urls in the created .repo file in /etc/yum.repos.d too.

Configuring the package registry using dnf4

To register the RPM registry add the url to the list of known sources:

dnf config-manager --add-repo https://forgejo.example.com/api/packages/{owner}/{group}.repo
PlaceholderDescription
ownerThe owner of the package.
groupOptional: Everything, e.g. empty, el7, rocky/el9, test/fc38.

Example:

# without a group
dnf config-manager --add-repo https://forgejo.example.com/api/packages/testuser/rpm.repo

# with the group 'centos/el7'
dnf config-manager --add-repo https://forgejo.example.com/api/packages/testuser/rpm/centos/el7.repo

If the registry is private, provide credentials in the url. You can use a personal access token:

dnf config-manager --add-repo https://{username}:{your_token}@forgejo.example.com/api/packages/{owner}/{group}.repo

You have to add the credentials to the urls in the created .repo file in /etc/yum.repos.d too.

Publish a package

To publish a RPM package (*.rpm), perform a HTTP PUT operation with the package content in the request body.

PUT https://forgejo.example.com/api/packages/{owner}/rpm/{group}/upload
ParameterDescription
ownerThe owner of the package.
groupOptional: Everything, e.g. empty, el7, rocky/el9, test/fc38.

Example request using HTTP Basic authentication:

# without a group
curl --user your_username:your_token \
     --upload-file path/to/file.rpm \
     https://forgejo.example.com/api/packages/testuser/rpm/upload
# with the group 'centos/el7'
curl --user your_username:your_token \
     --upload-file path/to/file.rpm \
     https://forgejo.example.com/api/packages/testuser/rpm/centos/el7/upload

You cannot publish a file with the same name twice to a package. You must delete the existing package version first.

The server responds with the following HTTP Status codes.

HTTP Status CodeMeaning
201 CreatedThe package has been published.
400 Bad RequestThe package is invalid.
409 ConflictA package file with the same combination of parameters exist already in the package.

Delete a package

To delete a RPM package perform a HTTP DELETE operation. This will delete the package version too if there is no file left.

DELETE https://forgejo.example.com/api/packages/{owner}/rpm/{group}/package/{package_name}/{package_version}/{architecture}
ParameterDescription
ownerThe owner of the package.
groupOptional: The package group.
package_nameThe package name.
package_versionThe package version.
architectureThe package architecture.

Example request using HTTP Basic authentication:

# without a group
curl --user your_username:your_token -X DELETE \
     https://forgejo.example.com/api/packages/testuser/rpm/package/test-package/1.0.0/x86_64

# with the group 'centos/el7'
curl --user your_username:your_token -X DELETE \
     https://forgejo.example.com/api/packages/testuser/rpm/centos/el7/package/test-package/1.0.0/x86_64

The server responds with the following HTTP Status codes.

HTTP Status CodeMeaning
204 No ContentSuccess
404 Not FoundThe package or file was not found.

Install a package

To install a package from the RPM registry, execute the following commands:

# use latest version
dnf install {package_name}
# use specific version
dnf install {package_name}-{package_version}.{architecture}