name: CI on: push: branches: ["main", "master"] tags: ["v*"] pull_request: jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust (stable) uses: dtolnay/rust-toolchain@stable - name: Cache dependencies uses: Swatinem/rust-cache@v2 - name: Build run: cargo build --workspace --verbose - name: Test run: cargo test --workspace --verbose build-windows-client: runs-on: ubuntu-latest if: github.event_name == 'push' steps: - uses: actions/checkout@v4 - name: Install Rust (stable) + Windows target uses: dtolnay/rust-toolchain@stable with: targets: x86_64-pc-windows-gnu - name: Install MinGW cross-compiler and tools run: sudo apt-get update && sudo apt-get install -y gcc-mingw-w64-x86-64 mingw-w64-tools - name: Cache dependencies uses: Swatinem/rust-cache@v2 with: key: windows-gnu - name: Build Windows client (cross-compile) run: | cargo build --release --package helios-remote-client --target x86_64-pc-windows-gnu env: CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER: x86_64-w64-mingw32-gcc - name: Upload Windows client artifact uses: actions/upload-artifact@v4 with: name: helios-remote-client-windows path: target/x86_64-pc-windows-gnu/release/helios-remote-client.exe if-no-files-found: error - name: Rename exe for release if: github.ref == 'refs/heads/master' run: cp target/x86_64-pc-windows-gnu/release/helios-remote-client.exe helios-remote-client-windows.exe - name: Publish rolling release (latest) if: github.ref == 'refs/heads/master' uses: softprops/action-gh-release@v2 with: tag_name: latest name: "Latest Build" body: "Rolling release — automatically updated on every push to master." prerelease: true files: helios-remote-client-windows.exe env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Deploy client to VPS if: github.ref == 'refs/heads/master' env: VPS_SSH_KEY: ${{ secrets.VPS_SSH_KEY }} run: | mkdir -p ~/.ssh echo "$VPS_SSH_KEY" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key ssh-keyscan -H 46.225.185.232 >> ~/.ssh/known_hosts scp -i ~/.ssh/deploy_key helios-remote-client-windows.exe \ root@46.225.185.232:/var/www/helios-remote/helios-remote-client-windows.exe deploy-relay: runs-on: ubuntu-latest needs: build-and-test if: github.ref == 'refs/heads/master' steps: - uses: actions/checkout@v4 - name: Install Rust + x86_64-linux target uses: dtolnay/rust-toolchain@stable with: targets: x86_64-unknown-linux-gnu - name: Install cross-linker run: sudo apt-get update && sudo apt-get install -y gcc-x86-64-linux-gnu - name: Cache dependencies uses: Swatinem/rust-cache@v2 with: key: linux-x86_64 - name: Build relay (x86_64 Linux) run: cargo build --release --package helios-remote-relay --target x86_64-unknown-linux-gnu env: CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: x86_64-linux-gnu-gcc - name: Deploy relay to VPS env: VPS_SSH_KEY: ${{ secrets.VPS_SSH_KEY }} run: | mkdir -p ~/.ssh echo "$VPS_SSH_KEY" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key ssh-keyscan -H 46.225.185.232 >> ~/.ssh/known_hosts # Only publish to download URL — relay updates itself when triggered by CLI scp -i ~/.ssh/deploy_key \ target/x86_64-unknown-linux-gnu/release/helios-remote-relay \ root@46.225.185.232:/var/www/helios-remote/helios-remote-relay-linux # Write version.json so CLI knows what's available echo "{\"commit\":\"$(git rev-parse --short HEAD)\"}" > version.json scp -i ~/.ssh/deploy_key version.json \ root@46.225.185.232:/var/www/helios-remote/version.json build-cli: runs-on: ubuntu-latest if: github.event_name == 'push' steps: - uses: actions/checkout@v4 - name: Install Rust (stable) + targets uses: dtolnay/rust-toolchain@stable with: targets: x86_64-unknown-linux-gnu,x86_64-pc-windows-gnu,aarch64-unknown-linux-gnu - name: Install cross-compilers run: sudo apt-get update && sudo apt-get install -y gcc-x86-64-linux-gnu gcc-mingw-w64-x86-64 mingw-w64-tools gcc-aarch64-linux-gnu - name: Cache dependencies uses: Swatinem/rust-cache@v2 with: key: cli - name: Build CLI (Linux x86_64) run: cargo build --release --package helios-remote-cli --target x86_64-unknown-linux-gnu env: CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: x86_64-linux-gnu-gcc - name: Build CLI (Linux aarch64) run: cargo build --release --package helios-remote-cli --target aarch64-unknown-linux-gnu env: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc - name: Build CLI (Windows x86_64) run: cargo build --release --package helios-remote-cli --target x86_64-pc-windows-gnu env: CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER: x86_64-w64-mingw32-gcc - name: Upload Linux CLI artifact uses: actions/upload-artifact@v4 with: name: helios-remote-cli-linux path: target/x86_64-unknown-linux-gnu/release/helios-remote-cli if-no-files-found: error - name: Upload Windows CLI artifact uses: actions/upload-artifact@v4 with: name: helios-remote-cli-windows path: target/x86_64-pc-windows-gnu/release/helios-remote-cli.exe if-no-files-found: error - name: Deploy CLI to VPS if: github.ref == 'refs/heads/master' env: VPS_SSH_KEY: ${{ secrets.VPS_SSH_KEY }} run: | mkdir -p ~/.ssh echo "$VPS_SSH_KEY" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key ssh-keyscan -H 46.225.185.232 >> ~/.ssh/known_hosts scp -i ~/.ssh/deploy_key \ target/x86_64-unknown-linux-gnu/release/helios-remote-cli \ root@46.225.185.232:/var/www/helios-remote/helios-remote-cli-linux scp -i ~/.ssh/deploy_key \ target/aarch64-unknown-linux-gnu/release/helios-remote-cli \ root@46.225.185.232:/var/www/helios-remote/helios-remote-cli-linux-aarch64 scp -i ~/.ssh/deploy_key \ target/x86_64-pc-windows-gnu/release/helios-remote-cli.exe \ root@46.225.185.232:/var/www/helios-remote/helios-remote-cli-windows.exe