From 8f36460c705e05f1a965b154eeb9077e9a5a4736 Mon Sep 17 00:00:00 2001 From: plasmagoat Date: Sun, 8 Jun 2025 03:04:09 +0200 Subject: [PATCH 1/2] split flow --- .forgejo/workflows/publish-image.yml | 73 ++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .forgejo/workflows/publish-image.yml diff --git a/.forgejo/workflows/publish-image.yml b/.forgejo/workflows/publish-image.yml new file mode 100644 index 0000000..b1239a5 --- /dev/null +++ b/.forgejo/workflows/publish-image.yml @@ -0,0 +1,73 @@ +name: "Build & Upload NixOS Proxmox Image" + +on: + release: + types: [published] + workflow_dispatch: + +jobs: + build-upload: + runs-on: nixos-latest + env: + PROXMOX_HOST: 192.168.1.205 + PROXMOX_USER: forgejo-runner + TEMPLATE_VMID: 9001 + LATEST_TEMPLATE_VMID: 9000 + + steps: + - name: Install nodejs + run: nix-env -iA nixpkgs.nodejs + + - uses: actions/checkout@v4 + + - name: Download Forgejo Release + if: ${{ github.ref_type == 'tag' }} + uses: actions/forgejo-release@v2.6.0 + with: + direction: download + release-dir: ./ # by default, files are downloaded into dist/release + + - name: Prepare SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.RUNNER_SSH_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H $PROXMOX_HOST >> ~/.ssh/known_hosts + ssh-keyscan -H $NIXOS_BUILER_HOST >> ~/.ssh/known_hosts + + - name: Test SSH connection + run: | + echo "Testing SSH connection to $PROXMOX_HOST..." + ssh -o StrictHostKeyChecking=yes $PROXMOX_USER@$PROXMOX_HOST "echo 'SSH success. Hostname:' && hostname" + echo "Testing SSH connection to $NIXOS_BUILER_HOST..." + ssh -o StrictHostKeyChecking=yes $NIXOS_BUILER_USER@$NIXOS_BUILER_HOST "echo 'SSH success. Hostname:' && hostname" + + - name: Upload image to Proxmox and manage templates + run: | + set -e + ls + IMAGE="./*.vma.zst" + REMOTE_NAME="nixos-base-image-${{ steps.version.outputs.tag}}.vma.zst" + REMOTE_PATH="/var/lib/vz/template/images/$REMOTE_NAME" + + echo "Uploading $IMAGE to Proxmox as $REMOTE_NAME" + scp $IMAGE $PROXMOX_USER@$PROXMOX_HOST:$REMOTE_PATH + + echo "Restoring as VMID $TEMPLATE_VMID" + ssh $PROXMOX_USER@$PROXMOX_HOST " + qm destroy $TEMPLATE_VMID --purge || true + qmrestore $REMOTE_PATH $TEMPLATE_VMID --unique + qm template $TEMPLATE_VMID + + echo 'Cloning to $LATEST_TEMPLATE_VMID as latest' + qm destroy $LATEST_TEMPLATE_VMID --purge || true + qm clone $TEMPLATE_VMID $LATEST_TEMPLATE_VMID --name nixos-base-latest + qm template $TEMPLATE_VMID + " + + # - name: Prune old templates + # run: | + # ssh $PROXMOX_USER@$PROXMOX_HOST " + # cd /var/lib/vz/template/images + # ls -tp nixos-base-image-*.vma.zst | grep -v '/$' | tail -n +6 | xargs -r rm -- + # " From 89fcf13785757710f471d433afb903361adefd1d Mon Sep 17 00:00:00 2001 From: plasmagoat Date: Sun, 8 Jun 2025 03:05:48 +0200 Subject: [PATCH 2/2] split flow --- .forgejo/workflows/build-image.yml | 36 ++++++++++++++-------------- .forgejo/workflows/publish-image.yml | 1 + 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/.forgejo/workflows/build-image.yml b/.forgejo/workflows/build-image.yml index 5b9f628..354ebe6 100644 --- a/.forgejo/workflows/build-image.yml +++ b/.forgejo/workflows/build-image.yml @@ -56,27 +56,27 @@ jobs: - name: Build NixOS image run: nix build .#base --builders "ssh://$NIXOS_BUILER_USER@$NIXOS_BUILER_HOST x86_64-linux ~/.ssh/id_rsa 1 1 kvm" --max-jobs 0 - - name: Upload image to Proxmox and manage templates - run: | - set -e - IMAGE="result/vm-image.vma.zst" - REMOTE_NAME="nixos-base-image-${{ steps.version.outputs.tag}}.vma.zst" - REMOTE_PATH="/var/lib/vz/template/images/$REMOTE_NAME" + # - name: Upload image to Proxmox and manage templates + # run: | + # set -e + # IMAGE="result/*.vma.zst" + # REMOTE_NAME="nixos-base-image-${{ steps.version.outputs.tag}}.vma.zst" + # REMOTE_PATH="/var/lib/vz/template/images/$REMOTE_NAME" - echo "Uploading $IMAGE to Proxmox as $REMOTE_NAME" - scp $IMAGE $PROXMOX_USER@$PROXMOX_HOST:$REMOTE_PATH + # echo "Uploading $IMAGE to Proxmox as $REMOTE_NAME" + # scp $IMAGE $PROXMOX_USER@$PROXMOX_HOST:$REMOTE_PATH - echo "Restoring as VMID $TEMPLATE_VMID" - ssh $PROXMOX_USER@$PROXMOX_HOST " - qm destroy $TEMPLATE_VMID --purge || true - qmrestore $REMOTE_PATH $TEMPLATE_VMID --unique - qm template $TEMPLATE_VMID + # echo "Restoring as VMID $TEMPLATE_VMID" + # ssh $PROXMOX_USER@$PROXMOX_HOST " + # qm destroy $TEMPLATE_VMID --purge || true + # qmrestore $REMOTE_PATH $TEMPLATE_VMID --unique + # qm template $TEMPLATE_VMID - echo 'Cloning to $LATEST_TEMPLATE_VMID as latest' - qm destroy $LATEST_TEMPLATE_VMID --purge || true - qm clone $TEMPLATE_VMID $LATEST_TEMPLATE_VMID --name nixos-base-latest - qm template $TEMPLATE_VMID - " + # echo 'Cloning to $LATEST_TEMPLATE_VMID as latest' + # qm destroy $LATEST_TEMPLATE_VMID --purge || true + # qm clone $TEMPLATE_VMID $LATEST_TEMPLATE_VMID --name nixos-base-latest + # qm template $TEMPLATE_VMID + # " # - name: Prune old templates # run: | diff --git a/.forgejo/workflows/publish-image.yml b/.forgejo/workflows/publish-image.yml index b1239a5..3eead83 100644 --- a/.forgejo/workflows/publish-image.yml +++ b/.forgejo/workflows/publish-image.yml @@ -25,6 +25,7 @@ jobs: uses: actions/forgejo-release@v2.6.0 with: direction: download + download-latest: true release-dir: ./ # by default, files are downloaded into dist/release - name: Prepare SSH