mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
feat: Store the server version on start
This commit is contained in:
parent
62e2210023
commit
2dc20fe3bc
@ -3,7 +3,8 @@
|
||||
"import": [
|
||||
"files-scs:config/app/init/initializers/base-url.json",
|
||||
"files-scs:config/app/init/initializers/logger.json",
|
||||
"files-scs:config/app/init/initializers/server.json"
|
||||
"files-scs:config/app/init/initializers/server.json",
|
||||
"files-scs:config/app/init/initializers/version.json"
|
||||
],
|
||||
"@graph": [
|
||||
{
|
||||
@ -14,7 +15,8 @@
|
||||
{ "@id": "urn:solid-server:default:LoggerInitializer" },
|
||||
{ "@id": "urn:solid-server:default:BaseUrlVerifier" },
|
||||
{ "@id": "urn:solid-server:default:ParallelInitializer" },
|
||||
{ "@id": "urn:solid-server:default:ServerInitializer" }
|
||||
{ "@id": "urn:solid-server:default:ServerInitializer" },
|
||||
{ "@id": "urn:solid-server:default:ModuleVersionVerifier" }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
12
config/app/init/initializers/version.json
Normal file
12
config/app/init/initializers/version.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^2.0.0/components/context.jsonld",
|
||||
"@graph": [
|
||||
{
|
||||
"comment": "Logs a warning if the base URL changes.",
|
||||
"@id": "urn:solid-server:default:ModuleVersionVerifier",
|
||||
"@type": "ModuleVersionVerifier",
|
||||
"storageKey": "current-server-version",
|
||||
"storage": { "@id": "urn:solid-server:default:SetupStorage" }
|
||||
}
|
||||
]
|
||||
}
|
24
package-lock.json
generated
24
package-lock.json
generated
@ -16,6 +16,7 @@
|
||||
"@types/bcrypt": "^5.0.0",
|
||||
"@types/cors": "^2.8.12",
|
||||
"@types/end-of-stream": "^1.4.1",
|
||||
"@types/fs-extra": "^9.0.13",
|
||||
"@types/lodash.orderby": "^4.6.6",
|
||||
"@types/marked": "^4.0.2",
|
||||
"@types/mime-types": "^2.1.1",
|
||||
@ -42,6 +43,7 @@
|
||||
"end-of-stream": "^1.4.4",
|
||||
"escape-string-regexp": "^4.0.0",
|
||||
"fetch-sparql-endpoint": "^2.4.0",
|
||||
"fs-extra": "^10.0.0",
|
||||
"handlebars": "^4.7.7",
|
||||
"jose": "^4.4.0",
|
||||
"lodash.orderby": "^4.6.0",
|
||||
@ -76,7 +78,6 @@
|
||||
"@tsconfig/node12": "^1.0.9",
|
||||
"@types/cheerio": "^0.22.30",
|
||||
"@types/ejs": "^3.1.0",
|
||||
"@types/fs-extra": "^9.0.13",
|
||||
"@types/jest": "^27.4.0",
|
||||
"@types/set-cookie-parser": "^2.4.2",
|
||||
"@types/supertest": "^2.0.11",
|
||||
@ -91,7 +92,6 @@
|
||||
"eslint-plugin-jest": "^26.0.0",
|
||||
"eslint-plugin-tsdoc": "^0.2.14",
|
||||
"eslint-plugin-unused-imports": "^2.0.0",
|
||||
"fs-extra": "^10.0.0",
|
||||
"husky": "^4.3.8",
|
||||
"jest": "^27.4.7",
|
||||
"jest-rdf": "^1.7.0",
|
||||
@ -4430,7 +4430,6 @@
|
||||
"version": "9.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
|
||||
"integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
@ -8310,7 +8309,6 @@
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
|
||||
"integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
@ -8324,7 +8322,6 @@
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
@ -8907,8 +8904,7 @@
|
||||
"node_modules/graceful-fs": {
|
||||
"version": "4.2.4",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
|
||||
},
|
||||
"node_modules/graphql": {
|
||||
"version": "15.8.0",
|
||||
@ -10858,7 +10854,6 @@
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
@ -10870,7 +10865,6 @@
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
@ -18559,7 +18553,6 @@
|
||||
"version": "9.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
|
||||
"integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
@ -21542,7 +21535,6 @@
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
|
||||
"integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
@ -21552,8 +21544,7 @@
|
||||
"universalify": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -21986,8 +21977,7 @@
|
||||
"graceful-fs": {
|
||||
"version": "4.2.4",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
|
||||
},
|
||||
"graphql": {
|
||||
"version": "15.8.0",
|
||||
@ -23445,7 +23435,6 @@
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.6",
|
||||
"universalify": "^2.0.0"
|
||||
@ -23454,8 +23443,7 @@
|
||||
"universalify": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -82,6 +82,7 @@
|
||||
"@types/bcrypt": "^5.0.0",
|
||||
"@types/cors": "^2.8.12",
|
||||
"@types/end-of-stream": "^1.4.1",
|
||||
"@types/fs-extra": "^9.0.13",
|
||||
"@types/lodash.orderby": "^4.6.6",
|
||||
"@types/marked": "^4.0.2",
|
||||
"@types/mime-types": "^2.1.1",
|
||||
@ -108,6 +109,7 @@
|
||||
"end-of-stream": "^1.4.4",
|
||||
"escape-string-regexp": "^4.0.0",
|
||||
"fetch-sparql-endpoint": "^2.4.0",
|
||||
"fs-extra": "^10.0.0",
|
||||
"handlebars": "^4.7.7",
|
||||
"jose": "^4.4.0",
|
||||
"lodash.orderby": "^4.6.0",
|
||||
@ -139,7 +141,6 @@
|
||||
"@tsconfig/node12": "^1.0.9",
|
||||
"@types/cheerio": "^0.22.30",
|
||||
"@types/ejs": "^3.1.0",
|
||||
"@types/fs-extra": "^9.0.13",
|
||||
"@types/jest": "^27.4.0",
|
||||
"@types/set-cookie-parser": "^2.4.2",
|
||||
"@types/supertest": "^2.0.11",
|
||||
@ -154,7 +155,6 @@
|
||||
"eslint-plugin-jest": "^26.0.0",
|
||||
"eslint-plugin-tsdoc": "^0.2.14",
|
||||
"eslint-plugin-unused-imports": "^2.0.0",
|
||||
"fs-extra": "^10.0.0",
|
||||
"husky": "^4.3.8",
|
||||
"jest": "^27.4.7",
|
||||
"jest-rdf": "^1.7.0",
|
||||
|
@ -208,6 +208,7 @@ export * from './init/ContainerInitializer';
|
||||
export * from './init/Initializer';
|
||||
export * from './init/LoggerInitializer';
|
||||
export * from './init/ServerInitializer';
|
||||
export * from './init/ModuleVersionVerifier';
|
||||
|
||||
// Logging
|
||||
export * from './logging/LazyLogger';
|
||||
|
30
src/init/ModuleVersionVerifier.ts
Normal file
30
src/init/ModuleVersionVerifier.ts
Normal file
@ -0,0 +1,30 @@
|
||||
import { readJson } from 'fs-extra';
|
||||
import type { KeyValueStorage } from '../storage/keyvalue/KeyValueStorage';
|
||||
import { modulePathPlaceholder, resolveAssetPath } from '../util/PathUtil';
|
||||
import { Initializer } from './Initializer';
|
||||
|
||||
const PACKAGE_JSON_PATH = `${modulePathPlaceholder}package.json`;
|
||||
|
||||
/**
|
||||
* This initializer simply writes the version number of the server to the storage.
|
||||
* This will be relevant in the future when we look into migration initializers.
|
||||
*
|
||||
* It automatically parses the version number from the `package.json`.
|
||||
*/
|
||||
export class ModuleVersionVerifier extends Initializer {
|
||||
private readonly storageKey: string;
|
||||
private readonly storage: KeyValueStorage<string, string>;
|
||||
|
||||
public constructor(storageKey: string, storage: KeyValueStorage<string, string>) {
|
||||
super();
|
||||
this.storageKey = storageKey;
|
||||
this.storage = storage;
|
||||
}
|
||||
|
||||
public async handle(): Promise<void> {
|
||||
const path = resolveAssetPath(PACKAGE_JSON_PATH);
|
||||
const pkg = await readJson(path);
|
||||
|
||||
await this.storage.set(this.storageKey, pkg.version);
|
||||
}
|
||||
}
|
17
test/unit/init/ModuleVersionVerifier.test.ts
Normal file
17
test/unit/init/ModuleVersionVerifier.test.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import { ModuleVersionVerifier } from '../../../src/init/ModuleVersionVerifier';
|
||||
|
||||
describe('A ModuleVersionVerifier', (): void => {
|
||||
const storageKey = 'uniqueVersionKey';
|
||||
let storageMap: Map<string, string>;
|
||||
let initializer: ModuleVersionVerifier;
|
||||
|
||||
beforeEach(async(): Promise<void> => {
|
||||
storageMap = new Map<string, string>();
|
||||
initializer = new ModuleVersionVerifier(storageKey, storageMap as any);
|
||||
});
|
||||
|
||||
it('stores the latest version.', async(): Promise<void> => {
|
||||
await expect(initializer.handle()).resolves.toBeUndefined();
|
||||
expect(storageMap.get(storageKey)).toMatch(/^\d+\.\d+\.\d+(?:-.+)?/u);
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user