[Env] Add buildFlavor to package info (#161930)

## Summary

Add a `buildFavor` property to `Env` (accessible from the plugin's
initializer context), Mimicking the idea of ES's `version.buildFlavor`
field.

Note: this is not supposed to be a replacement for feature flags, but
can be useful when wanting to toggle features based on actual
capabilities of our serverless product. Also, we already expose this
value through the configuration via the `serverless` context value, so
it now adds another way to access the information.

---------

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Pierre Gayvallet 2023-07-20 12:33:28 +02:00 committed by GitHub
parent e79f244fa9
commit ab486aff05
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 79 additions and 4 deletions

View file

@ -15,13 +15,14 @@ import { registerBundleRoutes } from './register_bundle_routes';
import { FileHashCache } from './file_hash_cache';
const createPackageInfo = (parts: Partial<PackageInfo> = {}): PackageInfo => ({
...parts,
buildNum: 42,
buildSha: 'sha',
dist: true,
branch: 'master',
version: '8.0.0',
buildDate: new Date('2023-05-15T23:12:09.000Z'),
buildFlavor: 'traditional',
...parts,
});
const createUiPlugins = (...ids: string[]): UiPlugins => ({

View file

@ -26,6 +26,7 @@ function createCoreContext({ production = false }: { production?: boolean } = {}
buildSha: 'buildSha',
dist: false,
buildDate: new Date('2023-05-15T23:12:09.000Z'),
buildFlavor: 'traditional',
},
},
};

View file

@ -25,6 +25,7 @@ export const createPluginInitializerContextMock = (config: unknown = {}) => {
buildSha: 'buildSha',
dist: false,
buildDate: new Date('2023-05-15T23:12:09.000Z'),
buildFlavor: 'traditional',
},
},
logger: loggerMock.create(),

View file

@ -43,6 +43,7 @@ const createPluginInitializerContextMock = (config: unknown = {}) => {
buildSha: 'buildSha',
dist: false,
buildDate: new Date('2023-05-15T23:12:09.000Z'),
buildFlavor: 'serverless',
},
},
logger: loggerMock.create(),

View file

