openkbs 0.0.45 → 0.0.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/scripts/update-version.js +17 -0
- package/src/actions.js +171 -6
- package/src/index.js +11 -8
- package/version.json +5 -0
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openkbs",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.47",
|
|
4
4
|
"description": "OpenKBS - Command Line Interface",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "pkg .",
|
|
8
|
-
"deploy": "npm run build && npm run deploy:linux && npm run deploy:macos && npm run deploy:win && npm run deploy:templates",
|
|
8
|
+
"deploy": "npm run build && npm run deploy:linux && npm run deploy:macos && npm run deploy:win && npm run deploy:templates && npm run deploy:version",
|
|
9
9
|
"deploy:linux": "aws s3 cp build/openkbs-linux-x64 s3://openkbs-downloads/cli/linux/openkbs && aws s3 cp build/openkbs-linux-arm64 s3://openkbs-downloads/cli/linux/openkbs-arm64",
|
|
10
10
|
"deploy:macos": "aws s3 cp build/openkbs-macos-arm64 s3://openkbs-downloads/cli/macos/openkbs && aws s3 cp build/openkbs-macos-x64 s3://openkbs-downloads/cli/macos/openkbs-x64",
|
|
11
11
|
"deploy:win": "aws s3 cp build/openkbs-win-x64.exe s3://openkbs-downloads/cli/windows/openkbs.exe && aws s3 cp build/openkbs-win-arm64.exe s3://openkbs-downloads/cli/windows/openkbs-arm64.exe",
|
|
12
12
|
"deploy:templates": "node scripts/deploy-templates.js",
|
|
13
|
+
"deploy:version": "node scripts/update-version.js && aws s3 cp version.json s3://openkbs-downloads/cli/version.json",
|
|
13
14
|
"postinstall": "node src/install.js",
|
|
14
15
|
"postupdate": "node src/install.js"
|
|
15
16
|
},
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
const packageJsonPath = path.join(__dirname, '..', 'package.json');
|
|
5
|
+
const versionJsonPath = path.join(__dirname, '..', 'version.json');
|
|
6
|
+
|
|
7
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
8
|
+
|
|
9
|
+
const versionData = {
|
|
10
|
+
version: packageJson.version,
|
|
11
|
+
releaseDate: new Date().toISOString().split('T')[0],
|
|
12
|
+
releaseNotes: `OpenKBS CLI version ${packageJson.version}`
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
fs.writeFileSync(versionJsonPath, JSON.stringify(versionData, null, 2));
|
|
16
|
+
|
|
17
|
+
console.log(`Updated version.json with version ${packageJson.version}`);
|
package/src/actions.js
CHANGED
|
@@ -538,7 +538,7 @@ async function downloadModifyAction() {
|
|
|
538
538
|
});
|
|
539
539
|
}
|
|
540
540
|
|
|
541
|
-
async function updateKnowledgeAction() {
|
|
541
|
+
async function updateKnowledgeAction(silent = false) {
|
|
542
542
|
try {
|
|
543
543
|
const knowledgeDir = path.join(process.cwd(), '.openkbs', 'knowledge');
|
|
544
544
|
const metadataPath = path.join(knowledgeDir, 'metadata.json');
|
|
@@ -546,7 +546,9 @@ async function updateKnowledgeAction() {
|
|
|
546
546
|
|
|
547
547
|
// Check if .openkbs/knowledge directory exists
|
|
548
548
|
if (!fs.existsSync(knowledgeDir)) {
|
|
549
|
-
|
|
549
|
+
if (!silent) {
|
|
550
|
+
console.red('Knowledge directory not found. Please ensure you are in an OpenKBS project directory.');
|
|
551
|
+
}
|
|
550
552
|
return;
|
|
551
553
|
}
|
|
552
554
|
|
|
@@ -557,7 +559,9 @@ async function updateKnowledgeAction() {
|
|
|
557
559
|
const localMetadata = JSON.parse(fs.readFileSync(metadataPath, 'utf8'));
|
|
558
560
|
localVersion = localMetadata.version;
|
|
559
561
|
} catch (error) {
|
|
560
|
-
|
|
562
|
+
if (!silent) {
|
|
563
|
+
console.red('Error reading local metadata.json:', error.message);
|
|
564
|
+
}
|
|
561
565
|
return;
|
|
562
566
|
}
|
|
563
567
|
}
|
|
@@ -581,7 +585,9 @@ async function updateKnowledgeAction() {
|
|
|
581
585
|
const remoteMetadata = JSON.parse(remoteMetadataContent);
|
|
582
586
|
remoteVersion = remoteMetadata.version;
|
|
583
587
|
} catch (error) {
|
|
584
|
-
|
|
588
|
+
if (!silent) {
|
|
589
|
+
console.red('Error fetching remote metadata:', error.message);
|
|
590
|
+
}
|
|
585
591
|
return;
|
|
586
592
|
}
|
|
587
593
|
|
|
@@ -602,10 +608,168 @@ async function updateKnowledgeAction() {
|
|
|
602
608
|
console.green('Knowledge base updated successfully!');
|
|
603
609
|
|
|
604
610
|
} catch (error) {
|
|
605
|
-
|
|
611
|
+
if (!silent) {
|
|
612
|
+
console.red('Error updating knowledge base:', error.message);
|
|
613
|
+
}
|
|
606
614
|
}
|
|
607
615
|
}
|
|
608
616
|
|
|
617
|
+
async function updateCliAction() {
|
|
618
|
+
try {
|
|
619
|
+
const packageJson = require('../package.json');
|
|
620
|
+
const currentVersion = packageJson.version;
|
|
621
|
+
|
|
622
|
+
console.log(`Current OpenKBS CLI version: ${currentVersion}`);
|
|
623
|
+
console.log('Checking for updates...');
|
|
624
|
+
|
|
625
|
+
// Check remote version from S3
|
|
626
|
+
const https = require('https');
|
|
627
|
+
const bucket = 'openkbs-downloads';
|
|
628
|
+
const versionMetadataKey = 'cli/version.json';
|
|
629
|
+
|
|
630
|
+
let remoteVersionData = null;
|
|
631
|
+
let cliUpdateAvailable = false;
|
|
632
|
+
|
|
633
|
+
try {
|
|
634
|
+
const fileUrl = `https://${bucket}.s3.amazonaws.com/${versionMetadataKey}`;
|
|
635
|
+
const remoteVersionContent = await new Promise((resolve, reject) => {
|
|
636
|
+
https.get(fileUrl, (res) => {
|
|
637
|
+
if (res.statusCode === 404) {
|
|
638
|
+
reject(new Error('Version metadata not found on remote server'));
|
|
639
|
+
return;
|
|
640
|
+
}
|
|
641
|
+
let data = '';
|
|
642
|
+
res.on('data', (chunk) => data += chunk);
|
|
643
|
+
res.on('end', () => resolve(data));
|
|
644
|
+
}).on('error', reject);
|
|
645
|
+
});
|
|
646
|
+
|
|
647
|
+
remoteVersionData = JSON.parse(remoteVersionContent);
|
|
648
|
+
const remoteVersion = remoteVersionData.version;
|
|
649
|
+
|
|
650
|
+
// Compare versions using semantic versioning
|
|
651
|
+
if (compareVersions(currentVersion, remoteVersion) < 0) {
|
|
652
|
+
cliUpdateAvailable = true;
|
|
653
|
+
console.log(`New CLI version available: ${remoteVersion}`);
|
|
654
|
+
console.log('Downloading and installing CLI update...');
|
|
655
|
+
|
|
656
|
+
// Download and install the new binary
|
|
657
|
+
await downloadAndInstallCli();
|
|
658
|
+
|
|
659
|
+
console.green(`Successfully updated OpenKBS CLI to version ${remoteVersion}!`);
|
|
660
|
+
} else {
|
|
661
|
+
console.green('OpenKBS CLI is already up to date.');
|
|
662
|
+
}
|
|
663
|
+
} catch (error) {
|
|
664
|
+
console.red('Error fetching CLI version metadata:', error.message);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
// Also update knowledge base silently if it exists
|
|
668
|
+
await updateKnowledgeAction(true);
|
|
669
|
+
|
|
670
|
+
if (cliUpdateAvailable) {
|
|
671
|
+
console.log('Please restart your terminal or run `source ~/.bashrc` to use the updated CLI version.');
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
} catch (error) {
|
|
675
|
+
console.red('Error updating CLI:', error.message);
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
function compareVersions(version1, version2) {
|
|
680
|
+
const parts1 = version1.split('.').map(Number);
|
|
681
|
+
const parts2 = version2.split('.').map(Number);
|
|
682
|
+
|
|
683
|
+
for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
|
|
684
|
+
const part1 = parts1[i] || 0;
|
|
685
|
+
const part2 = parts2[i] || 0;
|
|
686
|
+
|
|
687
|
+
if (part1 > part2) return 1;
|
|
688
|
+
if (part1 < part2) return -1;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
return 0;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
async function downloadAndInstallCli() {
|
|
695
|
+
const platform = os.platform();
|
|
696
|
+
const arch = os.arch();
|
|
697
|
+
let url = '';
|
|
698
|
+
|
|
699
|
+
if (platform === 'linux' && arch === 'x64') {
|
|
700
|
+
url = 'https://downloads.openkbs.com/cli/linux/openkbs';
|
|
701
|
+
} else if (platform === 'darwin' && arch === 'arm64') {
|
|
702
|
+
url = 'https://downloads.openkbs.com/cli/macos/openkbs';
|
|
703
|
+
} else if (platform === 'darwin' && arch === 'x64') {
|
|
704
|
+
url = 'https://downloads.openkbs.com/cli/macos/openkbs-x64';
|
|
705
|
+
} else if (platform === 'win32' && arch === 'x64') {
|
|
706
|
+
url = 'https://downloads.openkbs.com/cli/windows/openkbs.exe';
|
|
707
|
+
} else if (platform === 'win32' && arch === 'arm64') {
|
|
708
|
+
url = 'https://downloads.openkbs.com/cli/windows/openkbs-arm64.exe';
|
|
709
|
+
} else if (platform === 'linux' && arch === 'arm64') {
|
|
710
|
+
url = 'https://downloads.openkbs.com/cli/linux/openkbs-arm64';
|
|
711
|
+
} else {
|
|
712
|
+
throw new Error(`Unsupported platform: ${platform} ${arch}`);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
const tempPath = path.join(os.tmpdir(), 'openkbs-update');
|
|
716
|
+
|
|
717
|
+
return new Promise((resolve, reject) => {
|
|
718
|
+
const file = fs.createWriteStream(tempPath);
|
|
719
|
+
|
|
720
|
+
https.get(url, (response) => {
|
|
721
|
+
if (response.statusCode !== 200) {
|
|
722
|
+
reject(new Error(`Failed to download binary: HTTP ${response.statusCode}`));
|
|
723
|
+
return;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
response.pipe(file);
|
|
727
|
+
|
|
728
|
+
file.on('finish', () => {
|
|
729
|
+
file.close(async () => {
|
|
730
|
+
try {
|
|
731
|
+
// Make executable
|
|
732
|
+
if (platform !== 'win32') {
|
|
733
|
+
fs.chmodSync(tempPath, '755');
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// Find the current binary location
|
|
737
|
+
const currentBinaryPath = process.argv[0] === 'node' ? process.argv[1] : process.argv[0];
|
|
738
|
+
let targetPath;
|
|
739
|
+
|
|
740
|
+
// If we're running through npm, find the global bin path
|
|
741
|
+
if (currentBinaryPath.includes('node_modules')) {
|
|
742
|
+
targetPath = currentBinaryPath;
|
|
743
|
+
} else {
|
|
744
|
+
// Try to find in common global locations
|
|
745
|
+
const globalPaths = [
|
|
746
|
+
'/usr/local/bin/openkbs',
|
|
747
|
+
path.join(os.homedir(), '.npm-global', 'bin', 'openkbs'),
|
|
748
|
+
path.join(os.homedir(), '.yarn', 'bin', 'openkbs')
|
|
749
|
+
];
|
|
750
|
+
|
|
751
|
+
targetPath = globalPaths.find(p => fs.existsSync(p)) || currentBinaryPath;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
// Replace the binary
|
|
755
|
+
fs.copyFileSync(tempPath, targetPath);
|
|
756
|
+
|
|
757
|
+
// Clean up temp file
|
|
758
|
+
fs.unlinkSync(tempPath);
|
|
759
|
+
|
|
760
|
+
resolve();
|
|
761
|
+
} catch (error) {
|
|
762
|
+
reject(error);
|
|
763
|
+
}
|
|
764
|
+
});
|
|
765
|
+
});
|
|
766
|
+
}).on('error', (err) => {
|
|
767
|
+
fs.unlink(tempPath, () => {});
|
|
768
|
+
reject(err);
|
|
769
|
+
});
|
|
770
|
+
});
|
|
771
|
+
}
|
|
772
|
+
|
|
609
773
|
async function downloadKnowledgeFromS3(targetDir) {
|
|
610
774
|
const https = require('https');
|
|
611
775
|
const bucket = 'openkbs-downloads';
|
|
@@ -717,5 +881,6 @@ module.exports = {
|
|
|
717
881
|
installFrontendPackageAction,
|
|
718
882
|
modifyAction,
|
|
719
883
|
downloadModifyAction,
|
|
720
|
-
updateKnowledgeAction
|
|
884
|
+
updateKnowledgeAction,
|
|
885
|
+
updateCliAction
|
|
721
886
|
};
|
package/src/index.js
CHANGED
|
@@ -13,7 +13,7 @@ const {
|
|
|
13
13
|
deleteFileAction,
|
|
14
14
|
describeAction, deployAction, createByTemplateAction, initByTemplateAction,
|
|
15
15
|
logoutAction, installFrontendPackageAction, modifyAction, downloadModifyAction,
|
|
16
|
-
updateKnowledgeAction
|
|
16
|
+
updateKnowledgeAction, updateCliAction
|
|
17
17
|
} = require('./actions');
|
|
18
18
|
|
|
19
19
|
|
|
@@ -155,11 +155,12 @@ This file will be automatically included when you run the 'openkbs modify' comma
|
|
|
155
155
|
`);
|
|
156
156
|
|
|
157
157
|
program
|
|
158
|
-
.command('update')
|
|
159
|
-
.
|
|
160
|
-
.description('Update project components from remote repository')
|
|
158
|
+
.command('update [target]')
|
|
159
|
+
.description('Update OpenKBS CLI or project components from remote repository')
|
|
161
160
|
.action((target) => {
|
|
162
|
-
if (target
|
|
161
|
+
if (!target) {
|
|
162
|
+
updateCliAction();
|
|
163
|
+
} else if (target === 'knowledge') {
|
|
163
164
|
updateKnowledgeAction();
|
|
164
165
|
} else {
|
|
165
166
|
console.error(`Unknown update target: ${target}. Currently supported: knowledge`);
|
|
@@ -168,10 +169,12 @@ program
|
|
|
168
169
|
})
|
|
169
170
|
.addHelpText('after', `
|
|
170
171
|
Examples:
|
|
171
|
-
$ openkbs update
|
|
172
|
+
$ openkbs update
|
|
173
|
+
This will check for CLI updates and install them if available.
|
|
172
174
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
+
$ openkbs update knowledge
|
|
176
|
+
This will check if your local .openkbs/knowledge directory is up to date with the remote repository
|
|
177
|
+
and update it if necessary.
|
|
175
178
|
`);
|
|
176
179
|
|
|
177
180
|
program.parse(process.argv);
|