diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index b7a450455..16aeb6077 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -4,9 +4,11 @@ on: push: branches: - main + - release/5.1 pull_request: branches: - main + - release/5.1 workflow_dispatch: permissions: diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index eb06cc7c6..36feafe24 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -78,6 +78,16 @@ jobs: fi echo "[OK] VERSION file matches requested version ($REQUESTED_VERSION)" + - name: Enforce maintenance branch for 5.1.x releases + run: | + REQUESTED_VERSION="${{ steps.extract.outputs.version }}" + CURRENT_REF="${GITHUB_REF_NAME}" + if [[ "$REQUESTED_VERSION" =~ ^5\.1\.[0-9]+([-.].*)?$ ]] && [ "$CURRENT_REF" != "release/5.1" ]; then + echo "::error::5.1.x releases must be cut from release/5.1 (current ref: $CURRENT_REF)" + exit 1 + fi + echo "[OK] Release ref ${CURRENT_REF} is valid for ${REQUESTED_VERSION}" + # Frontend checks run in parallel with backend tests frontend_checks: needs: prepare @@ -497,7 +507,9 @@ jobs: env: GH_TOKEN: ${{ secrets.WORKFLOW_PAT }} run: | - gh workflow run publish-docker.yml -f tag="${{ needs.prepare.outputs.tag }}" + gh workflow run publish-docker.yml \ + --ref "${GITHUB_REF_NAME}" \ + -f tag="${{ needs.prepare.outputs.tag }}" echo "[OK] Docker publish workflow dispatched" - name: Trigger demo server update @@ -506,7 +518,9 @@ jobs: env: GH_TOKEN: ${{ secrets.WORKFLOW_PAT }} run: | - gh workflow run update-demo-server.yml -f tag="${{ needs.prepare.outputs.tag }}" + gh workflow run update-demo-server.yml \ + --ref "${GITHUB_REF_NAME}" \ + -f tag="${{ needs.prepare.outputs.tag }}" echo "[OK] Demo server update dispatched" - name: Summary diff --git a/.github/workflows/helm-ci.yml b/.github/workflows/helm-ci.yml index 87ae1f66f..36bac9c47 100644 --- a/.github/workflows/helm-ci.yml +++ b/.github/workflows/helm-ci.yml @@ -2,7 +2,7 @@ name: Helm CI on: push: - branches: [main] + branches: [main, release/5.1] paths: - "deploy/helm/**" - ".github/workflows/helm-ci.yml" diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index 601eb6792..aacfc00a2 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -4,6 +4,7 @@ on: pull_request: branches: - main + - release/5.1 paths: - 'frontend-modern/**' - 'internal/**' @@ -13,6 +14,7 @@ on: push: branches: - main + - release/5.1 - master paths: - 'frontend-modern/**' diff --git a/.github/workflows/test-updates.yml b/.github/workflows/test-updates.yml index aa879e9fa..7552b6cdb 100644 --- a/.github/workflows/test-updates.yml +++ b/.github/workflows/test-updates.yml @@ -15,6 +15,7 @@ on: push: branches: - main + - release/5.1 - master paths: - 'internal/updates/**' diff --git a/.github/workflows/update-demo-server.yml b/.github/workflows/update-demo-server.yml index 545dd5907..da452991b 100644 --- a/.github/workflows/update-demo-server.yml +++ b/.github/workflows/update-demo-server.yml @@ -6,7 +6,7 @@ on: workflow_dispatch: inputs: tag: - description: 'Release tag to deploy (e.g., v4.29.0)' + description: 'Release tag to deploy (e.g., v5.1.28)' required: true type: string @@ -37,12 +37,12 @@ jobs: GH_TOKEN: ${{ github.token }} run: | TARGET="${{ steps.target.outputs.tag }}" - LATEST=$(gh api "repos/${{ github.repository }}/releases/latest" --jq '.tag_name') + LATEST=$(gh api "repos/${{ github.repository }}/releases?per_page=100" --jq 'map(select(.draft == false and .prerelease == false and (.tag_name | test("^v5\\.1\\.[0-9]+$"))))[0].tag_name') echo "Target tag: $TARGET" - echo "Latest published tag: $LATEST" + echo "Latest published v5.1 tag: $LATEST" if [ "$TARGET" != "$LATEST" ]; then echo "skip=true" >> "$GITHUB_OUTPUT" - echo "Release is not the latest; skipping demo update." + echo "Release is not the latest v5.1 stable release; skipping demo update." else echo "skip=false" >> "$GITHUB_OUTPUT" fi @@ -55,7 +55,7 @@ jobs: else echo "Release: ${{ github.event.release.tag_name }}" echo "Prerelease: ${{ github.event.release.prerelease }}" - echo "Updating demo server to latest stable release..." + echo "Updating demo server to latest stable v5.1 release..." fi - name: Wait for release assets @@ -123,7 +123,7 @@ jobs: TAG="${{ steps.target.outputs.tag }}" # Use set -o pipefail to ensure curl errors aren't masked by bash ssh -i ~/.ssh/id_ed25519 ${{ secrets.DEMO_SERVER_USER }}@${{ secrets.DEMO_SERVER_HOST }} \ - "set -o pipefail && curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | sudo bash -s -- --version $TAG" + "set -o pipefail && curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/install.sh | sudo bash -s -- --version $TAG" - name: Verify update if: steps.gate.outputs.skip != 'true' && steps.current.outputs.skip_current != 'true' diff --git a/docs/AUTO_UPDATE.md b/docs/AUTO_UPDATE.md index 3a8c4bbb0..966000a55 100644 --- a/docs/AUTO_UPDATE.md +++ b/docs/AUTO_UPDATE.md @@ -83,7 +83,7 @@ If you use the legacy `docker-compose` binary, replace `docker compose` with `do ### ProxmoxVE LXC (Manual) ```bash -curl -fsSL https://github.com/rcourtman/Pulse/releases/latest/download/install.sh | bash +curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/install.sh | bash ``` This script installs/updates the **Pulse server**. Agent updates use the `/install.sh` command generated in **Settings → Agents → Installation commands**. @@ -91,7 +91,7 @@ This script installs/updates the **Pulse server**. Agent updates use the `/insta ### Systemd Service (Manual) ```bash -curl -fsSL https://github.com/rcourtman/Pulse/releases/latest/download/install.sh | bash +curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/install.sh | bash ``` This script installs/updates the **Pulse server**. Agent updates use the `/install.sh` command generated in **Settings → Agents → Installation commands**. diff --git a/docs/FAQ.md b/docs/FAQ.md index 1ed8bcb7d..e1ac66cf9 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -6,7 +6,7 @@ If you run Proxmox VE, use the official LXC installer (recommended): ```bash -curl -fsSL https://github.com/rcourtman/Pulse/releases/latest/download/install.sh | bash +curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/install.sh | bash ``` Note: this installs the Pulse **server**. Agent installs use the command from **Settings → Agents → Installation commands** (served from `/install.sh` on your Pulse server). diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 9fbf8a3b8..a3be275f8 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -10,7 +10,7 @@ If you run Proxmox VE, the easiest and most “Pulse-native” deployment is the Run this on your Proxmox host: ```bash -curl -fsSL https://github.com/rcourtman/Pulse/releases/latest/download/install.sh | bash +curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/install.sh | bash ``` > **Note**: The GitHub `install.sh` is the **server** installer. The agent installer is served from your Pulse server at `/install.sh` (see **Settings → Agents → Installation commands**). @@ -72,7 +72,7 @@ See [KUBERNETES.md](KUBERNETES.md) for ingress and persistence configuration. For Linux servers (VM or bare metal), use the official installer: ```bash -curl -fsSL https://github.com/rcourtman/Pulse/releases/latest/download/install.sh | sudo bash +curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/install.sh | sudo bash ``` > **Note**: This installs the Pulse server. Use the `/install.sh` endpoint from your Pulse UI for installing `pulse-agent` on monitored hosts. diff --git a/docs/TEMPERATURE_MONITORING.md b/docs/TEMPERATURE_MONITORING.md index 56e9650cd..364e1c2d2 100644 --- a/docs/TEMPERATURE_MONITORING.md +++ b/docs/TEMPERATURE_MONITORING.md @@ -80,14 +80,14 @@ ssh -i /path/to/key root@node "cat /sys/class/thermal/thermal_zone0/temp" If you still have the old sensor proxy installed from prior releases, remove it from each **Proxmox host** (not the Pulse container) with the supported cleanup helper: ```bash -curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/scripts/uninstall-sensor-proxy.sh | \ +curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/scripts/uninstall-sensor-proxy.sh | \ sudo bash -s -- --uninstall --purge ``` If you also want to remove the `pulse-monitor@pam` API user/tokens for a full clean slate before re-adding the node, include `--remove-proxmox-access`: ```bash -curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/scripts/uninstall-sensor-proxy.sh | \ +curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/scripts/uninstall-sensor-proxy.sh | \ sudo bash -s -- --uninstall --purge --remove-proxmox-access ``` diff --git a/docs/UPGRADE_v5.md b/docs/UPGRADE_v5.md index a46bd9984..216f3d0e5 100644 --- a/docs/UPGRADE_v5.md +++ b/docs/UPGRADE_v5.md @@ -19,7 +19,7 @@ Preferred path: If you prefer CLI, use the official installer for the target version: ```bash -curl -fsSL https://github.com/rcourtman/Pulse/releases/latest/download/install.sh | \ +curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/install.sh | \ sudo bash -s -- --version vX.Y.Z ``` @@ -61,7 +61,7 @@ If you reset auth (for example by deleting `.env`), Pulse may require a bootstra The `pulse-sensor-proxy` from v4 is no longer needed — temperature monitoring is now handled by the unified agent. If you had the sensor proxy installed on your Proxmox hosts, remove it **on each host** after upgrading: ```bash -curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/scripts/uninstall-sensor-proxy.sh | \ +curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/scripts/uninstall-sensor-proxy.sh | \ sudo bash -s -- --uninstall --purge ``` diff --git a/docs/VM_DISK_MONITORING.md b/docs/VM_DISK_MONITORING.md index 60c9476f0..4e4ac7c3d 100644 --- a/docs/VM_DISK_MONITORING.md +++ b/docs/VM_DISK_MONITORING.md @@ -42,7 +42,7 @@ If guest disk values only populate for the first part of a large VM list, tune t ### Diagnostic Script Run this on your Proxmox host to debug specific VMs: ```bash -curl -sSL https://raw.githubusercontent.com/rcourtman/Pulse/main/scripts/test-vm-disk.sh | bash +curl -sSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/scripts/test-vm-disk.sh | bash ``` ## 📝 Notes diff --git a/docs/operations/AUTO_UPDATE.md b/docs/operations/AUTO_UPDATE.md index 938ca81b2..0953599c1 100644 --- a/docs/operations/AUTO_UPDATE.md +++ b/docs/operations/AUTO_UPDATE.md @@ -11,7 +11,7 @@ Manage Pulse auto-updates on host-mode installations. | `pulse-update.service` | Runs the update script. | | `pulse-auto-update.sh` | Fetches release & restarts Pulse (`/opt/pulse/scripts/pulse-auto-update.sh`). | -**Release channel note:** the systemd timer script tracks GitHub `releases/latest` (stable). RC channel settings only affect the in-app update checker. +**Release channel note:** the systemd timer script tracks the latest stable `5.1.x` release. RC channel settings only affect the in-app update checker. ## 🚀 Enable/Disable @@ -46,7 +46,7 @@ If an update fails: 2. The timer script keeps a temporary backup under `/tmp/pulse-backup-` during the update; failures auto-restore from that backup and then clean it up. 3. If you need to pin a specific version, re-run the installer with a version: ```bash - curl -fsSL https://github.com/rcourtman/Pulse/releases/latest/download/install.sh | \ + curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/release/5.1/install.sh | \ sudo bash -s -- --version vX.Y.Z ``` This installer updates the **Pulse server**. Agent updates use the `/install.sh` command generated in **Settings → Agents → Installation commands**. diff --git a/frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx b/frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx index 31ff0e78a..c6f808c17 100644 --- a/frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx +++ b/frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx @@ -9,6 +9,7 @@ import Download from 'lucide-solid/icons/download'; import type { UpdateInfo, VersionInfo, UpdatePlan } from '@/api/updates'; import { V6_RC_ANNOUNCEMENT, + V5_MAINTENANCE_BRANCH, isV5ReleaseLine, } from '@/constants/releaseAnnouncements'; @@ -498,11 +499,11 @@ sudo tar -xzf pulse-v${props.updateInfo()?.latestVersion}-linux-amd64.tar.gz -C
- git pull origin main + {`git pull origin ${V5_MAINTENANCE_BRANCH}`}