Skip to content

Commit 4ced55f

Browse files
Remove extraneous code and prepare for commit
1 parent 049b9f3 commit 4ced55f

File tree

12 files changed

+250
-87
lines changed

12 files changed

+250
-87
lines changed

docs/content/usage/packages/rpm.en-us.md

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,19 @@ The following examples use `dnf`.
2727
To register the RPM registry add the url to the list of known apt sources:
2828

2929
```shell
30-
dnf config-manager --add-repo https://gitea.example.com/api/packages/{owner}/rpm.repo
30+
dnf config-manager --add-repo https://gitea.example.com/api/packages/{owner}/rpm/{distribution}/{component}.repo
3131
```
3232

33-
| Placeholder | Description |
34-
| ----------- | ----------- |
35-
| `owner` | The owner of the package. |
33+
| Placeholder | Description |
34+
| ----------- |----------------------------------------------------|
35+
| `owner` | The owner of the package. |
36+
| `distribution` | System Name, e.g. `centos`, `suse` , `rockylinux`. |
37+
| `component` | System version, e.g. `el7`, `el9` , `fc38`. |
3638

3739
If the registry is private, provide credentials in the url. You can use a password or a [personal access token](development/api-usage.md#authentication):
3840

3941
```shell
40-
dnf config-manager --add-repo https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/rpm.repo
42+
dnf config-manager --add-repo https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/rpm/{distribution}/{component}.repo
4143
```
4244

4345
You have to add the credentials to the urls in the `rpm.repo` file in `/etc/yum.repos.d` too.
@@ -47,19 +49,21 @@ You have to add the credentials to the urls in the `rpm.repo` file in `/etc/yum.
4749
To publish a RPM package (`*.rpm`), perform a HTTP PUT operation with the package content in the request body.
4850

4951
```
50-
PUT https://gitea.example.com/api/packages/{owner}/rpm/upload
52+
PUT https://gitea.example.com/api/packages/{owner}/rpm/{distribution}/{component}/upload
5153
```
5254

5355
| Parameter | Description |
5456
| --------- | ----------- |
5557
| `owner` | The owner of the package. |
58+
| `distribution` | System Name, e.g. `centos`, `suse` , `rockylinux`. |
59+
| `component` | System version, e.g. `el7`, `el9` , `fc38`. |
5660

5761
Example request using HTTP Basic authentication:
5862

5963
```shell
6064
curl --user your_username:your_password_or_token \
6165
--upload-file path/to/file.rpm \
62-
https://gitea.example.com/api/packages/testuser/rpm/upload
66+
https://gitea.example.com/api/packages/testuser/rpm/centos/el7/upload
6367
```
6468

6569
If you are using 2FA or OAuth use a [personal access token](development/api-usage.md#authentication) instead of the password.
@@ -78,21 +82,23 @@ The server responds with the following HTTP Status codes.
7882
To delete an RPM package perform a HTTP DELETE operation. This will delete the package version too if there is no file left.
7983

8084
```
81-
DELETE https://gitea.example.com/api/packages/{owner}/rpm/{package_name}/{package_version}/{architecture}
85+
DELETE https://gitea.example.com/api/packages/{owner}/rpm/{distribution}/package/{package_name}/{package_version}/{architecture}
8286
```
8387

84-
| Parameter | Description |
85-
| ----------------- | ----------- |
86-
| `owner` | The owner of the package. |
87-
| `package_name` | The package name. |
88-
| `package_version` | The package version. |
89-
| `architecture` | The package architecture. |
88+
| Parameter | Description |
89+
|-------------------|----------------------------|
90+
| `owner` | The owner of the package. |
91+
| `distribution` | The package distribution. |
92+
| `component` | The package group version. |
93+
| `package_name` | The package name. |
94+
| `package_version` | The package version. |
95+
| `architecture` | The package architecture. |
9096

9197
Example request using HTTP Basic authentication:
9298

9399
```shell
94100
curl --user your_username:your_token_or_password -X DELETE \
95-
https://gitea.example.com/api/packages/testuser/rpm/test-package/1.0.0/x86_64
101+
https://gitea.example.com/api/packages/testuser/rpm/centos/el7/package/test-package/1.0.0/x86_64
96102
```
97103

98104
The server responds with the following HTTP Status codes.

docs/content/usage/packages/rpm.zh-cn.md

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,19 @@ menu:
2727
要注册RPM注册表,请将 URL 添加到已知 `apt` 源列表中:
2828

2929
```shell
30-
dnf config-manager --add-repo https://gitea.example.com/api/packages/{owner}/rpm.repo
30+
dnf config-manager --add-repo https://gitea.example.com/api/packages/{owner}/rpm/{distribution}/{component}.repo
3131
```
3232

33-
| 占位符 | 描述 |
34-
| ------- | -------------- |
35-
| `owner` | 软件包的所有者 |
33+
| 占位符 | 描述 |
34+
| ------- |--------------------------------------|
35+
| `owner` | 软件包的所有者 |
36+
| `distribution` | 软件包适配的系统名称,例如 `centos``rocky linux` |
37+
| `component` | 软件包适合的目标版本,例如 `el7``fc38` |
3638

3739
如果注册表是私有的,请在URL中提供凭据。您可以使用密码或[个人访问令牌](development/api-usage.md#通过-api-认证)
3840

3941
```shell
40-
dnf config-manager --add-repo https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/rpm.repo
42+
dnf config-manager --add-repo https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/rpm/{distribution}/{component}.repo
4143
```
4244

4345
您还必须将凭据添加到 `/etc/yum.repos.d` 中的 `rpm.repo` 文件中的URL中。
@@ -47,19 +49,21 @@ dnf config-manager --add-repo https://{username}:{your_password_or_token}@gitea.
4749
要发布RPM软件包(`*.rpm`),请执行带有软件包内容的 HTTP `PUT` 操作。
4850

4951
```
50-
PUT https://gitea.example.com/api/packages/{owner}/rpm/upload
52+
PUT https://gitea.example.com/api/packages/{owner}/rpm/{distribution}/{component}/upload
5153
```
5254

5355
| 参数 | 描述 |
54-
| ------- | -------------- |
55-
| `owner` | 软件包的所有者 |
56+
| ------- |--------------|
57+
| `owner` | 软件包的所有者 |
58+
| `distribution` | 软件包适配的系统名称 |
59+
| `component` | 软件包适配的系统发行版本 |
5660

5761
使用HTTP基本身份验证的示例请求:
5862

5963
```shell
6064
curl --user your_username:your_password_or_token \
6165
--upload-file path/to/file.rpm \
62-
https://gitea.example.com/api/packages/testuser/rpm/upload
66+
https://gitea.example.com/api/packages/testuser/rpm/centos/el7/version/upload
6367
```
6468

6569
如果您使用 2FA 或 OAuth,请使用[个人访问令牌](development/api-usage.md#通过-api-认证)替代密码。您无法将具有相同名称的文件两次发布到软件包中。您必须先删除现有的软件包版本。
@@ -77,12 +81,14 @@ curl --user your_username:your_password_or_token \
7781
要删除 RPM 软件包,请执行 HTTP `DELETE` 操作。如果没有文件剩余,这也将删除软件包版本。
7882

7983
```
80-
DELETE https://gitea.example.com/api/packages/{owner}/rpm/{package_name}/{package_version}/{architecture}
84+
DELETE https://gitea.example.com/api/packages/{owner}/rpm/{distribution}/{component}/package/{package_name}/{package_version}/{architecture}
8185
```
8286

8387
| 参数 | 描述 |
8488
| ----------------- | -------------- |
8589
| `owner` | 软件包的所有者 |
90+
| `distribution` | 软件包适配的系统名称 |
91+
| `component` | 软件包适配的系统发行版本 |
8692
| `package_name` | 软件包名称 |
8793
| `package_version` | 软件包版本 |
8894
| `architecture` | 软件包架构 |
@@ -91,7 +97,7 @@ DELETE https://gitea.example.com/api/packages/{owner}/rpm/{package_name}/{packag
9197

9298
```shell
9399
curl --user your_username:your_token_or_password -X DELETE \
94-
https://gitea.example.com/api/packages/testuser/rpm/test-package/1.0.0/x86_64
100+
https://gitea.example.com/api/packages/testuser/rpm/centos/el7/package/test-package/1.0.0/x86_64
95101
```
96102

97103
服务器将以以下HTTP状态码响应:

models/migrations/migrations.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,8 @@ var migrations = []Migration{
532532
NewMigration("Add Actions artifacts expiration date", v1_21.AddExpiredUnixColumnInActionArtifactTable),
533533
// v275 -> v276
534534
NewMigration("Add ScheduleID for ActionRun", v1_21.AddScheduleIDForActionRun),
535+
// v276 -> v277
536+
NewMigration("Migrate old rpm package index", v1_21.RebuildRpmPackage),
535537
}
536538

537539
// GetCurrentDBVersion returns the current db version

models/migrations/v1_21/v276.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// Copyright 2023 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package v1_21 //nolint
5+
6+
import (
7+
"fmt"
8+
9+
"code.gitea.io/gitea/modules/json"
10+
"code.gitea.io/gitea/modules/packages/rpm"
11+
12+
"xorm.io/xorm"
13+
)
14+
15+
func RebuildRpmPackage(x *xorm.Engine) error {
16+
sess := x.NewSession()
17+
defer sess.Close()
18+
defaultDistribution := rpm.RepositoryDefaultDistribution
19+
defaultComponent := rpm.RepositoryDefaultComponent
20+
compositeKey, _ := fmt.Printf("%s|%s", defaultDistribution, defaultComponent)
21+
// select all old rpm package
22+
var oldRpmIds []int64
23+
ss := sess.Cols("id").
24+
Table("package_file").
25+
Where("composite_key not like", "%|%").
26+
And("lower_name like ?", "%.rpm")
27+
err := ss.Find(&oldRpmIds)
28+
if err != nil {
29+
return err
30+
}
31+
// add metadata
32+
// NOTE: package_property[name='rpm.metdata'] is very large,
33+
// and to avoid querying all of them resulting in large memory,
34+
// a single RPM package is now used for updating.
35+
for _, id := range oldRpmIds {
36+
37+
metadata := make([]string, 0, 3)
38+
_, err := sess.Cols("ref_type", "ref_id", "value").
39+
Table("package_property").
40+
Where("name = 'rpm.metdata'").
41+
And("ref_id = ?", id).
42+
Get(&metadata)
43+
if err != nil {
44+
return err
45+
}
46+
// get rpm info
47+
var rpmMetadata rpm.FileMetadata
48+
err = json.Unmarshal([]byte(metadata[2]), &rpmMetadata)
49+
if err != nil {
50+
return err
51+
}
52+
_, err = sess.Exec(
53+
"INSERT INTO package_property(ref_type, ref_id, name, value) values (?,?,?,?),(?,?,?,?),(?,?,?,?)",
54+
metadata[0], metadata[1], "rpm.distribution", defaultDistribution,
55+
metadata[0], metadata[1], "rpm.component", defaultComponent,
56+
metadata[0], metadata[1], "rpm.architecture", rpmMetadata.Architecture,
57+
)
58+
if err != nil {
59+
return err
60+
}
61+
// set default distribution
62+
_, err = sess.Table("package_file").
63+
Where("id = ?", id).
64+
Update(map[string]any{
65+
"composite_key": compositeKey,
66+
})
67+
if err != nil {
68+
return err
69+
}
70+
}
71+
// set old rpm index file to default distribution
72+
_, err = sess.Table("package_file").
73+
Where(
74+
"composite_key = '' AND " +
75+
"lower_name IN" +
76+
"(" +
77+
"'primary.xml.gz','other.xml.gz','filelists.xml.gz','other.xml.gz','repomd.xml','repomd.xml.asc'" +
78+
")").
79+
Update(map[string]any{
80+
"composite_key": compositeKey,
81+
})
82+
if err != nil {
83+
return err
84+
}
85+
return nil
86+
}

modules/packages/rpm/metadata.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@ import (
1515
)
1616

1717
const (
18-
PropertyMetadata = "rpm.metadata"
19-
20-
SettingKeyPrivate = "rpm.key.private"
21-
SettingKeyPublic = "rpm.key.public"
18+
PropertyMetadata = "rpm.metadata"
19+
PropertyDistribution = "rpm.distribution"
20+
PropertyComponent = "rpm.component"
21+
PropertyArchitecture = "rpm.architecture"
22+
SettingKeyPrivate = "rpm.key.private"
23+
SettingKeyPublic = "rpm.key.public"
2224

2325
RepositoryPackage = "_rpm"
2426
RepositoryVersion = "_repository"
27+
28+
RepositoryDefaultDistribution = "default"
29+
RepositoryDefaultComponent = "stable"
2530
)
2631

2732
const (

options/locale/locale_en-US.ini

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3383,6 +3383,10 @@ rpm.registry = Setup this registry from the command line:
33833383
rpm.distros.redhat = on RedHat based distributions
33843384
rpm.distros.suse = on SUSE based distributions
33853385
rpm.install = To install the package, run the following command:
3386+
rpm.package.info = Package Info
3387+
rpm.package.architectures = Architectures
3388+
rpm.package.description = Description
3389+
rpm.package.summary = Summary
33863390
rubygems.install = To install the package using gem, run the following command:
33873391
rubygems.install2 = or add it to the Gemfile:
33883392
rubygems.dependencies.runtime = Runtime Dependencies

routers/api/packages/api.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -513,14 +513,16 @@ func CommonRoutes() *web.Route {
513513
r.Get("/simple/{id}", pypi.PackageMetadata)
514514
}, reqPackageAccess(perm.AccessModeRead))
515515
r.Group("/rpm", func() {
516-
r.Get(".repo", rpm.GetRepositoryConfig)
517516
r.Get("/repository.key", rpm.GetRepositoryKey)
518-
r.Put("/upload", reqPackageAccess(perm.AccessModeWrite), rpm.UploadPackageFile)
519-
r.Group("/package/{name}/{version}/{architecture}", func() {
520-
r.Get("", rpm.DownloadPackageFile)
521-
r.Delete("", reqPackageAccess(perm.AccessModeWrite), rpm.DeletePackageFile)
517+
r.Group("/{distribution}/{component}", func() {
518+
r.Get(".repo", rpm.GetRepositoryConfig)
519+
r.Put("/upload", reqPackageAccess(perm.AccessModeWrite), rpm.UploadPackageFile)
520+
r.Group("/package/{name}/{version}/{architecture}", func() {
521+
r.Get("", rpm.DownloadPackageFile)
522+
r.Delete("", reqPackageAccess(perm.AccessModeWrite), rpm.DeletePackageFile)
523+
})
524+
r.Get("/repodata/{filename}", rpm.GetRepositoryFile)
522525
})
523-
r.Get("/repodata/{filename}", rpm.GetRepositoryFile)
524526
}, reqPackageAccess(perm.AccessModeRead))
525527
r.Group("/rubygems", func() {
526528
r.Get("/specs.4.8.gz", rubygems.EnumeratePackages)

0 commit comments

Comments
 (0)