Prebuilt .next/ via GitHub Releases — install/update fetch tarball, skip build (saves ~25s)
This commit is contained in:
parent
3d8a1ac539
commit
c06a16d86e
4 changed files with 103 additions and 6 deletions
39
.github/workflows/release.yml
vendored
Normal file
39
.github/workflows/release.yml
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
name: Release Build
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install deps
|
||||
run: npm ci --no-audit --no-fund
|
||||
|
||||
- name: Build Next.js
|
||||
run: npm run build
|
||||
|
||||
- name: Package .next/
|
||||
run: |
|
||||
TAG="${GITHUB_REF_NAME}"
|
||||
tar -czf "nexredirect-next-${TAG}.tar.gz" .next
|
||||
ls -lh "nexredirect-next-${TAG}.tar.gz"
|
||||
|
||||
- name: Attach to release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: nexredirect-next-*.tar.gz
|
||||
tag_name: ${{ github.ref_name }}
|
||||
fail_on_unmatched_files: true
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "corex-nexredirect",
|
||||
"version": "0.1.0",
|
||||
"version": "0.1.1",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"dev": "tsx watch server.ts",
|
||||
|
|
|
|||
|
|
@ -50,13 +50,28 @@ if ! id "$SERVICE_USER" >/dev/null 2>&1; then
|
|||
useradd --system --home "$INSTALL_DIR" --shell /usr/sbin/nologin "$SERVICE_USER"
|
||||
fi
|
||||
|
||||
echo "==> Repo clonen / aktualisieren"
|
||||
echo "==> Latest Release ermitteln"
|
||||
TARGET_TAG="${NEXREDIRECT_TAG:-}"
|
||||
if [[ -z "$TARGET_TAG" ]]; then
|
||||
TARGET_TAG=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" 2>/dev/null \
|
||||
| grep -m1 '"tag_name"' | sed -E 's/.*"tag_name": *"([^"]+)".*/\1/' || true)
|
||||
fi
|
||||
if [[ -z "$TARGET_TAG" ]]; then
|
||||
echo " (kein Release gefunden — fallback main)"
|
||||
TARGET_REF="main"
|
||||
else
|
||||
echo " Tag: $TARGET_TAG"
|
||||
TARGET_REF="$TARGET_TAG"
|
||||
fi
|
||||
|
||||
echo "==> Repo clonen / aktualisieren ($TARGET_REF)"
|
||||
if [[ -d "$INSTALL_DIR/.git" ]]; then
|
||||
git -C "$INSTALL_DIR" fetch --tags --quiet
|
||||
git -C "$INSTALL_DIR" reset --hard origin/main --quiet
|
||||
git -C "$INSTALL_DIR" reset --hard --quiet "$TARGET_REF" 2>/dev/null || git -C "$INSTALL_DIR" reset --hard --quiet "origin/$TARGET_REF"
|
||||
else
|
||||
rm -rf "$INSTALL_DIR"
|
||||
git clone --quiet "https://github.com/${REPO}.git" "$INSTALL_DIR"
|
||||
git -C "$INSTALL_DIR" checkout --quiet "$TARGET_REF" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
mkdir -p "$DATA_DIR"
|
||||
|
|
@ -65,7 +80,23 @@ chown -R "$SERVICE_USER:$SERVICE_USER" "$INSTALL_DIR" "$DATA_DIR"
|
|||
|
||||
echo "==> Dependencies installieren"
|
||||
sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && npm ci --no-audit --no-fund"
|
||||
sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && npm run build"
|
||||
|
||||
echo "==> Prebuilt .next/ versuchen"
|
||||
PREBUILT_OK=0
|
||||
if [[ -n "$TARGET_TAG" ]]; then
|
||||
ASSET_URL="https://github.com/${REPO}/releases/download/${TARGET_TAG}/nexredirect-next-${TARGET_TAG}.tar.gz"
|
||||
if curl -fsSL -o /tmp/next-build.tgz "$ASSET_URL" 2>/dev/null; then
|
||||
sudo -u "$SERVICE_USER" -H tar -xzf /tmp/next-build.tgz -C "$INSTALL_DIR"
|
||||
rm -f /tmp/next-build.tgz
|
||||
PREBUILT_OK=1
|
||||
echo " Prebuilt aus Release übernommen — Build übersprungen."
|
||||
else
|
||||
echo " Kein Prebuilt für $TARGET_TAG — baue lokal."
|
||||
fi
|
||||
fi
|
||||
if [[ $PREBUILT_OK -eq 0 ]]; then
|
||||
sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && npm run build"
|
||||
fi
|
||||
|
||||
echo "==> GeoLite2-Country DB"
|
||||
GEOIP_PATH="$DATA_DIR/GeoLite2-Country.mmdb"
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
set -euo pipefail
|
||||
|
||||
TAG="${1:-}"
|
||||
REPO="${NEXREDIRECT_REPO:-CoreXManagement/CoreX-NexRedirect}"
|
||||
INSTALL_DIR="${NEXREDIRECT_DIR:-/opt/corex-nexredirect}"
|
||||
SERVICE_USER="nexredirect"
|
||||
|
||||
|
|
@ -14,14 +15,40 @@ cd "$INSTALL_DIR"
|
|||
chmod +x "$INSTALL_DIR/scripts/"*.sh 2>/dev/null || true
|
||||
chown -R "$SERVICE_USER:$SERVICE_USER" "$INSTALL_DIR"
|
||||
|
||||
if [[ -z "$TAG" ]]; then
|
||||
TAG=$(curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" 2>/dev/null \
|
||||
| grep -m1 '"tag_name"' | sed -E 's/.*"tag_name": *"([^"]+)".*/\1/' || true)
|
||||
fi
|
||||
|
||||
if [[ -n "$TAG" ]]; then
|
||||
echo "==> Update auf $TAG"
|
||||
sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && git fetch --tags --quiet && git checkout --quiet '$TAG'"
|
||||
else
|
||||
sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && git fetch --quiet && git pull --ff-only --quiet"
|
||||
echo "==> Update auf main (kein Release gefunden)"
|
||||
sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && git fetch --quiet && git checkout --quiet main && git pull --ff-only --quiet"
|
||||
fi
|
||||
|
||||
sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && npm ci --no-audit --no-fund"
|
||||
sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && npm run build"
|
||||
|
||||
PREBUILT_OK=0
|
||||
if [[ -n "$TAG" ]]; then
|
||||
ASSET_URL="https://github.com/${REPO}/releases/download/${TAG}/nexredirect-next-${TAG}.tar.gz"
|
||||
if curl -fsSL -o /tmp/next-build.tgz "$ASSET_URL" 2>/dev/null; then
|
||||
rm -rf "$INSTALL_DIR/.next"
|
||||
sudo -u "$SERVICE_USER" -H tar -xzf /tmp/next-build.tgz -C "$INSTALL_DIR"
|
||||
rm -f /tmp/next-build.tgz
|
||||
PREBUILT_OK=1
|
||||
echo "==> Prebuilt .next/ aus Release übernommen"
|
||||
fi
|
||||
fi
|
||||
if [[ $PREBUILT_OK -eq 0 ]]; then
|
||||
echo "==> Lokal bauen"
|
||||
sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && npm run build"
|
||||
fi
|
||||
|
||||
# CLI-Symlink aktualisieren falls Pfad neu
|
||||
ln -sf "$INSTALL_DIR/bin/nexredirect" /usr/local/bin/nexredirect
|
||||
chmod +x "$INSTALL_DIR/bin/nexredirect" 2>/dev/null || true
|
||||
|
||||
systemctl restart corex-nexredirect
|
||||
echo "Update auf $(sudo -u "$SERVICE_USER" -H bash -c "cd '$INSTALL_DIR' && git describe --tags --always") abgeschlossen"
|
||||
|
|
|
|||
Loading…
Reference in a new issue