Skip to content

Commit 5ee5ab7

Browse files
authored
Integrate SignPath for automated Windows code signing (#1479)
* Sign Windows installer via SignPath * Update policy * Update README.md * Update README.md
1 parent 2ac823f commit 5ee5ab7

3 files changed

Lines changed: 107 additions & 19 deletions

File tree

.github/workflows/push-master.yml

Lines changed: 76 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ name: HyperHDR CI Build
22

33
on:
44
push:
5-
pull_request:
65

76
env:
87
USE_CACHE: ${{ vars.USE_CACHE && vars.USE_CACHE || true }}
@@ -235,19 +234,91 @@ jobs:
235234
env:
236235
GH_TOKEN: ${{ github.token }}
237236

237+
- name: Upload unsigned artifacts
238+
uses: actions/upload-artifact@v7.0.0
239+
with:
240+
name: unsigned-windows-installer
241+
path: build/Hyper*
242+
retention-days: 1
243+
244+
################################
245+
###### Sign Windows ############
246+
################################
247+
248+
sign-windows:
249+
name: Sign Windows Installer
250+
needs: [windows]
251+
runs-on: ubuntu-24.04
252+
env:
253+
USE_SIGNPATH: ${{ vars.USE_SIGNPATH || 'false' }}
254+
steps:
255+
- name: Download unsigned artifact
256+
uses: actions/download-artifact@v8.0.0
257+
with:
258+
name: unsigned-windows-installer
259+
path: to_sign
260+
261+
- name: Check SignPath Secrets
262+
if: env.USE_SIGNPATH == 'true' && github.event_name != 'pull_request'
263+
env:
264+
SIGNPATH_TOKEN: ${{ secrets.SIGNPATH_API_TOKEN }}
265+
SIGNPATH_ORGANIZATION_ID: ${{ secrets.SIGNPATH_ORGANIZATION_ID }}
266+
run: |
267+
if [ -z "$SIGNPATH_TOKEN" ] || [ -z "$SIGNPATH_ORGANIZATION_ID" ]; then
268+
echo "USE_SIGNPATH=false" >> $GITHUB_ENV
269+
echo "SignPath secrets not found. Skipping signing process."
270+
fi
271+
272+
- name: Upload unsigned ZIP to GitHub (SignPath V2 requirement)
273+
if: ${{ env.USE_SIGNPATH == 'true' }}
274+
id: upload-unsigned-artifact
275+
uses: actions/upload-artifact@v7.0.0
276+
with:
277+
name: signpath_upload
278+
path: to_sign/
279+
retention-days: 1
280+
281+
- name: Sign artifact with SignPath
282+
if: env.USE_SIGNPATH == 'true'
283+
id: signpath_step
284+
uses: signpath/github-action-submit-signing-request@v2
285+
with:
286+
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
287+
organization-id: ${{ secrets.SIGNPATH_ORGANIZATION_ID }}
288+
project-slug: 'hyperhdr'
289+
signing-policy-slug: ${{ startsWith(github.ref, 'refs/tags/') && 'release-signing' || 'test-signing' }}
290+
github-artifact-id: ${{ steps.upload-unsigned-artifact.outputs.artifact-id }}
291+
wait-for-completion: true
292+
output-artifact-directory: signed_artifact
293+
294+
- name: Check SignPath result & fail if needed
295+
if: always() && env.USE_SIGNPATH == 'true'
296+
run: |
297+
if [ "${{ steps.signpath_step.outcome }}" != "success" ]; then
298+
echo "::error::SignPath action failed technically (check logs for timeout/network issues)."
299+
exit 1
300+
fi
301+
302+
if [ ! -d "signed_artifact" ] || [ -z "$(ls -A signed_artifact 2>/dev/null)" ]; then
303+
echo "::error::SignPath reported success, but NO signed artifacts were downloaded!"
304+
echo "This usually means the signing request was REJECTED or failed silently."
305+
exit 1
306+
fi
307+
echo "Signing successful. Artifacts found in 'signed_artifact'."
308+
238309
- name: Upload artifacts (release)
239310
if: startsWith(github.event.ref, 'refs/tags') && github.event_name != 'pull_request'
240311
uses: actions/upload-artifact@v7.0.1
241312
with:
242313
name: release-artifact-windows
243-
path: build/Hyper*
314+
path: ${{ env.USE_SIGNPATH == 'true' && 'signed_artifact' || 'to_sign' }}/Hyper*.exe
244315

245316
- name: Upload artifacts from commit
246317
if: startsWith(github.event.ref, 'refs/tags') == false && github.event_name != 'pull_request'
247318
uses: actions/upload-artifact@v7.0.1
248319
with:
249-
name: Windows_x64_setup
250-
path: build/Hyper*.exe
320+
name: Windows_x64_setup_${{ env.USE_SIGNPATH == 'true' && 'signed' || 'unsigned' }}
321+
path: ${{ env.USE_SIGNPATH == 'true' && 'signed_artifact' || 'to_sign' }}/Hyper*.exe
251322

252323
################################
253324
####### CodeQL support #########
@@ -357,7 +428,7 @@ jobs:
357428
publish:
358429
name: Publish Releases
359430
if: startsWith(github.event.ref, 'refs/tags') && github.event_name != 'pull_request'
360-
needs: [Linux, windows, macOS]
431+
needs: [Linux, sign-windows, macOS]
361432
runs-on: ubuntu-24.04
362433
permissions:
363434
contents: write

CODE_SIGNING_POLICY.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Code Signing Policy
2+
3+
Free code signing for Windows is provided by [SignPath.io](https://about.signpath.io), certificate by [SignPath Foundation](https://signpath.org).
4+
5+
The HyperHDR Windows installer (.exe) for stable and test releases is signed with this certificate.
6+
7+
### Team roles
8+
- **Authors / Committers**: [awawa-dev](https://github.com/awawa-dev) and other contributors
9+
- **Reviewers**: [awawa-dev](https://github.com/awawa-dev)
10+
- **Approvers**: [awawa-dev](https://github.com/awawa-dev)
11+
12+
### Privacy policy
13+
This program will not transfer any information to other networked systems unless requested by the user or the person installing or operating it.

README.md

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## About
44

5-
HyperHDR is an open-source ambient lighting system for TVs and music setups, based on real-time video and audio stream analysis. It is designed with a strong focus on stability, high performance, and high-fidelity video decoding and mapping for precise and vibrant LED visuals. Optimized for both single-threaded and multi-threaded video processing, HyperHDR runs seamlessly on **Windows**, **macOS** (x64/arm64: M1, M2), and **Linux x64 & ARM** (including Raspberry Pi).
5+
HyperHDR is an open-source ambient lighting system for TVs and music setups. It performs real-time analysis of video and audio streams to create immersive LED lighting. Designed with a strong focus on stability, high performance, and high-fidelity video decoding and mapping, HyperHDR delivers precise and vibrant LED visuals. Optimized for both single- and multi-threaded video processing, it runs seamlessly on **Windows**, **macOS** (x64 & arm64), and **Linux** (x64 & ARM, including Raspberry Pi).
66

77
![v20](https://github.com/awawa-dev/HyperHDR/assets/69086569/9bc7999d-1515-4a96-ba5e-8a732cf7d8a4)
88

@@ -15,8 +15,8 @@ The Infinite Color Engine has also paved the way for our bespoke, internally dev
1515
### Key advantages of the Infinite Color Engine ( :new: HyperHDR v22):
1616
* **Floating-Point Precision:** All color computations use high-precision floating-point arithmetic, eliminating cumulative rounding errors for more accurate results
1717
* **Linear sRGB Accuracy:** Core color transformations are processed in linear sRGB space, ensuring physically correct and consistent light reproduction
18-
* **Deep-Color Support:** Compatible devices, including Philips Hue lamps, LIFX and HD108 LEDs, can take advantage of rendering beyond standard 24-bit RGB color depth.
19-
* **Advanced color smoothing algorithms:** Inertia-based physics, exponential, and perceptually-uniform YUV/RGB interpolators for more fluid and natural color transitions
18+
* **Deep-Color Support:** Compatible devices, including Philips Hue lamps, LIFX and HD108 LEDs, can take advantage of rendering beyond standard 24-bit RGB color depth
19+
* **Advanced Color Smoothing Algorithms:** Inertial-physics, exponential, and perceptually-uniform YUV/RGB interpolators for more fluid and natural color transitions
2020
* **High-precision RGB-to-RGBW conversion:** Energy-aware power balancing, white point temperature calibration, temporal dithering and anti-flicker hysteresis
2121

2222
### Additional features:
@@ -26,39 +26,43 @@ The Infinite Color Engine has also paved the way for our bespoke, internally dev
2626
* **Optimized multithreading**, enabling Raspberry Pi to process high-quality video streams
2727
* **High portability** across ARM-based embedded platforms
2828
* **System diagnostics:** live CPU/RAM usage, CPU temperature, undervoltage detection, USB grabber and LED performance
29-
* **USB grabber support** for Linux, Windows 10/11, and macOS for P010/NV12/YUYV/MJPEG/UYVY/I420/RGB
29+
* **USB grabber support** on Linux, Windows 10/11, and macOS for P010/NV12/YUYV/MJPEG/UYVY/I420/RGB
3030
* **Hardware-accelerated capture:** PipeWire/Portal (Linux/Wayland), DirectX (Windows 10/11)
3131
* **HDR-ready DirectX screen grabbing:** Supports DXGI_FORMAT_R16G16B16A16_FLOAT and multiple monitors
32-
* **Optimized video processing:** Our optimized pipeline handles smoothly 1080p **P010**/**NV12**/**YUYV** even on Rpi4
32+
* **Optimized video processing:** Our pipeline smoothly handles 1080p **P010**/**NV12**/**YUYV** even on Rpi4
3333
* **Built-in audio visualization** powered by spectrum analysis
3434
* **MQTT support** for IoT integration
3535
* **Home Assistant and zigbee2mqtt integration**
3636
* **Automatic tone mapping** for SDR/HDR content
3737
* **Automatic LUT calibration** for optimal HDR/SDR grabber quality using MP4 test files
3838
* **Latency benchmarking** for USB grabbers
39-
* **P010 support** for Windows, Linux: our patched Raspberry Pi OS image (P010 is unsupported in mainline OS)
39+
* **P010 support** on Windows & Linux (our patched Raspberry Pi OS image - P010 is not supported in mainline OS)
4040
* **Intuitive LED strip editor**, with automatic or manual geometry editing via mouse and context menus
4141
* **Smart signal detection** with adaptive learning for USB grabbers
4242
* **External tone mapping support** for flatbuffers/protobuf sources
43-
* **Wide LED strip compatibility** and for WS281x, APA102, HD107, SK9822, SK6812 our ultra-fast LED controllers:
44-
* [HyperSPI](https://github.com/awawa-dev/HyperSPI) for ESP8266/ESP32/rp2040
43+
* **Wide LED strip compatibility** including WS281x, APA102, HD107, SK9822, SK6812 and our ultra-fast LED controllers:
44+
* [HyperSPI](https://github.com/awawa-dev/HyperSPI) for ESP8266/ESP32/RP2040
4545
* [HyperSerialEsp8266](https://github.com/awawa-dev/HyperSerialEsp8266), [HyperSerialESP32](https://github.com/awawa-dev/HyperSerialESP32), [HyperSerialPico](https://github.com/awawa-dev/HyperSerialPico) USB serial port 2Mb+ speed connection
46-
* :new: [Hyperk](https://github.com/awawa-dev/Hyperk): our optimized wireless LED controller for esp8266/ESP32 (inc. S2/S3/C2/C3/C5/C6) and Raspberry Pi Pico W (rp2040/rp2350) family
46+
* :new: [Hyperk](https://github.com/awawa-dev/Hyperk): our optimized wireless LED controller for ESP8266/ESP32 (incl. S2/S3/C2/C3/C5/C6) and Raspberry Pi Pico W (RP2040/RP2350) family
4747

48-
HyperHDR’s advanced video pipeline significantly enhances LED output, creating a smoother, more immersive ambient lighting experience. It works with SDR, HDR, and Dolby Vision (LLDV if supported by your hardware). Instead of relying on USB grabbers, you can also use software screen capture directly from your PC.
48+
HyperHDR’s advanced video pipeline significantly enhances LED output, creating a smoother, more immersive ambient lighting experience. It works with SDR, HDR, and Dolby Vision (Low Latency Dolby Vision / LLDV only, if supported by your hardware). Instead of relying on USB grabbers, you can also use software screen capture directly from your PC.
4949

5050
![example](https://github.com/awawa-dev/HyperHDR/assets/69086569/4077c05d-4c02-47eb-8d64-a334064403b3)
5151

5252
## Downloads
5353

54-
Official releases:
54+
**Official releases:**
5555
[https://github.com/awawa-dev/HyperHDR/releases](https://github.com/awawa-dev/HyperHDR/releases)
5656

57-
Official Linux repository:
57+
Windows installers are code-signed by [SignPath Foundation](https://signpath.org). See our [Code Signing Policy](CODE_SIGNING_POLICY.md).
58+
59+
**Official Linux repository:**
5860
[https://awawa-dev.github.io/](https://awawa-dev.github.io/)
5961

60-
Latest test builds (GitHub Action — login required, select latest build from master branch, setups in ZIP artifacts):
61-
![Latest build on master](https://github.com/awawa-dev/HyperHDR/actions?query=branch%3Amaster)
62+
**Latest test builds** (GitHub Actions):
63+
[View latest builds on master branch](https://github.com/awawa-dev/HyperHDR/actions?query=event:push+branch:master)
64+
65+
Login required → select the latest build from the **master** branch → download setups from the ZIP artifacts.
6266

6367
## Documentation
6468

0 commit comments

Comments
 (0)