-
Notifications
You must be signed in to change notification settings - Fork 8
Source build version from shared metadata.version #326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
watson
wants to merge
3
commits into
master
Choose a base branch
from
watson/DEBUG-5465/inject-version-at-runtime
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,71 @@ | ||
| // Unless explicitly stated otherwise all files in this repository are licensed under the MIT License. | ||
| // This product includes software developed at Datadog (https://www.datadoghq.com/). | ||
| // Copyright 2019-Present Datadog, Inc. | ||
|
|
||
| import type { Options } from '@dd/core/types'; | ||
|
|
||
| import { validateOptions } from './validate'; | ||
|
|
||
| describe('factory validateOptions', () => { | ||
| describe('defaults', () => { | ||
| it('should return defaults when no options are provided', () => { | ||
| expect(validateOptions()).toEqual( | ||
| expect.objectContaining({ | ||
| enableGit: true, | ||
| logLevel: 'warn', | ||
| metadata: {}, | ||
| }), | ||
| ); | ||
| }); | ||
|
|
||
| it('should preserve user-provided metadata', () => { | ||
| const result = validateOptions({ | ||
| metadata: { name: 'my-build', version: '1.0.0' }, | ||
| }); | ||
| expect(result.metadata).toEqual({ name: 'my-build', version: '1.0.0' }); | ||
| }); | ||
|
|
||
| it('should accept metadata with only name set', () => { | ||
| const result = validateOptions({ metadata: { name: 'my-build' } }); | ||
| expect(result.metadata).toEqual({ name: 'my-build' }); | ||
| }); | ||
|
|
||
| it('should accept metadata with only version set', () => { | ||
| const result = validateOptions({ metadata: { version: '1.0.0' } }); | ||
| expect(result.metadata).toEqual({ version: '1.0.0' }); | ||
| }); | ||
|
|
||
| it('should accept an empty metadata block', () => { | ||
| const result = validateOptions({ metadata: {} }); | ||
| expect(result.metadata).toEqual({}); | ||
| }); | ||
| }); | ||
|
|
||
| describe('metadata validation', () => { | ||
| const cases = [ | ||
| { | ||
| description: 'reject metadata.version when not a string', | ||
| input: { metadata: { version: 123 } }, | ||
| errorPattern: /metadata\.version.*must be a string/, | ||
| }, | ||
| { | ||
| description: 'reject metadata.version when null', | ||
| input: { metadata: { version: null } }, | ||
| errorPattern: /metadata\.version.*must be a string/, | ||
| }, | ||
| ]; | ||
|
|
||
| test.each(cases)('should $description', ({ input, errorPattern }) => { | ||
| expect(() => validateOptions(input as unknown as Options)).toThrow(errorPattern); | ||
| }); | ||
|
|
||
| it('should accept non-string metadata.name for backwards compatibility', () => { | ||
| expect(() => | ||
| validateOptions({ metadata: { name: 123 } } as unknown as Options), | ||
| ).not.toThrow(); | ||
| expect(() => | ||
| validateOptions({ metadata: { name: null } } as unknown as Options), | ||
| ).not.toThrow(); | ||
| }); | ||
| }); | ||
| }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -13,7 +13,7 @@ Automatically instrument JavaScript functions at build time to enable Live Debug | |
| - [Configuration](#configuration) | ||
| - [How it works](#how-it-works) | ||
| - [liveDebugger.enable](#livedebuggerenable) | ||
| - [liveDebugger.version](#livedebuggerversion) | ||
| - [metadata.version](#metadataversion) | ||
| - [liveDebugger.include](#livedebuggerinclude) | ||
| - [liveDebugger.exclude](#livedebuggerexclude) | ||
| - [liveDebugger.honorSkipComments](#livedebuggerhonorskipcomments) | ||
|
|
@@ -51,7 +51,6 @@ the plugin throws an error with the exact install command above. | |
| ```ts | ||
| liveDebugger?: { | ||
| enable?: boolean; | ||
| version?: string; | ||
| include?: (string | RegExp)[]; | ||
| exclude?: (string | RegExp)[]; | ||
| honorSkipComments?: boolean; | ||
|
|
@@ -60,6 +59,8 @@ liveDebugger?: { | |
| } | ||
| ``` | ||
|
|
||
| Live Debugger also reads the build version from the top-level [`metadata.version`](#metadataversion) option. | ||
|
|
||
| ## How it works | ||
|
|
||
| The Live Debugger plugin automatically instruments all JavaScript functions in your application at build time. It adds lightweight checks that can be activated at runtime without rebuilding your code. | ||
|
|
@@ -74,7 +75,7 @@ Each instrumented function gets: | |
|
|
||
| The instrumentation checks whether probes are active by calling `$dd_probes(functionId)`. When no probes are active, the function returns `undefined` and all instrumentation is skipped — only the `$dd_probes` call and a conditional check remain on the hot path. | ||
|
|
||
| When `liveDebugger.version` is set, it should match the immutable deployed build identifier used by your Browser Debugger SDK initialization. If you also upload sourcemaps through the Error Tracking plugin, use the same value for `errorTracking.sourcemaps.releaseVersion`. | ||
| When `metadata.version` is set, it should match the immutable deployed build identifier used by your Browser Debugger SDK initialization. If you also upload sourcemaps through the Error Tracking plugin, use the same value for `errorTracking.sourcemaps.releaseVersion`. | ||
|
|
||
| **Example transformation (block body):** | ||
|
|
||
|
|
@@ -126,12 +127,22 @@ const double = (x) => { | |
|
|
||
| Enable or disable the plugin without removing its configuration. | ||
|
|
||
| ### liveDebugger.version | ||
| ### metadata.version | ||
|
|
||
| > default: `undefined` | ||
|
|
||
| An immutable identifier for the deployed browser build. Set it at the top level of your Datadog plugin configuration: | ||
|
|
||
| ```ts | ||
| datadogBuildPlugins({ | ||
| metadata: { version: '1.0.0' }, | ||
| liveDebugger: {}, | ||
| }); | ||
| ``` | ||
|
|
||
| Optional. When set, use an immutable deployed browser build identifier. This value should match: | ||
| If both `metadata.version` and an explicit `errorTracking.sourcemaps.releaseVersion` are configured and disagree, this plugin surfaces the mismatch as a build error. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure this is super relevant for the Live Debugger plugin's documentation. |
||
|
|
||
| - the `version` passed to `@datadog/browser-debugger` | ||
| - `errorTracking.sourcemaps.releaseVersion` when sourcemap upload is enabled | ||
| When set, Live Debugger injects the value into runtime-visible build metadata so the Browser Debugger SDK uses it as the default `version` during `init()`. | ||
|
|
||
| If omitted, Live Debugger instrumentation still works, but browser build lookup and source-code-aware resolution will gracefully degrade. | ||
|
|
||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure this
if () {}wrapping is really necessary.It brings more confusion when reading the code than anything.
Even the comment tends to explain that it's actually unnecessary since it would throw anyways.