-
-
Notifications
You must be signed in to change notification settings - Fork 5.8k
Add Alpine package registry #23714
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Add Alpine package registry #23714
Changes from 9 commits
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
6fa38f2
Add Alpine package registry.
KN4CK3R fa47074
Merge branch 'main' of https://github.com/go-gitea/gitea into feature…
KN4CK3R 8f3ff30
Change key name.
KN4CK3R bc5edbe
Merge branch 'main' of https://github.com/go-gitea/gitea into feature…
KN4CK3R 500b618
Change test name.
KN4CK3R 927eafa
Fix svg.
KN4CK3R 827c5be
Fix docs ref.
KN4CK3R 3c4130c
Merge branch 'main' of https://github.com/go-gitea/gitea into feature…
KN4CK3R d99d48b
Merge branch 'main' of https://github.com/go-gitea/gitea into feature…
KN4CK3R 93065f4
Update docs/content/doc/usage/packages/overview.en-us.md
techknowlogick 12aecc1
Merge branch 'main' of https://github.com/go-gitea/gitea into feature…
KN4CK3R 8a253b2
Merge branch 'main' into feature-alpine
techknowlogick 57b4924
Merge branch 'main' into feature-alpine
techknowlogick 55af276
Update docs/content/doc/usage/packages/alpine.en-us.md
silverwind 724bd25
Update docs/content/doc/usage/packages/alpine.en-us.md
silverwind f215e5e
Merge branch 'main' into feature-alpine
GiteaBot 5a26d61
Merge branch 'main' into feature-alpine
GiteaBot a8972b6
Merge branch 'main' into feature-alpine
GiteaBot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
--- | ||
date: "2023-03-25T00:00:00+00:00" | ||
title: "Alpine Packages Repository" | ||
slug: "packages/alpine" | ||
draft: false | ||
toc: false | ||
menu: | ||
sidebar: | ||
parent: "packages" | ||
name: "Alpine" | ||
weight: 4 | ||
identifier: "alpine" | ||
--- | ||
|
||
# Alpine Packages Repository | ||
|
||
Publish [Alpine](https://pkgs.alpinelinux.org/) packages for your user or organization. | ||
|
||
**Table of Contents** | ||
|
||
{{< toc >}} | ||
|
||
## Requirements | ||
|
||
To work with the Alpine registry, you need to use a HTTP client like `curl` to upload and a package manager like `apk` to consume packages. | ||
|
||
The following examples use `apk`. | ||
|
||
## Configuring the package registry | ||
|
||
To register the Alpine registry add the url to the list of known apk sources (`/etc/apk/repositories`): | ||
|
||
``` | ||
https://gitea.example.com/api/packages/{owner}/alpine/<branch>/<repository> | ||
``` | ||
|
||
| Placeholder | Description | | ||
| ------------ | ----------- | | ||
| `owner` | The owner of the packages. | | ||
| `branch` | The branch to use. | | ||
| `repository` | The repository to use. | | ||
|
||
If the registry is private, provide credentials in the url. You can use a password or a [personal access token]({{< relref "doc/development/api-usage.en-us.md#authentication" >}}): | ||
|
||
``` | ||
https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/alpine/<branch>/<repository> | ||
``` | ||
|
||
The Alpine registry files are signed with a RSA key which must be known to apk. Download the public key and store it in `/etc/apk/keys/`: | ||
|
||
```shell | ||
curl -JO https://gitea.example.com/api/packages/{owner}/alpine/key | ||
``` | ||
|
||
Afterwards update the local package index: | ||
|
||
```shell | ||
apk update | ||
``` | ||
|
||
## Publish a package | ||
|
||
To publish an Alpine package (`*.apk`), perform a HTTP PUT operation with the package content in the request body. | ||
|
||
``` | ||
PUT https://gitea.example.com/api/packages/{owner}/alpine/{branch}/{repository} | ||
``` | ||
|
||
| Parameter | Description | | ||
| ------------ | ----------- | | ||
| `owner` | The owner of the package. | | ||
| `branch` | The branch may match the release version of the OS, ex: `v3.17`. | | ||
| `repository` | The repository can be used [to group packages](https://wiki.alpinelinux.org/wiki/Repositories) or just `main` or similar. | | ||
|
||
Example request using HTTP Basic authentication: | ||
|
||
```shell | ||
curl --user your_username:your_password_or_token \ | ||
--upload-file path/to/file.apk \ | ||
https://gitea.example.com/api/packages/testuser/alpine/v3.17/main | ||
``` | ||
|
||
If you are using 2FA or OAuth use a [personal access token]({{< relref "doc/development/api-usage.en-us.md#authentication" >}}) instead of the password. | ||
You cannot publish a file with the same name twice to a package. You must delete the existing package file first. | ||
|
||
The server reponds with the following HTTP Status codes. | ||
|
||
| HTTP Status Code | Meaning | | ||
| ----------------- | ------- | | ||
| `201 Created` | The package has been published. | | ||
| `400 Bad Request` | The package name, version, branch, repository or architecture are invalid. | | ||
| `409 Conflict` | A package file with the same combination of parameters exist already in the package. | | ||
|
||
## Delete a package | ||
|
||
To delete an Alpine package perform a HTTP DELETE operation. This will delete the package version too if there is no file left. | ||
|
||
``` | ||
DELETE https://gitea.example.com/api/packages/{owner}/alpine/{branch}/{repository}/{architecture}/{filename} | ||
``` | ||
|
||
| Parameter | Description | | ||
| -------------- | ----------- | | ||
| `owner` | The owner of the package. | | ||
| `branch` | The branch to use. | | ||
| `repository` | The repository to use. | | ||
| `architecture` | The package architecture. | | ||
| `filename` | The file to delete. | ||
|
||
Example request using HTTP Basic authentication: | ||
|
||
```shell | ||
curl --user your_username:your_token_or_password -X DELETE \ | ||
https://gitea.example.com/api/packages/testuser/alpine/v3.17/main/test-package-1.0.0.apk | ||
``` | ||
|
||
The server reponds with the following HTTP Status codes. | ||
silverwind marked this conversation as resolved.
Show resolved
Hide resolved
silverwind marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
| HTTP Status Code | Meaning | | ||
| ----------------- | ------- | | ||
| `204 No Content` | Success | | ||
| `404 Not Found` | The package or file was not found. | | ||
|
||
## Install a package | ||
|
||
To install a package from the Alpine registry, execute the following commands: | ||
|
||
```shell | ||
# use latest version | ||
apk add {package_name} | ||
# use specific version | ||
apk add {package_name}={package_version} | ||
``` |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,7 +9,7 @@ menu: | |
sidebar: | ||
parent: "packages" | ||
name: "Storage" | ||
weight: 5 | ||
weight: 2 | ||
identifier: "storage" | ||
--- | ||
|
||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// Copyright 2023 The Gitea Authors. All rights reserved. | ||
// SPDX-License-Identifier: MIT | ||
|
||
package alpine | ||
|
||
import ( | ||
"context" | ||
|
||
packages_model "code.gitea.io/gitea/models/packages" | ||
alpine_module "code.gitea.io/gitea/modules/packages/alpine" | ||
) | ||
|
||
// GetBranches gets all available branches | ||
func GetBranches(ctx context.Context, ownerID int64) ([]string, error) { | ||
return packages_model.GetDistinctPropertyValues( | ||
ctx, | ||
packages_model.TypeAlpine, | ||
ownerID, | ||
packages_model.PropertyTypeFile, | ||
alpine_module.PropertyBranch, | ||
nil, | ||
) | ||
} | ||
|
||
// GetRepositories gets all available repositories for the given branch | ||
func GetRepositories(ctx context.Context, ownerID int64, branch string) ([]string, error) { | ||
return packages_model.GetDistinctPropertyValues( | ||
ctx, | ||
packages_model.TypeAlpine, | ||
ownerID, | ||
packages_model.PropertyTypeFile, | ||
alpine_module.PropertyRepository, | ||
&packages_model.DistinctPropertyDependency{ | ||
Name: alpine_module.PropertyBranch, | ||
Value: branch, | ||
}, | ||
) | ||
} | ||
|
||
// GetArchitectures gets all available architectures for the given repository | ||
func GetArchitectures(ctx context.Context, ownerID int64, repository string) ([]string, error) { | ||
return packages_model.GetDistinctPropertyValues( | ||
ctx, | ||
packages_model.TypeAlpine, | ||
ownerID, | ||
packages_model.PropertyTypeFile, | ||
alpine_module.PropertyArchitecture, | ||
&packages_model.DistinctPropertyDependency{ | ||
Name: alpine_module.PropertyRepository, | ||
Value: repository, | ||
}, | ||
) | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.