Skip to content

Commit f7a28b1

Browse files
author
arthosofteq
authored
Merge pull request #367 from RedisInsight/feature/RI-2450_update_static
#RI-2450 - add tutorials provider
2 parents 49493b9 + bf629ee commit f7a28b1

14 files changed

+207
-132
lines changed

redisinsight/api/config/default.ts

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import { join } from 'path';
22

33
const homedir = join(__dirname, '..');
44

5+
const buildInfoFileName = 'build.json';
6+
const dataZipFileName = 'data.zip';
7+
8+
59
const staticDir = process.env.BUILD_TYPE === 'ELECTRON' && process['resourcesPath']
610
? join(process['resourcesPath'], 'static')
711
: join(__dirname, '..', 'static');
@@ -21,8 +25,10 @@ export default {
2125
pluginsAssets: join(staticDir, 'resources', 'plugins'),
2226
commands: join(homedir, 'commands'),
2327
defaultCommandsDir: join(defaultsDir, 'commands'),
24-
enablementArea: process.env.GUIDES_DEV_PATH || join(homedir, 'enablement-area'),
25-
defaultEnablementArea: join(defaultsDir, 'enablement-area'),
28+
guides: process.env.GUIDES_DEV_PATH || join(homedir, 'guides'),
29+
defaultGuides: join(defaultsDir, 'guides'),
30+
tutorials: process.env.TUTORIALS_DEV_PATH || join(homedir, 'tutorials'),
31+
defaultTutorials: join(defaultsDir, 'tutorials'),
2632
content: process.env.CONTENT_DEV_PATH || join(homedir, 'content'),
2733
defaultContent: join(defaultsDir, 'content'),
2834
caCertificates: join(homedir, 'ca_certificates'),
@@ -35,7 +41,8 @@ export default {
3541
globalPrefix: 'api',
3642
customPluginsUri: '/plugins',
3743
staticUri: '/static',
38-
enablementAreaUri: '/static/workbench',
44+
guidesUri: '/static/guides',
45+
tutorialsUri: '/static/tutorials',
3946
contentUri: '/static/content',
4047
defaultPluginsUri: '/static/plugins',
4148
pluginsAssetsUri: '/static/resources/plugins',
@@ -92,18 +99,25 @@ export default {
9299
plugins: {
93100
stateMaxSize: parseInt(process.env.PLUGIN_STATE_MAX_SIZE, 10) || 1024 * 1024,
94101
},
95-
enablementArea: {
96-
updateUrl: process.env.ENABLEMENT_AREA_UPDATE_URL
102+
guides: {
103+
updateUrl: process.env.GUIDES_UPDATE_URL
97104
|| 'https://github.com/RedisInsight/Guides/releases/download/latest',
98-
zip: process.env.ENABLEMENT_AREA_ZIP || 'data.zip',
99-
buildInfo: process.env.ENABLEMENT_AREA_CHECKSUM || 'build.json',
105+
zip: process.env.GUIDES_ZIP || dataZipFileName,
106+
buildInfo: process.env.GUIDES_CHECKSUM || buildInfoFileName,
100107
devMode: !!process.env.GUIDES_DEV_PATH,
101108
},
109+
tutorials: {
110+
updateUrl: process.env.TUTORIALS_UPDATE_URL
111+
|| 'https://github.com/RedisInsight/Tutorials/releases/download/latest',
112+
zip: process.env.TUTORIALS_ZIP || dataZipFileName,
113+
buildInfo: process.env.TUTORIALS_CHECKSUM || buildInfoFileName,
114+
devMode: !!process.env.TUTORIALS_DEV_PATH,
115+
},
102116
content: {
103117
updateUrl: process.env.CONTENT_UPDATE_URL
104118
|| 'https://github.com/RedisInsight/Statics/releases/download/latest',
105-
zip: process.env.CONTENT_ZIP || 'data.zip',
106-
buildInfo: process.env.CONTENT_CHECKSUM || 'build.json',
119+
zip: process.env.CONTENT_ZIP || dataZipFileName,
120+
buildInfo: process.env.CONTENT_CHECKSUM || buildInfoFileName,
107121
devMode: !!process.env.CONTENT_DEV_PATH,
108122
},
109123
workbench: {

redisinsight/api/config/production.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ export default {
1010
logs: join(homedir, 'logs'),
1111
customPlugins: join(homedir, 'plugins'),
1212
commands: join(homedir, 'commands'),
13-
enablementArea: process.env.GUIDES_DEV_PATH || join(homedir, 'enablement-area'),
13+
guides: process.env.GUIDES_DEV_PATH || join(homedir, 'guides'),
14+
tutorials: process.env.TUTORIALS_DEV_PATH || join(homedir, 'tutorials'),
1415
content: process.env.CONTENT_DEV_PATH || join(homedir, 'content'),
1516
caCertificates: join(homedir, 'ca_certificates'),
1617
clientCertificates: join(homedir, 'client_certificates'),

redisinsight/api/config/staging.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ export default {
1010
logs: join(homedir, 'logs'),
1111
customPlugins: join(homedir, 'plugins'),
1212
commands: join(homedir, 'commands'),
13-
enablementArea: process.env.GUIDES_DEV_PATH || join(homedir, 'enablement-area'),
13+
guides: process.env.GUIDES_DEV_PATH || join(homedir, 'guides'),
14+
tutorials: process.env.TUTORIALS_DEV_PATH || join(homedir, 'tutorials'),
1415
content: process.env.CONTENT_DEV_PATH || join(homedir, 'content'),
1516
caCertificates: join(homedir, 'ca_certificates'),
1617
clientCertificates: join(homedir, 'client_certificates'),

redisinsight/api/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
},
1111
"scripts": {
1212
"build:defaults:commands": "ts-node ./scripts/default-commands.ts",
13-
"build:defaults:enablement-area": "ts-node ./scripts/default-enablement-area.ts",
13+
"build:defaults:guides": "ts-node ./scripts/default-guides.ts",
14+
"build:defaults:tutorials": "ts-node ./scripts/default-tutorials.ts",
1415
"build:defaults:content": "ts-node ./scripts/default-content.ts",
15-
"build:defaults": "yarn build:defaults:enablement-area && yarn build:defaults:commands yarn build:defaults:content",
16+
"build:defaults": "yarn build:defaults:guides && yarn build:defaults:commands && yarn build:defaults:content && build:defaults:tutorials",
1617
"prebuild": "rimraf dist",
1718
"build": "nest build",
1819
"build:prod": "rimraf dist && nest build -p ./tsconfig.build.prod.json && cross-env NODE_ENV=production",
Lines changed: 19 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,33 @@
1-
import axios from 'axios';
2-
import * as fs from 'fs-extra';
31
import * as path from 'path';
4-
import { join } from 'path';
2+
import { getFile, updateFolderFromArchive, updateFile } from '../src/utils/file-helper';
53
import { get } from '../src/utils/config';
6-
import * as AdmZip from 'adm-zip';
74

85
const PATH_CONFIG = get('dir_path');
96
const CONTENT_CONFIG = get('content');
107

11-
async function init() {
12-
try {
13-
await fs.remove(PATH_CONFIG.defaultContent);
8+
const archiveUrl = new URL(path.join(
9+
CONTENT_CONFIG.updateUrl,
10+
CONTENT_CONFIG.zip,
11+
)).toString();
1412

15-
await fs.ensureDir(PATH_CONFIG.defaultContent);
13+
const buildInfoUrl = new URL(path.join(
14+
CONTENT_CONFIG.updateUrl,
15+
CONTENT_CONFIG.buildInfo,
16+
)).toString();
1617

17-
const { data } = await axios.get(
18-
new URL(path.join(
19-
CONTENT_CONFIG.updateUrl,
20-
CONTENT_CONFIG.zip,
21-
)).toString(),
22-
{
23-
responseType: 'arraybuffer',
24-
},
25-
);
18+
async function init() {
19+
try {
20+
// get archive
21+
const data = await getFile(archiveUrl);
2622

2723
// extract archive to default folder
28-
const zip = new AdmZip(data);
29-
zip.extractAllTo(PATH_CONFIG.defaultContent, true);
30-
31-
const { data: buildInfo } = await axios.get(
32-
new URL(path.join(
33-
CONTENT_CONFIG.updateUrl,
34-
CONTENT_CONFIG.buildInfo,
35-
)).toString(),
36-
{
37-
responseType: 'arraybuffer',
38-
},
39-
);
24+
await updateFolderFromArchive(PATH_CONFIG.defaultContent, data);
25+
26+
// get build info
27+
const buildInfo = await getFile(buildInfoUrl);
4028

4129
// save build info to default folder
42-
await fs.writeFile(
43-
join(PATH_CONFIG.defaultContent, CONTENT_CONFIG.buildInfo),
44-
buildInfo,
45-
);
30+
await updateFile(PATH_CONFIG.defaultContent, CONTENT_CONFIG.buildInfo, buildInfo);
4631

4732
process.exit(0);
4833
} catch (e) {
@@ -52,3 +37,4 @@ async function init() {
5237
}
5338

5439
init();
40+

redisinsight/api/scripts/default-enablement-area.ts

Lines changed: 0 additions & 56 deletions
This file was deleted.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import * as path from 'path';
2+
import { getFile, updateFolderFromArchive, updateFile } from '../src/utils/file-helper';
3+
import { get } from '../src/utils/config';
4+
5+
const PATH_CONFIG = get('dir_path');
6+
const GUIDES_CONFIG = get('guides');
7+
8+
const archiveUrl = new URL(path.join(
9+
GUIDES_CONFIG.updateUrl,
10+
GUIDES_CONFIG.zip,
11+
)).toString();
12+
13+
const buildInfoUrl = new URL(path.join(
14+
GUIDES_CONFIG.updateUrl,
15+
GUIDES_CONFIG.buildInfo,
16+
)).toString();
17+
18+
async function init() {
19+
try {
20+
// // get archive
21+
const data = await getFile(archiveUrl);
22+
23+
// extract archive to default folder
24+
await updateFolderFromArchive(PATH_CONFIG.defaultGuides, data);
25+
26+
// // get build info
27+
const buildInfo = await getFile(buildInfoUrl);
28+
29+
// save build info to default folder
30+
await updateFile(PATH_CONFIG.defaultGuides, GUIDES_CONFIG.buildInfo, buildInfo);
31+
32+
process.exit(0);
33+
} catch (e) {
34+
console.error('Something went wrong trying to get default guides archive', e);
35+
process.exit(1);
36+
}
37+
}
38+
39+
init();
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import * as path from 'path';
2+
import { getFile, updateFolderFromArchive, updateFile } from '../src/utils/file-helper';
3+
import { get } from '../src/utils/config';
4+
5+
const PATH_CONFIG = get('dir_path');
6+
const TUTORIALS_CONFIG = get('tutorials');
7+
8+
const archiveUrl = new URL(path.join(
9+
TUTORIALS_CONFIG.updateUrl,
10+
TUTORIALS_CONFIG.zip,
11+
)).toString();
12+
13+
const buildInfoUrl = new URL(path.join(
14+
TUTORIALS_CONFIG.updateUrl,
15+
TUTORIALS_CONFIG.buildInfo,
16+
)).toString();
17+
18+
async function init() {
19+
try {
20+
// get archive
21+
const data = await getFile(archiveUrl);
22+
23+
// extract archive to default folder
24+
await updateFolderFromArchive(PATH_CONFIG.defaultTutorials, data);
25+
26+
// get build info
27+
const buildInfo = await getFile(buildInfoUrl);
28+
29+
// save build info to default folder
30+
await updateFile(PATH_CONFIG.defaultTutorials, TUTORIALS_CONFIG.buildInfo, buildInfo);
31+
32+
process.exit(0);
33+
} catch (e) {
34+
console.error('Something went wrong trying to get default tutorials archive', e);
35+
process.exit(1);
36+
}
37+
}
38+
39+
init();

redisinsight/api/src/modules/statics-management/providers/auto-updated-statics.provider.spec.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import config from 'src/utils/config';
44
import { AutoUpdatedStaticsProvider } from './auto-updated-statics.provider';
55

66
const PATH_CONFIG = config.get('dir_path');
7-
const ENABLEMENT_AREA_CONFIG = config.get('enablementArea');
7+
const GUIDES = config.get('guides');
88

99
jest.mock('axios');
1010
const mockedAxios = axios as jest.Mocked<typeof axios>;
@@ -26,13 +26,13 @@ describe('AutoUpdatedStaticsProvider', () => {
2626
jest.mock('adm-zip', () => jest.fn().mockImplementation(() => mockedAdmZip));
2727

2828
service = new AutoUpdatedStaticsProvider({
29-
name: 'EnablementAreaProvider',
30-
destinationPath: PATH_CONFIG.enablementArea,
31-
defaultSourcePath: PATH_CONFIG.defaultEnablementArea,
32-
updateUrl: ENABLEMENT_AREA_CONFIG.updateUrl,
33-
buildInfo: ENABLEMENT_AREA_CONFIG.buildInfo,
34-
zip: ENABLEMENT_AREA_CONFIG.zip,
35-
devMode: ENABLEMENT_AREA_CONFIG.devMode,
29+
name: 'GuidesProvider',
30+
destinationPath: PATH_CONFIG.guides,
31+
defaultSourcePath: PATH_CONFIG.defaultGuides,
32+
updateUrl: GUIDES.updateUrl,
33+
buildInfo: GUIDES.buildInfo,
34+
zip: GUIDES.zip,
35+
devMode: GUIDES.devMode,
3636
});
3737
});
3838

redisinsight/api/src/modules/statics-management/providers/auto-updated-statics.provider.ts

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { Injectable, Logger, OnModuleInit } from '@nestjs/common';
2-
import axios from 'axios';
32
import * as fs from 'fs-extra';
43
import * as AdmZip from 'adm-zip';
54
import { URL } from 'url';
65
import { join } from 'path';
76
import { get } from 'lodash';
7+
import { getFile } from 'src/utils';
88

99
import { IStaticsProviderOptions } from './auto-updated-statics.interface';
1010

@@ -83,14 +83,7 @@ export class AutoUpdatedStaticsProvider implements OnModuleInit {
8383
*/
8484
async getLatestArchive() {
8585
try {
86-
const { data } = await axios.get(
87-
new URL(join(this.options.updateUrl, this.options.zip)).toString(),
88-
{
89-
responseType: 'arraybuffer',
90-
},
91-
);
92-
93-
return data;
86+
return await getFile(new URL(join(this.options.updateUrl, this.options.zip)).toString());
9487
} catch (e) {
9588
this.logger.error('Unable to get remote archive', e);
9689
return null;
@@ -114,11 +107,7 @@ export class AutoUpdatedStaticsProvider implements OnModuleInit {
114107
*/
115108
async getRemoteBuildInfo(): Promise<Record<string, any>> {
116109
try {
117-
const { data } = await axios.get(
118-
new URL(join(this.options.updateUrl, this.options.buildInfo)).toString(),
119-
);
120-
121-
return data;
110+
return await getFile(new URL(join(this.options.updateUrl, this.options.buildInfo)).toString());
122111
} catch (e) {
123112
this.logger.error('Unable to get remote build info', e);
124113
return {};

0 commit comments

Comments
 (0)