Files
TeleUploader/.gitea/workflows/deploy.yml
T
Claude fbc1f1822a
Build & Deploy (Nix) / build-and-deploy (push) Successful in 15s
fix: deploy via SSH, build + deploy on VPS directly
The CI runner container can't access the VPS host's systemd and Nix
directly. Instead of installing Nix in the container and trying to
access the host, SSH directly to the VPS to build and deploy.

This approach:
1. SSHs to the VPS using the VPS_SSH_KEY_VALUE secret
2. Pulls the latest code on the VPS
3. Builds with Nix directly on the VPS
4. Updates nix-env profile and restarts systemd service

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 15:43:14 +07:00

56 lines
1.6 KiB
YAML

name: Build & Deploy (Nix)
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Deploy via SSH (build + deploy on VPS)
env:
VPS_HOST: ${{ secrets.VPS_HOST }}
VPS_USER: ${{ secrets.VPS_USER }}
VPS_SSH_KEY_VALUE: ${{ secrets.VPS_SSH_KEY_VALUE }}
run: |
set -eu
key_file=$(mktemp)
printf '%s\n' "$VPS_SSH_KEY_VALUE" > "$key_file"
chmod 600 "$key_file"
ssh -i "$key_file" -o StrictHostKeyChecking=no \
"${VPS_USER}@${VPS_HOST}" \
"
# Source Nix profile (Determinate Nix installs to ~/.nix-profile)
export PATH=\"\$HOME/.nix-profile/bin:\$PATH\"
# Clone or pull latest code
REPO_DIR=\"/home/teleuploader/repo\"
if [ -d \"\$REPO_DIR/.git\" ]; then
cd \"\$REPO_DIR\" && git pull origin main 2>&1
else
mkdir -p \"\$REPO_DIR\"
git clone https://git.imrnes.team/MythEclipse/TeleUploader \"\$REPO_DIR\" 2>&1
cd \"\$REPO_DIR\"
fi
cd \"\$REPO_DIR\"
# Build with Nix
nix build .#teleuploader --impure --option sandbox false 2>&1
# Deploy
STORE_PATH=\$(readlink result)
nix-env --profile /nix/var/nix/profiles/teleuploader --set \"\$STORE_PATH\"
systemctl restart teleuploader
sleep 3
systemctl status teleuploader --no-pager | head -15
"