Build Alpine Packages / build-and-publish (v3.24, 3.24) (push) Successful in 27m36s
289 lines
8.5 KiB
Markdown
289 lines
8.5 KiB
Markdown
# Alpine Packages
|
|
|
|
Alpine stable packaging for internal packages. This repository carries selected
|
|
upstream releases ahead of Alpine community packages when we need newer
|
|
features, packaging fixes, or service layouts on the current Alpine branch.
|
|
|
|
Packages are either source builds or binary repackages:
|
|
|
|
- Source builds compile upstream source releases inside the Alpine build
|
|
environment and link against Alpine libraries.
|
|
- Binary repackages wrap official upstream Linux release artifacts in Alpine
|
|
package metadata, OpenRC services, config defaults, and role subpackages.
|
|
|
|
```text
|
|
https://code.factoring.digital/api/packages/public/alpine/v3.24/alpine-packages
|
|
```
|
|
|
|
## Available Packages
|
|
|
|
| Package | APK Name | Package Version | Package Type | Purpose |
|
|
|-----------------------------------------------------------|--------------|-----------------|----------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
|
|
| [SeaweedFS](packaging/alpine/local/seaweedfs/README.md) | `seaweedfs` | `4.39` | Binary repackaging of official upstream release tarballs | Ships current SeaweedFS features with Alpine OpenRC role splits. |
|
|
| [GreptimeDB](packaging/alpine/local/greptimedb/README.md) | `greptimedb` | `1.1.2` | Source build from upstream release | Provides a current GreptimeDB build and component OpenRC packages before it is available from Alpine community. |
|
|
| [LavinMQ](packaging/alpine/local/lavinmq/README.md) | `lavinmq` | `2.9.1` | Source build from upstream release | Provides a current LavinMQ build on Alpine 3.24 with matching Crystal support. |
|
|
| [Gitea](packaging/alpine/local/gitea/README.md) | `gitea` | `1.26.4` | Binary repackaging of official upstream release binaries | Ships current Gitea releases with the expected Alpine runtime layout and OpenRC service. |
|
|
|
|
## Use In Production
|
|
|
|
### Add The Package Repository
|
|
|
|
Install the registry key:
|
|
|
|
```sh
|
|
cd /etc/apk/keys
|
|
curl -fsSLOJ https://code.factoring.digital/api/packages/public/alpine/key
|
|
```
|
|
|
|
Add the repository for the node's Alpine branch:
|
|
|
|
```sh
|
|
printf '%s\n' \
|
|
'https://code.factoring.digital/api/packages/public/alpine/v3.24/alpine-packages' \
|
|
>> /etc/apk/repositories
|
|
|
|
apk update
|
|
```
|
|
|
|
Private registry URL format:
|
|
|
|
```text
|
|
https://<user>:<token>@code.factoring.digital/api/packages/public/alpine/v3.24/alpine-packages
|
|
```
|
|
|
|
## Contribution
|
|
|
|
### Package Layout
|
|
|
|
Package sources live under:
|
|
|
|
```text
|
|
packaging/alpine/local/<pkgname>/
|
|
```
|
|
|
|
Local build output is written under:
|
|
|
|
```text
|
|
packages/local/<arch>/
|
|
```
|
|
|
|
Signing keys and distfiles are cached under:
|
|
|
|
```text
|
|
.cache/abuild/
|
|
.cache/apk-distfiles/
|
|
```
|
|
|
|
### Build Commands
|
|
|
|
```sh
|
|
$ mise tasks
|
|
Name Description
|
|
apk:build Build the Alpine package in Docker for the default architecture
|
|
apk:build-aarch64 Build the Alpine package in Docker for aarch64
|
|
apk:build-all Build the Alpine package in Docker for all configured architectures
|
|
apk:build-x86_64 Build the Alpine package in Docker for x86_64
|
|
apk:checksum Refresh APKBUILD checksums in Docker
|
|
apk:ci-build Build all configured Alpine packages directly in the current Alpine...
|
|
apk:ci-smoke Install-test built packages directly in the current Alpine environment
|
|
apk:clean Remove generated Alpine package build outputs
|
|
apk:lint Run Alpine APKBUILD lint in Docker
|
|
apk:packages List built Alpine packages and dependencies
|
|
apk:publish-check Run lint, multi-arch build, package listing, and smoke test
|
|
apk:publish-gitea Publish built packages to the Gitea Alpine package registry
|
|
apk:outdated Check packaged upstream versions against latest GitHub releases
|
|
apk:shell Open an Alpine package build shell in Docker
|
|
apk:smoke Install-test built packages from the local repository in Docker
|
|
apk:test-install Test README installation instructions in a fresh Alpine container
|
|
apk:test-shell Open an Alpine shell with the local APK repository configured
|
|
apk:update-generated Refresh packaged upstream examples and shell completions
|
|
apk:runtime-test Run package-local Docker runtime tests against the local...
|
|
gitea-workflow-build Run the Gitea build workflow locally through act as a pull_request event
|
|
```
|
|
|
|
`apk:build` targets `x86_64` by default. Multi-arch builds target `x86_64` and
|
|
`aarch64`:
|
|
|
|
```sh
|
|
ALPINE_ARCHES="x86_64 aarch64" mise run apk:build-all
|
|
```
|
|
|
|
Limit package selection with `ALPINE_PACKAGE` or `ALPINE_PACKAGES`:
|
|
|
|
```sh
|
|
ALPINE_PACKAGE=seaweedfs mise run apk:build
|
|
ALPINE_PACKAGES="seaweedfs other-package" mise run apk:build-all
|
|
ALPINE_PACKAGE=seaweedfs mise run apk:test-install
|
|
ALPINE_PACKAGE=greptimedb mise run apk:checksum
|
|
ALPINE_PACKAGE=greptimedb mise run apk:build
|
|
ALPINE_PACKAGE=greptimedb SKIP_BUILD=1 mise run apk:test-install
|
|
ALPINE_PACKAGE=lavinmq mise run apk:build
|
|
ALPINE_PACKAGE=lavinmq SKIP_BUILD=1 mise run apk:test-install
|
|
ALPINE_PACKAGE=gitea mise run apk:build
|
|
ALPINE_PACKAGE=gitea SKIP_BUILD=1 mise run apk:test-install
|
|
```
|
|
|
|
Override Docker cache scope:
|
|
|
|
```sh
|
|
ALPINE_APK_CACHE_SCOPE=public-alpine-packages ALPINE_PACKAGE=greptimedb mise run apk:build
|
|
ALPINE_APK_CACHE_PREFIX=alpine-apk-ci ALPINE_PACKAGE=greptimedb mise run apk:build
|
|
```
|
|
|
|
Local packages use `local` as the default package metadata identity. Override it
|
|
when needed:
|
|
|
|
```sh
|
|
PACKAGER="Example Builder <builder@example.com>" ALPINE_PACKAGE=seaweedfs mise run apk:build
|
|
```
|
|
|
|
Open an Alpine package build shell:
|
|
|
|
```sh
|
|
ALPINE_PACKAGE=seaweedfs mise run apk:shell
|
|
```
|
|
|
|
Run the install test:
|
|
|
|
```sh
|
|
mise run apk:test-install
|
|
```
|
|
|
|
Reuse existing local packages:
|
|
|
|
```sh
|
|
SKIP_BUILD=1 mise run apk:test-install
|
|
SKIP_BUILD=1 mise run apk:test-shell
|
|
```
|
|
|
|
`apk:test-shell` opens an Alpine shell with the local APK repository configured.
|
|
Install whichever built packages you want inside the container:
|
|
|
|
```sh
|
|
apk add seaweedfs seaweedfs-master-openrc
|
|
weed version
|
|
|
|
apk add greptimedb greptimedb-docs greptimedb-standalone-openrc
|
|
greptime --version
|
|
```
|
|
|
|
Run package-local runtime tests:
|
|
|
|
```sh
|
|
mise run apk:runtime-test
|
|
ALPINE_PACKAGE=seaweedfs mise run apk:runtime-test
|
|
ALPINE_VERSION=3.24 mise run apk:runtime-test
|
|
```
|
|
|
|
### Adding Packages
|
|
|
|
Package path:
|
|
|
|
```text
|
|
packaging/alpine/local/<pkgname>/
|
|
```
|
|
|
|
Optional package hooks:
|
|
|
|
```text
|
|
packaging/alpine/local/<pkgname>/scripts/test-install.sh
|
|
packaging/alpine/local/<pkgname>/scripts/update-generated-sources.sh
|
|
packaging/alpine/local/<pkgname>/scripts/runtime-test.sh
|
|
```
|
|
|
|
Start from the blueprint:
|
|
|
|
```text
|
|
packaging/alpine/blueprint/
|
|
```
|
|
|
|
### Generated Package Sources
|
|
|
|
Generated package sources live next to the package `APKBUILD`:
|
|
|
|
```text
|
|
packaging/alpine/local/seaweedfs/example-*.toml
|
|
packaging/alpine/local/seaweedfs/weed.bash-completion
|
|
```
|
|
|
|
Refresh generated sources:
|
|
|
|
```sh
|
|
mise run apk:update-generated
|
|
ALPINE_PACKAGE=seaweedfs mise run apk:update-generated
|
|
mise run apk:checksum
|
|
```
|
|
|
|
### Upstream Update Visibility
|
|
|
|
Check whether packaged upstream versions are current:
|
|
|
|
```sh
|
|
mise run apk:outdated
|
|
ALPINE_PACKAGE=seaweedfs mise run apk:outdated
|
|
```
|
|
|
|
By default this is a warning-only signal. To make outdated or unknown package
|
|
versions fail the command:
|
|
|
|
```sh
|
|
APK_UPDATE_CHECK_MODE=fail mise run apk:outdated
|
|
```
|
|
|
|
### Gitea Workflow
|
|
|
|
`.gitea/workflows/build.yml` builds and publishes `v3.24`. Pull requests
|
|
build only.
|
|
|
|
Repository variables:
|
|
|
|
```text
|
|
INSTANCE_URL=https://code.factoring.digital
|
|
PACKAGE_OWNER=public
|
|
PACKAGE_NAME=alpine-packages
|
|
```
|
|
|
|
Repository secrets:
|
|
|
|
```text
|
|
PACKAGE_USER=<gitea package publisher>
|
|
PACKAGE_TOKEN=<token with package write access>
|
|
```
|
|
|
|
Check the workflow locally:
|
|
|
|
```sh
|
|
mise run gitea-workflow-build
|
|
```
|
|
|
|
Publish local packages:
|
|
|
|
```sh
|
|
INSTANCE_URL=https://code.factoring.digital \
|
|
PACKAGE_OWNER=public \
|
|
PACKAGE_NAME=alpine-packages \
|
|
PACKAGE_USER=... \
|
|
PACKAGE_TOKEN=... \
|
|
mise run apk:publish-gitea
|
|
```
|
|
|
|
### Checklist
|
|
|
|
Before opening a PR, run:
|
|
|
|
```sh
|
|
mise run apk:publish-check
|
|
mise run gitea-workflow-build
|
|
mise run apk:test-install
|
|
mise run apk:runtime-test
|
|
```
|
|
|
|
Then test at least one installed role in the package shell:
|
|
|
|
```sh
|
|
mise run apk:test-shell
|
|
apk add seaweedfs seaweedfs-master-openrc
|
|
rc-service seaweedfs.master start
|
|
weed version
|
|
```
|