From 0c3ca366a15e5141fee854ba39e30e626cf24306 Mon Sep 17 00:00:00 2001 From: Brad White Date: Thu, 25 May 2023 10:21:47 -0700 Subject: [PATCH] Add build_date to kbn:api/status (#157905) ## Summary Adds build date to `GET kbn:api/status` similar to ES. Example output running locally: ```json { "name": "ES-DMVD5M3", "uuid": "545ba70c-063e-449b-af21-6c8e7b30f77e", "version": { "number": "8.9.0", "build_hash": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "build_number": 9007199254740991, "build_snapshot": false, "build_date": "2023-05-15T23:12:09.000Z" }, ...rest } ``` ### Checklist - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ## Release Note The status endpoint now returns the build date alongside other build information. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../core/configuration-service.asciidoc | 4 ++++ package.json | 3 ++- .../src/status/components/version_header.test.tsx | 1 + .../src/status/lib/load_status.test.ts | 1 + .../bundle_routes/register_bundle_routes.test.ts | 1 + .../src/core_context.mock.ts | 1 + .../src/core_context.mock.ts | 5 ++--- .../base/core-base-server-mocks/tsconfig.json | 1 - .../src/test_helpers/mocks.ts | 1 + .../src/plugins_service.mock.ts | 1 + .../src/discovery/plugin_manifest_parser.test.ts | 1 + .../__snapshots__/rendering_service.test.ts.snap | 14 ++++++++++++++ .../src/bootstrap/bootstrap_renderer.test.ts | 1 + .../src/rendering_service.test.ts | 11 +++++++++++ .../core-status-common-internal/src/status.ts | 1 + .../src/routes/status.ts | 3 ++- packages/kbn-config-mocks/src/env.mock.ts | 1 + .../kbn-config/src/__snapshots__/env.test.ts.snap | 6 ++++++ packages/kbn-config/src/config_service.test.ts | 2 ++ packages/kbn-config/src/env.test.ts | 15 +++++++++++++++ packages/kbn-config/src/env.ts | 2 ++ packages/kbn-config/src/types.ts | 1 + packages/kbn-repo-info/types.ts | 1 + .../status/routes/status.test.ts | 2 ++ src/core/server/mocks.ts | 1 + src/dev/build/lib/build.test.ts | 1 + src/dev/build/lib/config.test.ts | 8 ++++++++ src/dev/build/lib/config.ts | 7 +++++++ src/dev/build/lib/version_info.ts | 1 + .../build/tasks/fetch_agent_versions_list.test.ts | 1 + .../package_json/create_package_json_tasks.ts | 1 + .../pdf_maker/integration_tests/pdfmaker.test.ts | 1 + .../server/screenshots/index.test.ts | 1 + 33 files changed, 96 insertions(+), 6 deletions(-) diff --git a/docs/developer/architecture/core/configuration-service.asciidoc b/docs/developer/architecture/core/configuration-service.asciidoc index 1cf9a17a43878..fdc4ad9b0a922 100644 --- a/docs/developer/architecture/core/configuration-service.asciidoc +++ b/docs/developer/architecture/core/configuration-service.asciidoc @@ -187,6 +187,10 @@ Some features require special configuration when running in different modes (dev |`12345` |The build SHA (typically refers to the last commit's SHA) +|`buildDate` +|`2023-05-15T23:12:09+0000` +|The ISO 8601 date of the build + |=== To use any of the references listed above in a config validation schema, they can be accessed via `schema.contextRef('{CONTEXT_REFERENCE}')`: diff --git a/package.json b/package.json index f5b1b47903549..3235dfb23f9d7 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "tsdocMetadata": "./build/tsdoc-metadata.json", "build": { "number": 8467, - "sha": "6cb7fec4e154faa0a4a3fee4b33dfef91b9870d9" + "sha": "6cb7fec4e154faa0a4a3fee4b33dfef91b9870d9", + "date": "2023-05-15T23:12:09+0000" }, "homepage": "https://www.elastic.co/products/kibana", "bugs": { diff --git a/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx b/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx index bfe2d6a2c40de..8172b705a6ffe 100644 --- a/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx +++ b/packages/core/apps/core-apps-browser-internal/src/status/components/version_header.test.tsx @@ -16,6 +16,7 @@ const buildServerVersion = (parts: Partial = {}): ServerVersion = build_hash: 'build_hash', build_number: 9000, build_snapshot: false, + build_date: '2023-05-15T23:12:09.000Z', ...parts, }); diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts b/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts index 6fe5feceb5cbe..45b466225c375 100644 --- a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts +++ b/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts @@ -20,6 +20,7 @@ const mockedResponse: StatusResponse = { build_hash: '9007199254740991', build_number: 12, build_snapshot: false, + build_date: '2023-05-15T23:12:09.000Z', }, status: { overall: { diff --git a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts b/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts index 0e1770eada9b1..7f444d3221a38 100644 --- a/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts +++ b/packages/core/apps/core-apps-server-internal/src/bundle_routes/register_bundle_routes.test.ts @@ -21,6 +21,7 @@ const createPackageInfo = (parts: Partial = {}): PackageInfo => ({ dist: true, branch: 'master', version: '8.0.0', + buildDate: new Date('2023-05-15T23:12:09.000Z'), }); const createUiPlugins = (...ids: string[]): UiPlugins => ({ diff --git a/packages/core/base/core-base-browser-mocks/src/core_context.mock.ts b/packages/core/base/core-base-browser-mocks/src/core_context.mock.ts index e871621b909ef..4de9ca33e0eef 100644 --- a/packages/core/base/core-base-browser-mocks/src/core_context.mock.ts +++ b/packages/core/base/core-base-browser-mocks/src/core_context.mock.ts @@ -25,6 +25,7 @@ function createCoreContext({ production = false }: { production?: boolean } = {} buildNum: 100, buildSha: 'buildSha', dist: false, + buildDate: new Date('2023-05-15T23:12:09.000Z'), }, }, }; diff --git a/packages/core/base/core-base-server-mocks/src/core_context.mock.ts b/packages/core/base/core-base-server-mocks/src/core_context.mock.ts index db7da70b80fd7..3dd7e6f7d97b4 100644 --- a/packages/core/base/core-base-server-mocks/src/core_context.mock.ts +++ b/packages/core/base/core-base-server-mocks/src/core_context.mock.ts @@ -6,16 +6,15 @@ * Side Public License, v 1. */ -import { REPO_ROOT } from '@kbn/repo-info'; import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; import { Env, IConfigService } from '@kbn/config'; import type { LoggerFactory } from '@kbn/logging'; import { loggerMock } from '@kbn/logging-mocks'; -import { configServiceMock, getEnvOptions } from '@kbn/config-mocks'; +import { configServiceMock, createTestEnv } from '@kbn/config-mocks'; import type { CoreContext } from '@kbn/core-base-server-internal'; function create({ - env = Env.createDefault(REPO_ROOT, getEnvOptions()), + env = createTestEnv(), logger = loggerMock.create(), configService = configServiceMock.create(), }: { diff --git a/packages/core/base/core-base-server-mocks/tsconfig.json b/packages/core/base/core-base-server-mocks/tsconfig.json index 55ec929a987a5..fa02a561576e7 100644 --- a/packages/core/base/core-base-server-mocks/tsconfig.json +++ b/packages/core/base/core-base-server-mocks/tsconfig.json @@ -17,7 +17,6 @@ "@kbn/logging", "@kbn/logging-mocks", "@kbn/core-base-server-internal", - "@kbn/repo-info", ], "exclude": [ "target/**/*", diff --git a/packages/core/plugins/core-plugins-browser-internal/src/test_helpers/mocks.ts b/packages/core/plugins/core-plugins-browser-internal/src/test_helpers/mocks.ts index 7c013b17ec4cf..aea293345175f 100644 --- a/packages/core/plugins/core-plugins-browser-internal/src/test_helpers/mocks.ts +++ b/packages/core/plugins/core-plugins-browser-internal/src/test_helpers/mocks.ts @@ -24,6 +24,7 @@ export const createPluginInitializerContextMock = (config: unknown = {}) => { buildNum: 100, buildSha: 'buildSha', dist: false, + buildDate: new Date('2023-05-15T23:12:09.000Z'), }, }, logger: loggerMock.create(), diff --git a/packages/core/plugins/core-plugins-browser-mocks/src/plugins_service.mock.ts b/packages/core/plugins/core-plugins-browser-mocks/src/plugins_service.mock.ts index 75ec4e4570688..45154fa0165d5 100644 --- a/packages/core/plugins/core-plugins-browser-mocks/src/plugins_service.mock.ts +++ b/packages/core/plugins/core-plugins-browser-mocks/src/plugins_service.mock.ts @@ -42,6 +42,7 @@ const createPluginInitializerContextMock = (config: unknown = {}) => { buildNum: 100, buildSha: 'buildSha', dist: false, + buildDate: new Date('2023-05-15T23:12:09.000Z'), }, }, logger: loggerMock.create(), diff --git a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_parser.test.ts b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_parser.test.ts index 9d1cef302d1bd..9f2cd298adfbd 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_parser.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_parser.test.ts @@ -21,6 +21,7 @@ const packageInfo = { buildSha: '', version: '7.0.0-alpha1', dist: false, + buildDate: new Date('2023-05-15T23:12:09.000Z'), }; afterEach(() => { diff --git a/packages/core/rendering/core-rendering-server-internal/src/__snapshots__/rendering_service.test.ts.snap b/packages/core/rendering/core-rendering-server-internal/src/__snapshots__/rendering_service.test.ts.snap index cf1d06fef4e9a..84f58863363a7 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/__snapshots__/rendering_service.test.ts.snap +++ b/packages/core/rendering/core-rendering-server-internal/src/__snapshots__/rendering_service.test.ts.snap @@ -19,6 +19,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -80,6 +81,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -145,6 +147,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -206,6 +209,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -267,6 +271,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -332,6 +337,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -393,6 +399,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -454,6 +461,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -519,6 +527,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -588,6 +597,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -649,6 +659,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -714,6 +725,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -783,6 +795,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, @@ -848,6 +861,7 @@ Object { }, "packageInfo": Object { "branch": Any, + "buildDate": "2023-05-15T23:12:09.000Z", "buildNum": Any, "buildSha": Any, "dist": Any, diff --git a/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.test.ts b/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.test.ts index 354d3fda659fe..d7f4bb9007910 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.test.ts +++ b/packages/core/rendering/core-rendering-server-internal/src/bootstrap/bootstrap_renderer.test.ts @@ -25,6 +25,7 @@ const createPackageInfo = (parts: Partial = {}): PackageInfo => ({ branch: 'master', buildNum: 42, buildSha: 'buildSha', + buildDate: new Date('2023-05-15T23:12:09.000Z'), dist: false, version: '8.0.0', ...parts, diff --git a/packages/core/rendering/core-rendering-server-internal/src/rendering_service.test.ts b/packages/core/rendering/core-rendering-server-internal/src/rendering_service.test.ts index 596b39c44cad5..81a1cea933f19 100644 --- a/packages/core/rendering/core-rendering-server-internal/src/rendering_service.test.ts +++ b/packages/core/rendering/core-rendering-server-internal/src/rendering_service.test.ts @@ -27,6 +27,7 @@ import { InternalRenderingServicePreboot, InternalRenderingServiceSetup } from ' import { RenderingService } from './rendering_service'; import { AuthStatus } from '@kbn/core-http-server'; +const BUILD_DATE = '2023-05-15T23:12:09+0000'; const INJECTED_METADATA = { version: expect.any(String), branch: expect.any(String), @@ -43,6 +44,7 @@ const INJECTED_METADATA = { buildSha: expect.any(String), dist: expect.any(Boolean), version: expect.any(String), + buildDate: new Date(BUILD_DATE).toISOString(), }, }, }; @@ -387,6 +389,15 @@ function renderDarkModeTestCases( describe('RenderingService', () => { let service: RenderingService; + beforeAll(() => { + jest.useFakeTimers(); + jest.setSystemTime(new Date(BUILD_DATE)); + }); + + afterAll(() => { + jest.useRealTimers(); + }); + beforeEach(() => { jest.clearAllMocks(); service = new RenderingService(mockRenderingServiceParams); diff --git a/packages/core/status/core-status-common-internal/src/status.ts b/packages/core/status/core-status-common-internal/src/status.ts index 7c94080671fd1..806a3ac56b407 100644 --- a/packages/core/status/core-status-common-internal/src/status.ts +++ b/packages/core/status/core-status-common-internal/src/status.ts @@ -34,6 +34,7 @@ export interface ServerVersion { build_hash: string; build_number: number; build_snapshot: boolean; + build_date: string; } export interface StatusInfo { diff --git a/packages/core/status/core-status-server-internal/src/routes/status.ts b/packages/core/status/core-status-server-internal/src/routes/status.ts index 199f55159a7c6..7c0a49a617a2a 100644 --- a/packages/core/status/core-status-server-internal/src/routes/status.ts +++ b/packages/core/status/core-status-server-internal/src/routes/status.ts @@ -88,7 +88,7 @@ export const registerStatusRoute = ({ }, }, async (context, req, res) => { - const { version, buildSha, buildNum } = config.packageInfo; + const { version, buildSha, buildNum, buildDate } = config.packageInfo; const versionWithoutSnapshot = version.replace(SNAPSHOT_POSTFIX, ''); const [overall, coreOverall, core, plugins] = await firstValueFrom(combinedStatus$); @@ -121,6 +121,7 @@ export const registerStatusRoute = ({ build_hash: buildSha, build_number: buildNum, build_snapshot: SNAPSHOT_POSTFIX.test(version), + build_date: buildDate.toISOString(), }, status: statusInfo, metrics: { diff --git a/packages/kbn-config-mocks/src/env.mock.ts b/packages/kbn-config-mocks/src/env.mock.ts index dfc01c171a9ef..2adcea6516c3e 100644 --- a/packages/kbn-config-mocks/src/env.mock.ts +++ b/packages/kbn-config-mocks/src/env.mock.ts @@ -45,6 +45,7 @@ export const createTestPackageInfo = ({ dist = true }: { dist?: boolean } = {}): distributable: dist, number: 123456789, sha: 'XXXXXX', + date: '2023-05-15T23:12:09+0000', }, }; }; diff --git a/packages/kbn-config/src/__snapshots__/env.test.ts.snap b/packages/kbn-config/src/__snapshots__/env.test.ts.snap index 3f2dde3c3f563..39aae1dd9b2ff 100644 --- a/packages/kbn-config/src/__snapshots__/env.test.ts.snap +++ b/packages/kbn-config/src/__snapshots__/env.test.ts.snap @@ -28,6 +28,7 @@ Env { }, "packageInfo": Object { "branch": "feature-v1", + "buildDate": 2023-05-15T23:12:09.000Z, "buildNum": 9007199254740991, "buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "dist": false, @@ -69,6 +70,7 @@ Env { }, "packageInfo": Object { "branch": "feature-v1", + "buildDate": 2023-05-15T23:12:09.000Z, "buildNum": 9007199254740991, "buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "dist": false, @@ -109,6 +111,7 @@ Env { }, "packageInfo": Object { "branch": "some-branch", + "buildDate": 2023-05-15T23:12:09.000Z, "buildNum": 9007199254740991, "buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "dist": false, @@ -149,6 +152,7 @@ Env { }, "packageInfo": Object { "branch": "feature-v1", + "buildDate": 2023-05-15T23:12:09.000Z, "buildNum": 100, "buildSha": "feature-v1-build-sha", "dist": true, @@ -189,6 +193,7 @@ Env { }, "packageInfo": Object { "branch": "feature-v1", + "buildDate": 2023-05-15T23:12:09.000Z, "buildNum": 9007199254740991, "buildSha": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "dist": false, @@ -229,6 +234,7 @@ Env { }, "packageInfo": Object { "branch": "feature-v1", + "buildDate": 2023-05-15T23:12:09.000Z, "buildNum": 100, "buildSha": "feature-v1-build-sha", "dist": true, diff --git a/packages/kbn-config/src/config_service.test.ts b/packages/kbn-config/src/config_service.test.ts index df6c8c543d408..c38875bdae6ed 100644 --- a/packages/kbn-config/src/config_service.test.ts +++ b/packages/kbn-config/src/config_service.test.ts @@ -31,6 +31,7 @@ const packageInfos: RawPackageInfo = { build: { number: 42, sha: 'one', + date: '2023-05-15T23:12:09+0000', }, }; const emptyArgv = getEnvOptions(); @@ -238,6 +239,7 @@ test('correctly passes context', async () => { distributable: true, number: 100, sha: 'feature-v1-build-sha', + date: '2023-05-15T23:12:09+0000', }, }; diff --git a/packages/kbn-config/src/env.test.ts b/packages/kbn-config/src/env.test.ts index 782b0cc5081c6..5203c34b73214 100644 --- a/packages/kbn-config/src/env.test.ts +++ b/packages/kbn-config/src/env.test.ts @@ -13,6 +13,7 @@ import { Env, RawPackageInfo } from './env'; import { getEnvOptions } from './internal_mocks'; const REPO_ROOT = '/test/kibanaRoot'; +const BUILD_DATE = '2023-05-15T23:12:09+0000'; const packageInfos: RawPackageInfo = { branch: 'master', @@ -20,13 +21,23 @@ const packageInfos: RawPackageInfo = { build: { number: 42, sha: 'one', + date: new Date(BUILD_DATE).toISOString(), }, }; +beforeAll(() => { + jest.useFakeTimers(); + jest.setSystemTime(new Date(BUILD_DATE)); +}); + beforeEach(() => { mockPackage.raw = {}; }); +afterAll(() => { + jest.useRealTimers(); +}); + test('correctly creates default environment in dev mode.', () => { mockPackage.raw = { branch: 'some-branch', @@ -51,6 +62,7 @@ test('correctly creates default environment in prod distributable mode.', () => distributable: true, number: 100, sha: 'feature-v1-build-sha', + date: BUILD_DATE, }, }; @@ -73,6 +85,7 @@ test('correctly creates default environment in prod non-distributable mode.', () distributable: false, number: 100, sha: 'feature-v1-build-sha', + date: BUILD_DATE, }, }; @@ -95,6 +108,7 @@ test('correctly creates default environment if `--env.name` is supplied.', () => distributable: false, number: 100, sha: 'feature-v1-build-sha', + date: BUILD_DATE, }, }; @@ -128,6 +142,7 @@ test('correctly creates environment with constructor.', () => { distributable: true, number: 100, sha: 'feature-v1-build-sha', + date: BUILD_DATE, }, }, getEnvOptions({ diff --git a/packages/kbn-config/src/env.ts b/packages/kbn-config/src/env.ts index 3c256e8a95375..64d147d9a4a85 100644 --- a/packages/kbn-config/src/env.ts +++ b/packages/kbn-config/src/env.ts @@ -45,6 +45,7 @@ export interface RawPackageInfo { distributable?: boolean; number: number; sha: string; + date: string; }; } @@ -122,6 +123,7 @@ export class Env { buildSha: isKibanaDistributable ? pkg.build.sha : 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', version: pkg.version, dist: isKibanaDistributable, + buildDate: isKibanaDistributable ? new Date(pkg.build.date) : new Date(), }); } } diff --git a/packages/kbn-config/src/types.ts b/packages/kbn-config/src/types.ts index bb632a7e3d222..dcb959f30cd01 100644 --- a/packages/kbn-config/src/types.ts +++ b/packages/kbn-config/src/types.ts @@ -14,6 +14,7 @@ export interface PackageInfo { branch: string; buildNum: number; buildSha: string; + buildDate: Date; dist: boolean; } diff --git a/packages/kbn-repo-info/types.ts b/packages/kbn-repo-info/types.ts index 21aab323e57c1..ee8d79698ad86 100644 --- a/packages/kbn-repo-info/types.ts +++ b/packages/kbn-repo-info/types.ts @@ -14,6 +14,7 @@ export interface KibanaPackageJson { number: number; sha: string; distributable?: boolean; + date: string; }; dependencies: { [dep: string]: string; diff --git a/src/core/server/integration_tests/status/routes/status.test.ts b/src/core/server/integration_tests/status/routes/status.test.ts index 27e18979e3df0..10b59e62dffb8 100644 --- a/src/core/server/integration_tests/status/routes/status.test.ts +++ b/src/core/server/integration_tests/status/routes/status.test.ts @@ -78,6 +78,7 @@ describe('GET /api/status', () => { buildSha: 'xsha', dist: true, version: '9.9.9-SNAPSHOT', + buildDate: new Date('2023-05-15T23:12:09.000Z'), }, serverName: 'xkibana', uuid: 'xxxx-xxxxx', @@ -142,6 +143,7 @@ describe('GET /api/status', () => { build_hash: 'xsha', build_number: 1234, build_snapshot: true, + build_date: new Date('2023-05-15T23:12:09.000Z').toISOString(), }); const metricsMockValue = await firstValueFrom(metrics.getOpsMetrics$()); expect(result.body.metrics).toEqual({ diff --git a/src/core/server/mocks.ts b/src/core/server/mocks.ts index b2e1deb4e3c07..00f2497ab1dd8 100644 --- a/src/core/server/mocks.ts +++ b/src/core/server/mocks.ts @@ -99,6 +99,7 @@ function pluginInitializerContextMock(config: T = {} as T) { buildNum: 100, buildSha: 'buildSha', dist: false, + buildDate: new Date('2023-05-15T23:12:09.000Z'), }, instanceUuid: 'instance-uuid', configs: ['/some/path/to/config/kibana.yml'], diff --git a/src/dev/build/lib/build.test.ts b/src/dev/build/lib/build.test.ts index 268e32b2c477f..1292f1439642e 100644 --- a/src/dev/build/lib/build.test.ts +++ b/src/dev/build/lib/build.test.ts @@ -31,6 +31,7 @@ const config = new Config( buildNumber: 1234, buildSha: 'abcd1234', buildVersion: '8.0.0', + buildDate: '2023-05-15T23:12:09+0000', }, false, false, diff --git a/src/dev/build/lib/config.test.ts b/src/dev/build/lib/config.test.ts index 5f530a7f6f2d8..72b74c6e168cd 100644 --- a/src/dev/build/lib/config.test.ts +++ b/src/dev/build/lib/config.test.ts @@ -18,6 +18,7 @@ jest.mock('./version_info', () => ({ buildSha: 'abc1234', buildVersion: '8.0.0', buildNumber: 1234, + buildDate: '2023-05-15T23:12:09+0000', }), })); @@ -195,6 +196,13 @@ describe('#getBuildSha()', () => { }); }); +describe('#getBuildDate()', () => { + it('returns the date from the build info', async () => { + const config = await setup(); + expect(config.getBuildDate()).toBe(versionInfo.buildDate); + }); +}); + describe('#isRelease()', () => { it('returns true when marked as a release', async () => { const config = await setup({ isRelease: true }); diff --git a/src/dev/build/lib/config.ts b/src/dev/build/lib/config.ts index 175a3768924ab..a33540ce00c5f 100644 --- a/src/dev/build/lib/config.ts +++ b/src/dev/build/lib/config.ts @@ -228,6 +228,13 @@ export class Config { return this.versionInfo.buildSha; } + /** + * Get the ISO 8601 date for this build + */ + getBuildDate() { + return this.versionInfo.buildDate; + } + /** * Resolve a set of paths based from the target directory for this build. */ diff --git a/src/dev/build/lib/version_info.ts b/src/dev/build/lib/version_info.ts index f0e4a77e55bb8..305eb54c9a491 100644 --- a/src/dev/build/lib/version_info.ts +++ b/src/dev/build/lib/version_info.ts @@ -38,5 +38,6 @@ export async function getVersionInfo({ isRelease, versionQualifier, pkg }: Optio buildSha, buildVersion, buildNumber: await getBuildNumber(), + buildDate: new Date().toISOString(), }; } diff --git a/src/dev/build/tasks/fetch_agent_versions_list.test.ts b/src/dev/build/tasks/fetch_agent_versions_list.test.ts index 126c857df19ce..2604dadf3302e 100644 --- a/src/dev/build/tasks/fetch_agent_versions_list.test.ts +++ b/src/dev/build/tasks/fetch_agent_versions_list.test.ts @@ -35,6 +35,7 @@ const config = new Config( buildNumber: 1234, buildSha: 'abcd1234', buildVersion: '8.0.0', + buildDate: '2023-05-15T23:12:09.000Z', }, false, false, diff --git a/src/dev/build/tasks/package_json/create_package_json_tasks.ts b/src/dev/build/tasks/package_json/create_package_json_tasks.ts index 15c9a7f6fb0de..d5f4ee94e049b 100644 --- a/src/dev/build/tasks/package_json/create_package_json_tasks.ts +++ b/src/dev/build/tasks/package_json/create_package_json_tasks.ts @@ -48,6 +48,7 @@ export const CreatePackageJson: Task = { sha: config.getBuildSha(), distributable: true, release: config.isRelease, + date: config.getBuildDate(), }, repository: pkg.repository, engines: { diff --git a/x-pack/plugins/screenshotting/server/formats/pdf/pdf_maker/integration_tests/pdfmaker.test.ts b/x-pack/plugins/screenshotting/server/formats/pdf/pdf_maker/integration_tests/pdfmaker.test.ts index 663863bec9757..cdd8350c0ae9a 100644 --- a/x-pack/plugins/screenshotting/server/formats/pdf/pdf_maker/integration_tests/pdfmaker.test.ts +++ b/x-pack/plugins/screenshotting/server/formats/pdf/pdf_maker/integration_tests/pdfmaker.test.ts @@ -35,6 +35,7 @@ describe('PdfMaker', () => { buildSha: 'screenshot-dfdfed0a', dist: false, version: '1000.0.0', + buildDate: new Date('2023-05-15T23:12:09.000Z'), }; pdf = new PdfMaker(layout, undefined, packageInfo, logger); }); diff --git a/x-pack/plugins/screenshotting/server/screenshots/index.test.ts b/x-pack/plugins/screenshotting/server/screenshots/index.test.ts index fbd5f0501ea95..bdaf96e710f7e 100644 --- a/x-pack/plugins/screenshotting/server/screenshots/index.test.ts +++ b/x-pack/plugins/screenshotting/server/screenshots/index.test.ts @@ -57,6 +57,7 @@ describe('Screenshot Observable Pipeline', () => { buildSha: 'screenshot-dfdfed0a', dist: false, version: '5000.0.0', + buildDate: new Date('2023-05-15T23:12:09.000Z'), }; options = { browserTimezone: 'UTC',