Skip to content

Commit 9fc1ae5

Browse files
committed
feat(ui): Add package configuration provider form data
Add package configuration provider fields to the create-run form schema, default values, rerun restoration, validation, and payload conversion. Selected providers are submitted via `jobConfigs.evaluator.packageConfigurationProviders`, or via `jobConfigs.reporter.packageConfigurationProviders` when the evaluator job is disabled. Signed-off-by: Jyrki Keisala <jyrki.keisala@doubleopen.io>
1 parent e224e11 commit 9fc1ae5

4 files changed

Lines changed: 615 additions & 142 deletions

File tree

ui/src/routes/organizations/$orgId/products/$productId/repositories/$repoId/_repo-layout/create-run/-components/default-values.ts

Lines changed: 190 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ export function defaultValues(
3737
advisorPlugins: PreconfiguredPluginDescriptor[],
3838
scannerPlugins: PreconfiguredPluginDescriptor[],
3939
isSuperuser: boolean,
40-
packageCurationProviderPlugins: PreconfiguredPluginDescriptor[]
40+
packageCurationProviderPlugins: PreconfiguredPluginDescriptor[],
41+
packageConfigurationProviderPlugins: PreconfiguredPluginDescriptor[]
4142
): CreateRunFormValues {
4243
/**
4344
* Constructs the default options for a package manager, either as a blank set of options
@@ -93,6 +94,16 @@ export function defaultValues(
9394
const packageCurationProviderFormValues = providerPluginConfigsToFormValues(
9495
ortRun?.jobConfigs.analyzer?.packageCurationProviders
9596
);
97+
const packageConfigurationProviderPluginDefaultValues =
98+
getPluginDefaultValues(packageConfigurationProviderPlugins);
99+
const evaluatorPackageConfigurationProviderFormValues =
100+
providerPluginConfigsToFormValues(
101+
ortRun?.jobConfigs.evaluator?.packageConfigurationProviders
102+
);
103+
const reporterPackageConfigurationProviderFormValues =
104+
providerPluginConfigsToFormValues(
105+
ortRun?.jobConfigs.reporter?.packageConfigurationProviders
106+
);
96107
const scannerDefaults = {
97108
scanners: ['ScanCode'],
98109
scannerScopes: {
@@ -170,12 +181,18 @@ export function defaultValues(
170181
copyrightGarbageFile: '',
171182
resolutionsFile: '',
172183
keepAliveWorker: false,
184+
packageConfigurationProviders: [],
185+
packageConfigurationProviderConfig:
186+
packageConfigurationProviderPluginDefaultValues,
173187
},
174188
reporter: {
175189
enabled: true,
176190
formats: ['CycloneDX', 'SpdxDocument', 'WebApp'],
177191
deduplicateDependencyTree: false,
178192
keepAliveWorker: false,
193+
packageConfigurationProviders: [],
194+
packageConfigurationProviderConfig:
195+
packageConfigurationProviderPluginDefaultValues,
179196
},
180197
notifier: {
181198
enabled: false,
@@ -289,6 +306,12 @@ export function defaultValues(
289306
enabled:
290307
ortRun.jobConfigs.evaluator !== undefined &&
291308
ortRun.jobConfigs.evaluator !== null,
309+
packageConfigurationProviders:
310+
evaluatorPackageConfigurationProviderFormValues.selectedPluginIds,
311+
packageConfigurationProviderConfig: mergePluginConfigs(
312+
evaluatorPackageConfigurationProviderFormValues.config,
313+
packageConfigurationProviderPluginDefaultValues
314+
),
292315
keepAliveWorker:
293316
(ortRun.jobConfigs.evaluator?.keepAliveWorker && isSuperuser) ||
294317
baseDefaults.jobConfigs.evaluator.keepAliveWorker,
@@ -303,6 +326,12 @@ export function defaultValues(
303326
) || baseDefaults.jobConfigs.reporter.formats,
304327
deduplicateDependencyTree:
305328
deduplicateDependencyTreeEnabled || undefined,
329+
packageConfigurationProviders:
330+
reporterPackageConfigurationProviderFormValues.selectedPluginIds,
331+
packageConfigurationProviderConfig: mergePluginConfigs(
332+
reporterPackageConfigurationProviderFormValues.config,
333+
packageConfigurationProviderPluginDefaultValues
334+
),
306335
keepAliveWorker:
307336
(ortRun.jobConfigs.reporter?.keepAliveWorker && isSuperuser) ||
308337
baseDefaults.jobConfigs.reporter.keepAliveWorker,
@@ -362,34 +391,41 @@ if (import.meta.vitest) {
362391
labels: {},
363392
} as unknown as OrtRun;
364393

365-
const defaults = defaultValues(ortRun, [], [], false, []);
394+
const defaults = defaultValues(ortRun, [], [], false, [], []);
366395

367396
expect(defaults.jobConfigs.analyzer.environmentDefinitions).toEqual(
368397
ortRun.jobConfigs.analyzer?.environmentConfig?.environmentDefinitions
369398
);
370399
});
371400

372401
it('uses package curation provider plugin default values for fresh runs', () => {
373-
const defaults = defaultValues(null, [], [], false, [
374-
{
375-
id: 'ClearlyDefined',
376-
type: 'PACKAGE_CURATION_PROVIDER',
377-
displayName: 'ClearlyDefined',
378-
summary: 'A package curation provider plugin',
379-
description: 'A package curation provider plugin.',
380-
options: [
381-
{
382-
name: 'serverUrl',
383-
description: 'Backend URL.',
384-
type: 'STRING',
385-
defaultValue: 'https://api.clearlydefined.io',
386-
isFixed: true,
387-
isNullable: false,
388-
isRequired: true,
389-
},
390-
],
391-
},
392-
]);
402+
const defaults = defaultValues(
403+
null,
404+
[],
405+
[],
406+
false,
407+
[
408+
{
409+
id: 'ClearlyDefined',
410+
type: 'PACKAGE_CURATION_PROVIDER',
411+
displayName: 'ClearlyDefined',
412+
summary: 'A package curation provider plugin',
413+
description: 'A package curation provider plugin.',
414+
options: [
415+
{
416+
name: 'serverUrl',
417+
description: 'Backend URL.',
418+
type: 'STRING',
419+
defaultValue: 'https://api.clearlydefined.io',
420+
isFixed: true,
421+
isNullable: false,
422+
isRequired: true,
423+
},
424+
],
425+
},
426+
],
427+
[]
428+
);
393429

394430
expect(defaults.jobConfigs.analyzer.packageCurationProviders).toEqual([]);
395431
expect(defaults.jobConfigs.analyzer.packageCurationProviderConfig).toEqual({
@@ -426,7 +462,7 @@ if (import.meta.vitest) {
426462
labels: {},
427463
} as unknown as OrtRun;
428464

429-
const defaults = defaultValues(ortRun, [], [], false, []);
465+
const defaults = defaultValues(ortRun, [], [], false, [], []);
430466

431467
expect(defaults.jobConfigs.analyzer.packageCurationProviders).toEqual([
432468
'ClearlyDefined',
@@ -443,6 +479,136 @@ if (import.meta.vitest) {
443479
});
444480
});
445481

482+
it('uses package configuration provider plugin default values for fresh runs', () => {
483+
const defaults = defaultValues(
484+
null,
485+
[],
486+
[],
487+
false,
488+
[],
489+
[
490+
{
491+
id: 'OrtConfig',
492+
type: 'PACKAGE_CONFIGURATION_PROVIDER',
493+
displayName: 'ORT Config',
494+
summary: 'A package configuration provider plugin',
495+
description: 'A package configuration provider plugin.',
496+
options: [
497+
{
498+
name: 'path',
499+
description: 'Provider path.',
500+
type: 'STRING',
501+
defaultValue: 'package-configurations.yml',
502+
isFixed: true,
503+
isNullable: false,
504+
isRequired: true,
505+
},
506+
],
507+
},
508+
]
509+
);
510+
511+
expect(defaults.jobConfigs.evaluator.packageConfigurationProviders).toEqual(
512+
[]
513+
);
514+
expect(
515+
defaults.jobConfigs.evaluator.packageConfigurationProviderConfig
516+
).toEqual({
517+
OrtConfig: {
518+
options: {
519+
path: 'package-configurations.yml',
520+
},
521+
secrets: {},
522+
},
523+
});
524+
expect(defaults.jobConfigs.reporter.packageConfigurationProviders).toEqual(
525+
[]
526+
);
527+
expect(
528+
defaults.jobConfigs.reporter.packageConfigurationProviderConfig
529+
).toEqual({
530+
OrtConfig: {
531+
options: {
532+
path: 'package-configurations.yml',
533+
},
534+
secrets: {},
535+
},
536+
});
537+
});
538+
539+
it('preserves package configuration provider config from reruns', () => {
540+
const ortRun = {
541+
revision: 'main',
542+
path: '',
543+
jobConfigs: {
544+
evaluator: {
545+
packageConfigurationProviders: [
546+
{
547+
type: 'OrtConfig',
548+
id: 'OrtConfig',
549+
enabled: true,
550+
options: {
551+
path: 'evaluator-package-configurations.yml',
552+
},
553+
secrets: {
554+
token: 'evaluator-token',
555+
},
556+
},
557+
],
558+
},
559+
reporter: {
560+
packageConfigurationProviders: [
561+
{
562+
type: 'OrtConfig',
563+
id: 'OrtConfig',
564+
enabled: true,
565+
options: {
566+
path: 'reporter-package-configurations.yml',
567+
},
568+
secrets: {
569+
token: 'reporter-token',
570+
},
571+
},
572+
],
573+
},
574+
},
575+
labels: {},
576+
} as unknown as OrtRun;
577+
578+
const defaults = defaultValues(ortRun, [], [], false, [], []);
579+
580+
expect(defaults.jobConfigs.evaluator.packageConfigurationProviders).toEqual(
581+
['OrtConfig']
582+
);
583+
expect(
584+
defaults.jobConfigs.evaluator.packageConfigurationProviderConfig
585+
).toEqual({
586+
OrtConfig: {
587+
options: {
588+
path: 'evaluator-package-configurations.yml',
589+
},
590+
secrets: {
591+
token: 'evaluator-token',
592+
},
593+
},
594+
});
595+
expect(defaults.jobConfigs.reporter.packageConfigurationProviders).toEqual([
596+
'OrtConfig',
597+
]);
598+
expect(
599+
defaults.jobConfigs.reporter.packageConfigurationProviderConfig
600+
).toEqual({
601+
OrtConfig: {
602+
options: {
603+
path: 'reporter-package-configurations.yml',
604+
},
605+
secrets: {
606+
token: 'reporter-token',
607+
},
608+
},
609+
});
610+
});
611+
446612
it('uses scanner plugin default values for fresh runs', () => {
447613
const defaults = defaultValues(
448614
null,
@@ -468,6 +634,7 @@ if (import.meta.vitest) {
468634
},
469635
],
470636
false,
637+
[],
471638
[]
472639
);
473640

0 commit comments

Comments
 (0)