From 067fe6410f57f875e595ae2451122b15a26b5f81 Mon Sep 17 00:00:00 2001 From: Tanya Gray <153077+tanyagray@users.noreply.github.com> Date: Fri, 17 Feb 2023 18:17:38 +1300 Subject: [PATCH] feat: Add option to set `dist` on sourcemaps Adds support for `dist` as input value for GitHub Action: ```yaml - uses: getsentry/action-release@v1 with: environment: 'production' sourcemaps: './lib' dist: ${{ github.sha }} ``` Note that this repo uses `@sentry/cli@^1.67.2` and there is a related fix in `2.3.1`: > fix: move dist option to SentryCliUploadSourceMapsOptions (#1269) by @ikenfin > [changelog](https://github.com/getsentry/sentry-cli/blob/master/CHANGELOG.md#231) This fix was to move the `dist` option from being under `SentryCliOptions` (incorrect) to be under `SentryCliUploadSourceMapsOptions` (correct) This does not affect the GH action as those types are not referenced directly by the action. Resolves getsentry/action-release#74 --- README.md | 2 ++ __tests__/main.test.ts | 16 ++++++++++++++++ action.yml | 3 +++ src/main.ts | 2 ++ src/options.ts | 13 +++++++++++++ 5 files changed, 36 insertions(+) diff --git a/README.md b/README.md index c1cc3f38..56ca5173 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ Adding the following to your workflow will create a new Sentry release and tell |`ignore_missing`|When the flag is set and the previous release commit was not found in the repository, will create a release with the default commits count instead of failing the command.|`false`| |`ignore_empty`|When the flag is set, command will not fail and just exit silently if no new commits for a given release have been found.|`false`| |`sourcemaps`|Space-separated list of paths to JavaScript sourcemaps. Omit to skip uploading sourcemaps.|-| +|`dist`|Unique identifier for the distribution, used to further segment your release. Usually your build number. _Note: Required when uploading sourcemaps._|-| |`started_at`|Unix timestamp of the release start date. Omit for current time.|-| |`version`|Identifier that uniquely identifies the releases. _Note: the `refs/tags/` prefix is automatically stripped when `version` is `github.ref`._|${{ github.sha }}| |`version_prefix`|Value prepended to auto-generated version. For example "v".|-| @@ -79,6 +80,7 @@ Adding the following to your workflow will create a new Sentry release and tell with: environment: 'production' sourcemaps: './lib' + dist: ${{ github.sha }} ``` - Create a new Sentry release for the `production` environment of your project at version `v1.0.1`. diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index f573e80c..85e18f46 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -3,6 +3,7 @@ import * as path from 'path'; import * as process from 'process'; import { getBooleanOption, + getDist, getSourcemaps, getStartedAt, getVersion, @@ -66,6 +67,21 @@ describe('options', () => { }); }); + describe('getDist', () => { + afterEach(() => { + delete process.env['INPUT_DIST']; + }); + + test('should return undefined when dist is omitted', async () => { + expect(getDist()).toBeUndefined(); + }); + + test('should return a string when dist is provided', () => { + process.env['INPUT_DIST'] = 'foo-dist'; + expect(getDist()).toEqual('foo-dist'); + }); + }); + describe('getStartedAt', () => { const errorMessage = 'started_at not in valid format. Unix timestamp or ISO 8601 date expected'; diff --git a/action.yml b/action.yml index 7bb4a333..9cc5decf 100644 --- a/action.yml +++ b/action.yml @@ -8,6 +8,9 @@ inputs: sourcemaps: description: 'Space-separated list of paths to JavaScript sourcemaps. Omit to skip uploading sourcemaps.' required: false + dist: + description: 'Unique identifier for the distribution, used to further segment your release. Usually your build number.' + required: false finalize: description: 'When false, omit marking the release as finalized and released.' default: true diff --git a/src/main.ts b/src/main.ts index 55a1ff5a..9c154259 100644 --- a/src/main.ts +++ b/src/main.ts @@ -11,6 +11,7 @@ import * as options from './options'; const environment = options.getEnvironment(); const sourcemaps = options.getSourcemaps(); + const dist = options.getDist(); const shouldFinalize = options.getBooleanOption('finalize', true); const ignoreMissing = options.getBooleanOption('ignore_missing', false); const ignoreEmpty = options.getBooleanOption('ignore_empty', false); @@ -45,6 +46,7 @@ import * as options from './options'; const sourceMapOptions = { include: sourcemaps, projects: localProjects, + dist, urlPrefix, stripCommonPrefix, }; diff --git a/src/options.ts b/src/options.ts index fd6ffec2..02e5f671 100644 --- a/src/options.ts +++ b/src/options.ts @@ -81,6 +81,19 @@ export const getSourcemaps = (): string[] => { return sourcemapsOption.split(' '); }; +/** + * Dist is optional, but should be a string when provided. + * @returns string + */ +export const getDist = (): string | undefined => { + const distOption: string = core.getInput('dist'); + if (!distOption) { + return undefined; + } + + return distOption; +}; + /** * Fetch boolean option from input. Throws error if option value is not a boolean. * @param input string