add electron build

This commit is contained in:
Stewart Allen 2024-06-14 17:38:07 -04:00
commit 7e8838da1c
8 changed files with 164 additions and 10 deletions

36
.github/workflows/build.yml vendored Normal file
View file

@ -0,0 +1,36 @@
name: Build Electron App
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '20'
- name: Install dependencies
run: npm install
- name: Build Electron app
run: npm run build
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: kiri-${{ matrix.os }}-${{ github.ref_name }}
path: dist/

9
.gitignore vendored
View file

@ -1,8 +1,9 @@
mod
tmp
.DS_Store
node_modules
package-lock.json
app.json
mod
dist
tmp
logs/*
data/*
package-lock.json
app.json

10
app-el-prep.js Normal file
View file

@ -0,0 +1,10 @@
const fs = require('fs-extra');
const path = require('path');
const srcDir = path.join(__dirname, 'src');
const srcTmp = path.join(__dirname, 'tmp/src');
fs.copySync(srcDir, srcTmp, { dereference: true });
const webDir = path.join(__dirname, 'web');
const webTmp = path.join(__dirname, 'tmp/web');
fs.copySync(webDir, webTmp, { dereference: true });

59
app-el.js Normal file
View file

@ -0,0 +1,59 @@
const { app, BrowserWindow } = require('electron');
const path = require('path');
const server = require('@gridspace/app-server');
const basDir = __dirname;
const usrDir = app.getPath("userData");
const appDir = path.join(usrDir, 'apps/gs');
const cnfDir = path.join(appDir, 'conf');
const logDir = path.join(appDir, 'logs');
const datDir = path.join(appDir, 'data');
const debug = process.argv.slice(2).map(v => v.replaceAll('-','')).contains('debug');
const devel = process.argv.slice(2).map(v => v.replaceAll('-','')).contains('devel');
// console.log({ appDir, usrDir, logDir, datDir, basDir });
// console.log({ argv: process.argv, debug, devel });
// console.log({
// cwd: process.cwd(),
// dir: require('fs').readdirSync('.'),
// out: require('fs').readdirSync(appDir),
// ___: require('fs').readdirSync(basDir)
// });
server({
single: true,
apps: basDir,
data: datDir,
conf: cnfDir,
logs: logDir,
debug
});
function createWindow() {
const mainWindow = new BrowserWindow({
width: 1200,
height: 900,
webPreferences: {
// preload: path.join(__dirname, 'preload.js')
}
});
mainWindow.loadURL('http://localhost:8080/kiri');
if (devel) {
console.log("opening developer tools");
mainWindow.webContents.openDevTools();
}
}
app.on('ready', createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});

View file

@ -1,4 +1,4 @@
#!/bin/sh
( curl https://static.grid.space/gapp/manifold.js > src/ext/manifold.js ) > /dev/null 2>&1
( curl https://static.grid.space/gapp/manifold.wasm > src/wasm/manifold.wasm ) > /dev/null 2>&1
[ -d tmp ] && rm -rf tmp

5
bin/npm-pre Executable file
View file

@ -0,0 +1,5 @@
#!/bin/sh
( curl https://static.grid.space/gapp/manifold.js > src/ext/manifold.js ) > /dev/null 2>&1
( curl https://static.grid.space/gapp/manifold.wasm > src/wasm/manifold.wasm ) > /dev/null 2>&1

View file

@ -22,6 +22,7 @@
],
"dependencies": {
"@fortawesome/fontawesome-free": "^6.1.1",
"@gridspace/app-server": "^0.0.10",
"@gridspace/net-level-client": "^0.2.3",
"@tweenjs/tween.js": "^16.6.0",
"base64-js": "^1.5.1",
@ -30,6 +31,7 @@
"connect": "^3.7.0",
"earcut": "^2.2.3",
"express-useragent": "^1.0.13",
"fs-extra": "^11.2.0",
"jszip": "^3.7.1",
"moment": "^2.29.4",
"serve-static": "^1.14.1",
@ -40,9 +42,51 @@
"ws": "^7.5.5"
},
"devDependencies": {
"@gridspace/app-server": "^0.0.7"
"electron": "latest",
"electron-builder": "latest"
},
"scripts": {
"postinstall": "bin/npm-post"
"start": "electron .",
"build": "npm run prebuild && electron-builder",
"build-debug": "npm run prebuild && DEBUG=electron-builder electron-builder",
"prebuild": "node app-el-prep.js",
"postbuild": "bin/npm-post",
"preinstall": "bin/npm-pre"
},
"main": "app-el.js",
"build": {
"appId": "space.grid.kiri",
"files": [
{
"from": "tmp/src",
"to": "src",
"filter": [ "**/*" ]
},
{
"from": "tmp/web",
"to": "web",
"filter": [ "**/*" ]
},
"conf/**/*",
"data/**/*",
"dist/**/*",
"app-el.js",
"app.js",
"package.json"
],
"extraFiles": [
],
"directories": {
"output": "dist"
},
"win": {
"target": "nsis"
},
"mac": {
"target": "dmg"
},
"linux": {
"target": "AppImage"
}
}
}
}

View file

@ -1 +0,0 @@
../../node_modules/@jscad/modeling/dist/jscad-modeling.min.js