diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml deleted file mode 100644 index 36f328b..0000000 --- a/.gitea/workflows/deploy.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: Build & Deploy (Nix) - -on: - push: - branches: - - main - -jobs: - build-and-deploy: - runs-on: ubuntu-latest - - steps: - - name: Check out repository - run: | - git clone https://git.imrnes.team/MythEclipse/TeleUploader.git . - git checkout ${{ github.sha }} - - - name: Install Nix & Build - run: | - set -eu - - # Install Nix (container-safe: --init none, root-only mode) - curl -fsSL https://install.determinate.systems/nix \ - | sh -s -- install linux --no-confirm --init none 2>&1 - - # Enable flakes - mkdir -p /etc/nix - echo "experimental-features = nix-command flakes" >> /etc/nix/nix.conf - - . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh - - # Build - nix build .#teleuploader --impure --option sandbox false 2>&1 - - echo "$(readlink result)" > /tmp/teleuploader-store-path - - - name: Copy binary to target VPS & deploy - env: - VPS_HOST: ${{ secrets.VPS_HOST }} - VPS_USER: ${{ secrets.VPS_USER }} - VPS_SSH_KEY_VALUE: ${{ secrets.VPS_SSH_KEY_VALUE }} - run: | - set -eu - - . /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh - - STORE_PATH=$(cat /tmp/teleuploader-store-path) - echo "=== Store path: $STORE_PATH" - - key_file=$(mktemp /tmp/deploy-key.XXXXXX) - printf '%s\n' "$VPS_SSH_KEY_VALUE" > "$key_file" - chmod 600 "$key_file" - - # Copy binary closure to target VPS via Nix SSH store - export NIX_SSHOPTS="-i $key_file -o StrictHostKeyChecking=no" - nix copy --to "ssh://${VPS_USER}@${VPS_HOST}" "$STORE_PATH" 2>&1 - - # Deploy: update profile + restart service - NIX_BIN="/nix/var/nix/profiles/default/bin" - ssh -i "$key_file" -o StrictHostKeyChecking=no \ - "${VPS_USER}@${VPS_HOST}" " - # Remove stale profile dir (if was created as mkdir -p) - if [ -d /nix/var/nix/profiles/teleuploader ] && [ ! -L /nix/var/nix/profiles/teleuploader ]; then - rm -rf /nix/var/nix/profiles/teleuploader - fi - - export PATH=\$PATH:$NIX_BIN - nix-env --profile /nix/var/nix/profiles/teleuploader --set $STORE_PATH - systemctl daemon-reload - systemctl restart teleuploader - sleep 3 - systemctl status teleuploader --no-pager 2>&1 | head -15 - " 2>&1 \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..d3a1693 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,70 @@ +name: Build & Deploy (Nix) + +on: + push: + branches: [main] + workflow_dispatch: + +concurrency: + group: deploy + cancel-in-progress: false + +permissions: + contents: read + +env: + VPS_HOST: ${{ secrets.VPS_HOST }} + VPS_USER: ${{ secrets.VPS_USER }} + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + fetch-depth: 0 + submodules: false + + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@v22 + with: + determinate: false + extra-conf: | + sandbox = false + accept-flake-config = true + + - name: Cache Nix + uses: DeterminateSystems/magic-nix-cache-action@v14 + + - name: Build teleuploader + id: build + run: | + nix build .#teleuploader --impure --option sandbox false --print-build-logs + STORE_PATH=$(readlink result) + echo "store-path=$STORE_PATH" >> "$GITHUB_OUTPUT" + echo "Build OK: $STORE_PATH" + + - name: Setup SSH key + env: + SSH_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + run: | + mkdir -p ~/.ssh + echo "$SSH_KEY" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + sed -i 's/\r$//' ~/.ssh/id_ed25519 + ssh-keygen -y -f ~/.ssh/id_ed25519 >/dev/null 2>&1 || { echo "SSH key invalid"; exit 1; } + ssh-keyscan -H "$VPS_HOST" >> ~/.ssh/known_hosts 2>/dev/null + + - name: Deploy teleuploader to VPS + run: | + STORE_PATH="${{ steps.build.outputs.store-path }}" + echo "=== Copying teleuploader: $STORE_PATH ===" + nix copy --to "ssh://$VPS_USER@$VPS_HOST" "$STORE_PATH" + + echo "=== Updating profile ===" + ssh "$VPS_USER@$VPS_HOST" "sudo /nix/var/nix/profiles/default/bin/nix-env --profile /nix/var/nix/profiles/teleuploader --set '$STORE_PATH'" + + echo "=== Restarting service ===" + ssh "$VPS_USER@$VPS_HOST" "sudo systemctl daemon-reload && sudo systemctl restart teleuploader && sleep 3 && sudo systemctl is-active teleuploader" + echo "✅ teleuploader deployed" diff --git a/.github/workflows/mirror-gitea.yml b/.github/workflows/mirror-gitea.yml new file mode 100644 index 0000000..6962bf5 --- /dev/null +++ b/.github/workflows/mirror-gitea.yml @@ -0,0 +1,26 @@ +name: Mirror to Gitea + +on: + push: + branches: [main, master] + workflow_dispatch: + +permissions: + contents: write + +jobs: + mirror: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Mirror to Gitea + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + run: | + git remote add gitea "https://oauth2:${GITEA_TOKEN}@git.imrnes.team/MythEclipse/TeleUploader.git" + git push --mirror gitea + echo "✅ Mirrored to Gitea (MythEclipse/TeleUploader)"