Chore/refactor yarn script (#615)
* Refactor yarn script --------- Co-authored-by: Hien To <hien@jan.ai>
This commit is contained in:
parent
db860778e4
commit
500f7b4867
2
.github/workflows/jan-electron-build.yml
vendored
2
.github/workflows/jan-electron-build.yml
vendored
@ -122,7 +122,7 @@ jobs:
|
|||||||
yarn build:core
|
yarn build:core
|
||||||
yarn install
|
yarn install
|
||||||
$env:NITRO_VERSION = Get-Content .\plugins\inference-plugin\nitro\version.txt; echo $env:NITRO_VERSION
|
$env:NITRO_VERSION = Get-Content .\plugins\inference-plugin\nitro\version.txt; echo $env:NITRO_VERSION
|
||||||
yarn build:plugins-windows
|
yarn build:plugins-win32
|
||||||
|
|
||||||
- name: Build and publish app
|
- name: Build and publish app
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@ -95,7 +95,7 @@ jobs:
|
|||||||
yarn build:core
|
yarn build:core
|
||||||
yarn install
|
yarn install
|
||||||
$env:NITRO_VERSION = Get-Content .\plugins\inference-plugin\nitro\version.txt; echo $env:NITRO_VERSION
|
$env:NITRO_VERSION = Get-Content .\plugins\inference-plugin\nitro\version.txt; echo $env:NITRO_VERSION
|
||||||
yarn build:plugins-windows
|
yarn build:plugins-win32
|
||||||
yarn build:test-win32
|
yarn build:test-win32
|
||||||
$env:CI="e2e"
|
$env:CI="e2e"
|
||||||
yarn test
|
yarn test
|
||||||
|
|||||||
74
.github/workflows/jan-plugin-core.yml
vendored
74
.github/workflows/jan-plugin-core.yml
vendored
@ -1,74 +0,0 @@
|
|||||||
name: Plugin Core
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "core/**"
|
|
||||||
- "!core/package.json"
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "core/**"
|
|
||||||
- ".github/workflows/jan-plugin-core.yml"
|
|
||||||
- "!core/package.json"
|
|
||||||
jobs:
|
|
||||||
build-and-publish-plugins:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
environment: production
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: "0"
|
|
||||||
token: ${{ secrets.PAT_SERVICE_ACCOUNT }}
|
|
||||||
|
|
||||||
- name: Install jq
|
|
||||||
uses: dcarbone/install-jq-action@v2.0.1
|
|
||||||
|
|
||||||
- name: "Auto Increase package Version"
|
|
||||||
run: |
|
|
||||||
# Extract current version
|
|
||||||
current_version=$(jq -r '.version' core/package.json)
|
|
||||||
|
|
||||||
# Break the version into its components
|
|
||||||
major_version=$(echo $current_version | cut -d "." -f 1)
|
|
||||||
minor_version=$(echo $current_version | cut -d "." -f 2)
|
|
||||||
patch_version=$(echo $current_version | cut -d "." -f 3)
|
|
||||||
|
|
||||||
# Increment the patch version by one
|
|
||||||
new_patch_version=$((patch_version+1))
|
|
||||||
|
|
||||||
# Construct the new version
|
|
||||||
new_version="$major_version.$minor_version.$new_patch_version"
|
|
||||||
|
|
||||||
# Replace the old version with the new version in package.json
|
|
||||||
jq --arg version "$new_version" '.version = $version' core/package.json > /tmp/package.json && mv /tmp/package.json core/package.json
|
|
||||||
|
|
||||||
# Print the new version
|
|
||||||
echo "Updated package.json version to: $new_version"
|
|
||||||
|
|
||||||
# Setup .npmrc file to publish to npm
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: "20.x"
|
|
||||||
registry-url: "https://registry.npmjs.org"
|
|
||||||
- run: npm install && npm run build
|
|
||||||
working-directory: ./core
|
|
||||||
- run: npm publish --access public
|
|
||||||
if: github.event_name == 'push' && github.event.pull_request.head.repo.full_name != github.repository
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
||||||
working-directory: ./core
|
|
||||||
|
|
||||||
- name: "Commit new version to main and create tag"
|
|
||||||
if: github.event_name == 'push' && github.event.pull_request.head.repo.full_name != github.repository
|
|
||||||
run: |
|
|
||||||
version=$(jq -r '.version' core/package.json)
|
|
||||||
git config --global user.email "service@jan.ai"
|
|
||||||
git config --global user.name "Service Account"
|
|
||||||
git add core/package.json
|
|
||||||
git commit -m "${GITHUB_REPOSITORY}: Update tag build $version"
|
|
||||||
git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.PAT_SERVICE_ACCOUNT }}" push origin HEAD:main
|
|
||||||
git tag -a core-$version -m "${GITHUB_REPOSITORY}: Update tag build $version for core"
|
|
||||||
git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.PAT_SERVICE_ACCOUNT }}" push origin core-$version
|
|
||||||
163
.github/workflows/jan-plugins.yml
vendored
163
.github/workflows/jan-plugins.yml
vendored
@ -1,163 +0,0 @@
|
|||||||
name: Jan Default Plugins
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "plugins/**"
|
|
||||||
- "!plugins/*/package.json"
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- "plugins/**"
|
|
||||||
- ".github/workflows/jan-plugins.yml"
|
|
||||||
- "!plugins/*/package.json"
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: macos-latest
|
|
||||||
environment: production
|
|
||||||
outputs:
|
|
||||||
branch_name: ${{ steps.commit_and_tag.outputs.branch_name }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: "0"
|
|
||||||
token: ${{ secrets.PAT_SERVICE_ACCOUNT }}
|
|
||||||
|
|
||||||
- name: Install jq
|
|
||||||
uses: dcarbone/install-jq-action@v2.0.1
|
|
||||||
|
|
||||||
- name: Get Cer for code signing
|
|
||||||
run: base64 -d <<< "$CODE_SIGN_P12_BASE64" > /tmp/codesign.p12
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
CODE_SIGN_P12_BASE64: ${{ secrets.CODE_SIGN_P12_BASE64 }}
|
|
||||||
|
|
||||||
- uses: apple-actions/import-codesign-certs@v2
|
|
||||||
continue-on-error: true
|
|
||||||
with:
|
|
||||||
p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }}
|
|
||||||
p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Check Path Change
|
|
||||||
run: |
|
|
||||||
git config --global user.email "service@jan.ai"
|
|
||||||
git config --global user.name "Service Account"
|
|
||||||
echo "Changes in these directories trigger the build:"
|
|
||||||
changed_dirs=$(git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.GITHUB_TOKEN }}" diff --name-only HEAD HEAD~1 | grep '^plugins/' | awk -F/ '{print $2}' | uniq)
|
|
||||||
echo $changed_dirs > /tmp/change_dir.txt
|
|
||||||
|
|
||||||
- name: "Auto Increase package Version"
|
|
||||||
run: |
|
|
||||||
cd plugins
|
|
||||||
for dir in $(cat /tmp/change_dir.txt)
|
|
||||||
do
|
|
||||||
echo "$dir"
|
|
||||||
if [ ! -d "$dir" ]; then
|
|
||||||
echo "Directory $dir does not exist, plugin might be removed, skipping..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Extract current version
|
|
||||||
current_version=$(jq -r '.version' $dir/package.json)
|
|
||||||
|
|
||||||
# Break the version into its components
|
|
||||||
major_version=$(echo $current_version | cut -d "." -f 1)
|
|
||||||
minor_version=$(echo $current_version | cut -d "." -f 2)
|
|
||||||
patch_version=$(echo $current_version | cut -d "." -f 3)
|
|
||||||
|
|
||||||
# Increment the patch version by one
|
|
||||||
new_patch_version=$((patch_version+1))
|
|
||||||
|
|
||||||
# Construct the new version
|
|
||||||
new_version="$major_version.$minor_version.$new_patch_version"
|
|
||||||
|
|
||||||
# Replace the old version with the new version in package.json
|
|
||||||
jq --arg version "$new_version" '.version = $version' $dir/package.json > /tmp/package.json && mv /tmp/package.json $dir/package.json
|
|
||||||
|
|
||||||
# Print the new version
|
|
||||||
echo "Updated $dir package.json version to: $new_version"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Setup .npmrc file to publish to npm
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: "20.x"
|
|
||||||
registry-url: "https://registry.npmjs.org"
|
|
||||||
- name: Build core module
|
|
||||||
run: |
|
|
||||||
cd core
|
|
||||||
npm install
|
|
||||||
npm run build
|
|
||||||
|
|
||||||
- name: Publish npm packages
|
|
||||||
run: |
|
|
||||||
cd plugins
|
|
||||||
for dir in $(cat /tmp/change_dir.txt)
|
|
||||||
do
|
|
||||||
echo $dir
|
|
||||||
if [ ! -d "$dir" ]; then
|
|
||||||
echo "Directory $dir does not exist, plugin might be removed, skipping..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
cd $dir
|
|
||||||
npm install
|
|
||||||
if [[ $dir == 'data-plugin' ]]; then
|
|
||||||
npm run build:deps
|
|
||||||
fi
|
|
||||||
npm run postinstall && ../../.github/scripts/auto-sign.sh
|
|
||||||
if [[ $GITHUB_EVENT_NAME == 'push' && $GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME != $GITHUB_REPOSITORY ]]; then
|
|
||||||
npm publish --access public
|
|
||||||
fi
|
|
||||||
cd ..
|
|
||||||
done
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
||||||
DEVELOPER_ID: ${{ secrets.DEVELOPER_ID }}
|
|
||||||
APP_PATH: "."
|
|
||||||
|
|
||||||
- name: "Commit new version to main and create tag"
|
|
||||||
id: commit_and_tag
|
|
||||||
if: github.event_name == 'push' && github.event.pull_request.head.repo.full_name != github.repository
|
|
||||||
run: |
|
|
||||||
rm -rf /tmp/plugin-catalog
|
|
||||||
git clone https://${{ secrets.SERVICE_ACCOUNT_USERNAME }}:${{ secrets.PAT_SERVICE_ACCOUNT }}@github.com/janhq/plugin-catalog.git /tmp/plugin-catalog
|
|
||||||
for dir in $(cat /tmp/change_dir.txt)
|
|
||||||
do
|
|
||||||
echo "$dir"
|
|
||||||
if [ ! -d "$dir" ]; then
|
|
||||||
echo "Directory $dir does not exist, plugin might be removed, skipping..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
version=$(jq -r '.version' plugins/$dir/package.json)
|
|
||||||
git config --global user.email "service@jan.ai"
|
|
||||||
git config --global user.name "Service Account"
|
|
||||||
git add plugins/$dir/package.json
|
|
||||||
git commit -m "${GITHUB_REPOSITORY}: Update tag build $version for $dir"
|
|
||||||
git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.PAT_SERVICE_ACCOUNT }}" push origin HEAD:main
|
|
||||||
git tag -a $dir-$version -m "${GITHUB_REPOSITORY}: Update tag build $version for $dir"
|
|
||||||
git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.PAT_SERVICE_ACCOUNT }}" push origin $dir-$version
|
|
||||||
plugin_name=$(jq -r '.name | sub("@janhq/"; "")' plugins/$dir/package.json)
|
|
||||||
cp plugins/$dir/package.json /tmp/plugin-catalog/${plugin_name}.json
|
|
||||||
done
|
|
||||||
cd /tmp/plugin-catalog
|
|
||||||
BRANCH_NAME="update-package-$(date +'%Y%m%d%H%M%S')"
|
|
||||||
git checkout -b $BRANCH_NAME
|
|
||||||
git add .
|
|
||||||
git commit -m "Update plugin catalog"
|
|
||||||
git push origin $BRANCH_NAME
|
|
||||||
cd /tmp && rm -rf /tmp/plugin-catalog
|
|
||||||
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV
|
|
||||||
echo "::set-output name=branch_name::$BRANCH_NAME"
|
|
||||||
|
|
||||||
pull_request:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
environment: production
|
|
||||||
if: github.event_name == 'push' && github.event.pull_request.head.repo.full_name != github.repository
|
|
||||||
needs: build
|
|
||||||
steps:
|
|
||||||
- run: |
|
|
||||||
gh pr create --title "Update plugin catalog" --body "Update plugin catalog" --base main --head ${{ needs.build.outputs.branch_name }} --repo janhq/plugin-catalog --reviewer louis-jan,hiento09
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.PAT_SERVICE_ACCOUNT }}
|
|
||||||
17
package.json
17
package.json
@ -35,27 +35,22 @@
|
|||||||
"build:web": "yarn workspace jan-web build && cpx \"web/out/**\" \"electron/renderer/\"",
|
"build:web": "yarn workspace jan-web build && cpx \"web/out/**\" \"electron/renderer/\"",
|
||||||
"build:electron": "yarn workspace jan build",
|
"build:electron": "yarn workspace jan build",
|
||||||
"build:electron:test": "yarn workspace jan build:test",
|
"build:electron:test": "yarn workspace jan build:test",
|
||||||
"build:pull-plugins": "rimraf ./electron/core/pre-install/*.tgz && cd ./electron/core/pre-install && npm pack @janhq/inference-plugin @janhq/monitoring-plugin",
|
"build:plugins": "rimraf ./electron/core/pre-install/*.tgz && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm install && npm run build:publish\" \"cd ./plugins/inference-plugin && npm install && npm run build:publish\" \"cd ./plugins/model-plugin && npm install && npm run build:publish\" \"cd ./plugins/monitoring-plugin && npm install && npm run build:publish\"",
|
||||||
"build:plugins": "rimraf ./electron/core/pre-install/*.tgz && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm install && npm run postinstall && npm run build:publish\" \"cd ./plugins/inference-plugin && npm install --ignore-scripts && npm run postinstall:dev && npm run build:publish\" \"cd ./plugins/model-plugin && npm install && npm run postinstall && npm run build:publish\" \"cd ./plugins/monitoring-plugin && npm install && npm run postinstall && npm run build:publish\"",
|
"build:plugins-win32": "rimraf ./electron/core/pre-install/*.tgz && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm install && npm run build:publish\" \"cd ./plugins/inference-plugin && npm install && npm run build:publish-win32\" \"cd ./plugins/model-plugin && npm install && npm run build:publish\" \"cd ./plugins/monitoring-plugin && npm install && npm run build:publish\"",
|
||||||
"build:plugins-windows": "rimraf ./electron/core/pre-install/*.tgz && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm install && npm run postinstall && npm run build:publish\" \"cd ./plugins/inference-plugin && npm install --ignore-scripts && npm run postinstall:windows && npm run build:publish\" \"cd ./plugins/model-plugin && npm install && npm run postinstall && npm run build:publish\" \"cd ./plugins/monitoring-plugin && npm install && npm run postinstall && npm run build:publish\"",
|
"build:plugins-linux": "rimraf ./electron/core/pre-install/*.tgz && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm install && npm run build:publish\" \"cd ./plugins/inference-plugin && npm install && npm run build:publish-linux\" \"cd ./plugins/model-plugin && npm install && npm run build:publish\" \"cd ./plugins/monitoring-plugin && npm install && npm run build:publish\"",
|
||||||
"build:plugins-linux": "rimraf ./electron/core/pre-install/*.tgz && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm install && npm run postinstall && npm run build:publish\" \"cd ./plugins/inference-plugin && npm install && npm run postinstall && npm run build:publish\" \"cd ./plugins/model-plugin && npm install && npm run postinstall && npm run build:publish\" \"cd ./plugins/monitoring-plugin && npm install && npm run postinstall && npm run build:publish\"",
|
"build:plugins-darwin": "rimraf ./electron/core/pre-install/*.tgz && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm install && npm run build:publish\" \"cd ./plugins/inference-plugin && npm install && npm run build:publish-darwin\" \"cd ./plugins/model-plugin && npm install && npm run build:publish\" \"cd ./plugins/monitoring-plugin && npm install && npm run build:publish\"",
|
||||||
"build:plugins-darwin": "rimraf ./electron/core/pre-install/*.tgz && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm install && npm run postinstall && npm run build:publish\" \"cd ./plugins/inference-plugin && npm install && npm run postinstall && ../../.github/scripts/auto-sign.sh && npm run build:publish\" \"cd ./plugins/model-plugin && npm install && npm run postinstall && npm run build:publish\" \"cd ./plugins/monitoring-plugin && npm install && npm run postinstall && npm run build:publish\"",
|
|
||||||
"build:plugins-web": "rimraf ./electron/core/pre-install/*.tgz && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm install && npm run build:deps && npm run postinstall\" \"cd ./plugins/inference-plugin && npm install && npm run postinstall\" \"cd ./plugins/model-plugin && npm install && npm run postinstall\" \"cd ./plugins/monitoring-plugin && npm install && npm run postinstall\" && concurrently --kill-others-on-fail \"cd ./plugins/conversational-json && npm run build:publish\" \"cd ./plugins/inference-plugin && npm run build:publish\" \"cd ./plugins/model-plugin && npm run build:publish\" \"cd ./plugins/monitoring-plugin && npm run build:publish\"",
|
|
||||||
"build": "yarn build:web && yarn build:electron",
|
|
||||||
"build:test": "yarn build:web && yarn build:electron:test",
|
"build:test": "yarn build:web && yarn build:electron:test",
|
||||||
"build:test-darwin": "yarn build:web && yarn workspace jan build:test-darwin",
|
"build:test-darwin": "yarn build:web && yarn workspace jan build:test-darwin",
|
||||||
"build:test-win32": "yarn build:web && yarn workspace jan build:test-win32",
|
"build:test-win32": "yarn build:web && yarn workspace jan build:test-win32",
|
||||||
"build:test-linux": "yarn build:web && yarn workspace jan build:test-linux",
|
"build:test-linux": "yarn build:web && yarn workspace jan build:test-linux",
|
||||||
|
"build": "yarn build:web && yarn build:electron",
|
||||||
"build:darwin": "yarn build:web && yarn workspace jan build:darwin",
|
"build:darwin": "yarn build:web && yarn workspace jan build:darwin",
|
||||||
"build:win32": "yarn build:web && yarn workspace jan build:win32",
|
"build:win32": "yarn build:web && yarn workspace jan build:win32",
|
||||||
"build:linux": "yarn build:web && yarn workspace jan build:linux",
|
"build:linux": "yarn build:web && yarn workspace jan build:linux",
|
||||||
"build:publish": "yarn build:web && yarn workspace jan build:publish",
|
"build:publish": "yarn build:web && yarn workspace jan build:publish",
|
||||||
"build:publish-darwin": "yarn build:web && yarn workspace jan build:publish-darwin",
|
"build:publish-darwin": "yarn build:web && yarn workspace jan build:publish-darwin",
|
||||||
"build:publish-win32": "yarn build:web && yarn workspace jan build:publish-win32",
|
"build:publish-win32": "yarn build:web && yarn workspace jan build:publish-win32",
|
||||||
"build:publish-linux": "yarn build:web && yarn workspace jan build:publish-linux",
|
"build:publish-linux": "yarn build:web && yarn workspace jan build:publish-linux"
|
||||||
"build:web-plugins": "yarn build:web && yarn build:plugins-web && mkdir -p \"./web/out/plugins/conversational-json\" && cp \"./plugins/conversational-json/dist/index.js\" \"./web/out/plugins/conversational-json\" && mkdir -p \"./web/out/plugins/inference-plugin\" && cp \"./plugins/inference-plugin/dist/index.js\" \"./web/out/plugins/inference-plugin\" && mkdir -p \"./web/out/plugins/model-plugin\" && cp \"./plugins/model-plugin/dist/index.js\" \"./web/out/plugins/model-plugin\" && mkdir -p \"./web/out/plugins/monitoring-plugin\" && cp \"./plugins/monitoring-plugin/dist/index.js\" \"./web/out/plugins/monitoring-plugin\"",
|
|
||||||
"server:prod": "yarn workspace server build && yarn build:web-plugins && cpx \"web/out/**\" \"server/build/renderer/\" && mkdir -p ./server/build/@janhq && cp -r ./plugins/* ./server/build/@janhq",
|
|
||||||
"start:server": "yarn server:prod && node server/build/main.js"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"concurrently": "^8.2.1",
|
"concurrently": "^8.2.1",
|
||||||
|
|||||||
@ -10,9 +10,7 @@
|
|||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc -b . && webpack --config webpack.config.js",
|
"build": "tsc -b . && webpack --config webpack.config.js",
|
||||||
"postinstall": "rimraf *.tgz --glob && npm run build",
|
"build:publish": "rimraf *.tgz --glob && npm run build && npm pack && cpx *.tgz ../../electron/core/pre-install"
|
||||||
"build:publish": "npm pack && cpx *.tgz ../../electron/core/pre-install",
|
|
||||||
"build:debug": "rimraf *.tgz --glob && npm run build && npm pack"
|
|
||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./dist/index.js",
|
".": "./dist/index.js",
|
||||||
|
|||||||
@ -11,8 +11,7 @@
|
|||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc -b . && webpack --config webpack.config.js",
|
"build": "tsc -b . && webpack --config webpack.config.js",
|
||||||
"postinstall": "rimraf *.tgz --glob && npm run build",
|
"build:publish": "rimraf *.tgz --glob npm run build && && npm pack && cpx *.tgz ../../electron/core/pre-install"
|
||||||
"build:publish": "npm pack && cpx *.tgz ../../electron/core/pre-install"
|
|
||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./dist/index.js",
|
".": "./dist/index.js",
|
||||||
|
|||||||
@ -15,15 +15,16 @@
|
|||||||
"build": "tsc -b . && webpack --config webpack.config.js",
|
"build": "tsc -b . && webpack --config webpack.config.js",
|
||||||
"downloadnitro:linux-cpu": "NITRO_VERSION=$(cat ./nitro/version.txt) && download https://github.com/janhq/nitro/releases/download/v${NITRO_VERSION}/nitro-${NITRO_VERSION}-linux-amd64.zip -e --strip 1 -o ./nitro/linux-cpu && chmod +x ./nitro/linux-cpu/nitro && chmod +x ./nitro/linux-start.sh ",
|
"downloadnitro:linux-cpu": "NITRO_VERSION=$(cat ./nitro/version.txt) && download https://github.com/janhq/nitro/releases/download/v${NITRO_VERSION}/nitro-${NITRO_VERSION}-linux-amd64.zip -e --strip 1 -o ./nitro/linux-cpu && chmod +x ./nitro/linux-cpu/nitro && chmod +x ./nitro/linux-start.sh ",
|
||||||
"downloadnitro:linux-cuda": "NITRO_VERSION=$(cat ./nitro/version.txt) && download https://github.com/janhq/nitro/releases/download/v${NITRO_VERSION}/nitro-${NITRO_VERSION}-linux-amd64-cuda.zip -e --strip 1 -o ./nitro/linux-cuda && chmod +x ./nitro/linux-cuda/nitro && chmod +x ./nitro/linux-start.sh",
|
"downloadnitro:linux-cuda": "NITRO_VERSION=$(cat ./nitro/version.txt) && download https://github.com/janhq/nitro/releases/download/v${NITRO_VERSION}/nitro-${NITRO_VERSION}-linux-amd64-cuda.zip -e --strip 1 -o ./nitro/linux-cuda && chmod +x ./nitro/linux-cuda/nitro && chmod +x ./nitro/linux-start.sh",
|
||||||
"downloadnitro:mac-arm64": "NITRO_VERSION=$(cat ./nitro/version.txt) && download https://github.com/janhq/nitro/releases/download/v${NITRO_VERSION}/nitro-${NITRO_VERSION}-mac-arm64.zip -e --strip 1 -o ./nitro/mac-arm64 && chmod +x ./nitro/mac-arm64/nitro",
|
"downloadnitro:darwin-arm64": "NITRO_VERSION=$(cat ./nitro/version.txt) && download https://github.com/janhq/nitro/releases/download/v${NITRO_VERSION}/nitro-${NITRO_VERSION}-mac-arm64.zip -e --strip 1 -o ./nitro/mac-arm64 && chmod +x ./nitro/mac-arm64/nitro",
|
||||||
"downloadnitro:mac-x64": "NITRO_VERSION=$(cat ./nitro/version.txt) && download https://github.com/janhq/nitro/releases/download/v${NITRO_VERSION}/nitro-${NITRO_VERSION}-mac-amd64.zip -e --strip 1 -o ./nitro/mac-x64 && chmod +x ./nitro/mac-x64/nitro",
|
"downloadnitro:darwin-x64": "NITRO_VERSION=$(cat ./nitro/version.txt) && download https://github.com/janhq/nitro/releases/download/v${NITRO_VERSION}/nitro-${NITRO_VERSION}-mac-amd64.zip -e --strip 1 -o ./nitro/mac-x64 && chmod +x ./nitro/mac-x64/nitro",
|
||||||
"downloadnitro:win-cpu": "download https://github.com/janhq/nitro/releases/download/v%NITRO_VERSION%/nitro-%NITRO_VERSION%-win-amd64.zip -e --strip 1 -o ./nitro/win-cpu",
|
"downloadnitro:win32-cpu": "download https://github.com/janhq/nitro/releases/download/v%NITRO_VERSION%/nitro-%NITRO_VERSION%-win-amd64.zip -e --strip 1 -o ./nitro/win-cpu",
|
||||||
"downloadnitro:win-cuda": "download https://github.com/janhq/nitro/releases/download/v%NITRO_VERSION%/nitro-%NITRO_VERSION%-win-amd64-cuda.zip -e --strip 1 -o ./nitro/win-cuda",
|
"downloadnitro:win32-cuda": "download https://github.com/janhq/nitro/releases/download/v%NITRO_VERSION%/nitro-%NITRO_VERSION%-win-amd64-cuda.zip -e --strip 1 -o ./nitro/win-cuda",
|
||||||
"postinstall": "rimraf *.tgz --glob && npm run build && npm run downloadnitro:linux-cpu && npm run downloadnitro:linux-cuda && npm run downloadnitro:mac-arm64 && npm run downloadnitro:mac-x64 && rimraf dist/nitro/* && cpx \"nitro/**\" \"dist/nitro\"",
|
"downloadnitro:all": "npm run downloadnitro:darwin-arm64 && npm run downloadnitro:darwin-x64 && downloadnitro:win32-cpu && npm run downloadnitro:win32-cuda && npm run downloadnitro:linux-cpu && npm run downloadnitro:linux-cuda",
|
||||||
"postinstall:dev": "rimraf *.tgz --glob && npm run build && npm run downloadnitro:mac-arm64 && npm run downloadnitro:mac-x64 && rimraf dist/nitro/* && cpx \"nitro/**\" \"dist/nitro\"",
|
"build:publish": "rimraf *.tgz --glob && npm run build && npm run downloadnitro:darwin-arm64 && npm run downloadnitro:darwin-x64 && npm pack && cpx *.tgz ../../electron/core/pre-install",
|
||||||
"postinstall:windows": "rimraf *.tgz --glob && npm run build && npm run downloadnitro:win-cpu && npm run downloadnitro:win-cuda && rimraf dist/nitro/* && cpx \"nitro/**\" \"dist/nitro\"",
|
"build:publish-darwin": "rimraf *.tgz --glob && npm run build && npm run downloadnitro:darwin-arm64 && npm run downloadnitro:darwin-x64 && ../../.github/scripts/auto-sign.sh && npm pack && cpx *.tgz ../../electron/core/pre-install",
|
||||||
"build:publish": "npm pack && cpx *.tgz ../../electron/core/pre-install",
|
"build:publish-win32": "rimraf *.tgz --glob && npm run build && npm run downloadnitro:win32-cpu && npm run downloadnitro:win32-cuda && npm pack && cpx *.tgz ../../electron/core/pre-install",
|
||||||
"build:debug": "rimraf *.tgz --glob && npm run build && npm pack && cpx *.tgz ../../electron/core/pre-install"
|
"build:publish-linux": "rimraf *.tgz --glob && npm run build && npm run downloadnitro:linux-cpu && npm run downloadnitro:linux-cuda && npm pack && cpx *.tgz ../../electron/core/pre-install",
|
||||||
|
"build:publish-all": "rimraf *.tgz --glob && npm run build && npm run downloadnitro:all && npm pack && cpx *.tgz ../../electron/core/pre-install"
|
||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./dist/index.js",
|
".": "./dist/index.js",
|
||||||
|
|||||||
@ -14,9 +14,7 @@
|
|||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc -b . && webpack --config webpack.config.js",
|
"build": "tsc -b . && webpack --config webpack.config.js",
|
||||||
"postinstall": "rimraf *.tgz --glob && npm run build",
|
"build:publish": "rimraf *.tgz --glob && npm run build && npm pack && cpx *.tgz ../../electron/core/pre-install"
|
||||||
"build:publish": "npm pack && cpx *.tgz ../../electron/core/pre-install",
|
|
||||||
"build:debug": "rimraf *.tgz --glob && npm run build && npm pack && cpx *.tgz ../../electron/core/pre-install"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cpx": "^1.5.0",
|
"cpx": "^1.5.0",
|
||||||
|
|||||||
@ -14,8 +14,7 @@
|
|||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc -b . && webpack --config webpack.config.js",
|
"build": "tsc -b . && webpack --config webpack.config.js",
|
||||||
"postinstall": "rimraf *.tgz --glob && npm run build",
|
"build:publish": "rimraf *.tgz --glob && npm run build && npm pack && cpx *.tgz ../../electron/core/pre-install"
|
||||||
"build:publish": "npm pack && cpx *.tgz ../../electron/core/pre-install"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
|
|||||||
179
server/main.ts
179
server/main.ts
@ -1,179 +0,0 @@
|
|||||||
import express, { Express, Request, Response, NextFunction } from 'express'
|
|
||||||
import cors from "cors";
|
|
||||||
import { resolve } from "path";
|
|
||||||
const fs = require("fs");
|
|
||||||
const progress = require("request-progress");
|
|
||||||
const path = require("path");
|
|
||||||
const request = require("request");
|
|
||||||
|
|
||||||
// Create app dir
|
|
||||||
const userDataPath = appPath();
|
|
||||||
if (!fs.existsSync(userDataPath)) fs.mkdirSync(userDataPath);
|
|
||||||
|
|
||||||
interface ProgressState {
|
|
||||||
percent?: number;
|
|
||||||
speed?: number;
|
|
||||||
size?: {
|
|
||||||
total: number;
|
|
||||||
transferred: number;
|
|
||||||
};
|
|
||||||
time?: {
|
|
||||||
elapsed: number;
|
|
||||||
remaining: number;
|
|
||||||
};
|
|
||||||
success?: boolean | undefined;
|
|
||||||
fileName: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const options: cors.CorsOptions = { origin: "*" };
|
|
||||||
const requiredModules: Record<string, any> = {};
|
|
||||||
const port = process.env.PORT || 4000;
|
|
||||||
const dataDir = __dirname;
|
|
||||||
type DownloadProgress = Record<string, ProgressState>;
|
|
||||||
const downloadProgress: DownloadProgress = {};
|
|
||||||
const app: Express = express()
|
|
||||||
app.use(express.static(dataDir + '/renderer'))
|
|
||||||
app.use(cors(options))
|
|
||||||
app.use(express.json());
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute a plugin module function via API call
|
|
||||||
*
|
|
||||||
* @param modulePath path to module name to import
|
|
||||||
* @param method function name to execute. The methods "deleteFile" and "downloadFile" will call the server function {@link deleteFile}, {@link downloadFile} instead of the plugin function.
|
|
||||||
* @param args arguments to pass to the function
|
|
||||||
* @returns Promise<any>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
app.post('/api/v1/invokeFunction', (req: Request, res: Response, next: NextFunction): void => {
|
|
||||||
const method = req.body["method"];
|
|
||||||
const args = req.body["args"];
|
|
||||||
switch (method) {
|
|
||||||
case "deleteFile":
|
|
||||||
deleteFile(args).then(() => res.json(Object())).catch((err: any) => next(err));
|
|
||||||
break;
|
|
||||||
case "downloadFile":
|
|
||||||
downloadFile(args.downloadUrl, args.fileName).then(() => res.json(Object())).catch((err: any) => next(err));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
const result = invokeFunction(req.body["modulePath"], method, args)
|
|
||||||
if (typeof result === "undefined") {
|
|
||||||
res.json(Object())
|
|
||||||
} else {
|
|
||||||
result?.then((result: any) => {
|
|
||||||
res.json(result)
|
|
||||||
}).catch((err: any) => next(err));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
app.post('/api/v1/downloadProgress', (req: Request, res: Response): void => {
|
|
||||||
const fileName = req.body["fileName"];
|
|
||||||
if (fileName && downloadProgress[fileName]) {
|
|
||||||
res.json(downloadProgress[fileName])
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
const obj = downloadingFile();
|
|
||||||
if (obj) {
|
|
||||||
res.json(obj)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
res.json(Object());
|
|
||||||
});
|
|
||||||
|
|
||||||
app.use((err: Error, req: Request, res: Response, next: NextFunction): void => {
|
|
||||||
console.error("ErrorHandler", req.url, req.body, err);
|
|
||||||
res.status(500);
|
|
||||||
res.json({ error: err?.message ?? "Internal Server Error" })
|
|
||||||
});
|
|
||||||
|
|
||||||
app.listen(port, () => console.log(`Application is running on port ${port}`));
|
|
||||||
|
|
||||||
|
|
||||||
async function invokeFunction(modulePath: string, method: string, args: any): Promise<any> {
|
|
||||||
console.log(modulePath, method, args);
|
|
||||||
const module = require(/* webpackIgnore: true */ path.join(
|
|
||||||
dataDir,
|
|
||||||
"",
|
|
||||||
modulePath
|
|
||||||
));
|
|
||||||
requiredModules[modulePath] = module;
|
|
||||||
if (typeof module[method] === "function") {
|
|
||||||
return module[method](...args);
|
|
||||||
} else {
|
|
||||||
return Promise.resolve();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function downloadModel(downloadUrl: string, fileName: string): void {
|
|
||||||
const userDataPath = appPath();
|
|
||||||
const destination = resolve(userDataPath, fileName);
|
|
||||||
console.log("Download file", fileName, "to", destination);
|
|
||||||
progress(request(downloadUrl), {})
|
|
||||||
.on("progress", function (state: any) {
|
|
||||||
downloadProgress[fileName] = {
|
|
||||||
...state,
|
|
||||||
fileName,
|
|
||||||
success: undefined
|
|
||||||
};
|
|
||||||
console.log("downloading file", fileName, (state.percent * 100).toFixed(2) + '%');
|
|
||||||
})
|
|
||||||
.on("error", function (err: Error) {
|
|
||||||
downloadProgress[fileName] = {
|
|
||||||
...downloadProgress[fileName],
|
|
||||||
success: false,
|
|
||||||
fileName: fileName,
|
|
||||||
};
|
|
||||||
})
|
|
||||||
.on("end", function () {
|
|
||||||
downloadProgress[fileName] = {
|
|
||||||
success: true,
|
|
||||||
fileName: fileName,
|
|
||||||
};
|
|
||||||
})
|
|
||||||
.pipe(fs.createWriteStream(destination));
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteFile(filePath: string): Promise<void> {
|
|
||||||
const userDataPath = appPath();
|
|
||||||
const fullPath = resolve(userDataPath, filePath);
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
fs.unlink(fullPath, function (err: any) {
|
|
||||||
if (err && err.code === "ENOENT") {
|
|
||||||
reject(Error(`File does not exist: ${err}`));
|
|
||||||
} else if (err) {
|
|
||||||
reject(Error(`File delete error: ${err}`));
|
|
||||||
} else {
|
|
||||||
console.log(`Delete file ${filePath} from ${fullPath}`)
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function downloadingFile(): ProgressState | undefined {
|
|
||||||
const obj = Object.values(downloadProgress).find(obj => obj && typeof obj.success === "undefined")
|
|
||||||
return obj
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async function downloadFile(downloadUrl: string, fileName: string): Promise<void> {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const obj = downloadingFile();
|
|
||||||
if (obj) {
|
|
||||||
reject(Error(obj.fileName + " is being downloaded!"))
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
(async () => {
|
|
||||||
downloadModel(downloadUrl, fileName);
|
|
||||||
})().catch(e => {
|
|
||||||
console.error("downloadModel", fileName, e);
|
|
||||||
});
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function appPath(): string {
|
|
||||||
return process.env.APPDATA || (process.platform == 'darwin' ? process.env.HOME + '/Library/Preferences' : process.env.HOME + "/.local/share")
|
|
||||||
}
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"watch": [
|
|
||||||
"main.ts"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "server",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"main": "index.js",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"cors": "^2.8.5",
|
|
||||||
"electron": "^26.2.1",
|
|
||||||
"express": "^4.18.2",
|
|
||||||
"request": "^2.88.2",
|
|
||||||
"request-progress": "^3.0.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/cors": "^2.8.14",
|
|
||||||
"@types/express": "^4.17.18",
|
|
||||||
"@types/node": "^20.8.2",
|
|
||||||
"nodemon": "^3.0.1",
|
|
||||||
"ts-node": "^10.9.1",
|
|
||||||
"typescript": "^5.2.2"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"build": "tsc --project ./",
|
|
||||||
"dev": "nodemon main.ts",
|
|
||||||
"prod": "node build/main.js"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "es5",
|
|
||||||
"module": "commonjs",
|
|
||||||
"noImplicitAny": true,
|
|
||||||
"sourceMap": true,
|
|
||||||
"strict": true,
|
|
||||||
"outDir": "./build",
|
|
||||||
"rootDir": "./",
|
|
||||||
"noEmitOnError": true,
|
|
||||||
"baseUrl": ".",
|
|
||||||
"allowJs": true,
|
|
||||||
"paths": { "*": ["node_modules/*"] },
|
|
||||||
"typeRoots": ["node_modules/@types"],
|
|
||||||
"esModuleInterop": true
|
|
||||||
},
|
|
||||||
"include": ["./**/*.ts"],
|
|
||||||
"exclude": ["core", "build", "dist", "tests"]
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user