Files
2026-10-07 18:47:42 +08:00

109 lines
3.3 KiB
Bash
Executable File

#!/bin/sh
set -eu
VERSION="${1:-${VERSION:-0.1.0}}"
OUT_DIR="${2:-${OUT_DIR:-dist}}"
PKG_VERSION="$(printf '%s' "$VERSION" | sed 's/^v//')"
PKG_BASE="luci-app-oxidns_${PKG_VERSION}-r1_all"
I18N_BASE="luci-i18n-oxidns-zh-cn_${PKG_VERSION}-r1_all"
need_cmd() {
command -v "$1" >/dev/null 2>&1 || {
printf 'required command not found: %s\n' "$1" >&2
exit 1
}
}
tar_has_member() {
tar -tzf "$1" | awk -v member="$2" '
{
path = $0;
sub(/^\.\//, "", path);
sub(/\/$/, "", path);
if (path == member)
found = 1;
}
END { exit found ? 0 : 1 }
'
}
tar_member_contains() {
tar -xOzf "$1" "$2" 2>/dev/null | grep -q "$3"
}
apk_data_has_checksum() {
gzip -dc "$1" | grep -q 'APK-TOOLS.checksum.SHA1='
}
tar_nested_has_member() {
outer="$1"
inner="$2"
member="$3"
nested="$(mktemp "${TMPDIR:-/tmp}/luci-app-oxidns-nested.XXXXXX")"
if ! tar -xOf "$outer" "$inner" > "$nested" 2>/dev/null &&
! tar -xOf "$outer" "./$inner" > "$nested" 2>/dev/null; then
rm -f "$nested"
return 1
fi
if tar -tzf "$nested" | awk -v member="$member" '
{
path = $0;
sub(/^\.\//, "", path);
if (path == member)
found = 1;
}
END { exit found ? 0 : 1 }
'; then
rm -f "$nested"
return 0
fi
rm -f "$nested"
return 1
}
need_cmd awk
need_cmd gzip
need_cmd grep
need_cmd sha256sum
need_cmd tar
scripts/check.sh
scripts/integration-check.sh
scripts/build-luci-package.sh "$VERSION" "$OUT_DIR"
tar_has_member "$OUT_DIR/${PKG_BASE}.ipk" control.tar.gz
tar_has_member "$OUT_DIR/${PKG_BASE}.ipk" data.tar.gz
tar_nested_has_member "$OUT_DIR/${PKG_BASE}.ipk" control.tar.gz postinst
tar_nested_has_member "$OUT_DIR/${PKG_BASE}.ipk" control.tar.gz postrm
tar_nested_has_member "$OUT_DIR/${PKG_BASE}.ipk" data.tar.gz etc/init.d/oxidns
tar_has_member "$OUT_DIR/${I18N_BASE}.ipk" control.tar.gz
tar_has_member "$OUT_DIR/${I18N_BASE}.ipk" data.tar.gz
tar_nested_has_member "$OUT_DIR/${I18N_BASE}.ipk" control.tar.gz postinst
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" .PKGINFO
tar_member_contains "$OUT_DIR/${PKG_BASE}.apk" .PKGINFO '^arch = noarch$'
tar_member_contains "$OUT_DIR/${PKG_BASE}.apk" .PKGINFO '^datahash = [0-9a-f][0-9a-f]*$'
apk_data_has_checksum "$OUT_DIR/${PKG_BASE}.apk"
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" etc
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" etc/config
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" usr/share/luci/menu.d
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" www/luci-static/resources/view/oxidns
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" usr/libexec/rpcd/luci.oxidns
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" etc/init.d/oxidns
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" .post-install
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" .post-upgrade
tar_has_member "$OUT_DIR/${PKG_BASE}.apk" .post-deinstall
tar_has_member "$OUT_DIR/${I18N_BASE}.apk" .PKGINFO
tar_member_contains "$OUT_DIR/${I18N_BASE}.apk" .PKGINFO '^arch = noarch$'
tar_member_contains "$OUT_DIR/${I18N_BASE}.apk" .PKGINFO '^datahash = [0-9a-f][0-9a-f]*$'
apk_data_has_checksum "$OUT_DIR/${I18N_BASE}.apk"
tar_has_member "$OUT_DIR/${I18N_BASE}.apk" usr/lib/lua/luci/i18n
tar_has_member "$OUT_DIR/${I18N_BASE}.apk" usr/lib/lua/luci/i18n/oxidns.zh-cn.lmo
tar_has_member "$OUT_DIR/${I18N_BASE}.apk" .post-install
tar_has_member "$OUT_DIR/${I18N_BASE}.apk" .post-upgrade
(cd "$OUT_DIR" && sha256sum -c sha256sums.txt)
printf 'Release check passed for %s in %s\n' "$VERSION" "$OUT_DIR"