diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 112fa77..6ea246c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -373,8 +373,15 @@ jobs: rm -f "$NOTES_FILE" - echo "release_url=$(gh release view ${TAG} --json url -q .url)" >> $GITHUB_OUTPUT - echo "release_id=$(gh release view ${TAG} --json id -q .id)" >> $GITHUB_OUTPUT + # Get the numeric release ID from the REST API (not GraphQL node_id) + # The validation workflow needs the numeric ID for REST API calls + # Note: /releases/tags/{tag} endpoint doesn't work for draft releases, + # so we list all releases and filter by tag_name + RELEASE_JSON=$(gh api "repos/${{ github.repository }}/releases" | jq ".[] | select(.tag_name == \"${TAG}\")") + RELEASE_ID=$(echo "$RELEASE_JSON" | jq -r '.id') + + echo "release_url=$(echo "$RELEASE_JSON" | jq -r '.html_url')" >> $GITHUB_OUTPUT + echo "release_id=${RELEASE_ID}" >> $GITHUB_OUTPUT echo "tag=${TAG}" >> $GITHUB_OUTPUT - name: Upload checksums.txt diff --git a/.github/workflows/validate-release-assets.yml b/.github/workflows/validate-release-assets.yml index 9e314f1..e50e53b 100644 --- a/.github/workflows/validate-release-assets.yml +++ b/.github/workflows/validate-release-assets.yml @@ -124,7 +124,8 @@ jobs: cd release # Get asset info (id and name) - API works with GITHUB_TOKEN for draft releases - ASSETS_JSON=$(gh api "repos/${{ github.repository }}/releases/${{ steps.context.outputs.release_id }}/assets") + # Use --paginate to handle releases with >30 assets + ASSETS_JSON=$(gh api --paginate "repos/${{ github.repository }}/releases/${{ steps.context.outputs.release_id }}/assets") if [ "$(echo "$ASSETS_JSON" | jq '. | length')" -eq 0 ]; then echo "::error::No assets found in release" @@ -222,8 +223,8 @@ jobs: echo "Running assets-only validation (Docker image not available)..." scripts/validate-release.sh \ "${{ steps.context.outputs.version }}" \ - "rcourtman/pulse:${{ steps.context.outputs.tag }}" \ - "release" 2>&1 | tee "$OUTPUT_FILE" || true + --skip-docker \ + "release" 2>&1 | tee "$OUTPUT_FILE" fi VALIDATION_EXIT_CODE=$? diff --git a/Dockerfile b/Dockerfile index 83ffc82..fe0ad5f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -226,17 +226,26 @@ COPY scripts/install-sensor-proxy.sh /opt/pulse/scripts/install-sensor-proxy.sh COPY scripts/install-docker.sh /opt/pulse/scripts/install-docker.sh RUN chmod 755 /opt/pulse/scripts/install-docker-agent.sh /opt/pulse/scripts/install-container-agent.sh /opt/pulse/scripts/install-host-agent.sh /opt/pulse/scripts/install-host-agent.ps1 /opt/pulse/scripts/uninstall-host-agent.sh /opt/pulse/scripts/uninstall-host-agent.ps1 /opt/pulse/scripts/install-sensor-proxy.sh /opt/pulse/scripts/install-docker.sh -# Copy multi-arch docker-agent binaries for download endpoint +# Copy all binaries for download endpoint RUN mkdir -p /opt/pulse/bin + +# Main pulse server binary (for validation) +COPY --from=backend-builder /app/pulse /opt/pulse/bin/pulse + +# Docker agent binaries (all architectures) COPY --from=backend-builder /app/pulse-docker-agent-linux-amd64 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-docker-agent-linux-arm64 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-docker-agent-linux-armv7 /opt/pulse/bin/ +COPY --from=backend-builder /app/pulse-docker-agent-linux-armv6 /opt/pulse/bin/ +COPY --from=backend-builder /app/pulse-docker-agent-linux-386 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-docker-agent /opt/pulse/bin/pulse-docker-agent -# Copy multi-arch host-agent binaries for download endpoint +# Host agent binaries (all platforms and architectures) COPY --from=backend-builder /app/pulse-host-agent-linux-amd64 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-host-agent-linux-arm64 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-host-agent-linux-armv7 /opt/pulse/bin/ +COPY --from=backend-builder /app/pulse-host-agent-linux-armv6 /opt/pulse/bin/ +COPY --from=backend-builder /app/pulse-host-agent-linux-386 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-host-agent-darwin-amd64 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-host-agent-darwin-arm64 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-host-agent-windows-amd64.exe /opt/pulse/bin/ @@ -247,10 +256,12 @@ RUN ln -s pulse-host-agent-windows-amd64.exe /opt/pulse/bin/pulse-host-agent-win ln -s pulse-host-agent-windows-arm64.exe /opt/pulse/bin/pulse-host-agent-windows-arm64 && \ ln -s pulse-host-agent-windows-386.exe /opt/pulse/bin/pulse-host-agent-windows-386 -# Copy multi-arch pulse-sensor-proxy binaries for download endpoint +# Sensor proxy binaries (all Linux architectures) COPY --from=backend-builder /app/pulse-sensor-proxy-linux-amd64 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-sensor-proxy-linux-arm64 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-sensor-proxy-linux-armv7 /opt/pulse/bin/ +COPY --from=backend-builder /app/pulse-sensor-proxy-linux-armv6 /opt/pulse/bin/ +COPY --from=backend-builder /app/pulse-sensor-proxy-linux-386 /opt/pulse/bin/ COPY --from=backend-builder /app/pulse-sensor-proxy /opt/pulse/bin/pulse-sensor-proxy # Create config directory