Skip to content

Commit a99e6b3

Browse files
示例:支持桌面(#307
* feat: support desktop * feat: support electron-forge * feat: support windows build * chore: add build ci * chore: remove electron-builder * chore: clean code * chore: fix lint
1 parent 33ead49 commit a99e6b3

34 files changed

+5440
-61
lines changed

.eslintignore

+2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ lib/
33
dist/
44
example/
55
packages/**/dist/
6+
packages/**/out/
67
packages/**/web-build/
78
submodules/
89
packages/**/coverage/
910
packages/hd-transport/scripts/protobuf-patches/
11+
packages/connect-examples/electron-example/public/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: build-example-desktop
2+
3+
on: workflow_dispatch
4+
5+
jobs:
6+
build-and-upload:
7+
runs-on: ${{ matrix.os }}
8+
strategy:
9+
matrix:
10+
os: [windows-latest, macos-latest]
11+
node-version: [18]
12+
steps:
13+
- uses: actions/checkout@v3
14+
- name: Use Node.js ${{ matrix.node-version }}
15+
uses: actions/setup-node@v3
16+
with:
17+
node-version: ${{ matrix.node-version }}
18+
19+
- name: Install dependencies
20+
run: |
21+
yarn setup
22+
23+
- name: Build Application
24+
run: yarn build:example:desktop
25+
26+
- name: Upload Artifacts
27+
uses: actions/upload-artifact@v2
28+
with:
29+
name: example-${{ matrix.os }}
30+
path: |
31+
out/make/**/*.zip

package.json

+19-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,21 @@
77
"url": "git+https://github.com/OneKeyHQ/hardware-js-sdk.git"
88
},
99
"author": "OneKey",
10-
"workspaces": [
11-
"packages/*",
12-
"packages/connect-examples/expo-example"
13-
],
10+
"workspaces": {
11+
"packages": [
12+
"packages/*",
13+
"packages/connect-examples/expo-example",
14+
"packages/connect-examples/electron-example"
15+
],
16+
"nohoist": [
17+
"**/electron",
18+
"**/electron/**",
19+
"**/@electron",
20+
"**/@electron/**",
21+
"**/@electron-forge",
22+
"**/@electron-forge/**"
23+
]
24+
},
1425
"scripts": {
1526
"bootstrap": "lerna bootstrap",
1627
"build": "lerna run build",
@@ -22,7 +33,10 @@
2233
"publish-packages": "lerna publish from-package",
2334
"update-protobuf": "lerna run update:protobuf --scope=@onekeyfe/hd-transport",
2435
"update-version": "lerna version --no-git-tag-version",
36+
"copy:inject": "node scripts/copy-injected.js",
2537
"example": "cd ./packages/connect-examples/expo-example && yarn start",
38+
"example:desktop": "yarn copy:inject && cd ./packages/connect-examples/electron-example && yarn dev",
39+
"build:example:desktop": "yarn copy:inject && cd ./packages/connect-examples/electron-example && yarn make",
2640
"dev:web": "cd ./packages/hd-web-sdk && yarn dev",
2741
"dev:ble": "cd ./packages/hd-ble-sdk && yarn dev",
2842
"dev:core": "cd ./packages/core && yarn dev",
@@ -48,6 +62,7 @@
4862
"@types/shelljs": "^0.8.11",
4963
"babel-jest": "^28.1.3",
5064
"babel-loader": "^8.2.5",
65+
"cross-env": "^7.0.3",
5166
"eslint": "^8.4.1",
5267
"eslint-config-wesbos": "3.2.3",
5368
"eslint-plugin-jest": "^26.6.0",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Electron-Forge
2+
out/
3+
4+
# Generated build
5+
web-build/
6+
public/js-sdk/
7+
dist/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>com.apple.security.cs.allow-jit</key>
6+
<true/>
7+
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
8+
<true/>
9+
</dict>
10+
</plist>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/* eslint-disable @typescript-eslint/no-var-requires */
2+
const path = require('path');
3+
const fs = require('fs-extra');
4+
const d = require('debug');
5+
6+
const debug = d('forge config');
7+
8+
module.exports = {
9+
packagerConfig: {
10+
name: 'HardwareExample',
11+
appBundleId: 'so.onekey.example.hardware-desktop',
12+
executableName: process.platform === 'linux' ? 'onekey-hardware-example' : 'HardwareExample',
13+
appCategoryType: 'public.app-category.developer-tools',
14+
appCopyright: 'Copyright 2024 OneKey Ltd',
15+
icon: path.resolve(__dirname, 'public', 'icons', 'icon'),
16+
},
17+
rebuildConfig: {},
18+
hooks: {
19+
packageAfterCopy: async (forgeConfig, buildPath, electronVersion, platform, arch) => {
20+
let originDir;
21+
let binName;
22+
const destDir = path.resolve(buildPath, 'bin', 'bridge');
23+
24+
switch (platform) {
25+
case 'darwin':
26+
originDir = path.resolve(buildPath, 'public', 'bin', 'bridge', `mac-${arch}`);
27+
binName = 'onekeyd';
28+
break;
29+
case 'win32':
30+
originDir = path.resolve(buildPath, 'public', 'bin', 'bridge', 'win-x64');
31+
binName = 'onekeyd.exe';
32+
break;
33+
case 'linux':
34+
originDir = path.resolve(buildPath, 'public', 'bin', 'bridge', `linux-${arch}`);
35+
binName = 'onekeyd';
36+
break;
37+
default:
38+
originDir = '';
39+
binName = 'onekeyd';
40+
break;
41+
}
42+
43+
debug(`=====>>>>> copy bin: originDir:${originDir}, platform:${platform}, arch:${arch}`);
44+
await fs.ensureDir(destDir);
45+
await fs.copy(path.resolve(originDir, binName), path.resolve(destDir, binName));
46+
},
47+
packageAfterPrune: async (forgeConfig, buildPath, electronVersion, platform, arch) => {
48+
const bridgeDir = path.resolve(buildPath, 'public', 'bin');
49+
const scrDir = path.resolve(buildPath, 'src');
50+
const buildScriptDir = path.resolve(buildPath, 'scripts');
51+
52+
await fs.remove(bridgeDir);
53+
await fs.remove(scrDir);
54+
await fs.remove(buildScriptDir);
55+
return null;
56+
},
57+
},
58+
makers: [
59+
{
60+
name: '@electron-forge/maker-zip',
61+
platforms: ['darwin', 'win32'],
62+
},
63+
{
64+
name: '@electron-forge/maker-deb',
65+
config: {},
66+
},
67+
{
68+
name: '@electron-forge/maker-rpm',
69+
config: {},
70+
},
71+
],
72+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"name": "hardware-example",
3+
"productName": "HardwareExample",
4+
"executableName": "onekey-hardware-example",
5+
"version": "0.0.1",
6+
"author": "OneKey",
7+
"description": "End-to-end encrypted workspaces for teams",
8+
"main": "dist/index.js",
9+
"license": "GPL-3.0-only",
10+
"scripts": {
11+
"build-electron-web": "yarn build:main && cd ../expo-example && yarn build:electron-web",
12+
"dev-electron-web": "yarn build:main && cd ../expo-example && yarn dev:electron-web",
13+
"dev": "npx concurrently \"cross-env NODE_ENV=development yarn dev:electron-forge\" \"yarn dev-electron-web\"",
14+
"dev:electron": "electron --inspect=5858 dist/index.js",
15+
"dev:electron-forge": "electron-forge start",
16+
"build:package": "yarn build-electron-web && electron-forge package",
17+
"build:main": "webpack --config webpack.config.ts",
18+
"make": "yarn build-electron-web && electron-forge make",
19+
"lint": "eslint --ext .tsx --ext .ts ./",
20+
"test": "echo 'Nothing to test'",
21+
"ts:check": "yarn tsc --noEmit"
22+
},
23+
"dependencies": {
24+
"debug": "4.3.4",
25+
"node-fetch": "^2.6.7"
26+
},
27+
"devDependencies": {
28+
"@electron-forge/cli": "^7.2.0",
29+
"@electron-forge/maker-deb": "^7.2.0",
30+
"@electron-forge/maker-rpm": "^7.2.0",
31+
"@electron-forge/maker-zip": "^7.2.0",
32+
"@types/webpack": "^5.28.5",
33+
"@types/webpack-node-externals": "^3.0.4",
34+
"clean-webpack-plugin": "^4.0.0",
35+
"cross-env": "^7.0.3",
36+
"electron": "^28.0.0",
37+
"webpack": "^5.90.2",
38+
"webpack-node-externals": "^3.0.0"
39+
}
40+
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Loading
Loading
Binary file not shown.
Loading
Binary file not shown.

0 commit comments

Comments
 (0)