Files
douyin/scripts/build-fnos-package.sh
T

56 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd)
BASE_VERSION=$(sed -n 's/^version[[:space:]]*=[[:space:]]*//p' "$ROOT_DIR/fnos/manifest" | head -n 1 | tr -d '\r')
PACKAGE_VERSION="${PACKAGE_VERSION:-$BASE_VERSION}"
case "$PACKAGE_VERSION" in
''|*[!0-9.]*|.*|*..*|*.) printf 'invalid fnOS package version: %s\n' "$PACKAGE_VERSION" >&2; exit 1 ;;
esac
[ "$(printf '%s' "$PACKAGE_VERSION" | awk -F. '{ print NF }')" -eq 3 ] || {
printf 'fnOS package version must contain exactly three numeric components: %s\n' "$PACKAGE_VERSION" >&2
exit 1
}
OUTPUT_DIR="${1:-${ROOT_DIR}/artifacts/fnos}"
SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-1785168000}"
export VITE_BUILD_TIMESTAMP="${VITE_BUILD_TIMESTAMP:-$((SOURCE_DATE_EPOCH * 1000))}"
BUILD_TMP_ROOT="${DYSYNC_BUILD_TMPDIR:-${DYSYNC_TMPDIR:-${TMPDIR:-/tmp}}}"
mkdir -p "${BUILD_TMP_ROOT}"
WORK_DIR=$(mktemp -d "${BUILD_TMP_ROOT%/}/dysync-fnos-build.XXXXXX")
trap 'rm -rf -- "${WORK_DIR}"' EXIT
mkdir -p "${OUTPUT_DIR}"
(cd "${ROOT_DIR}/app" && npm run build)
dotnet restore "${ROOT_DIR}/dy.net.csproj" -r linux-x64
dotnet publish "${ROOT_DIR}/dy.net.csproj" -c Release -r linux-x64 --self-contained true --no-restore \
-p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=false -o "${WORK_DIR}/publish"
mkdir -p "${WORK_DIR}/payload/server" "${WORK_DIR}/payload/ui/images" "${WORK_DIR}/package"
cp -a "${WORK_DIR}/publish/." "${WORK_DIR}/payload/server/"
cp "${ROOT_DIR}/appsettings.json" "${WORK_DIR}/payload/server/appsettings.json"
sed -i -E "s/(\"tagName\"[[:space:]]*:[[:space:]]*)\"[^\"]*\"/\1\"${PACKAGE_VERSION}\"/; s/(\"fnVersion\"[[:space:]]*:[[:space:]]*)\"[^\"]*\"/\1\"${PACKAGE_VERSION}\"/" \
"${WORK_DIR}/payload/server/appsettings.json"
rm -rf -- "${WORK_DIR}/payload/server/db" "${WORK_DIR}/payload/server/logs"
cp "${ROOT_DIR}/fnos/ui/config" "${WORK_DIR}/payload/ui/config"
cp "${ROOT_DIR}/app/dist/logo.png" "${WORK_DIR}/payload/ui/images/icon_64.png"
cp "${ROOT_DIR}/app/dist/logo.png" "${WORK_DIR}/payload/ui/images/icon_256.png"
tar --sort=name --mtime="@${SOURCE_DATE_EPOCH}" --owner=0 --group=0 --numeric-owner \
-czf "${WORK_DIR}/package/app.tgz" -C "${WORK_DIR}/payload" server ui
cp -a "${ROOT_DIR}/fnos/cmd" "${ROOT_DIR}/fnos/config" "${WORK_DIR}/package/"
cp "${ROOT_DIR}/app/dist/logo.png" "${WORK_DIR}/package/ICON.PNG"
cp "${ROOT_DIR}/app/dist/logo.png" "${WORK_DIR}/package/ICON_256.PNG"
checksum=$(md5sum "${WORK_DIR}/package/app.tgz" | cut -d' ' -f1)
sed -e "s/@CHECKSUM@/${checksum}/" \
-e "s/^version[[:space:]]*=.*/version = ${PACKAGE_VERSION}/" \
"${ROOT_DIR}/fnos/manifest" > "${WORK_DIR}/package/manifest"
chmod 0755 "${WORK_DIR}/package/cmd/"*
PACKAGE="${OUTPUT_DIR}/dy.net-${PACKAGE_VERSION}-x86_64.fpk"
tar --sort=name --mtime="@${SOURCE_DATE_EPOCH}" --owner=0 --group=0 --numeric-owner \
-czf "${PACKAGE}" -C "${WORK_DIR}/package" app.tgz cmd config ICON.PNG ICON_256.PNG manifest
(cd "${OUTPUT_DIR}" && sha256sum "$(basename "${PACKAGE}")" > "$(basename "${PACKAGE}").sha256")
DYSYNC_VERIFY_TMPDIR="${DYSYNC_VERIFY_TMPDIR:-${BUILD_TMP_ROOT}}" \
"${ROOT_DIR}/scripts/verify-fnos-package.sh" "${PACKAGE}" "$PACKAGE_VERSION"
printf 'Built %s\n' "${PACKAGE}"