Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0353b71223 | ||
|
|
7f01abad25 | ||
|
|
4886cb570d | ||
|
|
66894ecdca | ||
|
|
d9b64a5ab5 | ||
|
|
3f73b97b39 | ||
|
|
323e270c51 | ||
|
|
3c06d802a9 |
No files matched your search
@@ -1,6 +1,6 @@
|
||||
name: release
|
||||
|
||||
# Build the GAMEMAX LCD AppImage from source and attach it to a GitHub release.
|
||||
# Build the GAMEMAX LCD AppImage from source and attach it to a Gitea release.
|
||||
# Trigger: push a tag like v1.0.0 (or run manually from the Actions tab).
|
||||
|
||||
on:
|
||||
@@ -11,6 +11,11 @@ on:
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
env:
|
||||
# github.server_url mengikuti alamat saat runner didaftarkan dan bisa jadi IP internal,
|
||||
# jadi URL yang disematkan ke dalam AppImage ditulis eksplisit di sini.
|
||||
RELEASE_URL: https://gitea.oxpoe.qzz.io/oxpoe/Gamemax-linux-apps/releases/download
|
||||
|
||||
jobs:
|
||||
appimage:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -21,15 +26,16 @@ jobs:
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y --no-install-recommends \
|
||||
libgl1 libegl1 libxkbcommon0 libdbus-1-3 libfuse2 fuse zsync
|
||||
libgl1 libegl1 libxkbcommon0 libdbus-1-3 libfuse2 fuse zsync libpython3.12
|
||||
|
||||
- name: Set up uv
|
||||
uses: astral-sh/setup-uv@v5
|
||||
# installers astral, bukan setup-uv: setup-v5 menembak API GitHub dan kena rate limit
|
||||
run: curl -LsSf https://astral.sh/uv/install.sh | env INSTALLER_PREFIX=/usr/local sh
|
||||
|
||||
- name: Build AppImage
|
||||
env:
|
||||
APPIMAGE_EXTRACT_AND_RUN: "1"
|
||||
UPDATE_INFO_URL: https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/GAMEMAX-LCD-x86_64.AppImage.zsync
|
||||
UPDATE_INFO_URL: ${{ env.RELEASE_URL }}/${{ github.ref_name }}/GAMEMAX-LCD-x86_64.AppImage.zsync
|
||||
run: bash packaging/build_appimage.sh
|
||||
|
||||
- name: Smoke test the bundle (no display)
|
||||
@@ -43,37 +49,34 @@ jobs:
|
||||
run: |
|
||||
cd dist
|
||||
sha256sum GAMEMAX-LCD-x86_64.AppImage > GAMEMAX-LCD-x86_64.AppImage.sha256
|
||||
zsyncmake -u "https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/GAMEMAX-LCD-x86_64.AppImage" \
|
||||
zsyncmake -u "${{ env.RELEASE_URL }}/${{ github.ref_name }}/GAMEMAX-LCD-x86_64.AppImage" \
|
||||
-o GAMEMAX-LCD-x86_64.AppImage.zsync GAMEMAX-LCD-x86_64.AppImage
|
||||
cat GAMEMAX-LCD-x86_64.AppImage.sha256
|
||||
ls -l
|
||||
|
||||
- name: Publish release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
name: GAMEMAX LCD ${{ github.ref_name }}
|
||||
generate_release_notes: true
|
||||
body: |
|
||||
Linux bridge + tray app for the LCD panel of GAMEMAX IceBurg Digital AIO
|
||||
coolers. Built automatically from `${{ github.sha }}`.
|
||||
- name: Publish release (Gitea API)
|
||||
env:
|
||||
TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
API="${GITHUB_API_URL:-${GITHUB_SERVER_URL}/api/v1}"
|
||||
TAG="${GITHUB_REF_NAME}"
|
||||
cat > /tmp/body.md <<'EOF'
|
||||
Linux bridge + tray app for the LCD panel of GAMEMAX IceBurg Digital AIO coolers.
|
||||
|
||||
**Download** `GAMEMAX-LCD-x86_64.AppImage`, then:
|
||||
|
||||
```bash
|
||||
chmod +x GAMEMAX-LCD-x86_64.AppImage
|
||||
./GAMEMAX-LCD-x86_64.AppImage # tray + window
|
||||
./GAMEMAX-LCD-x86_64.AppImage --selftest # verify the bundle starts
|
||||
./GAMEMAX-LCD-x86_64.AppImage
|
||||
```
|
||||
|
||||
Device access still needs the udev rule once:
|
||||
`sudo cp packaging/70-gamemax.rules /etc/udev/rules.d/ && sudo udevadm control --reload`
|
||||
|
||||
**Integrity:** verify the download with the published SHA-256, or use
|
||||
`appimageupdatetool`/AppImageUpdate with the `.zsync` asset for delta updates.
|
||||
The built-in updater (v1.2.3+) also verifies that checksum before replacing itself.
|
||||
|
||||
Independent project, not affiliated with the vendor — see DISCLAIMER.md.
|
||||
files: |
|
||||
dist/GAMEMAX-LCD-x86_64.AppImage
|
||||
dist/GAMEMAX-LCD-x86_64.AppImage.sha256
|
||||
dist/GAMEMAX-LCD-x86_64.AppImage.zsync
|
||||
Verify with the published SHA-256, or use AppImageUpdate with the `.zsync` asset.
|
||||
Independent project, not affiliated with the vendor.
|
||||
EOF
|
||||
python3 -c 'import json,sys;print(json.dumps({"tag_name":sys.argv[1],"name":"GAMEMAX LCD "+sys.argv[1],"body":open(sys.argv[2]).read()}))' "$TAG" /tmp/body.md > /tmp/rel.json
|
||||
RID=$(curl -sf -X POST -H "Authorization: token $TOKEN" -H "Content-Type: application/json" "$API/repos/$GITHUB_REPOSITORY/releases" --data @/tmp/rel.json | python3 -c 'import json,sys;print(json.load(sys.stdin)["id"])')
|
||||
echo "release id=$RID"
|
||||
for f in dist/GAMEMAX-LCD-x86_64.AppImage dist/GAMEMAX-LCD-x86_64.AppImage.sha256 dist/GAMEMAX-LCD-x86_64.AppImage.zsync; do
|
||||
[ -f "$f" ] || continue
|
||||
curl -sf -X POST -H "Authorization: token $TOKEN" -F "attachment=@$f" "$API/repos/$GITHUB_REPOSITORY/releases/$RID/assets?name=$(basename "$f")" -o /dev/null
|
||||
done
|
||||
@@ -1,3 +1,5 @@
|
||||
> 🪞 **Mirror.** Repo asli, pengembangan & **rilis/unduhan** ada di **Gitea**: https://gitea.oxpoe.qzz.io/oxpoe/Gamemax-linux-apps/releases · GitHub hanya cermin kode.
|
||||
|
||||
# GAMEMAX LCD — Linux bridge & tray app
|
||||
|
||||
Drive the LCD panel of a GAMEMAX **IceBurg Digital** AIO cooler from Linux: a small
|
||||
@@ -7,8 +9,8 @@ Reverse engineered independently from the Windows vendor software
|
||||
(`PcInfoMonitorPro.exe` / "IceBurg Digital Software"); the protocol notes are in
|
||||
[`docs/reverse-engineering.md`](docs/reverse-engineering.md) (Indonesian).
|
||||
|
||||
[](https://github.com/oxpoe/Gamemax-linux-apps/releases)
|
||||
[](https://github.com/oxpoe/Gamemax-linux-apps/actions/workflows/release.yml)
|
||||
[](https://gitea.oxpoe.qzz.io/oxpoe/Gamemax-linux-apps/releases)
|
||||
[](https://gitea.oxpoe.qzz.io/oxpoe/Gamemax-linux-apps/actions/workflows/release.yml)
|
||||
[](LICENSE)
|
||||
[](#compatibility)
|
||||
[](src/gamemax_report.py)
|
||||
@@ -108,8 +110,8 @@ temperature source (Tctl vs Tccd).
|
||||
- **Plug and play**: the service waits for the device, streams while present and keeps
|
||||
waiting through unplug/replug; a udev rule grants access to the logged-in user
|
||||
- **Single instance**: launching the app again just raises the running window
|
||||
- **Self-update from GitHub Releases** (check + one-click update)
|
||||
- **Donate / GitHub buttons** in the app (window and tray menu)
|
||||
- **Self-update from Gitea Releases** (check + one-click update)
|
||||
- **Donate / Gitea buttons** in the app (window and tray menu)
|
||||
- **AppImage build** script (`packaging/build_appimage.sh`, PySide6 bundled)
|
||||
|
||||
The GUI labels are in Indonesian. The app itself is named **IceBurg LCD** (no vendor brand in
|
||||
@@ -131,7 +133,7 @@ One command (downloads the latest release, verifies its SHA-256, installs the ap
|
||||
systemd user unit, the menu entry and the udev rule):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/oxpoe/Gamemax-linux-apps/main/install.sh | bash
|
||||
curl -fsSL https://gitea.oxpoe.qzz.io/oxpoe/Gamemax-linux-apps/raw/branch/main/install.sh | bash
|
||||
# uninstall: bash install.sh --uninstall (add --remove-data to drop settings too)
|
||||
```
|
||||
|
||||
@@ -225,10 +227,10 @@ assets/ previews and icon
|
||||
|
||||
## Updates
|
||||
|
||||
The app keeps itself current from GitHub Releases:
|
||||
The app keeps itself current from Gitea Releases:
|
||||
|
||||
- On start (when running from an AppImage) and from the **Periksa pembaruan** button or the
|
||||
tray menu, it asks the GitHub API for the latest release and compares it with its version.
|
||||
tray menu, it asks the Gitea API for the latest release and compares it with its version.
|
||||
- When a newer release exists, a **Perbarui ke vX.Y.Z** button appears. One click downloads
|
||||
the release asset, replaces the running AppImage atomically, refreshes the sender from the
|
||||
new bundle and restarts the service. Restart the app to use the new version.
|
||||
|
||||
+1
-1
@@ -11,4 +11,4 @@ This is a small local tool. The relevant surface:
|
||||
|
||||
If you find a problem — for example a way to make the helper scripts run something else,
|
||||
or a path that writes outside the documented locations — please open an issue (or a
|
||||
private security advisory on GitHub). Do not test on hardware you do not own.
|
||||
private security advisory on Gitea). Do not test on hardware you do not own.
|
||||
+6
-5
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# GAMEMAX LCD — pemasangan / pelepasan satu perintah.
|
||||
#
|
||||
# curl -fsSL https://raw.githubusercontent.com/oxpoe/Gamemax-linux-apps/main/install.sh | bash
|
||||
# curl -fsSL https://gitea.oxpoe.qzz.io/oxpoe/Gamemax-linux-apps/raw/branch/main/install.sh | bash
|
||||
#
|
||||
# Opsi:
|
||||
# --uninstall lepaskan pemasangan (layanan, aplikasi, config, ikon, entri menu)
|
||||
@@ -15,7 +15,8 @@ set -euo pipefail
|
||||
|
||||
REPO="oxpoe/Gamemax-linux-apps"
|
||||
ASSET="GAMEMAX-LCD-x86_64.AppImage"
|
||||
RAW="https://raw.githubusercontent.com/$REPO/main"
|
||||
INSTANCE="https://gitea.oxpoe.qzz.io"
|
||||
RAW="$INSTANCE/$REPO/raw/branch/main"
|
||||
|
||||
OPT_DIR="$HOME/.local/opt/gamemax-lcd"
|
||||
APP="$OPT_DIR/GAMEMAX-LCD.AppImage"
|
||||
@@ -76,10 +77,10 @@ need sha256sum
|
||||
command -v systemctl >/dev/null 2>&1 || die "systemd (systemctl) dibutuhkan untuk layanan"
|
||||
|
||||
if [ "$VERSION" = "latest" ]; then
|
||||
BASE="https://github.com/$REPO/releases/latest/download"
|
||||
else
|
||||
BASE="https://github.com/$REPO/releases/download/$VERSION"
|
||||
VERSION="$(curl -fsSL "$INSTANCE/api/v1/repos/$REPO/releases/latest" | sed -n 's/.*"tag_name":"\([^"]*\)".*/\1/p')"
|
||||
[ -n "$VERSION" ] || die "gagal menentukan rilis terbaru di Gitea"
|
||||
fi
|
||||
BASE="$INSTANCE/$REPO/releases/download/$VERSION"
|
||||
|
||||
say "== GAMEMAX LCD: pemasangan ($VERSION) =="
|
||||
mkdir -p "$OPT_DIR" "$DATA_DIR" "$DESKTOP_DIR" "$ICON_DIR" "$HOME/.config/systemd/user"
|
||||
|
||||
+14
-14
@@ -33,17 +33,17 @@ from PySide6.QtWidgets import (
|
||||
)
|
||||
from PySide6.QtNetwork import QLocalServer, QLocalSocket
|
||||
|
||||
APP_VERSION = "1.3.3"
|
||||
APP_VERSION = "1.3.5"
|
||||
APP_NAME = "IceBurg LCD"
|
||||
REPO = "oxpoe/Gamemax-linux-apps"
|
||||
RELEASES_API = f"https://api.github.com/repos/{REPO}/releases/latest"
|
||||
RELEASES_API = f"https://gitea.oxpoe.qzz.io/api/v1/repos/{REPO}/releases/latest"
|
||||
UPDATE_ASSET = "GAMEMAX-LCD-x86_64.AppImage"
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
sys.path.insert(0, HERE)
|
||||
import gamemax_report as gr # noqa: E402
|
||||
|
||||
DONATE_URL = "https://donasi.oxpoe.qzz.io/"
|
||||
GITHUB_URL = "https://github.com/oxpoe/Gamemax-linux-apps"
|
||||
REPO_URL = "https://gitea.oxpoe.qzz.io/oxpoe/Gamemax-linux-apps"
|
||||
|
||||
SERVICE = "gamemax-report.service"
|
||||
CONFIG_PATH = gr.CONFIG_PATH
|
||||
@@ -144,10 +144,10 @@ def verify_sha256(path, sha_url):
|
||||
|
||||
|
||||
def latest_release():
|
||||
"""(tag, url aset) dari rilis terbaru GitHub — dipanggil dari thread pekerja."""
|
||||
"""(tag, url aset) dari rilis terbaru Gitea — dipanggil dari thread pekerja."""
|
||||
ensure_ca_bundle()
|
||||
req = urllib.request.Request(RELEASES_API, headers={
|
||||
"Accept": "application/vnd.github+json", "User-Agent": "gamemax-lcd"})
|
||||
"Accept": "application/json", "User-Agent": "gamemax-lcd"})
|
||||
with urllib.request.urlopen(req, timeout=10) as resp:
|
||||
data = json.load(resp)
|
||||
asset = next((a for a in data.get("assets", []) if a["name"] == UPDATE_ASSET), None)
|
||||
@@ -502,18 +502,18 @@ class Window(QWidget):
|
||||
donate = QPushButton("❤ Donasi")
|
||||
donate.setToolTip(DONATE_URL)
|
||||
donate.clicked.connect(lambda: open_link(DONATE_URL, self))
|
||||
github = QPushButton("GitHub")
|
||||
github.setToolTip(GITHUB_URL)
|
||||
github.clicked.connect(lambda: open_link(GITHUB_URL, self))
|
||||
repo_btn = QPushButton("Gitea")
|
||||
repo_btn.setToolTip(REPO_URL)
|
||||
repo_btn.clicked.connect(lambda: open_link(REPO_URL, self))
|
||||
links.addWidget(donate)
|
||||
links.addWidget(github)
|
||||
links.addWidget(repo_btn)
|
||||
links.addStretch(1)
|
||||
copy_button = QPushButton("Salin report")
|
||||
copy_button.setToolTip("Salin isi report 65 byte ke papan klip (untuk laporan bug)")
|
||||
copy_button.clicked.connect(self.copy_report)
|
||||
links.addWidget(copy_button)
|
||||
self.check_button = QPushButton("Periksa pembaruan")
|
||||
self.check_button.setToolTip("Bandingkan dengan rilis terbaru di GitHub")
|
||||
self.check_button.setToolTip("Bandingkan dengan rilis terbaru di Gitea")
|
||||
self.check_button.clicked.connect(lambda: self.start_task("memeriksa pembaruan", self.do_check_update))
|
||||
links.addWidget(self.check_button)
|
||||
self.update_button = QPushButton("Perbarui")
|
||||
@@ -659,7 +659,7 @@ class Window(QWidget):
|
||||
tag, url = latest_release()
|
||||
self._pending_update = (tag, url) if url and version_tuple(tag) > version_tuple(APP_VERSION) else None
|
||||
if not tag:
|
||||
return "tidak bisa membaca daftar rilis GitHub"
|
||||
return "tidak bisa membaca daftar rilis Gitea"
|
||||
if self._pending_update:
|
||||
return f"versi baru tersedia: {tag} (terpasang v{APP_VERSION})"
|
||||
return f"sudah versi terbaru (v{APP_VERSION})"
|
||||
@@ -978,8 +978,8 @@ class Tray:
|
||||
"memeriksa pembaruan", self.window.do_check_update))
|
||||
donate_action = QAction("❤ Donasi", menu)
|
||||
donate_action.triggered.connect(lambda: open_link(DONATE_URL, self.window))
|
||||
github_action = QAction("GitHub", menu)
|
||||
github_action.triggered.connect(lambda: open_link(GITHUB_URL, self.window))
|
||||
repo_action = QAction("Gitea", menu)
|
||||
repo_action.triggered.connect(lambda: open_link(REPO_URL, self.window))
|
||||
quit_action = QAction("Keluar", menu)
|
||||
quit_action.triggered.connect(self.quit_app)
|
||||
menu.addAction(show)
|
||||
@@ -988,7 +988,7 @@ class Tray:
|
||||
menu.addSeparator()
|
||||
menu.addAction(check_action)
|
||||
menu.addAction(donate_action)
|
||||
menu.addAction(github_action)
|
||||
menu.addAction(repo_action)
|
||||
menu.addSeparator()
|
||||
menu.addAction(quit_action)
|
||||
self.icon.setContextMenu(menu)
|
||||
|
||||
Reference in new issue
Block a user