mirror of
https://github.com/PR0M3TH3AN/VoxVera.git
synced 2025-09-08 06:58:42 +00:00
Add Electron GUI and packaging scripts
This commit is contained in:
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
@@ -21,6 +21,11 @@ jobs:
|
|||||||
run: python -m build --wheel --sdist
|
run: python -m build --wheel --sdist
|
||||||
- name: Build binary
|
- name: Build binary
|
||||||
run: pyinstaller --onefile -n voxvera voxvera/cli.py
|
run: pyinstaller --onefile -n voxvera voxvera/cli.py
|
||||||
|
- name: Create AppImage
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y wget
|
||||||
|
bash packaging/build_appimage.sh
|
||||||
- name: Build Docker image
|
- name: Build Docker image
|
||||||
run: docker build -t ghcr.io/${{ github.repository_owner }}/voxvera:${{ github.ref_name }} .
|
run: docker build -t ghcr.io/${{ github.repository_owner }}/voxvera:${{ github.ref_name }} .
|
||||||
- name: Login to GHCR
|
- name: Login to GHCR
|
||||||
@@ -42,3 +47,4 @@ jobs:
|
|||||||
dist/*.whl
|
dist/*.whl
|
||||||
dist/*.tar.gz
|
dist/*.tar.gz
|
||||||
dist/voxvera
|
dist/voxvera
|
||||||
|
dist/VoxVera.AppImage
|
||||||
|
16
README.md
16
README.md
@@ -17,6 +17,16 @@ See [docs/usage.md](docs/usage.md) for detailed usage instructions.
|
|||||||
|
|
||||||
Run the installer to set up all dependencies and the `voxvera` CLI in one step.
|
Run the installer to set up all dependencies and the `voxvera` CLI in one step.
|
||||||
|
|
||||||
|
### GUI
|
||||||
|
An Electron wrapper is provided under `gui/electron` for users that prefer a graphical interface.
|
||||||
|
Run it with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd gui/electron
|
||||||
|
npm install
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
### Linux/macOS
|
### Linux/macOS
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -116,5 +126,11 @@ Additional documentation is available in the `src/` directory; see [src/README.m
|
|||||||
|
|
||||||
Additional documentation, including step-by-step instructions and hosting guides, lives under the [docs](docs/) directory.
|
Additional documentation, including step-by-step instructions and hosting guides, lives under the [docs](docs/) directory.
|
||||||
|
|
||||||
|
## Packages
|
||||||
|
Prebuilt binaries are published on the releases page. Linux users can run the
|
||||||
|
`packaging/build_appimage.sh` script after a PyInstaller build to create a
|
||||||
|
portable AppImage. Homebrew and Chocolatey formulas are provided under
|
||||||
|
`packaging/` for easy upgrades on macOS and Windows.
|
||||||
|
|
||||||
|
|
||||||
This project is licensed under the [MIT License](./LICENSE).
|
This project is licensed under the [MIT License](./LICENSE).
|
||||||
|
16
gui/README.md
Normal file
16
gui/README.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# VoxVera GUI
|
||||||
|
|
||||||
|
This directory contains a minimal Electron wrapper around the `voxvera` CLI.
|
||||||
|
It exposes a simple "Quickstart" button so non-technical users can generate
|
||||||
|
flyers without touching the command line.
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
```
|
||||||
|
cd gui/electron
|
||||||
|
npm install
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
The Electron app invokes the `voxvera` binary from your `PATH`.
|
||||||
|
Make sure it is installed before launching the GUI.
|
16
gui/electron/index.html
Normal file
16
gui/electron/index.html
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>VoxVera GUI</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>VoxVera</h1>
|
||||||
|
<button id="quickstart">Quickstart</button>
|
||||||
|
<script>
|
||||||
|
document.getElementById('quickstart').addEventListener('click', () => {
|
||||||
|
window.voxvera.quickstart();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
28
gui/electron/main.js
Normal file
28
gui/electron/main.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
const { app, BrowserWindow, ipcMain } = require('electron');
|
||||||
|
const { spawn } = require('child_process');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
function createWindow() {
|
||||||
|
const win = new BrowserWindow({
|
||||||
|
width: 800,
|
||||||
|
height: 600,
|
||||||
|
webPreferences: {
|
||||||
|
preload: path.join(__dirname, 'preload.js')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
win.loadFile('index.html');
|
||||||
|
}
|
||||||
|
|
||||||
|
app.whenReady().then(createWindow);
|
||||||
|
|
||||||
|
ipcMain.handle('run-quickstart', async () => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const proc = spawn('voxvera', ['quickstart'], { stdio: 'inherit' });
|
||||||
|
proc.on('close', code => resolve(code));
|
||||||
|
proc.on('error', err => reject(err));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
app.on('window-all-closed', () => {
|
||||||
|
if (process.platform !== 'darwin') app.quit();
|
||||||
|
});
|
11
gui/electron/package.json
Normal file
11
gui/electron/package.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "voxvera-gui",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"main": "main.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "electron ."
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"electron": "^29.0.0"
|
||||||
|
}
|
||||||
|
}
|
5
gui/electron/preload.js
Normal file
5
gui/electron/preload.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
const { contextBridge, ipcRenderer } = require('electron');
|
||||||
|
|
||||||
|
contextBridge.exposeInMainWorld('voxvera', {
|
||||||
|
quickstart: () => ipcRenderer.invoke('run-quickstart')
|
||||||
|
});
|
30
packaging/build_appimage.sh
Executable file
30
packaging/build_appimage.sh
Executable file
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ ! -f dist/voxvera ]; then
|
||||||
|
echo "Run PyInstaller first" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
APPDIR=dist/AppDir
|
||||||
|
mkdir -p "$APPDIR/usr/bin"
|
||||||
|
cp dist/voxvera "$APPDIR/usr/bin/voxvera"
|
||||||
|
chmod +x "$APPDIR/usr/bin/voxvera"
|
||||||
|
|
||||||
|
cat > "$APPDIR/voxvera.desktop" <<EOD
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=VoxVera
|
||||||
|
Exec=voxvera
|
||||||
|
Icon=voxvera
|
||||||
|
Categories=Utility;
|
||||||
|
EOD
|
||||||
|
|
||||||
|
touch "$APPDIR/voxvera.png"
|
||||||
|
|
||||||
|
wget -q https://github.com/AppImage/AppImageKit/releases/latest/download/appimagetool-x86_64.AppImage -O appimagetool
|
||||||
|
chmod +x appimagetool
|
||||||
|
./appimagetool "$APPDIR" dist/VoxVera.AppImage
|
||||||
|
rm appimagetool
|
||||||
|
|
||||||
|
echo "AppImage created at dist/VoxVera.AppImage"
|
12
packaging/chocolatey/tools/chocolateyInstall.ps1
Normal file
12
packaging/chocolatey/tools/chocolateyInstall.ps1
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
$toolsDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
||||||
|
$url = 'https://github.com/PR0M3TH3AN/VoxVera/releases/latest/download/voxvera.exe'
|
||||||
|
|
||||||
|
$packageArgs = @{
|
||||||
|
packageName = 'voxvera'
|
||||||
|
fileType = 'exe'
|
||||||
|
url = $url
|
||||||
|
silentArgs = '/S'
|
||||||
|
validExitCodes = @(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Install-ChocolateyPackage @packageArgs
|
12
packaging/chocolatey/voxvera.nuspec
Normal file
12
packaging/chocolatey/voxvera.nuspec
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<package>
|
||||||
|
<metadata>
|
||||||
|
<id>voxvera</id>
|
||||||
|
<version>0.1.0</version>
|
||||||
|
<title>VoxVera</title>
|
||||||
|
<authors>VoxVera</authors>
|
||||||
|
<description>Generate flyers with QR codes</description>
|
||||||
|
<projectUrl>https://github.com/PR0M3TH3AN/VoxVera</projectUrl>
|
||||||
|
<tags>voxvera flyers</tags>
|
||||||
|
</metadata>
|
||||||
|
</package>
|
15
packaging/homebrew/voxvera.rb
Normal file
15
packaging/homebrew/voxvera.rb
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
class Voxvera < Formula
|
||||||
|
desc "Generate QR-coded flyers"
|
||||||
|
homepage "https://github.com/PR0M3TH3AN/VoxVera"
|
||||||
|
url "https://github.com/PR0M3TH3AN/VoxVera/releases/latest/download/voxvera"
|
||||||
|
version "0.1.0"
|
||||||
|
sha256 "<insert-sha256>"
|
||||||
|
|
||||||
|
def install
|
||||||
|
bin.install "voxvera"
|
||||||
|
end
|
||||||
|
|
||||||
|
test do
|
||||||
|
system "#{bin}/voxvera", "--help"
|
||||||
|
end
|
||||||
|
end
|
Reference in New Issue
Block a user