mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-01-02 18:39:05 +01:00
save work
This commit is contained in:
parent
5c436198af
commit
07f176ea53
70
electron-builder.config.js
Normal file
70
electron-builder.config.js
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
const pkg = require("./package.json");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {import('electron-builder').Configuration}
|
||||||
|
* @see https://www.electron.build/configuration/configuration
|
||||||
|
*/
|
||||||
|
const config = {
|
||||||
|
artifactName: "${productName}-${version}-${arch}.${ext}",
|
||||||
|
npmRebuild: false,
|
||||||
|
nodeGypRebuild: false,
|
||||||
|
electronCompile: false,
|
||||||
|
files: [
|
||||||
|
{
|
||||||
|
from: "./dist",
|
||||||
|
to: "./dist",
|
||||||
|
filter: ["**/*"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: "./public",
|
||||||
|
to: "./public",
|
||||||
|
filter: ["**/*"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: "./bin",
|
||||||
|
to: "./bin",
|
||||||
|
filter: ["**/*"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: "./node_modules",
|
||||||
|
to: "./node_modules",
|
||||||
|
filter: ["monaco-editor/min/*"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: ".",
|
||||||
|
to: ".",
|
||||||
|
filter: ["package.json"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
directories: {
|
||||||
|
output: "buildres/builder",
|
||||||
|
},
|
||||||
|
appId: pkg.build.appId,
|
||||||
|
productName: pkg.productName,
|
||||||
|
mac: {
|
||||||
|
target: {
|
||||||
|
target: "zip",
|
||||||
|
arch: "universal",
|
||||||
|
},
|
||||||
|
icon: "public/waveterm.icns",
|
||||||
|
category: "public.app-category.developer-tools",
|
||||||
|
minimumSystemVersion: "10.15.0",
|
||||||
|
asarUnpack: ["bin/**/*"],
|
||||||
|
},
|
||||||
|
linux: {
|
||||||
|
executableName: pkg.productName,
|
||||||
|
category: "TerminalEmulator",
|
||||||
|
icon: "public/waveterm.icns",
|
||||||
|
target: ["zip", "rpm", "deb", "flatpak", "pacman"],
|
||||||
|
desktop: {
|
||||||
|
Name: pkg.productName,
|
||||||
|
Comment: pkg.description,
|
||||||
|
Exec: pkg.productName,
|
||||||
|
Icon: pkg.build.appId,
|
||||||
|
Keywords: "developer;terminal;emulator;",
|
||||||
|
category: "Development;Utility;",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = config;
|
@ -14,6 +14,9 @@
|
|||||||
"url": "https://github.com/wavetermdev/waveterm"
|
"url": "https://github.com/wavetermdev/waveterm"
|
||||||
},
|
},
|
||||||
"homepage": "https://waveterm.dev",
|
"homepage": "https://waveterm.dev",
|
||||||
|
"build": {
|
||||||
|
"appId": "dev.commandline.waveterm"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@monaco-editor/react": "^4.5.1",
|
"@monaco-editor/react": "^4.5.1",
|
||||||
"@table-nav/core": "^0.0.7",
|
"@table-nav/core": "^0.0.7",
|
||||||
@ -66,7 +69,6 @@
|
|||||||
"@electron-forge/maker-snap": "^7.2.0",
|
"@electron-forge/maker-snap": "^7.2.0",
|
||||||
"@electron-forge/maker-squirrel": "^7.2.0",
|
"@electron-forge/maker-squirrel": "^7.2.0",
|
||||||
"@electron-forge/maker-zip": "^7.3.0",
|
"@electron-forge/maker-zip": "^7.3.0",
|
||||||
"@electron/rebuild": "^3.4.0",
|
|
||||||
"@svgr/webpack": "^8.1.0",
|
"@svgr/webpack": "^8.1.0",
|
||||||
"@types/classnames": "^2.3.1",
|
"@types/classnames": "^2.3.1",
|
||||||
"@types/electron": "^1.6.10",
|
"@types/electron": "^1.6.10",
|
||||||
@ -82,6 +84,7 @@
|
|||||||
"copy-webpack-plugin": "^11.0.0",
|
"copy-webpack-plugin": "^11.0.0",
|
||||||
"css-loader": "^6.7.1",
|
"css-loader": "^6.7.1",
|
||||||
"electron": "29.0.1",
|
"electron": "29.0.1",
|
||||||
|
"electron-builder": "^24.12.0",
|
||||||
"file-loader": "^6.2.0",
|
"file-loader": "^6.2.0",
|
||||||
"http-server": "^14.1.1",
|
"http-server": "^14.1.1",
|
||||||
"less": "^4.1.2",
|
"less": "^4.1.2",
|
||||||
@ -99,5 +102,7 @@
|
|||||||
"webpack-dev-server": "^4.9.1",
|
"webpack-dev-server": "^4.9.1",
|
||||||
"webpack-merge": "^5.8.0"
|
"webpack-merge": "^5.8.0"
|
||||||
},
|
},
|
||||||
"scripts": {}
|
"scripts": {
|
||||||
|
"postinstall": "electron-builder install-app-deps"
|
||||||
|
}
|
||||||
}
|
}
|
@ -50,7 +50,7 @@ GO_LDFLAGS="-s -w -X main.BuildTime=$(date +'%Y%m%d%H%M')"
|
|||||||
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.amd64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.amd64 main-waveshell.go)
|
||||||
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.arm64 main-waveshell.go)
|
(cd waveshell; CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="$GO_LDFLAGS" -o ../bin/mshell/mshell-v0.4-linux.arm64 main-waveshell.go)
|
||||||
(cd wavesrv; CGO_ENABLED=1 go build -tags "osusergo,netgo,sqlite_omit_load_extension" -ldflags "-X main.BuildTime=$(date +'%Y%m%d%H%M') -X main.WaveVersion=$WAVESRV_VERSION" -o ../bin/wavesrv ./cmd)
|
(cd wavesrv; CGO_ENABLED=1 go build -tags "osusergo,netgo,sqlite_omit_load_extension" -ldflags "-X main.BuildTime=$(date +'%Y%m%d%H%M') -X main.WaveVersion=$WAVESRV_VERSION" -o ../bin/wavesrv ./cmd)
|
||||||
node_modules/.bin/electron-forge make
|
yarn run electron-builder -c electron-builder.config.js
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -69,9 +69,10 @@ function log(...msg: any[]) {
|
|||||||
console.log = log;
|
console.log = log;
|
||||||
console.log(
|
console.log(
|
||||||
sprintf(
|
sprintf(
|
||||||
"waveterm-app starting, WAVETERM_HOME=%s, apppath=%s arch=%s/%s",
|
"waveterm-app starting, WAVETERM_HOME=%s, electronpath=%s gopath=%s arch=%s/%s",
|
||||||
waveHome,
|
waveHome,
|
||||||
getAppBasePath(),
|
getElectronAppBasePath(),
|
||||||
|
getGoAppBasePath(),
|
||||||
unamePlatform,
|
unamePlatform,
|
||||||
unameArch
|
unameArch
|
||||||
)
|
)
|
||||||
@ -130,31 +131,46 @@ function checkPromptMigrate() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for dev, this is just the waveterm directory
|
/**
|
||||||
// for prod, this is .../Wave.app/Contents/Resources/app
|
* Gets the base path to the Electron app resources. For dev, this is the root of the project. For packaged apps, this is the app.asar archive.
|
||||||
function getAppBasePath() {
|
* @returns The base path of the Electron application
|
||||||
|
*/
|
||||||
|
function getElectronAppBasePath(): string {
|
||||||
return path.dirname(__dirname);
|
return path.dirname(__dirname);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBaseHostPort() {
|
/**
|
||||||
|
* Gets the base path to the Go backend. If the app is packaged as an asar, the path will be in a separate unpacked directory.
|
||||||
|
* @returns The base path of the Go backend
|
||||||
|
*/
|
||||||
|
function getGoAppBasePath(): string {
|
||||||
|
const appDir = getElectronAppBasePath();
|
||||||
|
if (appDir.endsWith(".asar")) {
|
||||||
|
return `${appDir}.unpacked`;
|
||||||
|
} else {
|
||||||
|
return appDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getBaseHostPort(): string {
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
return DevServerEndpoint;
|
return DevServerEndpoint;
|
||||||
}
|
}
|
||||||
return ProdServerEndpoint;
|
return ProdServerEndpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getWaveSrvPath() {
|
function getWaveSrvPath(): string {
|
||||||
return path.join(getAppBasePath(), "bin", "wavesrv");
|
return path.join(getGoAppBasePath(), "bin", "wavesrv");
|
||||||
}
|
}
|
||||||
|
|
||||||
function getWaveSrvCmd() {
|
function getWaveSrvCmd(): string {
|
||||||
const waveSrvPath = getWaveSrvPath();
|
const waveSrvPath = getWaveSrvPath();
|
||||||
const waveHome = getWaveHomeDir();
|
const waveHome = getWaveHomeDir();
|
||||||
const logFile = path.join(waveHome, "wavesrv.log");
|
const logFile = path.join(waveHome, "wavesrv.log");
|
||||||
return `"${waveSrvPath}" >> "${logFile}" 2>&1`;
|
return `"${waveSrvPath}" >> "${logFile}" 2>&1`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getWaveSrvCwd() {
|
function getWaveSrvCwd(): string {
|
||||||
return getWaveHomeDir();
|
return getWaveHomeDir();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,7 +178,7 @@ function ensureDir(dir: fs.PathLike) {
|
|||||||
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
||||||
}
|
}
|
||||||
|
|
||||||
function readAuthKey() {
|
function readAuthKey(): string {
|
||||||
const homeDir = getWaveHomeDir();
|
const homeDir = getWaveHomeDir();
|
||||||
const authKeyFileName = path.join(homeDir, AuthKeyFile);
|
const authKeyFileName = path.join(homeDir, AuthKeyFile);
|
||||||
if (!fs.existsSync(authKeyFileName)) {
|
if (!fs.existsSync(authKeyFileName)) {
|
||||||
@ -259,7 +275,7 @@ electron.Menu.setApplicationMenu(menu);
|
|||||||
|
|
||||||
let MainWindow: Electron.BrowserWindow | null = null;
|
let MainWindow: Electron.BrowserWindow | null = null;
|
||||||
|
|
||||||
function getMods(input: any) {
|
function getMods(input: any): object {
|
||||||
return { meta: input.meta, shift: input.shift, ctrl: input.control, alt: input.alt };
|
return { meta: input.meta, shift: input.shift, ctrl: input.control, alt: input.alt };
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,7 +307,7 @@ function shFrameNavHandler(event: Electron.Event<Electron.WebContentsWillFrameNa
|
|||||||
console.log("frame navigation canceled");
|
console.log("frame navigation canceled");
|
||||||
}
|
}
|
||||||
|
|
||||||
function createMainWindow(clientData: ClientDataType | null) {
|
function createMainWindow(clientData: ClientDataType | null): Electron.BrowserWindow {
|
||||||
const bounds = calcBounds(clientData);
|
const bounds = calcBounds(clientData);
|
||||||
setKeyUtilPlatform(platform());
|
setKeyUtilPlatform(platform());
|
||||||
const win = new electron.BrowserWindow({
|
const win = new electron.BrowserWindow({
|
||||||
@ -305,11 +321,11 @@ function createMainWindow(clientData: ClientDataType | null) {
|
|||||||
transparent: true,
|
transparent: true,
|
||||||
icon: unamePlatform == "linux" ? "public/logos/wave-logo-dark.png" : undefined,
|
icon: unamePlatform == "linux" ? "public/logos/wave-logo-dark.png" : undefined,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: path.join(getAppBasePath(), DistDir, "preload.js"),
|
preload: path.join(getElectronAppBasePath(), DistDir, "preload.js"),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const indexHtml = isDev ? "index-dev.html" : "index.html";
|
const indexHtml = isDev ? "index-dev.html" : "index.html";
|
||||||
win.loadFile(path.join(getAppBasePath(), "public", indexHtml));
|
win.loadFile(path.join(getElectronAppBasePath(), "public", indexHtml));
|
||||||
win.webContents.on("before-input-event", (e, input) => {
|
win.webContents.on("before-input-event", (e, input) => {
|
||||||
const waveEvent = adaptFromElectronKeyEvent(input);
|
const waveEvent = adaptFromElectronKeyEvent(input);
|
||||||
if (win.isFocused()) {
|
if (win.isFocused()) {
|
||||||
@ -450,7 +466,7 @@ function mainResizeHandler(_: any, win: Electron.BrowserWindow) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function calcBounds(clientData: ClientDataType) {
|
function calcBounds(clientData: ClientDataType): Electron.Rectangle {
|
||||||
const primaryDisplay = electron.screen.getPrimaryDisplay();
|
const primaryDisplay = electron.screen.getPrimaryDisplay();
|
||||||
const pdBounds = primaryDisplay.bounds;
|
const pdBounds = primaryDisplay.bounds;
|
||||||
const size = { x: 100, y: 100, width: pdBounds.width - 200, height: pdBounds.height - 200 };
|
const size = { x: 100, y: 100, width: pdBounds.width - 200, height: pdBounds.height - 200 };
|
||||||
@ -572,7 +588,7 @@ function readLastLinesOfFile(filePath: string, lineCount: number) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getContextMenu(): any {
|
function getContextMenu(): electron.Menu {
|
||||||
const menu = new electron.Menu();
|
const menu = new electron.Menu();
|
||||||
const menuItem = new electron.MenuItem({ label: "Testing", click: () => console.log("click testing!") });
|
const menuItem = new electron.MenuItem({ label: "Testing", click: () => console.log("click testing!") });
|
||||||
menu.append(menuItem);
|
menu.append(menuItem);
|
||||||
@ -585,7 +601,7 @@ function getFetchHeaders() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getClientDataPoll(loopNum: number) {
|
async function getClientDataPoll(loopNum: number): Promise<ClientDataType | null> {
|
||||||
const lastTime = loopNum >= 6;
|
const lastTime = loopNum >= 6;
|
||||||
const cdata = await getClientData(!lastTime, loopNum);
|
const cdata = await getClientData(!lastTime, loopNum);
|
||||||
if (lastTime || cdata != null) {
|
if (lastTime || cdata != null) {
|
||||||
@ -595,7 +611,7 @@ async function getClientDataPoll(loopNum: number) {
|
|||||||
return getClientDataPoll(loopNum + 1);
|
return getClientDataPoll(loopNum + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getClientData(willRetry: boolean, retryNum: number) {
|
async function getClientData(willRetry: boolean, retryNum: number): Promise<ClientDataType | null> {
|
||||||
const url = new URL(getBaseHostPort() + "/api/get-client-data");
|
const url = new URL(getBaseHostPort() + "/api/get-client-data");
|
||||||
const fetchHeaders = getFetchHeaders();
|
const fetchHeaders = getFetchHeaders();
|
||||||
return fetch(url, { headers: fetchHeaders })
|
return fetch(url, { headers: fetchHeaders })
|
||||||
@ -634,13 +650,13 @@ function runWaveSrv() {
|
|||||||
pReject = argReject;
|
pReject = argReject;
|
||||||
});
|
});
|
||||||
const envCopy = { ...process.env };
|
const envCopy = { ...process.env };
|
||||||
envCopy[WaveAppPathVarName] = getAppBasePath();
|
envCopy[WaveAppPathVarName] = getGoAppBasePath();
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
envCopy[WaveDevVarName] = "1";
|
envCopy[WaveDevVarName] = "1";
|
||||||
}
|
}
|
||||||
const waveSrvCmd = getWaveSrvCmd();
|
const waveSrvCmd = getWaveSrvCmd();
|
||||||
console.log("trying to run local server", waveSrvCmd);
|
console.log("trying to run local server", waveSrvCmd);
|
||||||
const proc = child_process.spawn("bash", ["-c", waveSrvCmd], {
|
const proc = child_process.execFile("bash", ["-c", waveSrvCmd], {
|
||||||
cwd: getWaveSrvCwd(),
|
cwd: getWaveSrvCwd(),
|
||||||
env: envCopy,
|
env: envCopy,
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user