Skip to content

Commit 450dfab

Browse files
authored
Merge pull request #8 from NekoSuneProjects/Pupwolf_Branch
Pupwolf branch
2 parents 82a11ab + 3df8467 commit 450dfab

File tree

5 files changed

+5787
-5836
lines changed

5 files changed

+5787
-5836
lines changed

.github/workflows/builder.yml

Lines changed: 95 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,21 @@ jobs:
5050
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5151
with:
5252
version: ${{ env.VERSION }}
53-
name: "PulsoidApp ${{ env.VERSION }}"
53+
name: "HRMApp ${{ env.VERSION }}"
5454
tag: ${{ env.VERSION }}
5555
prerelease: true
56-
header: "## Release Notes for PulsoidApp ${{ env.VERSION }}"
56+
header: "## Release Notes for HRMApp ${{ env.VERSION }}"
5757

5858
- name: Save release notes to file
5959
run: |
6060
echo "${{ steps.release_notes.outputs.body }}" > release_notes.txt
61-
62-
- name: Upload release notes artifact (expire in 1 day)
61+
62+
- name: Upload release notes artifact
6363
uses: actions/upload-artifact@v4
6464
with:
65-
name: release_notes-v${{ github.run_number }}
65+
name: release_notes
6666
path: release_notes.txt
67-
retention-days: 1
68-
67+
6968
build-windows:
7069
name: Build & Upload — Windows
7170
runs-on: windows-latest
@@ -120,12 +119,12 @@ jobs:
120119
shell: pwsh
121120
run: |
122121
$base = "${{ env.PUBLIC_BASE_URL }}/${{ env.VERSION }}${{ env.BUILD_TAG }}"
123-
$msi = Test-Path "dist/PulsoidApp-Setup-${{ env.VERSION }}.msi"
124-
$exe = Test-Path "dist/PulsoidApp-Setup-${{ env.VERSION }}.exe"
125-
if ($msi) { "WIN_MSI_URL=$base/PulsoidApp-Setup-${{ env.VERSION }}.msi" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8 }
126-
if ($exe) { "WIN_EXE_URL=$base/PulsoidApp-Setup-${{ env.VERSION }}.exe" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8 }
122+
$msi = Test-Path "dist/HRMApp-Setup-${{ env.VERSION }}.msi"
123+
$exe = Test-Path "dist/HRMApp-Setup-${{ env.VERSION }}.exe"
124+
if ($msi) { "WIN_MSI_URL=$base/HRMApp-Setup-${{ env.VERSION }}.msi" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8 }
125+
if ($exe) { "WIN_EXE_URL=$base/HRMApp-Setup-${{ env.VERSION }}.exe" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8 }
127126
128-
linux-x64:
127+
build-linux:
129128
name: Build & Upload — Linux (x64)
130129
runs-on: ubuntu-latest
131130
needs: prepare
@@ -154,7 +153,7 @@ jobs:
154153
sudo apt-get install -y libfuse2 jq
155154
156155
- name: Build Electron App (Linux x64)
157-
run: npm run build:linux:x64
156+
run: npm run build:linux
158157
env:
159158
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
160159

@@ -193,8 +192,8 @@ jobs:
193192
[ -n "$APPIMG_X64" ] && echo "LINUX_APPIMAGE_URL=$BASE/$APPIMG_X64" >> $GITHUB_OUTPUT
194193
[ -n "$DEB_X64" ] && echo "LINUX_DEB_URL=$BASE/$DEB_X64" >> $GITHUB_OUTPUT
195194
196-
raspi-armv7l:
197-
name: Build & Upload — Raspberry Pi (armv7)
195+
build-raspi:
196+
name: Build & Upload — Raspberry Pi (armv7/arm64)
198197
runs-on: ubuntu-latest
199198
needs: prepare
200199
env:
@@ -203,96 +202,37 @@ jobs:
203202
outputs:
204203
ARM7_APPIMG_URL: ${{ steps.links.outputs.ARM7_APPIMG_URL }}
205204
ARM7_DEB_URL: ${{ steps.links.outputs.ARM7_DEB_URL }}
205+
ARM64_APPIMG_URL: ${{ steps.links.outputs.ARM64_APPIMG_URL }}
206+
ARM64_DEB_URL: ${{ steps.links.outputs.ARM64_DEB_URL }}
206207
steps:
207-
- uses: actions/checkout@v4
208-
209-
- uses: docker/setup-qemu-action@v3
208+
- name: Checkout
209+
uses: actions/checkout@v4
210210

