Merge pull request #328 from Cohee1207/pkg

Pkg
This commit is contained in:
Cohee
2023-05-16 20:39:33 +03:00
committed by GitHub
9 changed files with 1320 additions and 38 deletions

View File

@@ -3,3 +3,4 @@ node_modules
npm-debug.log
readme*
Start.bat
/dist

View File

@@ -0,0 +1,46 @@
name: Build and Publish Release (Dev)
on:
push:
branches:
- dev
jobs:
build_and_publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: 18
- name: Install dependencies
run: npm ci
- name: Build and package with pkg
run: |
npm install -g pkg
npm run pkg
- name: Create or update release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: continuous-release-dev
release_name: Continuous Release (Dev)
draft: false
prerelease: true
- name: Upload binaries to release
uses: softprops/action-gh-release@v1
with:
files: dist/*
release_id: ${{ steps.create_release.outputs.id }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -0,0 +1,46 @@
name: Build and Publish Release (Main)
on:
push:
branches:
- main
jobs:
build_and_publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: 18
- name: Install dependencies
run: npm ci
- name: Build and package with pkg
run: |
npm install -g pkg
npm run pkg
- name: Create or update release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: continuous-release-main
release_name: Continuous Release (Main)
draft: false
prerelease: true
- name: Upload binaries to release
uses: softprops/action-gh-release@v1
with:
files: dist/*
release_id: ${{ steps.create_release.outputs.id }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

1
.gitignore vendored
View File

@@ -17,3 +17,4 @@ public/settings.json
whitelist.txt
.vscode
secrets.json
/dist

View File

@@ -2,3 +2,5 @@ node_modules/
/uploads/
.DS_Store
/thumbnails
secrets.json
/dist

1182
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"dependencies": {
"@dqbd/tiktoken": "^1.0.2",
"axios": "^1.3.4",
"axios": "^0.27.2",
"command-exists": "^1.2.9",
"compression": "^1",
"cookie-parser": "^1.4.6",
@@ -44,7 +44,8 @@
},
"version": "1.5.4",
"scripts": {
"start": "node server.js"
"start": "node server.js",
"pkg": "pkg ."
},
"bin": {
"sillytavern": "./server.js"
@@ -53,11 +54,27 @@
"no-path-concat": "off",
"no-var": "off"
},
"main": "server.js",
"pkg": {
"targets": [
"node18-linux-arm64",
"node18-linux-x64",
"node18-macos-arm64",
"node18-macos-x64",
"node18-windows-arm64",
"node18-windows-x64"
],
"assets": [
"node_modules/open/xdg-open/",
"public",
"uploads"
"node_modules/**/*",
"poe_graphql/**/*"
],
"outputPath": "dist",
"scripts": [
"server.js"
]
},
"devDependencies": {
"pkg": "^5.8.1",
"pkg-fetch": "^3.5.2"
}
}

View File

