#!/usr/bin/env bash set -euo pipefail if [ "$#" -ne 3 ]; then echo "usage: $0 " >&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" < OpenWrt RMM package repository

OpenWrt RMM package repository

Текущая стабильная версия агента: ${agent_version}.

Инструкции подключения находятся в документации проекта.

EOF