@ -8,20 +8,21 @@
import { mockReadFile } from './plugin_manifest_parser.test.mocks';
import { PluginDiscoveryErrorType } from './plugin_discovery_error';
import { resolve } from 'path';
import type { PackageInfo } from '@kbn/config';
import { PluginDiscoveryErrorType } from './plugin_discovery_error';
import { parseManifest } from './plugin_manifest_parser';
const pluginPath = resolve('path', 'existent-dir');
const pluginManifestPath = resolve(pluginPath, 'kibana.json');
const packageInfo = {
const packageInfo: PackageInfo = {
branch: 'master',
buildNum: 1,
buildSha: '',
version: '7.0.0-alpha1',
dist: false,
buildDate: new Date('2023-05-15T23:12:09.000Z'),
buildFlavor: 'traditional',
};
afterEach(() => {

View file

@ -20,6 +20,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -82,6 +83,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -148,6 +150,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -210,6 +213,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -272,6 +276,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -338,6 +343,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -400,6 +406,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -462,6 +469,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -528,6 +536,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -598,6 +607,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -660,6 +670,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -726,6 +737,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -796,6 +808,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,
@ -862,6 +875,7 @@ Object {
"packageInfo": Object {
"branch": Any<String>,
"buildDate": "2023-05-15T23:12:09.000Z",
"buildFlavor": Any<String>,
"buildNum": Any<Number>,
"buildSha": Any<String>,
"dist": Any<Boolean>,

View file

@ -28,6 +28,7 @@ const createPackageInfo = (parts: Partial<PackageInfo> = {}): PackageInfo => ({
buildDate: new Date('2023-05-15T23:12:09.000Z'),
dist: false,
version: '8.0.0',
buildFlavor: 'traditional',
...parts,
});

View file

@ -45,6 +45,7 @@ const INJECTED_METADATA = {
dist: expect.any(Boolean),
version: expect.any(String),
buildDate: new Date(BUILD_DATE).toISOString(),
buildFlavor: expect.any(String),
},
},
};

View file

@ -29,6 +29,7 @@ Env {
"packageInfo": Object {
"branch": "feature-v1",
"buildDate": 2023-05-15T23:12:09.000Z,
"buildFlavor": "traditional",
"buildNum": 9007199254740991,
"buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"dist": false,
@ -71,6 +72,7 @@ Env {
"packageInfo": Object {
"branch": "feature-v1",
"buildDate": 2023-05-15T23:12:09.000Z,
"buildFlavor": "traditional",
"buildNum": 9007199254740991,
"buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"dist": false,
@ -112,6 +114,7 @@ Env {
"packageInfo": Object {
"branch": "some-branch",
"buildDate": 2023-05-15T23:12:09.000Z,
"buildFlavor": "traditional",
"buildNum": 9007199254740991,
"buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"dist": false,
@ -153,6 +156,7 @@ Env {
"packageInfo": Object {
"branch": "feature-v1",
"buildDate": 2023-05-15T23:12:09.000Z,
"buildFlavor": "traditional",
"buildNum": 100,
"buildSha": "feature-v1-build-sha",
"dist": true,
@ -194,6 +198,7 @@ Env {
"packageInfo": Object {
"branch": "feature-v1",
"buildDate": 2023-05-15T23:12:09.000Z,
"buildFlavor": "traditional",
"buildNum": 9007199254740991,
"buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"dist": false,
@ -235,6 +240,7 @@ Env {
"packageInfo": Object {
"branch": "feature-v1",
"buildDate": 2023-05-15T23:12:09.000Z,
"buildFlavor": "traditional",
"buildNum": 100,
"buildSha": "feature-v1-build-sha",
"dist": true,

View file

@ -208,3 +208,43 @@ test('pluginSearchPaths only includes kibana-extra, regardless of plugin filters
expect(env4.pluginSearchPaths).toEqual(['/some/home/kibana-extra', '/some/home/dir/plugins']);
});
describe('packageInfo.buildFlavor', () => {
it('is set to `serverless` when the `serverless` cli flag is `true`', () => {
mockPackage.raw = {
branch: 'some-branch',
version: 'some-version',
};
const env = Env.createDefault(
REPO_ROOT,
getEnvOptions({
configs: ['/test/cwd/config/kibana.yml'],
cliArgs: {
serverless: true,
},
})
);
expect(env.packageInfo.buildFlavor).toEqual('serverless');
});
it('is set to `traditional` when the `serverless` cli flag is `false`', () => {
mockPackage.raw = {
branch: 'some-branch',
version: 'some-version',
};
const env = Env.createDefault(
REPO_ROOT,
getEnvOptions({
configs: ['/test/cwd/config/kibana.yml'],
cliArgs: {
serverless: false,
},
})
);
expect(env.packageInfo.buildFlavor).toEqual('traditional');
});
});

View file

@ -124,6 +124,7 @@ export class Env {
version: pkg.version,
dist: isKibanaDistributable,
buildDate: isKibanaDistributable ? new Date(pkg.build.date) : new Date(),
buildFlavor: this.cliArgs.serverless ? 'serverless' : 'traditional',
});
}
}

View file

@ -15,6 +15,7 @@ export interface PackageInfo {
buildNum: number;
buildSha: string;
buildDate: Date;
buildFlavor: BuildFlavor;
dist: boolean;
}
@ -26,3 +27,5 @@ export interface EnvironmentMode {
dev: boolean;
prod: boolean;
}
export type BuildFlavor = 'serverless' | 'traditional';

View file

@ -86,6 +86,7 @@ describe('GET /api/status', () => {
dist: true,
version: '9.9.9-SNAPSHOT',
buildDate: new Date('2023-05-15T23:12:09.000Z'),
buildFlavor: 'traditional',
},
serverName: 'xkibana',
uuid: 'xxxx-xxxxx',

View file

@ -100,6 +100,7 @@ function pluginInitializerContextMock<T>(config: T = {} as T) {
buildSha: 'buildSha',
dist: false,
buildDate: new Date('2023-05-15T23:12:09.000Z'),
buildFlavor: 'traditional',
},
instanceUuid: 'instance-uuid',
configs: ['/some/path/to/config/kibana.yml'],

View file

@ -36,6 +36,7 @@ describe('PdfMaker', () => {
dist: false,
version: '1000.0.0',
buildDate: new Date('2023-05-15T23:12:09.000Z'),
buildFlavor: 'traditional',
};
pdf = new PdfMaker(layout, undefined, packageInfo, logger);
});

View file

@ -58,6 +58,7 @@ describe('Screenshot Observable Pipeline', () => {
dist: false,
version: '5000.0.0',
buildDate: new Date('2023-05-15T23:12:09.000Z'),
buildFlavor: 'traditional',
};
options = {
browserTimezone: 'UTC',