@@ -20,7 +20,10 @@ const cliArguments = yargs(hideBin(process.argv))
}).argv;
// change all relative paths
process.chdir(__dirname)
const path = require('path');
const directory = process.pkg ? path.dirname(process.execPath) : __dirname;
console.log(process.pkg ? 'Running from binary' : 'Running from source');
process.chdir(directory);
const express = require('express');
const compression = require('compression');
@@ -42,7 +45,7 @@ const encode = require('png-chunks-encode');
const PNGtext = require('png-chunk-text');
const jimp = require('jimp');
const path = require('path');
//const path = require('path');
const sanitize = require('sanitize-filename');
const mime = require('mime-types');
@@ -60,10 +63,10 @@ const utf8Encode = new TextEncoder();
const utf8Decode = new TextDecoder('utf-8', { ignoreBOM: true });
const commandExistsSync = require('command-exists').sync;
const config = require(path.join(__dirname, './config.conf'));
const config = require(path.join(process.cwd(), './config.conf'));
const server_port = process.env.SILLY_TAVERN_PORT || config.port;
const whitelistPath = path.join(__dirname, "./whitelist.txt");
const whitelistPath = path.join(process.cwd(), "./whitelist.txt");
let whitelist = config.whitelist;
if (fs.existsSync(whitelistPath)) {
@@ -259,7 +262,7 @@ app.use((req, res, next) => {
console.log(filePath);
fs.access(filePath, fs.constants.R_OK, (err) => {
if (!err) {
res.sendFile(filePath, { root: __dirname });
res.sendFile(filePath, { root: process.cwd() });
} else {
res.send('Character not found: ' + filePath);
//next();
@@ -270,10 +273,10 @@ app.use((req, res, next) => {
}
});
app.use(express.static(__dirname + "/public", { refresh: true }));
app.use(express.static(process.cwd() + "/public", { refresh: true }));
app.use('/backgrounds', (req, res) => {
const filePath = decodeURIComponent(path.join(__dirname, 'public/backgrounds', req.url.replace(/%20/g, ' ')));
const filePath = decodeURIComponent(path.join(process.cwd(), 'public/backgrounds', req.url.replace(/%20/g, ' ')));
fs.readFile(filePath, (err, data) => {
if (err) {
res.status(404).send('File not found');
@@ -285,7 +288,7 @@ app.use('/backgrounds', (req, res) => {
});
app.use('/characters', (req, res) => {
const filePath = decodeURIComponent(path.join(__dirname, charactersPath, req.url.replace(/%20/g, ' ')));
const filePath = decodeURIComponent(path.join(process.cwd(), charactersPath, req.url.replace(/%20/g, ' ')));
fs.readFile(filePath, (err, data) => {
if (err) {
res.status(404).send('File not found');
@@ -296,16 +299,16 @@ app.use('/characters', (req, res) => {
});
app.use(multer({ dest: "uploads" }).single("avatar"));
app.get("/", function (request, response) {
response.sendFile(__dirname + "/public/index.html");
response.sendFile(process.cwd() + "/public/index.html");
});
app.get("/notes/*", function (request, response) {
response.sendFile(__dirname + "/public" + request.url + ".html");
response.sendFile(process.cwd() + "/public" + request.url + ".html");
});
app.get('/get_faq', function (_, response) {
response.sendFile(__dirname + "/faq.md");
response.sendFile(process.cwd() + "/faq.md");
});
app.get('/get_readme', function (_, response) {
response.sendFile(__dirname + "/readme.md");
response.sendFile(process.cwd() + "/readme.md");
});
app.get('/deviceinfo', function (request, response) {
const userAgent = request.header('user-agent');
@@ -658,13 +661,13 @@ function getVersion() {
try {
const pkgJson = require('./package.json');
pkgVersion = pkgJson.version;
if (commandExistsSync('git')) {
if (!process.pkg && commandExistsSync('git')) {
gitRevision = require('child_process')
.execSync('git rev-parse --short HEAD', { cwd: __dirname })
.execSync('git rev-parse --short HEAD', { cwd: process.cwd() })
.toString().trim();
gitBranch = require('child_process')
.execSync('git rev-parse --abbrev-ref HEAD', { cwd: __dirname })
.execSync('git rev-parse --abbrev-ref HEAD', { cwd: process.cwd() })
.toString().trim();
}
}
@@ -1694,7 +1697,7 @@ app.post("/exportcharacter", jsonParser, async function (request, response) {
switch (request.body.format) {
case 'png':
return response.sendFile(filename, { root: __dirname });
return response.sendFile(filename, { root: process.cwd() });
case 'json': {
try {
let json = await charaRead(filename);
@@ -1724,7 +1727,7 @@ app.post("/exportcharacter", jsonParser, async function (request, response) {
await webp.cwebp(filename, inputWebpPath, '-q 95');
await webp.webpmux_add(inputWebpPath, outputWebpPath, metadataPath, 'exif');
response.sendFile(outputWebpPath, { root: __dirname }, () => {
response.sendFile(outputWebpPath, { root: process.cwd() }, () => {
fs.rmSync(inputWebpPath);
fs.rmSync(metadataPath);
fs.rmSync(outputWebpPath);
@@ -2369,7 +2372,7 @@ app.get('/thumbnail', jsonParser, async function (request, response) {
if (config.disableThumbnails == true) {
const pathToOriginalFile = path.join(getOriginalFolder(type), file);
return response.sendFile(pathToOriginalFile, { root: __dirname });
return response.sendFile(pathToOriginalFile, { root: process.cwd() });
}
const pathToCachedFile = await generateThumbnail(type, file);
@@ -2378,7 +2381,7 @@ app.get('/thumbnail', jsonParser, async function (request, response) {
return response.sendStatus(404);
}
return response.sendFile(pathToCachedFile, { root: __dirname });
return response.sendFile(pathToCachedFile, { root: process.cwd() });
});
/* OpenAI */

View File

@@ -3,9 +3,11 @@
* allow access to the endpoint after successful authentication.
*/
const {dirname} = require('path');
const appDir = dirname(require.main.filename);
const config = require(appDir + '/config.conf');
//const {dirname} = require('path');
//const appDir = dirname(require.main.filename);
//const config = require(appDir + '/config.conf');
const path = require('path');
const config = require(path.join(process.cwd(), './config.conf'));
const unauthorizedResponse = (res) => {
res.set('WWW-Authenticate', 'Basic realm="SillyTavern", charset="UTF-8"');