Update SeaweedFS and add outdated checks
Build Alpine Packages / build-and-publish (v3.24, 3.24) (push) Has been cancelled
Build Alpine Packages / build-and-publish (v3.24, 3.24) (push) Has been cancelled
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
name: Build Alpine Packages
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "17 5 * * 1"
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
@@ -48,9 +50,24 @@ jobs:
|
||||
run: |
|
||||
scripts/apk/clean.sh
|
||||
find packaging/alpine/local -mindepth 2 -maxdepth 2 -name APKBUILD -exec apkbuild-lint {} +
|
||||
scripts/apk/outdated.sh | tee update-check.txt
|
||||
if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then
|
||||
{
|
||||
echo "## Upstream update check"
|
||||
echo
|
||||
echo '```text'
|
||||
cat update-check.txt
|
||||
echo '```'
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
fi
|
||||
|
||||
- name: Prepare package cache
|
||||
if: github.event_name != 'schedule'
|
||||
run: |
|
||||
scripts/apk/ci-package-cache.sh prepare
|
||||
|
||||
- name: Build packages
|
||||
if: github.event_name != 'schedule'
|
||||
run: |
|
||||
scripts/apk/ci-build.sh
|
||||
scripts/apk/ci-package-cache.sh sync
|
||||
@@ -58,6 +75,7 @@ jobs:
|
||||
scripts/apk/list-packages.sh
|
||||
|
||||
- name: Check artifact upload support
|
||||
if: github.event_name != 'schedule'
|
||||
id: artifact-upload
|
||||
run: |
|
||||
if [ -n "${ACTIONS_RUNTIME_TOKEN:-}" ]; then
|
||||
@@ -67,18 +85,20 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Upload generated CI assets
|
||||
if: steps.artifact-upload.outputs.available == 'true'
|
||||
if: github.event_name != 'schedule' && steps.artifact-upload.outputs.available == 'true'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: greptimedb-musl-binaries-${{ matrix.alpine_registry_branch }}
|
||||
path: packages/ci-assets/
|
||||
|
||||
- name: Smoke test
|
||||
if: github.event_name != 'schedule'
|
||||
run: scripts/apk/ci-smoke.sh
|
||||
|
||||
- name: Runtime test
|
||||
if: github.event_name != 'schedule'
|
||||
run: scripts/apk/runtime-test.sh
|
||||
|
||||
- name: Publish Alpine packages
|
||||
if: github.event_name != 'pull_request'
|
||||
if: github.event_name != 'pull_request' && github.event_name != 'schedule'
|
||||
run: scripts/apk/publish-gitea.sh
|
||||
|
||||
@@ -17,12 +17,12 @@ https://code.factoring.digital/api/packages/public/alpine/v3.24/alpine-packages
|
||||
|
||||
## Available Packages
|
||||
|
||||
| Package | APK name | Package type | Purpose |
|
||||
| --- | --- | --- | --- |
|
||||
| [SeaweedFS](packaging/alpine/local/seaweedfs/README.md) | `seaweedfs` | Binary repackaging of official upstream release tarballs | Ships current SeaweedFS features with Alpine OpenRC role splits. |
|
||||
| [GreptimeDB](packaging/alpine/local/greptimedb/README.md) | `greptimedb` | 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` | 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` | Binary repackaging of official upstream release binaries | Ships current Gitea releases with the expected Alpine runtime layout and OpenRC service. |
|
||||
| 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
|
||||
|
||||
@@ -61,15 +61,6 @@ Package sources live under:
|
||||
packaging/alpine/local/<pkgname>/
|
||||
```
|
||||
|
||||
Currently packaged:
|
||||
|
||||
```text
|
||||
seaweedfs SeaweedFS 4.31 binary repackaging and OpenRC role splits
|
||||
greptimedb GreptimeDB 1.1.2 source build for x86_64
|
||||
lavinmq LavinMQ 2.9.1 source build for x86_64
|
||||
gitea Gitea 1.26.4 binary repackaging and OpenRC service
|
||||
```
|
||||
|
||||
Local build output is written under:
|
||||
|
||||
```text
|
||||
@@ -100,10 +91,11 @@ 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 current local package build installed
|
||||
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
|
||||
@@ -138,11 +130,10 @@ ALPINE_APK_CACHE_SCOPE=public-alpine-packages ALPINE_PACKAGE=greptimedb mise run
|
||||
ALPINE_APK_CACHE_PREFIX=alpine-apk-ci ALPINE_PACKAGE=greptimedb mise run apk:build
|
||||
```
|
||||
|
||||
Open an Alpine test shell:
|
||||
Open an Alpine package build shell:
|
||||
|
||||
```sh
|
||||
ALPINE_PACKAGE=seaweedfs mise run apk:shell
|
||||
mise run apk:test-shell
|
||||
```
|
||||
|
||||
Run the install test:
|
||||
@@ -158,6 +149,17 @@ 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
|
||||
@@ -205,6 +207,22 @@ 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
|
||||
@@ -257,6 +275,7 @@ 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
|
||||
```
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#!/usr/bin/env -S mise tool-stub
|
||||
# GrepTimeDB 1.0.2 release binary.
|
||||
|
||||
version = "1.0.2"
|
||||
bin = "greptime"
|
||||
|
||||
[platforms.linux-x64]
|
||||
url = "https://github.com/GreptimeTeam/greptimedb/releases/download/v1.0.2/greptime-linux-amd64-v1.0.2.tar.gz"
|
||||
checksum = "sha256:1ad1f9312ce18a49494434cf52cf9fa00093c4712728508bff4578d060fb2d89"
|
||||
|
||||
[platforms.linux-arm64]
|
||||
url = "https://github.com/GreptimeTeam/greptimedb/releases/download/v1.0.2/greptime-linux-arm64-v1.0.2.tar.gz"
|
||||
checksum = "sha256:e6567f5d97fd34b876b5653c22877c238a1633ecbe26b3b7c22b95892656c39c"
|
||||
@@ -1,15 +0,0 @@
|
||||
#!/usr/bin/env -S mise tool-stub
|
||||
# SeaweedFS 4.31 release binary.
|
||||
|
||||
version = "4.31"
|
||||
bin = "weed"
|
||||
|
||||
[platforms.linux-x64]
|
||||
url = "https://github.com/seaweedfs/seaweedfs/releases/download/4.31/linux_amd64.tar.gz"
|
||||
checksum = "sha256:81103c53453fddfa75d9d611cd3e61aa57e7a3099dc7a1de5977ab4b19211958"
|
||||
size = 43223476
|
||||
|
||||
[platforms.linux-arm64]
|
||||
url = "https://github.com/seaweedfs/seaweedfs/releases/download/4.31/linux_arm64.tar.gz"
|
||||
checksum = "sha256:76ac1ffce87a2a710a3913282a19de6d9a3785f4a3586556858ec7b81a87d958"
|
||||
size = 38036794
|
||||
@@ -1,6 +1,5 @@
|
||||
[tools]
|
||||
act = "latest"
|
||||
codex = "latest"
|
||||
docker-cli = "latest"
|
||||
shellcheck = "latest"
|
||||
|
||||
@@ -45,7 +44,7 @@ description = "Install-test built packages directly in the current Alpine enviro
|
||||
run = "scripts/apk/ci-smoke.sh"
|
||||
|
||||
[tasks."apk:test-shell"]
|
||||
description = "Open an Alpine shell with the current local package build installed"
|
||||
description = "Open an Alpine shell with the local APK repository configured"
|
||||
run = "scripts/apk/test-shell.sh"
|
||||
|
||||
[tasks."apk:test-install"]
|
||||
@@ -61,6 +60,10 @@ env = { ALPINE_ARCH = "x86_64", ALPINE_REPO_NAME = "local", ALPINE_VERSION = "3.
|
||||
description = "List built Alpine packages and dependencies"
|
||||
run = "scripts/apk/list-packages.sh"
|
||||
|
||||
[tasks."apk:outdated"]
|
||||
description = "Check packaged upstream versions against latest GitHub releases"
|
||||
run = "scripts/apk/outdated.sh"
|
||||
|
||||
[tasks."apk:publish-check"]
|
||||
description = "Run lint, multi-arch build, package listing, and smoke test"
|
||||
run = "scripts/apk/publish-check.sh"
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
provider=github
|
||||
repo=go-gitea/gitea
|
||||
version_prefix=v
|
||||
@@ -0,0 +1,3 @@
|
||||
provider=github
|
||||
repo=GreptimeTeam/greptimedb
|
||||
version_prefix=v
|
||||
@@ -0,0 +1,3 @@
|
||||
provider=github
|
||||
repo=cloudamqp/lavinmq
|
||||
version_prefix=v
|
||||
@@ -1,7 +1,7 @@
|
||||
# Maintainer: Joachim Schlöffel <me@joachim-schloeffel.com>
|
||||
pkgname=seaweedfs
|
||||
pkgver=4.31
|
||||
pkgrel=3
|
||||
pkgver=4.39
|
||||
pkgrel=0
|
||||
pkgdesc="Distributed storage system for object storage, file systems, and Iceberg tables"
|
||||
url="https://github.com/seaweedfs/seaweedfs"
|
||||
arch="x86_64 aarch64"
|
||||
@@ -109,15 +109,15 @@ _bashcomp() {
|
||||
}
|
||||
|
||||
sha512sums="
|
||||
60c758d6d565d0cbc533e4e5677186a4700d48be12ebbd2bd1c6b4bcf38f687d0ab1f66e0953c8a27c663549cdbae73e5fd7eda74bb422c20e10e0d0850b5ead seaweedfs-4.31-linux-amd64.tar.gz
|
||||
93c7539fe15a0aa6192d26ac2360003961f0643e302d910179d02341b10a7243df776294fb1b0134ec2a2a9596b1abc3ce9ab701f9bc3d78f2b965ea464a4b18 seaweedfs-4.31-linux-arm64.tar.gz
|
||||
1790a12d3d8a8a1926157f28bd79c599ed1c14991f137df6504a64f61d1717baaa48c14216fa896cc80f8fb848b3ec34b73d6d276a676752e2e624acc4d8312d seaweedfs-4.39-linux-amd64.tar.gz
|
||||
1f46e219fdd69234daa020f27245d18c6adbfaf6801dd4a57e60a6f5b036e4ff4d6c11b5251f4ab922b90f7f8321e65bb16e5fc4f5c87e1eeafdba0e40c9a114 seaweedfs-4.39-linux-arm64.tar.gz
|
||||
b6ce09d6d83dd70e2797a185171eea3587436fb024a99b4998f714b713244d6f768ef59f67c9b7251650d4f19d414eea231eab92099763d85cd92e41cb2bdc3f credential.toml
|
||||
7105de7053654b8c0502521ce58585915fc831c3152801e1db02b1c5214dc3c3ed31f4fc18000665d8338c7a10ffbf0d248368bef2ef3a6d37d46cd856398366 example-credential.toml
|
||||
6213e9cff227d66a7a04237d15e2f77904f1bcdf5709fd985c1e12fe4aca0d0327db6997d567303eff47dabec3650db2a6d874b03adda41b239e04ee0c3557ee example-filer.toml
|
||||
9e6401387698832cb4aae0876ef3e237c9b70af17db7563ed641ba40c81af99f1d6c22281bafa64fff7ee8d2c89f16ccac1322ea31c9a02b545faa4e09f08549 example-filer.toml
|
||||
e5753bd0bcc60dc84428c40ba556c08acae61dec083a5b76640125f637532e7c5759a72cdfd95114222a7a0901a916ec3c4d12f306853cfca0fe9a0b1857893e example-master.toml
|
||||
2c200c28172a5d0b1c80ab28e849287e7af8d103355638fd3183b8614d3e2b1b3482132522663f7c6d844e10e13b8c6e23fb5fba0dec2cc83de45c2f17b33477 example-notification.toml
|
||||
4b507540d57799e42ec0ee84073c6fa32c577a2f4a98bf66ee7302355080c63c65d70709115185debdee3c957e9294e79a8e461347d7148af7fdd368dc548af6 example-replication.toml
|
||||
a0f307bc73b1aa03653c42c22a1fc704640cbd86957a417f947fe33356e03734c33782777cb1d6cb17360fc6b3930ffbe1386f89123e9dc3c21468210418aae2 example-security.toml
|
||||
6951e1110d458238b0ef1905c4c6bb874d06f1c18b83dd8e1742534806b8db68b4410a664bf53085781e5d4d35e87941279d9c7398529ee707bb99def5055591 example-security.toml
|
||||
70069f97edf261a2cd0669dd60adad80533609a25d7429254e0c3322d7e80337f5ff69a5581bc39e6a15442098d14d610ce5f0cb14f02c461c8d3dd440b22c56 example-shell.toml
|
||||
be5771a5e1bf626c53f9dffbfa2a400d9b8f9626d55a7b61dcd853753561989427ba872a2638a5e6343f44dea6790678483bd29101d6495dbbfcd3029947b9a7 filer.toml
|
||||
2cd6c73a5e23e0395b6f099dcc3acf9280cbb3e13f54408571e91741c4e6b0dad85f6d4e5a92f23ad541bad57ce295c28bb8450fe11da35acbd4da25848f61e5 master.toml
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# SeaweedFS Alpine Package
|
||||
|
||||
Repackages official SeaweedFS 4.31 Linux release tarballs for `x86_64` and
|
||||
Repackages official SeaweedFS 4.39 Linux release tarballs for `x86_64` and
|
||||
`aarch64`.
|
||||
|
||||
## Package Commands
|
||||
@@ -127,5 +127,5 @@ rc-service seaweedfs.master restart
|
||||
Pin:
|
||||
|
||||
```sh
|
||||
apk add seaweedfs=4.31-r3
|
||||
apk add seaweedfs=4.39-r0
|
||||
```
|
||||
|
||||
@@ -366,6 +366,21 @@ healthcheck_enabled = false
|
||||
# increase the value is recommend, be sure the value in Elastic is greater or equal here
|
||||
index.max_result_window = 10000
|
||||
|
||||
# for Elasticsearch 8.x clusters
|
||||
[elastic8]
|
||||
enabled = false
|
||||
servers = [
|
||||
"http://localhost1:9200",
|
||||
"http://localhost2:9200",
|
||||
"http://localhost3:9200",
|
||||
]
|
||||
username = ""
|
||||
password = ""
|
||||
sniff_enabled = false
|
||||
healthcheck_enabled = false
|
||||
# increase the value is recommend, be sure the value in Elastic is greater or equal here
|
||||
index.max_result_window = 10000
|
||||
|
||||
|
||||
[arangodb] # in development dont use it
|
||||
enabled = false
|
||||
|
||||
@@ -4,6 +4,15 @@
|
||||
# /etc/seaweedfs/security.toml
|
||||
# this file is read by master, volume server, filer, and worker
|
||||
|
||||
# Any value below can also be supplied as an environment variable instead of
|
||||
# living in this file: prefix the key with WEED_, upper-case it, and replace
|
||||
# "." with "_". This is the recommended way to inject the secrets in here from
|
||||
# a Kubernetes Secret (env valueFrom.secretKeyRef) rather than a ConfigMap.
|
||||
# The JWT signing keys map to:
|
||||
# WEED_JWT_SIGNING_KEY, WEED_JWT_SIGNING_READ_KEY (master <-> volume)
|
||||
# WEED_JWT_FILER_SIGNING_KEY, WEED_JWT_FILER_SIGNING_READ_KEY (s3/clients <-> filer)
|
||||
# A set env var wins over the file, so the file can stay empty (or absent).
|
||||
|
||||
# comma separated origins allowed to make requests to the filer and s3 gateway.
|
||||
# enter in this format: https://domain.com, or http://localhost:port
|
||||
[cors.allowed_origins]
|
||||
|
||||
@@ -1,15 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
repo_root="${REPO_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../../.." && pwd)}"
|
||||
package_dir="${PACKAGE_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
|
||||
configs=(credential filer master notification replication security shell)
|
||||
pkgver="$(
|
||||
awk -F= '$1 == "pkgver" { print $2; exit }' "${package_dir}/APKBUILD"
|
||||
)"
|
||||
tmpdir="$(mktemp -d)"
|
||||
|
||||
cleanup() {
|
||||
rm -rf "${tmpdir}"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
case "$(uname -m)" in
|
||||
x86_64)
|
||||
archive="linux_amd64.tar.gz"
|
||||
;;
|
||||
aarch64|arm64)
|
||||
archive="linux_arm64.tar.gz"
|
||||
;;
|
||||
*)
|
||||
printf 'unsupported host architecture for SeaweedFS generated sources: %s\n' "$(uname -m)" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
||||
curl -fsSL \
|
||||
-o "${tmpdir}/${archive}" \
|
||||
"https://github.com/seaweedfs/seaweedfs/releases/download/${pkgver}/${archive}"
|
||||
tar -xzf "${tmpdir}/${archive}" -C "${tmpdir}" weed
|
||||
|
||||
for config in "${configs[@]}"; do
|
||||
"${repo_root}/bin/weed" scaffold -config "${config}" 2>/dev/null \
|
||||
"${tmpdir}/weed" scaffold -config "${config}" 2>/dev/null \
|
||||
> "${package_dir}/example-${config}.toml"
|
||||
done
|
||||
|
||||
"${repo_root}/bin/weed" autocomplete bash 2>/dev/null \
|
||||
"${tmpdir}/weed" autocomplete bash 2>/dev/null \
|
||||
| sed -E 's#complete -C "?[^"]*/weed"? weed#complete -C /usr/bin/weed weed#' \
|
||||
> "${package_dir}/weed.bash-completion"
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
provider=github
|
||||
repo=seaweedfs/seaweedfs
|
||||
version_prefix=none
|
||||
Executable
+144
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
# shellcheck source=scripts/apk/package-lib.sh
|
||||
source "${repo_root}/scripts/apk/package-lib.sh"
|
||||
|
||||
mode="${APK_UPDATE_CHECK_MODE:-warn}"
|
||||
if [[ "${mode}" != "warn" && "${mode}" != "fail" ]]; then
|
||||
printf 'APK_UPDATE_CHECK_MODE must be warn or fail\n' >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
github_latest_release() {
|
||||
local repo="$1"
|
||||
local api_url="https://api.github.com/repos/${repo}/releases/latest"
|
||||
local response
|
||||
|
||||
response="$(curl -fsSL \
|
||||
-H 'Accept: application/vnd.github+json' \
|
||||
-H 'X-GitHub-Api-Version: 2022-11-28' \
|
||||
"${api_url}" 2>/dev/null)" || return 1
|
||||
|
||||
printf '%s\n' "${response}" \
|
||||
| sed -n 's/^[[:space:]]*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p' \
|
||||
| head -n 1
|
||||
}
|
||||
|
||||
apkbuild_value() {
|
||||
local package_dir="$1"
|
||||
local key="$2"
|
||||
|
||||
awk -F= -v key="${key}" '
|
||||
$1 == key {
|
||||
value = $2
|
||||
gsub(/["'\'']/, "", value)
|
||||
gsub(/^[ \t]+|[ \t]+$/, "", value)
|
||||
print value
|
||||
exit
|
||||
}
|
||||
' "${package_dir}/APKBUILD"
|
||||
}
|
||||
|
||||
load_update_metadata() {
|
||||
local package_dir="$1"
|
||||
local metadata="${package_dir}/update-check.conf"
|
||||
|
||||
provider=""
|
||||
repo=""
|
||||
version_prefix="v"
|
||||
|
||||
if [[ ! -f "${metadata}" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
source "${metadata}"
|
||||
|
||||
if [[ "${provider}" != "github" || -z "${repo}" ]]; then
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
normalize_version() {
|
||||
local version="$1"
|
||||
local prefix="$2"
|
||||
|
||||
case "${prefix}" in
|
||||
none|"")
|
||||
printf '%s\n' "${version}"
|
||||
;;
|
||||
*)
|
||||
printf '%s\n' "${version#"${prefix}"}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
version_is_newer() {
|
||||
local latest="$1"
|
||||
local current="$2"
|
||||
local apk_result
|
||||
local sorted
|
||||
|
||||
if [[ "${latest}" == "${current}" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if command -v apk >/dev/null 2>&1; then
|
||||
apk_result="$(apk version -t "${latest}-r0" "${current}-r0" 2>/dev/null || true)"
|
||||
[[ "${apk_result}" == ">" ]]
|
||||
return
|
||||
fi
|
||||
|
||||
if sort -V </dev/null >/dev/null 2>&1; then
|
||||
sorted="$(printf '%s\n%s\n' "${current}" "${latest}" | sort -V | tail -n 1)"
|
||||
[[ "${sorted}" == "${latest}" && "${latest}" != "${current}" ]]
|
||||
return
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
printf '%-14s %-14s %-14s %-18s %s\n' "PACKAGE" "CURRENT" "LATEST" "STATUS" "UPSTREAM"
|
||||
|
||||
has_update=0
|
||||
has_unknown=0
|
||||
|
||||
while IFS= read -r package_dir; do
|
||||
apk_validate_package_dir "${package_dir}"
|
||||
|
||||
package_name="$(apk_package_name "${package_dir}")"
|
||||
current_version="$(apkbuild_value "${package_dir}" "pkgver")"
|
||||
status="unknown"
|
||||
latest_version="-"
|
||||
upstream_url="-"
|
||||
|
||||
if load_update_metadata "${package_dir}"; then
|
||||
upstream_url="https://github.com/${repo}/releases"
|
||||
if latest_tag="$(github_latest_release "${repo}")" && [[ -n "${latest_tag}" ]]; then
|
||||
latest_version="$(normalize_version "${latest_tag}" "${version_prefix}")"
|
||||
if version_is_newer "${latest_version}" "${current_version}"; then
|
||||
status="update-available"
|
||||
has_update=1
|
||||
else
|
||||
status="current"
|
||||
fi
|
||||
else
|
||||
has_unknown=1
|
||||
fi
|
||||
else
|
||||
has_unknown=1
|
||||
fi
|
||||
|
||||
printf '%-14s %-14s %-14s %-18s %s\n' \
|
||||
"${package_name}" \
|
||||
"${current_version:-"-"}" \
|
||||
"${latest_version}" \
|
||||
"${status}" \
|
||||
"${upstream_url}"
|
||||
done < <(apk_package_dirs "${repo_root}")
|
||||
|
||||
if [[ "${mode}" == "fail" && ( "${has_update}" -ne 0 || "${has_unknown}" -ne 0 ) ]]; then
|
||||
exit 1
|
||||
fi
|
||||
@@ -4,6 +4,7 @@ set -euo pipefail
|
||||
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
|
||||
cd "${repo_root}"
|
||||
mise run apk:outdated
|
||||
mise run apk:lint
|
||||
mise run apk:build-all
|
||||
mise run apk:packages
|
||||
|
||||
+37
-29
@@ -5,8 +5,8 @@ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
alpine_version="${ALPINE_VERSION:-3.24}"
|
||||
platform="${ALPINE_BUILD_PLATFORM:-linux/amd64}"
|
||||
arch="${ALPINE_ARCH:-x86_64}"
|
||||
packages="${TEST_SHELL_PACKAGES:-seaweedfs seaweedfs-doc bash-completion seaweedfs-master-openrc seaweedfs-filer-openrc seaweedfs-worker-openrc greptimedb lavinmq lavinmq-doc lavinmq-openrc gitea gitea-doc gitea-openrc}"
|
||||
shell="${TEST_SHELL:-/bin/bash}"
|
||||
packages="${TEST_SHELL_PACKAGES:-}"
|
||||
shell="${TEST_SHELL:-/bin/sh}"
|
||||
timeout_seconds="${TEST_SHELL_TIMEOUT:-120}"
|
||||
|
||||
case "${arch}" in
|
||||
@@ -24,9 +24,23 @@ if [[ ! -d "${repo_root}/packages/local/${arch}" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker_args=(--rm --platform "${platform}")
|
||||
shopt -s nullglob
|
||||
repo_keys=("${repo_root}/packages/local/${arch}"/*.rsa.pub)
|
||||
repo_indexes=("${repo_root}/packages/local/${arch}"/APKINDEX.tar.gz)
|
||||
shopt -u nullglob
|
||||
|
||||
if [[ "${#repo_keys[@]}" -eq 0 ]]; then
|
||||
printf 'missing repository key: packages/local/%s/*.rsa.pub\n' "${arch}" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ "${#repo_indexes[@]}" -eq 0 ]]; then
|
||||
printf 'missing repository index: packages/local/%s/APKINDEX.tar.gz\n' "${arch}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker_args=(--rm -i --platform "${platform}")
|
||||
if [[ -t 0 && -t 1 ]]; then
|
||||
docker_args+=(-it)
|
||||
docker_args+=(-t)
|
||||
fi
|
||||
|
||||
docker run "${docker_args[@]}" \
|
||||
@@ -46,31 +60,25 @@ docker run "${docker_args[@]}" \
|
||||
printf "Refreshing apk indexes...\n"
|
||||
timeout "${TEST_SHELL_TIMEOUT}" apk update
|
||||
|
||||
printf "Installing test packages: %s\n" "${PACKAGE_LIST}"
|
||||
timeout "${TEST_SHELL_TIMEOUT}" apk add ${PACKAGE_LIST}
|
||||
if [ -n "${PACKAGE_LIST}" ]; then
|
||||
printf "Installing requested test packages: %s\n" "${PACKAGE_LIST}"
|
||||
timeout "${TEST_SHELL_TIMEOUT}" apk add ${PACKAGE_LIST}
|
||||
fi
|
||||
|
||||
printf "\nInstalled default test packages:\n"
|
||||
apk info -e seaweedfs seaweedfs-doc seaweedfs-bash-completion \
|
||||
seaweedfs-master-openrc seaweedfs-filer-openrc seaweedfs-worker-openrc \
|
||||
greptimedb lavinmq lavinmq-doc lavinmq-openrc \
|
||||
gitea gitea-doc gitea-openrc \
|
||||
| sort
|
||||
if command -v weed >/dev/null 2>&1; then
|
||||
printf "\nSeaweedFS version:\n"
|
||||
weed version
|
||||
fi
|
||||
if command -v greptime >/dev/null 2>&1; then
|
||||
printf "\nGreptimeDB version:\n"
|
||||
greptime --version
|
||||
fi
|
||||
if command -v lavinmq >/dev/null 2>&1; then
|
||||
printf "\nLavinMQ version:\n"
|
||||
lavinmq -v
|
||||
fi
|
||||
if command -v gitea >/dev/null 2>&1; then
|
||||
printf "\nGitea version:\n"
|
||||
gitea --version
|
||||
fi
|
||||
printf "\nEntering %s. Repository mounted read-only at /work.\n\n" "${TEST_SHELL}"
|
||||
cat <<EOF
|
||||
|
||||
Local APK repository is ready.
|
||||
Repository: /repo
|
||||
Workspace: /work
|
||||
|
||||
Examples:
|
||||
apk add seaweedfs seaweedfs-master-openrc
|
||||
apk add greptimedb greptimedb-docs greptimedb-standalone-openrc
|
||||
apk add lavinmq lavinmq-openrc
|
||||
apk add gitea gitea-openrc
|
||||
|
||||
Entering ${TEST_SHELL}.
|
||||
|
||||
EOF
|
||||
exec "${TEST_SHELL}"
|
||||
'
|
||||
|
||||
Reference in New Issue
Block a user