211-
# ⬇️ Use true armv7 container (not aarch64)
212-
- uses: uraimo/run-on-arch-action@v2
211+
- name: Setup Node.js
212+
uses: actions/setup-node@v4
213213
with:
214-
arch: armv7
215-
distro: ubuntu22.04
216-
githubToken: ${{ github.token }}
217-
install: |
218-
apt-get update
219-
apt-get install -y curl git ca-certificates libfuse2
220-
curl -fsSL https://deb.nodesource.com/setup_21.x | bash -
221-
apt-get install -y nodejs
222-
run: |
223-
npm ci
224-
npm run build:pi:v7
225-
env:
226-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
227-
228-
- name: List dist/
229-
run: ls -R dist
214+
node-version: 21
215+
cache: 'npm'
230216

231-
# ⬇️ These steps run on the x86_64 host; use linux-amd64 mc
232-
- name: Install mc (MinIO Client) on Linux
233-
run: |
234-
curl -L "https://dl.min.io/client/mc/release/linux-amd64/mc" -o mc
235-
chmod +x mc
236-
./mc --version
217+
- name: Install Dependencies
218+
run: npm ci
237219

238-
- name: Configure mc alias
220+
- name: Install build deps
239221
run: |
240-
./mc alias set myminio "${{ secrets.MINIO_ENDPOINT }}" "${{ secrets.AWS_ACCESS_KEY }}" "${{ secrets.AWS_SECRET_KEY }}"
222+
sudo apt-get update
223+
sudo apt-get install -y libfuse2 jq
241224
242-
- name: Upload Raspberry Pi (armv7) Artifacts
225+
- name: Build Electron App (Raspberry Pi)
226+
run: npm run build:pi
243227
env:
244-
TARGET_PREFIX: ${{ env.MINIO_BUCKET_PATH }}/${{ env.VERSION }}${{ env.BUILD_TAG }}/
245-
run: |
246-
set -e
247-
APPIMG_ARMV7L=$(ls dist/*armv7l*.AppImage 2>/dev/null | head -n1 || true)
248-
DEB_ARMV7L=$(ls dist/*armv7l*.deb dist/*_armhf.deb 2>/dev/null | head -n1 || true)
249-
250-
for f in "$APPIMG_ARMV7L" "$DEB_ARMV7L"; do
251-
if [ -n "$f" ] && [ -f "$f" ]; then
252-
./mc cp "$f" "$TARGET_PREFIX"
253-
fi
254-
done
255-
256-
- name: Compose Download Links (Raspberry Pi armv7)
257-
id: links
258-
run: |
259-
BASE="${{ env.PUBLIC_BASE_URL }}/${{ env.VERSION }}${{ env.BUILD_TAG }}"
260-
APPIMG_ARMV7L=$(ls dist/*armv7l*.AppImage 2>/dev/null | xargs -n1 -I{} basename "{}" | head -n1 || echo "")
261-
[ -n "$APPIMG_ARMV7L" ] && echo "ARM7_APPIMG_URL=$BASE/$APPIMG_ARMV7L" >> $GITHUB_OUTPUT
262-
263-
raspi-arm64:
264-
name: Build & Upload — Raspberry Pi (arm64)
265-
runs-on: ubuntu-latest
266-
needs: prepare
267-
env:
268-
VERSION: ${{ needs.prepare.outputs.version }}
269-
BUILD_TAG: ${{ needs.prepare.outputs.build_tag }}
270-
outputs:
271-
ARM64_APPIMG_URL: ${{ steps.links.outputs.ARM64_APPIMG_URL }}
272-
ARM64_DEB_URL: ${{ steps.links.outputs.ARM64_DEB_URL }}
273-
steps:
274-
- uses: actions/checkout@v4
275-
- uses: docker/setup-qemu-action@v3
276-
- uses: uraimo/run-on-arch-action@v2
277-
with:
278-
arch: aarch64
279-
distro: ubuntu22.04
280-
githubToken: ${{ github.token }}
281-
install: |
282-
apt-get update
283-
apt-get install -y curl git ca-certificates libfuse2
284-
curl -fsSL https://deb.nodesource.com/setup_21.x | bash -
285-
apt-get install -y nodejs
286-
run: |
287-
npm ci
288-
npm run build:pi:aarch64
228+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
289229

290230
- name: List dist/
291231
run: ls -R dist
292232

293233
- name: Install mc (MinIO Client) on Linux
294234
run: |
295-
curl -L "https://dl.min.io/client/mc/release/linux-arm64/mc" -o mc
235+
curl -L "https://dl.min.io/client/mc/release/linux-amd64/mc" -o mc
296236
chmod +x mc
297237
./mc --version
298238
@@ -305,10 +245,12 @@ jobs:
305245
TARGET_PREFIX: ${{ env.MINIO_BUCKET_PATH }}/${{ env.VERSION }}${{ env.BUILD_TAG }}/
306246
run: |
307247
set -e
248+
APPIMG_ARMV7L=$(ls dist/*armv7l*.AppImage 2>/dev/null | head -n1 || true)
249+
DEB_ARMV7L=$(ls dist/*.armv7l.deb dist/*_armhf.deb 2>/dev/null | head -n1 || true)
308250
APPIMG_ARM64=$(ls dist/*arm64*.AppImage 2>/dev/null | head -n1 || true)
309251
DEB_ARM64=$(ls dist/*arm64*.deb 2>/dev/null | head -n1 || true)
310252
311-
for f in "$APPIMG_ARM64" "$DEB_ARM64"; do
253+
for f in "$APPIMG_ARMV7L" "$DEB_ARMV7L" "$APPIMG_ARM64" "$DEB_ARM64"; do
312254
if [ -n "$f" ] && [ -f "$f" ]; then
313255
./mc cp "$f" "$TARGET_PREFIX"
314256
fi
@@ -318,9 +260,15 @@ jobs:
318260
id: links
319261
run: |
320262
BASE="${{ env.PUBLIC_BASE_URL }}/${{ env.VERSION }}${{ env.BUILD_TAG }}"
263+
APPIMG_ARMV7L=$(ls dist/*armv7l*.AppImage 2>/dev/null | xargs -n1 -I{} basename "{}" | head -n1 || echo "")
264+
DEB_ARMV7L=$(ls dist/*.armv7l.deb dist/*_armhf.deb 2>/dev/null | xargs -n1 -I{} basename "{}" | head -n1 || echo "")
321265
APPIMG_ARM64=$(ls dist/*arm64*.AppImage 2>/dev/null | xargs -n1 -I{} basename "{}" | head -n1 || echo "")
266+
DEB_ARM64=$(ls dist/*arm64*.deb 2>/dev/null | xargs -n1 -I{} basename "{}" | head -n1 || echo "")
267+
[ -n "$APPIMG_ARMV7L" ] && echo "ARM7_APPIMG_URL=$BASE/$APPIMG_ARMV7L" >> $GITHUB_OUTPUT
268+
[ -n "$DEB_ARMV7L" ] && echo "ARM7_DEB_URL=$BASE/$DEB_ARMV7L" >> $GITHUB_OUTPUT
322269
[ -n "$APPIMG_ARM64" ] && echo "ARM64_APPIMG_URL=$BASE/$APPIMG_ARM64" >> $GITHUB_OUTPUT
323-
270+
[ -n "$DEB_ARM64" ] && echo "ARM64_DEB_URL=$BASE/$DEB_ARM64" >> $GITHUB_OUTPUT
271+
324272
build-macos:
325273
name: Build & Upload — macOS
326274
runs-on: macos-latest
@@ -397,30 +345,31 @@ jobs:
397345
needs:
398346
- prepare
399347
- build-windows
400-
- linux-x64
401-
- raspi-armv7l
402-
- raspi-arm64
348+
- build-linux
349+
- build-raspi
403350
- build-macos
404351
env:
405352
VERSION: ${{ needs.prepare.outputs.version }}
406353
BUILD_TAG: ${{ needs.prepare.outputs.build_tag }}
407354
# Windows
408-
WIN_EXE_URL: https://uploadminioger1.nekosunevr.co.uk/nekosunetools/pulsoidapp/release/${{ needs.prepare.outputs.version }}${{ needs.prepare.outputs.build_tag }}/PulsoidApp-Setup-${{ needs.prepare.outputs.version }}.exe
409-
WIN_MSI_URL: https://uploadminioger1.nekosunevr.co.uk/nekosunetools/pulsoidapp/release/${{ needs.prepare.outputs.version }}${{ needs.prepare.outputs.build_tag }}/PulsoidApp-Setup-${{ needs.prepare.outputs.version }}.msi
410-
# Linux x64 ⬅️ use linux-x64 (not build-linux)
411-
LINUX_APPIMAGE_URL: https://uploadminioger1.nekosunevr.co.uk/nekosunetools/pulsoidapp/release/${{ needs.prepare.outputs.version }}${{ needs.prepare.outputs.build_tag }}/PulsoidApp-Setup-${{ needs.prepare.outputs.version }}-x86_64.AppImage
412-
LINUX_DEB_URL: https://uploadminioger1.nekosunevr.co.uk/nekosunetools/pulsoidapp/release/${{ needs.prepare.outputs.version }}${{ needs.prepare.outputs.build_tag }}/PulsoidApp-Setup-${{ needs.prepare.outputs.version }}-amd64.deb
413-
# Raspberry Pi ⬅️ use raspi-* job IDs
414-
ARM7_APPIMG_URL: https://uploadminioger1.nekosunevr.co.uk/nekosunetools/pulsoidapp/release/${{ needs.prepare.outputs.version }}${{ needs.prepare.outputs.build_tag }}/PulsoidApp-Setup-${{ needs.prepare.outputs.version }}-armv7l.AppImage
415-
ARM64_APPIMG_URL: https://uploadminioger1.nekosunevr.co.uk/nekosunetools/pulsoidapp/release/${{ needs.prepare.outputs.version }}${{ needs.prepare.outputs.build_tag }}/PulsoidApp-Setup-${{ needs.prepare.outputs.version }}-arm64.AppImage
355+
WIN_EXE_URL: ${{ needs.build-windows.outputs.WIN_EXE_URL }}
356+
WIN_MSI_URL: ${{ needs.build-windows.outputs.WIN_MSI_URL }}
357+
# Linux x64
358+
LINUX_APPIMAGE_URL: ${{ needs.build-linux.outputs.LINUX_APPIMAGE_URL }}
359+
LINUX_DEB_URL: ${{ needs.build-linux.outputs.LINUX_DEB_URL }}
360+
# Raspberry Pi
361+
ARM7_APPIMG_URL: ${{ needs.build-raspi.outputs.ARM7_APPIMG_URL }}
362+
ARM7_DEB_URL: ${{ needs.build-raspi.outputs.ARM7_DEB_URL }}
363+
ARM64_APPIMG_URL: ${{ needs.build-raspi.outputs.ARM64_APPIMG_URL }}
364+
ARM64_DEB_URL: ${{ needs.build-raspi.outputs.ARM64_DEB_URL }}
416365
# macOS
417-
MAC_DMG_URL: https://uploadminioger1.nekosunevr.co.uk/nekosunetools/pulsoidapp/release/${{ needs.prepare.outputs.version }}${{ needs.prepare.outputs.build_tag }}/PulsoidApp-Setup-${{ needs.prepare.outputs.version }}.dmg
418-
MAC_ZIP_URL: https://uploadminioger1.nekosunevr.co.uk/nekosunetools/pulsoidapp/release/${{ needs.prepare.outputs.version }}${{ needs.prepare.outputs.build_tag }}/PulsoidApp-Setup-${{ needs.prepare.outputs.version }}.zip
366+
MAC_DMG_URL: ${{ needs.build-macos.outputs.MAC_DMG_URL }}
367+
MAC_ZIP_URL: ${{ needs.build-macos.outputs.MAC_ZIP_URL }}
419368
steps:
420369
- name: Download release notes artifact
421370
uses: actions/download-artifact@v4
422371
with:
423-
name: release_notes${{ needs.prepare.outputs.build_tag }}
372+
name: release_notes
424373
path: .
425374

426375
- name: Show release notes
@@ -443,75 +392,47 @@ jobs:
443392
run: |
444393
./mc cp release_notes.txt "${{ env.MINIO_BUCKET_PATH }}/${{ env.VERSION }}${{ env.BUILD_TAG }}/release_notes.txt"
445394
446-
- name: Send Release Info to Discord
447-
shell: bash
395+
- name: Compose ONE Discord payload and send
448396
env:
449397
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
450-
WIN_EXE_URL: ${{ env.WIN_EXE_URL }}
451-
WIN_MSI_URL: ${{ env.WIN_MSI_URL }}
452-
LINUX_APPIMAGE_URL: ${{ env.LINUX_APPIMAGE_URL }}
453-
LINUX_DEB_URL: ${{ env.LINUX_DEB_URL }}
454-
ARM7_APPIMG_URL: ${{ env.ARM7_APPIMG_URL }}
455-
ARM64_APPIMG_URL: ${{ env.ARM64_APPIMG_URL }}
456-
MAC_DMG_URL: ${{ env.MAC_DMG_URL }}
457-
MAC_ZIP_URL: ${{ env.MAC_ZIP_URL }}
458398
run: |
459-
set -euo pipefail
460-
461-
jq -n \
462-
--rawfile notes release_notes.txt \
399+
set -e
400+
RELEASE_NOTES=$(cat release_notes.txt)
401+
402+
downloads=""
403+
# Windows
404+
[ -n "${WIN_EXE_URL}" ] && downloads="${downloads}\n• Windows (EXE): ${WIN_EXE_URL}"
405+
[ -n "${WIN_MSI_URL}" ] && downloads="${downloads}\n• Windows (MSI): ${WIN_MSI_URL}"
406+
# Linux x64
407+
[ -n "${LINUX_APPIMAGE_URL}" ] && downloads="${downloads}\n• Linux x64 AppImage: ${LINUX_APPIMAGE_URL}"
408+
[ -n "${LINUX_DEB_URL}" ] && downloads="${downloads}\n• Linux x64 .deb: ${LINUX_DEB_URL}"
409+
# Raspberry Pi
410+
[ -n "${ARM7_APPIMG_URL}" ] && downloads="${downloads}\n• Raspberry Pi ARMv7 AppImage: ${ARM7_APPIMG_URL}"
411+
[ -n "${ARM7_DEB_URL}" ] && downloads="${downloads}\n• Raspberry Pi ARMv7 .deb: ${ARM7_DEB_URL}"
412+
[ -n "${ARM64_APPIMG_URL}" ] && downloads="${downloads}\n• Raspberry Pi ARM64 AppImage: ${ARM64_APPIMG_URL}"
413+
[ -n "${ARM64_DEB_URL}" ] && downloads="${downloads}\n• Raspberry Pi ARM64 .deb: ${ARM64_DEB_URL}"
414+
# macOS
415+
[ -n "${MAC_DMG_URL}" ] && downloads="${downloads}\n• macOS DMG: ${MAC_DMG_URL}"
416+
[ -n "${MAC_ZIP_URL}" ] && downloads="${downloads}\n• macOS ZIP: ${MAC_ZIP_URL}"
417+
418+
[ -z "$downloads" ] && downloads="\n(No build artifacts were detected.)"
419+
420+
payload=$(jq -n \
463421
--arg content "<@&1384262560395559122> **UPDATE (ALL PLATFORMS)**" \
464-
--arg title "New Release: v${{ needs.prepare.outputs.version }}" \
465-
--arg WIN_EXE_URL "$WIN_EXE_URL" \
466-
--arg WIN_MSI_URL "$WIN_MSI_URL" \
467-
--arg LINUX_APPIMAGE_URL "$LINUX_APPIMAGE_URL" \
468-
--arg LINUX_DEB_URL "$LINUX_DEB_URL" \
469-
--arg ARM7_APPIMG_URL "$ARM7_APPIMG_URL" \
470-
--arg ARM64_APPIMG_URL "$ARM64_APPIMG_URL" \
471-
--arg MAC_DMG_URL "$MAC_DMG_URL" \
472-
--arg MAC_ZIP_URL "$MAC_ZIP_URL" \
473-
--argjson color 65280 \
474-
--arg footer "Released by GitHub Actions" \
475-
--arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
476-
'
477-
def trunc(s; n): if (s|length) > n then (s[0:(n-1)] + "…") else s end;
478-
479-
# Build the artifacts list with real newlines via join("\n")
480-
def artifacts_block:
481-
"**Available Artifacts:**\n" +
482-
([
483-
"• [Windows (EXE)](" + $WIN_EXE_URL + ")",
484-
"• [Windows (MSI)](" + $WIN_MSI_URL + ")",
485-
"• [Linux x64 AppImage](" + $LINUX_APPIMAGE_URL + ")",
486-
"• [Linux x64 .deb](" + $LINUX_DEB_URL + ")",
487-
"• [Raspberry Pi ARMv7 AppImage](" + $ARM7_APPIMG_URL + ")",
488-
"• [Raspberry Pi ARM64 AppImage](" + $ARM64_APPIMG_URL + ")",
489-
"• [macOS DMG](" + $MAC_DMG_URL + ")",
490-
"• [macOS ZIP](" + $MAC_ZIP_URL + ")"
491-
] | join("\n"));
492-
493-
{
494-
username: "Pulsoid APP Bot",
495-
avatar_url: "https://cdn.discordapp.com/icons/1310653602951594024/cb8a2781368442a92b33dd2cb93b3afd.webp?size=512",
496-
content: $content,
497-
allowed_mentions: { parse: ["roles"] },
498-
embeds: [
499-
{
422+
--arg title "New Release: v${VERSION}${BUILD_TAG}" \
423+
--arg desc "${RELEASE_NOTES}\n\n**Downloads**:${downloads}" \
424+
--arg avatar "https://cdn.discordapp.com/icons/1274732053337870417/8f0b3c1852bbd3cc11a237c2d326dcb1.webp?size=1024" \
425+
'{
426+
username: "HRMApp Bot",
427+
avatar_url: $avatar,
428+
content: $content,
429+
embeds: [{
500430
title: $title,
501-
description: trunc(($notes + "\n\n" + artifacts_block); 4096),
502-
color: $color,
503-
footer: { text: $footer },
504-
timestamp: $timestamp
505-
}
506-
]
507-
}' > payload.json
508-
509-
http_code=$(curl -sS -o response.txt -w "%{http_code}" \
510-
-H "Content-Type: application/json" \
511-
-d @payload.json \
512-
"$DISCORD_WEBHOOK")
513-
514-
echo "Discord HTTP $http_code"
515-
if [[ "$http_code" != "204" && "$http_code" != "200" ]]; then
516-
echo "Error from Discord:"; cat response.txt; exit 1
517-
fi
431+
description: $desc,
432+
color: 16776960,
433+
footer: { text: "Released by GitHub Actions" },
434+
timestamp: (now | todate)
435+
}]
436+
}')
437+
438+
curl -sS -X POST -H "Content-Type: application/json" -d "$payload" "$DISCORD_WEBHOOK"

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Pulsoid Discord RPC + OBS Overlay (Electron)
1+
# HRMAPP Pulsoid Discord RPC + OBS Overlay (Electron)
22

33
### 1) Install
44
```bash
@@ -22,4 +22,4 @@ Open **Settings** inside the app:
2222
### Notes
2323
- Settings are saved locally via `electron-store` and loaded at startup
2424
- Discord RPC requires the **Discord desktop** client running on the same machine
25-
- The live chart is capped to the latest ~120 points
25+
- The live chart is capped to the latest ~120 points

0 commit comments

Comments
 (0)