feat(dotnet): migrate core formulas, deploy tools, and blazor admin web app to .NET 10
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Has been cancelled
Quant Engine CI/CD Pipeline / validate-core (pull_request) Has been cancelled
Quant Engine CI/CD Pipeline / validate-ui-and-storage (pull_request) Has been cancelled
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (pull_request) Has been cancelled

This commit is contained in:
2026-06-25 15:52:10 +09:00
parent 9abb8d3bc3
commit 2ba8def9bb
232 changed files with 10825 additions and 65 deletions
+30 -65
View File
@@ -1,6 +1,9 @@
name: Snapshot Admin Deployment
on:
push:
branches:
- main
workflow_dispatch:
concurrency:
@@ -8,85 +11,47 @@ concurrency:
cancel-in-progress: true
jobs:
deploy-snapshot-admin:
runs-on: [self-hosted, snapshot-admin-host]
timeout-minutes: 20
build-and-deploy:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout Code
run: |
echo "[deploy] checkout main for snapshot admin runtime"
if [ -d .git ]; then
git remote set-url origin http://x-access-token:${{ secrets.GITHUB_TOKEN }}@192.168.123.100:8418/KimJaeHyun/myfinance.git
git remote set-url origin http://x-access-token:${{ secrets.GITHUB_TOKEN }}@178.104.200.7/kjh2064/QuantEngineByItz.git
else
git init
git remote add origin http://x-access-token:${{ secrets.GITHUB_TOKEN }}@192.168.123.100:8418/KimJaeHyun/myfinance.git
git remote add origin http://x-access-token:${{ secrets.GITHUB_TOKEN }}@178.104.200.7/kjh2064/QuantEngineByItz.git
fi
git fetch origin main --depth=1
git reset --hard FETCH_HEAD
- name: Setup Python Environment
- name: Publish Blazor Web App
run: |
echo "[deploy] prepare python venv for snapshot admin launcher"
VENV_BASE=/volume1/gitea/python_venv
REQ_HASH=$(md5sum tools/validate_snapshot_admin_workflow_v1.py 2>/dev/null | cut -d' ' -f1 || echo "snapshot-admin-default")
VENV="$VENV_BASE/$REQ_HASH"
if [ ! -f "$VENV/bin/python" ]; then
mkdir -p "$VENV_BASE"
/usr/bin/python3 -m venv "$VENV"
"$VENV/bin/pip" install --upgrade pip --quiet
fi
"$VENV/bin/pip" install pyyaml --quiet
echo "$VENV/bin" >> $GITHUB_PATH
echo "[deploy] publishing .NET 10 Blazor app"
dotnet publish src/dotnet/QuantEngine.Web/QuantEngine.Web.csproj -c Release -o ./publish
- name: Deploy Snapshot Admin Runtime
env:
SNAPSHOT_ADMIN_AUTH_USER: ${{ vars.SNAPSHOT_ADMIN_AUTH_USER }}
SNAPSHOT_ADMIN_AUTH_PASSWORD: ${{ secrets.SNAPSHOT_ADMIN_AUTH_PASSWORD }}
- name: Compress Artifact
run: |
echo "[deploy] restart loopback service on 127.0.0.1:8787"
export ROOT_DIR="$PWD"
export SNAPSHOT_ADMIN_HOST=127.0.0.1
export SNAPSHOT_ADMIN_PORT=8787
export SNAPSHOT_ADMIN_PID_FILE="$PWD/Temp/snapshot_admin.pid"
export SNAPSHOT_ADMIN_LOG_FILE="$PWD/Temp/snapshot_admin.log"
export SNAPSHOT_ADMIN_STATE_URL="http://127.0.0.1:8787/api/state"
export SNAPSHOT_ADMIN_PUBLIC_STATE_URL="https://admin.example.com/api/state"
export SNAPSHOT_ADMIN_AUTH_USER="${SNAPSHOT_ADMIN_AUTH_USER:-}"
export SNAPSHOT_ADMIN_AUTH_PASSWORD="${SNAPSHOT_ADMIN_AUTH_PASSWORD:-}"
bash tools/run_snapshot_admin_synology.sh restart
echo "[deploy] compressing publish output"
tar -czf quantengine.tar.gz -C ./publish .
- name: Verify Snapshot Admin Runtime
- name: Deploy to Host via Local SSH
env:
SNAPSHOT_ADMIN_AUTH_USER: ${{ vars.SNAPSHOT_ADMIN_AUTH_USER }}
SNAPSHOT_ADMIN_AUTH_PASSWORD: ${{ secrets.SNAPSHOT_ADMIN_AUTH_PASSWORD }}
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
run: |
echo "[deploy] verify local health and auth gate"
export ROOT_DIR="$PWD"
export SNAPSHOT_ADMIN_HOST=127.0.0.1
export SNAPSHOT_ADMIN_PORT=8787
export SNAPSHOT_ADMIN_PID_FILE="$PWD/Temp/snapshot_admin.pid"
export SNAPSHOT_ADMIN_LOG_FILE="$PWD/Temp/snapshot_admin.log"
export SNAPSHOT_ADMIN_STATE_URL="http://127.0.0.1:8787/api/state"
export SNAPSHOT_ADMIN_AUTH_USER="${SNAPSHOT_ADMIN_AUTH_USER:-}"
export SNAPSHOT_ADMIN_AUTH_PASSWORD="${SNAPSHOT_ADMIN_AUTH_PASSWORD:-}"
echo "[deploy] wait for service readiness"
ready=0
for attempt in $(seq 1 30); do
if bash tools/run_snapshot_admin_synology.sh healthcheck; then
ready=1
break
fi
echo "[deploy] healthcheck retry $attempt/30"
sleep 2
done
if [ "$ready" -ne 1 ]; then
echo "[deploy] snapshot admin did not become ready in time"
tail -n 60 "$SNAPSHOT_ADMIN_LOG_FILE" || true
exit 1
fi
if [ -n "$SNAPSHOT_ADMIN_AUTH_USER" ] && [ -n "$SNAPSHOT_ADMIN_AUTH_PASSWORD" ]; then
curl -fsS -u "${SNAPSHOT_ADMIN_AUTH_USER}:${SNAPSHOT_ADMIN_AUTH_PASSWORD}" http://127.0.0.1:8787/api/state | python3 -c "import json,sys; print(json.load(sys.stdin)['version']['app'])"
else
curl -fsS http://127.0.0.1:8787/api/state | python3 -c "import json,sys; print(json.load(sys.stdin)['version']['app'])"
fi
echo "[deploy] snapshot admin deploy verification complete"
echo "[deploy] setting up SSH and deploying shadow copy"
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H 178.104.200.7 >> ~/.ssh/known_hosts
# Upload artifact and deploy script to host
ssh kjh2064@178.104.200.7 "mkdir -p /home/kjh2064/tmp"
scp quantengine.tar.gz kjh2064@178.104.200.7:/home/kjh2064/tmp/quantengine.tar.gz
# Execute hot deploy script
ssh kjh2064@178.104.200.7 "chmod +x /home/kjh2064/tmp/deploy.sh 2>/dev/null || true"
scp tools/deploy_quantengine.sh kjh2064@178.104.200.7:/home/kjh2064/tmp/deploy.sh
ssh kjh2064@178.104.200.7 "chmod +x /home/kjh2064/tmp/deploy.sh && /home/kjh2064/tmp/deploy.sh"