build: add signed package repository releases
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
if [ "$#" -ne 3 ]; then
|
||||
echo "usage: $0 <downloaded-artifacts-dir> <output-dir> <agent-version>" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
source_dir="$1"
|
||||
output_dir="$2"
|
||||
agent_version="$3"
|
||||
|
||||
if [ ! -d "$source_dir" ]; then
|
||||
echo "artifact directory does not exist: $source_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$agent_version" in
|
||||
''|*[!0-9A-Za-z._-]*)
|
||||
echo "invalid agent version: $agent_version" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -e "$output_dir" ] && [ -n "$(find "$output_dir" -mindepth 1 -maxdepth 1 -print -quit 2>/dev/null)" ]; then
|
||||
echo "output directory must be empty: $output_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p "$output_dir/feeds/$agent_version/openwrt" "$output_dir/keys/usign" "$output_dir/keys/apk"
|
||||
|
||||
artifact_count=0
|
||||
for artifact_dir in "$source_dir"/openwrt-*; do
|
||||
[ -d "$artifact_dir" ] || continue
|
||||
artifact_name="$(basename "$artifact_dir")"
|
||||
remainder="${artifact_name#openwrt-}"
|
||||
openwrt_release="${remainder%%-*}"
|
||||
target_label="${remainder#"$openwrt_release"-}"
|
||||
|
||||
if [ -z "$openwrt_release" ] || [ -z "$target_label" ] || [ "$target_label" = "$remainder" ]; then
|
||||
echo "cannot parse artifact name: $artifact_name" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
destination="$output_dir/feeds/$agent_version/openwrt/$openwrt_release/$target_label"
|
||||
mkdir -p "$destination"
|
||||
cp "$artifact_dir"/* "$destination/"
|
||||
|
||||
while IFS= read -r public_key; do
|
||||
cp "$public_key" "$output_dir/keys/usign/$(basename "$public_key")"
|
||||
done < <(find "$artifact_dir" -maxdepth 1 -type f -regextype posix-extended \
|
||||
-regex '.*/[0-9a-f]{16}' -print)
|
||||
|
||||
if [ -f "$artifact_dir/rmm-openwrt.pem" ]; then
|
||||
cp "$artifact_dir/rmm-openwrt.pem" "$output_dir/keys/apk/rmm-openwrt.pem"
|
||||
fi
|
||||
artifact_count=$((artifact_count + 1))
|
||||
done
|
||||
|
||||
if [ "$artifact_count" -eq 0 ]; then
|
||||
echo "no openwrt-* artifact directories found in $source_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$output_dir/feeds/stable"
|
||||
cp -a "$output_dir/feeds/$agent_version/." "$output_dir/feeds/stable/"
|
||||
touch "$output_dir/.nojekyll"
|
||||
|
||||
cat > "$output_dir/index.html" <<EOF
|
||||
<!doctype html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>OpenWrt RMM package repository</title>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<h1>OpenWrt RMM package repository</h1>
|
||||
<p>Текущая стабильная версия агента: <strong>${agent_version}</strong>.</p>
|
||||
<p>Инструкции подключения находятся в документации проекта.</p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
Reference in New Issue
Block a user