9294686ea6
ci/woodpecker/tag/docker Pipeline was successful
Virtual repos cover rpm, deb, npm and others but not alpine, so a local alpine repo and github_alpine remotes cannot be served as one apk repository. - merge members' `<dir>/APKINDEX.tar.gz` per directory; member order wins duplicate (P, V, A); a member 404 is skipped - 302 `<dir>/<P>-<V>.apk` downloads to the member whose index listed the package - serve the merged index unsigned, like local and github_alpine indexes - cache merges per directory on the shared virtual cache; member errors fail with 502 - add docs/alpine/virtual.md, unit tests and an apk e2e with abuild-built packages Requires unkin/artifactapi#163. Reviewed-on: #164 Co-authored-by: unkin-agent <unkin-agent@unkin.net> Co-committed-by: unkin-agent <unkin-agent@unkin.net>
31 lines
1.1 KiB
Markdown
31 lines
1.1 KiB
Markdown
# `alpine` virtual
|
|
|
|
An alpine virtual serves one apk repository over local and remote alpine
|
|
members at `/api/v1/virtual/<name>/`.
|
|
|
|
- `<dir>/APKINDEX.tar.gz` merges each member's index for the same `<dir>`
|
|
(e.g. `x86_64/`); on a duplicate (P, V, A) the earlier member wins. A member
|
|
that 404s for that directory is skipped.
|
|
- apk builds download paths itself (`<dir>/<P>-<V>.apk`), so the virtual 302s
|
|
each download to the member whose index listed it.
|
|
- The merged index is unsigned, like local and `github_alpine` indexes: clients
|
|
need `--allow-untrusted` (packages keep their own signatures).
|
|
- Any other member error fails the request with 502. Merges are cached for 60s
|
|
per directory, up to 32 directories per virtual.
|
|
|
|
```hcl
|
|
resource "artifactapi_virtual" "alpine" {
|
|
name = "alpine"
|
|
package_type = "alpine"
|
|
members = [artifactapi_local_alpine.internal.name, artifactapi_remote_github_alpine.tool.name]
|
|
}
|
|
```
|
|
|
|
```sh
|
|
echo https://artifactapi.example.com/api/v1/virtual/alpine >> /etc/apk/repositories
|
|
apk update --allow-untrusted
|
|
apk add --allow-untrusted mytool
|
|
```
|
|
|
|
Upload to the local member directly; the virtual is read-only.
|