mirror of
https://github.com/Tencent/WeKnora.git
synced 2026-09-01 14:53:07 +08:00
Revert "chore: make Lite edition support and related configurations hidden"
This reverts commit 88d5b303b8.
This commit is contained in:
Executable
+97
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
#
|
||||
# 本地构建 + 打包 WeKnora Lite 发行包
|
||||
#
|
||||
# 用法:
|
||||
# ./scripts/package-lite.sh # 自动检测版本
|
||||
# ./scripts/package-lite.sh v0.2.0 # 指定版本号
|
||||
# SKIP_FRONTEND=1 ./scripts/package-lite.sh # 跳过前端构建(使用已有 web/)
|
||||
#
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
cd "${ROOT_DIR}"
|
||||
|
||||
# Resolve version
|
||||
if [ -n "${1:-}" ]; then
|
||||
VERSION="$1"
|
||||
elif command -v git >/dev/null 2>&1; then
|
||||
VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "dev")
|
||||
else
|
||||
VERSION="dev"
|
||||
fi
|
||||
|
||||
GOOS=$(go env GOOS)
|
||||
GOARCH=$(go env GOARCH)
|
||||
ARCHIVE="WeKnora-lite_${VERSION}_${GOOS}_${GOARCH}"
|
||||
DIST_DIR="dist/${ARCHIVE}"
|
||||
|
||||
echo "=== WeKnora Lite Packager ==="
|
||||
echo " Version : ${VERSION}"
|
||||
echo " Platform: ${GOOS}/${GOARCH}"
|
||||
echo " Output : dist/${ARCHIVE}.tar.gz"
|
||||
echo ""
|
||||
|
||||
# ── Step 1: Build frontend (if not skipped) ──
|
||||
if [ "${SKIP_FRONTEND:-}" != "1" ]; then
|
||||
if [ -f frontend/package.json ]; then
|
||||
echo ">> Building frontend..."
|
||||
(cd frontend && npm ci --prefer-offline && npm run build)
|
||||
rm -rf web
|
||||
cp -r frontend/dist web
|
||||
else
|
||||
echo ">> No frontend/package.json found, skipping frontend build"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f web/index.html ]; then
|
||||
echo "WARNING: web/index.html not found — package will not include frontend"
|
||||
fi
|
||||
|
||||
# ── Step 2: Build Go binary ──
|
||||
echo ">> Building WeKnora-lite binary..."
|
||||
export EDITION=lite
|
||||
eval "$(./scripts/get_version.sh env)"
|
||||
LDFLAGS="-w -s $(./scripts/get_version.sh ldflags)"
|
||||
export CGO_CFLAGS="-Wno-deprecated-declarations"
|
||||
if [ "$(uname)" = "Darwin" ]; then
|
||||
export CGO_LDFLAGS="-Wl,-no_warn_duplicate_libraries"
|
||||
fi
|
||||
CGO_ENABLED=1 go build -tags "sqlite_fts5" -ldflags="${LDFLAGS}" \
|
||||
-o WeKnora-lite ./cmd/server
|
||||
|
||||
# ── Step 3: Assemble package ──
|
||||
echo ">> Assembling package..."
|
||||
rm -rf "${DIST_DIR}"
|
||||
mkdir -p "${DIST_DIR}/web"
|
||||
|
||||
cp WeKnora-lite "${DIST_DIR}/"
|
||||
if [ -d web ] && [ -f web/index.html ]; then
|
||||
cp -r web/* "${DIST_DIR}/web/"
|
||||
fi
|
||||
cp .env.lite.example "${DIST_DIR}/"
|
||||
cp docs/LITE.md "${DIST_DIR}/README.md"
|
||||
if [ -d config ]; then
|
||||
cp -r config "${DIST_DIR}/config"
|
||||
fi
|
||||
if [ -d migrations/sqlite ]; then
|
||||
mkdir -p "${DIST_DIR}/migrations/sqlite"
|
||||
cp -r migrations/sqlite/* "${DIST_DIR}/migrations/sqlite/"
|
||||
fi
|
||||
if [ -f deploy/weknora-lite.service ]; then
|
||||
cp deploy/weknora-lite.service "${DIST_DIR}/"
|
||||
fi
|
||||
|
||||
# ── Step 4: Create tarball ──
|
||||
echo ">> Creating tarball..."
|
||||
(cd dist && tar czf "${ARCHIVE}.tar.gz" "${ARCHIVE}")
|
||||
(cd dist && shasum -a 256 "${ARCHIVE}.tar.gz" > "${ARCHIVE}.tar.gz.sha256")
|
||||
|
||||
echo ""
|
||||
echo "=== Done ==="
|
||||
echo " dist/${ARCHIVE}.tar.gz"
|
||||
echo " dist/${ARCHIVE}.tar.gz.sha256"
|
||||
SIZE=$(du -h "dist/${ARCHIVE}.tar.gz" | cut -f1)
|
||||
echo " Size: ${SIZE}"
|
||||
Executable
+178
@@ -0,0 +1,178 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
#
|
||||
# 本地测试 Homebrew Formula
|
||||
#
|
||||
# 流程:打包 → 创建本地 tap → 写入 Formula → brew install → 验证
|
||||
#
|
||||
# 用法:
|
||||
# ./scripts/test-homebrew.sh # 完整测试(含前端构建)
|
||||
# SKIP_FRONTEND=1 ./scripts/test-homebrew.sh # 跳过前端构建
|
||||
# SKIP_BUILD=1 ./scripts/test-homebrew.sh # 跳过构建(使用已有 tarball)
|
||||
#
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
cd "${ROOT_DIR}"
|
||||
|
||||
TAP_NAME="weknora/test"
|
||||
FORMULA_NAME="weknora-lite-test"
|
||||
VERSION="test"
|
||||
GOOS=$(go env GOOS)
|
||||
GOARCH=$(go env GOARCH)
|
||||
ARCHIVE="WeKnora-lite_${VERSION}_${GOOS}_${GOARCH}"
|
||||
TARBALL="${ROOT_DIR}/dist/${ARCHIVE}.tar.gz"
|
||||
|
||||
# ── Step 1: Build package ──
|
||||
if [ "${SKIP_BUILD:-}" != "1" ]; then
|
||||
echo "=== Step 1: Build local package ==="
|
||||
SKIP_FRONTEND="${SKIP_FRONTEND:-0}" ./scripts/package-lite.sh "${VERSION}"
|
||||
else
|
||||
echo "=== Step 1: Skipped (SKIP_BUILD=1) ==="
|
||||
fi
|
||||
|
||||
if [ ! -f "${TARBALL}" ]; then
|
||||
echo "Error: tarball not found at ${TARBALL}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SHA=$(shasum -a 256 "${TARBALL}" | awk '{print $1}')
|
||||
echo ""
|
||||
echo " Tarball: ${TARBALL}"
|
||||
echo " SHA256: ${SHA}"
|
||||
|
||||
# ── Step 2: Create local tap ──
|
||||
echo ""
|
||||
echo "=== Step 2: Set up local tap ==="
|
||||
|
||||
# Create tap if it doesn't exist
|
||||
TAP_DIR="$(brew --repository)/Library/Taps/weknora/homebrew-test"
|
||||
if [ ! -d "${TAP_DIR}" ]; then
|
||||
mkdir -p "${TAP_DIR}/Formula"
|
||||
(cd "${TAP_DIR}" && git init -q && git commit --allow-empty -m "init" -q)
|
||||
echo " Created tap: ${TAP_NAME}"
|
||||
else
|
||||
echo " Tap already exists: ${TAP_NAME}"
|
||||
fi
|
||||
|
||||
# ── Step 3: Write Formula into tap ──
|
||||
echo ""
|
||||
echo "=== Step 3: Generate Formula ==="
|
||||
|
||||
cat > "${TAP_DIR}/Formula/${FORMULA_NAME}.rb" << RUBY
|
||||
class WeknoraLiteTest < Formula
|
||||
desc "WeKnora Lite (local test)"
|
||||
homepage "https://github.com/Tencent/WeKnora"
|
||||
version "${VERSION}"
|
||||
license "Apache-2.0"
|
||||
|
||||
url "file://${TARBALL}"
|
||||
sha256 "${SHA}"
|
||||
|
||||
def install
|
||||
libexec.install "WeKnora-lite"
|
||||
pkgshare.install "web" if File.directory?("web")
|
||||
pkgshare.install "config" if File.directory?("config")
|
||||
pkgshare.install ".env.lite.example"
|
||||
if File.directory?("migrations")
|
||||
pkgshare.install "migrations"
|
||||
end
|
||||
|
||||
(bin/"weknora-lite-test").write <<~SH
|
||||
#!/bin/bash
|
||||
CONFIG_DIR="\\\${WEKNORA_CONFIG_DIR:-\\\${XDG_CONFIG_HOME:-\\\$HOME/.config}/weknora-test}"
|
||||
DATA_DIR="\\\${WEKNORA_DATA_DIR:-\\\${XDG_DATA_HOME:-\\\$HOME/.local/share}/weknora-test}"
|
||||
|
||||
mkdir -p "\\\$DATA_DIR/files" "\\\$CONFIG_DIR/config" 2>/dev/null
|
||||
|
||||
if [ ! -f "\\\$CONFIG_DIR/config/config.yaml" ]; then
|
||||
cp -r "#{pkgshare}/config/" "\\\$CONFIG_DIR/config/"
|
||||
fi
|
||||
|
||||
if [ ! -d "\\\$CONFIG_DIR/migrations" ] && [ -d "#{pkgshare}/migrations" ]; then
|
||||
ln -sf "#{pkgshare}/migrations" "\\\$CONFIG_DIR/migrations"
|
||||
fi
|
||||
|
||||
if [ ! -f "\\\$CONFIG_DIR/.env.lite" ]; then
|
||||
cp "#{pkgshare}/.env.lite.example" "\\\$CONFIG_DIR/.env.lite"
|
||||
sed -i'' -e "s|DB_PATH=.*|DB_PATH=\\\$DATA_DIR/weknora.db|" "\\\$CONFIG_DIR/.env.lite"
|
||||
sed -i'' -e "s|LOCAL_STORAGE_BASE_DIR=.*|LOCAL_STORAGE_BASE_DIR=\\\$DATA_DIR/files|" "\\\$CONFIG_DIR/.env.lite"
|
||||
echo ""
|
||||
echo "已创建配置文件: \\\$CONFIG_DIR/.env.lite"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
set -a
|
||||
source "\\\$CONFIG_DIR/.env.lite"
|
||||
set +a
|
||||
|
||||
export DB_PATH="\\\${DB_PATH:-\\\$DATA_DIR/weknora.db}"
|
||||
export LOCAL_STORAGE_BASE_DIR="\\\${LOCAL_STORAGE_BASE_DIR:-\\\$DATA_DIR/files}"
|
||||
export WEKNORA_WEB_DIR="\\\${WEKNORA_WEB_DIR:-#{pkgshare}/web}"
|
||||
|
||||
cd "\\\$CONFIG_DIR"
|
||||
exec "#{libexec}/WeKnora-lite" "\\\$@"
|
||||
SH
|
||||
end
|
||||
|
||||
def post_install
|
||||
(var/"weknora-test").mkpath
|
||||
(var/"log").mkpath
|
||||
end
|
||||
|
||||
service do
|
||||
run [bin/"weknora-lite-test"]
|
||||
keep_alive true
|
||||
working_dir var/"weknora-test"
|
||||
log_path var/"log/weknora-lite-test.log"
|
||||
error_log_path var/"log/weknora-lite-test.log"
|
||||
end
|
||||
|
||||
test do
|
||||
assert_predicate bin/"weknora-lite-test", :executable?
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
|
||||
(cd "${TAP_DIR}" && git add -A && git commit -m "update formula" -q --allow-empty)
|
||||
echo " Formula written to: ${TAP_DIR}/Formula/${FORMULA_NAME}.rb"
|
||||
|
||||
# ── Step 4: Install ──
|
||||
echo ""
|
||||
echo "=== Step 4: Install ==="
|
||||
brew reinstall "${TAP_NAME}/${FORMULA_NAME}" 2>&1 || brew install "${TAP_NAME}/${FORMULA_NAME}"
|
||||
|
||||
# ── Step 5: Verify ──
|
||||
echo ""
|
||||
echo "=== Step 5: Verify ==="
|
||||
echo ""
|
||||
echo " which:"
|
||||
which weknora-lite-test || true
|
||||
echo ""
|
||||
echo " Installed files:"
|
||||
brew list "${TAP_NAME}/${FORMULA_NAME}"
|
||||
echo ""
|
||||
echo " Test paths (isolated from production):"
|
||||
echo " Config: ~/.config/weknora-test/.env.lite"
|
||||
echo " Data: ~/.local/share/weknora-test/"
|
||||
|
||||
echo ""
|
||||
echo "=== Done ==="
|
||||
echo ""
|
||||
echo "前台运行:"
|
||||
echo " weknora-lite-test"
|
||||
echo ""
|
||||
echo "后台服务:"
|
||||
echo " brew services start ${TAP_NAME}/${FORMULA_NAME}"
|
||||
echo " brew services info ${TAP_NAME}/${FORMULA_NAME}"
|
||||
echo " brew services stop ${TAP_NAME}/${FORMULA_NAME}"
|
||||
echo ""
|
||||
echo "日志:"
|
||||
echo " $(brew --prefix)/var/log/weknora-lite-test.log"
|
||||
echo ""
|
||||
echo "卸载测试:"
|
||||
echo " brew services stop ${FORMULA_NAME} 2>/dev/null"
|
||||
echo " brew uninstall ${FORMULA_NAME}"
|
||||
echo " brew untap ${TAP_NAME}"
|
||||
echo " rm -rf ~/.config/weknora-test ~/.local/share/weknora-test"
|
||||
Executable
+74
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
#
|
||||
# 更新 Homebrew Formula 中的版本号和 sha256
|
||||
#
|
||||
# 用法:
|
||||
# ./scripts/update-homebrew-formula.sh v0.2.0
|
||||
#
|
||||
# 会自动从 GitHub Releases 下载 .sha256 文件来填充 Formula。
|
||||
# 在 CI 中被 release-lite workflow 调用。
|
||||
#
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
|
||||
VERSION="${1:?Usage: $0 <version> (e.g. v0.2.0)}"
|
||||
VERSION_BARE="${VERSION#v}"
|
||||
FORMULA="${ROOT_DIR}/Formula/weknora-lite.rb"
|
||||
REPO="Tencent/WeKnora"
|
||||
BASE_URL="https://github.com/${REPO}/releases/download/${VERSION}"
|
||||
|
||||
if [ ! -f "${FORMULA}" ]; then
|
||||
echo "Error: Formula not found at ${FORMULA}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Updating Formula to version ${VERSION_BARE}..."
|
||||
|
||||
fetch_sha256() {
|
||||
local file="$1"
|
||||
local url="${BASE_URL}/${file}.sha256"
|
||||
local sha
|
||||
sha=$(curl -sSL "${url}" | awk '{print $1}')
|
||||
if [ -z "${sha}" ] || [ "${#sha}" -ne 64 ]; then
|
||||
echo "Error: Failed to fetch sha256 from ${url}" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "${sha}"
|
||||
}
|
||||
|
||||
SHA_DARWIN_ARM64=$(fetch_sha256 "WeKnora-lite_${VERSION}_darwin_arm64.tar.gz")
|
||||
SHA_DARWIN_AMD64=$(fetch_sha256 "WeKnora-lite_${VERSION}_darwin_amd64.tar.gz")
|
||||
SHA_LINUX_ARM64=$(fetch_sha256 "WeKnora-lite_${VERSION}_linux_arm64.tar.gz")
|
||||
SHA_LINUX_AMD64=$(fetch_sha256 "WeKnora-lite_${VERSION}_linux_amd64.tar.gz")
|
||||
|
||||
echo " darwin_arm64 : ${SHA_DARWIN_ARM64}"
|
||||
echo " darwin_amd64 : ${SHA_DARWIN_AMD64}"
|
||||
echo " linux_arm64 : ${SHA_LINUX_ARM64}"
|
||||
echo " linux_amd64 : ${SHA_LINUX_AMD64}"
|
||||
|
||||
# Use a temp file for portable sed
|
||||
TMP=$(mktemp)
|
||||
cp "${FORMULA}" "${TMP}"
|
||||
|
||||
# Update version
|
||||
sed -i.bak "s/^ version \".*\"/ version \"${VERSION_BARE}\"/" "${TMP}"
|
||||
|
||||
# Update sha256 values in order of appearance.
|
||||
# The formula has sha256 lines in this order:
|
||||
# 1. darwin arm64
|
||||
# 2. darwin amd64
|
||||
# 3. linux arm64
|
||||
# 4. linux amd64
|
||||
awk -v s1="${SHA_DARWIN_ARM64}" \
|
||||
-v s2="${SHA_DARWIN_AMD64}" \
|
||||
-v s3="${SHA_LINUX_ARM64}" \
|
||||
-v s4="${SHA_LINUX_AMD64}" \
|
||||
'BEGIN{n=0} /sha256 "/{n++; if(n==1) sub(/"[^"]*"$/,"\"" s1 "\""); else if(n==2) sub(/"[^"]*"$/,"\"" s2 "\""); else if(n==3) sub(/"[^"]*"$/,"\"" s3 "\""); else if(n==4) sub(/"[^"]*"$/,"\"" s4 "\"")} {print}' \
|
||||
"${TMP}" > "${FORMULA}"
|
||||
|
||||
rm -f "${TMP}" "${TMP}.bak"
|
||||
|
||||
echo "Formula updated: ${FORMULA}"
|
||||
Reference in New Issue
Block a user