Build & Deploy (Nix) / build-and-deploy (push) Successful in 15s
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>
56 lines
1.6 KiB
YAML
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
|
|
"
|