Skip to content

Commit 76d262e

Browse files
committed
feat(ui): Expose package configuration providers in runs
Show package configuration provider fields in the create-run evaluator and reporter settings. Hide the reporter field when the evaluator is enabled because the backend uses the evaluator providers in that case. As for analyzer / package curation providers, order of the package configuration providers matters, so use the same drag-and-drop logic here. Note that as the package configuration providers are added, the `isSuperuser` guard is only applied to the "Keep worker alive" part of the evaluator configuration. Resolves #5238. Signed-off-by: Jyrki Keisala <jyrki.keisala@doubleopen.io>
1 parent a495254 commit 76d262e

3 files changed

Lines changed: 79 additions & 16 deletions

File tree

ui/src/routes/organizations/$orgId/products/$productId/repositories/$repoId/-components/evaluator-fields.tsx

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
import { UseFormReturn } from 'react-hook-form';
2121

22+
import { PreconfiguredPluginDescriptor, Secret } from '@/api';
23+
import { PluginMultiSelectField } from '@/components/form/plugin-multi-select-field.tsx';
2224
import {
2325
AccordionContent,
2426
AccordionItem,
@@ -31,7 +33,6 @@ import {
3133
FormItem,
3234
FormLabel,
3335
} from '@/components/ui/form';
34-
import { Label } from '@/components/ui/label';
3536
import { Switch } from '@/components/ui/switch';
3637
import { CreateRunFormValues } from '@/routes/organizations/$orgId/products/$productId/repositories/$repoId/_repo-layout/create-run/-components';
3738

@@ -40,13 +41,19 @@ type EvaluatorFieldsProps = {
4041
value: string;
4142
onToggle: () => void;
4243
isSuperuser: boolean;
44+
packageConfigurationProviderPlugins: PreconfiguredPluginDescriptor[];
45+
secrets: Secret[];
46+
isRerun: boolean;
4347
};
4448

4549
export const EvaluatorFields = ({
4650
form,
4751
value,
4852
onToggle,
4953
isSuperuser,
54+
packageConfigurationProviderPlugins,
55+
secrets,
56+
isRerun,
5057
}: EvaluatorFieldsProps) => {
5158
return (
5259
<div className='flex flex-row align-middle'>
@@ -60,19 +67,32 @@ export const EvaluatorFields = ({
6067
className='my-4 mr-4 data-[state=checked]:bg-green-500'
6168
checked={field.value}
6269
onCheckedChange={field.onChange}
63-
id='evaluator-enabled-switch'
6470
/>
65-
{!isSuperuser && (
66-
<Label htmlFor='evaluator-enabled-switch'>Evaluator</Label>
67-
)}
6871
</>
6972
</FormControl>
7073
)}
7174
/>
72-
{isSuperuser && (
73-
<AccordionItem value={value} className='flex-1'>
74-
<AccordionTrigger onClick={onToggle}>Evaluator</AccordionTrigger>
75-
<AccordionContent>
75+
<AccordionItem value={value} className='flex-1'>
76+
<AccordionTrigger onClick={onToggle}>Evaluator</AccordionTrigger>
77+
<AccordionContent className='flex flex-col gap-6'>
78+
<PluginMultiSelectField
79+
form={form}
80+
name='jobConfigs.evaluator.packageConfigurationProviders'
81+
configName='jobConfigs.evaluator.packageConfigurationProviderConfig'
82+
label='Package configuration providers'
83+
description={
84+
<>
85+
Configure the package configuration providers to use. Providers
86+
higher in the list take precedence over lower providers. Change
87+
the order of providers via drag & drop.
88+
</>
89+
}
90+
plugins={packageConfigurationProviderPlugins}
91+
secrets={secrets}
92+
enableReordering
93+
showSelectedPluginsFirst={isRerun}
94+
/>
95+
{isSuperuser && (
7696
<FormField
7797
control={form.control}
7898
name='jobConfigs.evaluator.keepAliveWorker'
@@ -95,9 +115,9 @@ export const EvaluatorFields = ({
95115
</FormItem>
96116
)}
97117
/>
98-
</AccordionContent>
99-
</AccordionItem>
100-
)}
118+
)}
119+
</AccordionContent>
120+
</AccordionItem>
101121
</div>
102122
);
103123
};

ui/src/routes/organizations/$orgId/products/$productId/repositories/$repoId/-components/reporter-fields.tsx

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919

2020
import { UseFormReturn } from 'react-hook-form';
2121

22-
import { PreconfiguredPluginDescriptor } from '@/api';
22+
import { PreconfiguredPluginDescriptor, Secret } from '@/api';
2323
import { MultiSelectField } from '@/components/form/multi-select-field';
24+
import { PluginMultiSelectField } from '@/components/form/plugin-multi-select-field.tsx';
2425
import {
2526
AccordionContent,
2627
AccordionItem,
@@ -42,6 +43,9 @@ type ReporterFieldsProps = {
4243
onToggle: () => void;
4344
reporterPlugins: PreconfiguredPluginDescriptor[];
4445
isSuperuser: boolean;
46+
packageConfigurationProviderPlugins: PreconfiguredPluginDescriptor[];
47+
secrets: Secret[];
48+
isRerun: boolean;
4549
};
4650

4751
export const ReporterFields = ({
@@ -50,12 +54,16 @@ export const ReporterFields = ({
5054
onToggle,
5155
reporterPlugins,
5256
isSuperuser,
57+
packageConfigurationProviderPlugins,
58+
secrets,
59+
isRerun,
5360
}: ReporterFieldsProps) => {
5461
const reporterOptions = reporterPlugins.map((plugin) => ({
5562
id: plugin.id,
5663
label: plugin.displayName,
5764
summary: plugin.summary,
5865
}));
66+
const evaluatorEnabled = form.watch('jobConfigs.evaluator.enabled');
5967

6068
return (
6169
<div className='flex flex-row align-middle'>
@@ -74,7 +82,7 @@ export const ReporterFields = ({
7482
/>
7583
<AccordionItem value={value} className='flex-1'>
7684
<AccordionTrigger onClick={onToggle}>Reporter</AccordionTrigger>
77-
<AccordionContent>
85+
<AccordionContent className='flex flex-col gap-6'>
7886
<MultiSelectField
7987
form={form}
8088
name='jobConfigs.reporter.formats'
@@ -84,6 +92,25 @@ export const ReporterFields = ({
8492
}
8593
options={reporterOptions}
8694
/>
95+
{!evaluatorEnabled && (
96+
<PluginMultiSelectField
97+
form={form}
98+
name='jobConfigs.reporter.packageConfigurationProviders'
99+
configName='jobConfigs.reporter.packageConfigurationProviderConfig'
100+
label='Package configuration providers'
101+
description={
102+
<>
103+
Configure the package configuration providers to use.
104+
Providers higher in the list take precedence over lower
105+
providers. Change the order of providers via drag & drop.
106+
</>
107+
}
108+
plugins={packageConfigurationProviderPlugins}
109+
secrets={secrets}
110+
enableReordering
111+
showSelectedPluginsFirst={isRerun}
112+
/>
113+
)}
87114
{form.watch('jobConfigs.reporter.formats').includes('WebApp') && (
88115
<FormField
89116
control={form.control}

ui/src/routes/organizations/$orgId/products/$productId/repositories/$repoId/_repo-layout/create-run/index.tsx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ const CreateRunPage = () => {
9292
plugins?.data?.filter(
9393
(plugin) => plugin.type === 'PACKAGE_CURATION_PROVIDER'
9494
) || [];
95+
const packageConfigurationProviderPlugins =
96+
plugins?.data?.filter(
97+
(plugin) => plugin.type === 'PACKAGE_CONFIGURATION_PROVIDER'
98+
) || [];
9599

96100
type AccordionSection =
97101
| 'analyzer'
@@ -137,7 +141,8 @@ const CreateRunPage = () => {
137141
const formSchema = createRunFormSchema(
138142
advisorPlugins,
139143
scannerPlugins,
140-
packageCurationProviderPlugins
144+
packageCurationProviderPlugins,
145+
packageConfigurationProviderPlugins
141146
);
142147

143148
const form = useForm<z.infer<typeof formSchema>>({
@@ -147,7 +152,8 @@ const CreateRunPage = () => {
147152
advisorPlugins,
148153
scannerPlugins,
149154
isSuperuser,
150-
packageCurationProviderPlugins
155+
packageCurationProviderPlugins,
156+
packageConfigurationProviderPlugins
151157
),
152158
});
153159

@@ -488,13 +494,23 @@ const CreateRunPage = () => {
488494
value='evaluator'
489495
onToggle={() => toggleAccordionOpen('evaluator')}
490496
isSuperuser={isSuperuser}
497+
packageConfigurationProviderPlugins={
498+
packageConfigurationProviderPlugins
499+
}
500+
secrets={secrets.data || []}
501+
isRerun={ortRun?.data != null}
491502
/>
492503
<ReporterFields
493504
form={form}
494505
value='reporter'
495506
onToggle={() => toggleAccordionOpen('reporter')}
496507
reporterPlugins={reporterPlugins}
497508
isSuperuser={isSuperuser}
509+
packageConfigurationProviderPlugins={
510+
packageConfigurationProviderPlugins
511+
}
512+
secrets={secrets.data || []}
513+
isRerun={ortRun?.data != null}
498514
/>
499515
<NotifierFields
500516
form={form}

0 commit comments

Comments
 (0)