Skip to content

Commit 3b1eb87

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 9fc1ae5 commit 3b1eb87

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
@@ -100,6 +100,10 @@ const CreateRunPage = () => {
100100
plugins?.data?.filter(
101101
(plugin) => plugin.type === 'PACKAGE_CURATION_PROVIDER'
102102
) || [];
103+
const packageConfigurationProviderPlugins =
104+
plugins?.data?.filter(
105+
(plugin) => plugin.type === 'PACKAGE_CONFIGURATION_PROVIDER'
106+
) || [];
103107

104108
const {
105109
data: organization,
@@ -184,7 +188,8 @@ const CreateRunPage = () => {
184188
const formSchema = createRunFormSchema(
185189
advisorPlugins,
186190
scannerPlugins,
187-
packageCurationProviderPlugins
191+
packageCurationProviderPlugins,
192+
packageConfigurationProviderPlugins
188193
);
189194

190195
const form = useForm<z.infer<typeof formSchema>>({
@@ -194,7 +199,8 @@ const CreateRunPage = () => {
194199
advisorPlugins,
195200
scannerPlugins,
196201
isSuperuser,
197-
packageCurationProviderPlugins
202+
packageCurationProviderPlugins,
203+
packageConfigurationProviderPlugins
198204
),
199205
});
200206

@@ -547,13 +553,23 @@ const CreateRunPage = () => {
547553
value='evaluator'
548554
onToggle={() => toggleAccordionOpen('evaluator')}
549555
isSuperuser={isSuperuser}
556+
packageConfigurationProviderPlugins={
557+
packageConfigurationProviderPlugins
558+
}
559+
secrets={secrets.data || []}
560+
isRerun={ortRun?.data != null}
550561
/>
551562
<ReporterFields
552563
form={form}
553564
value='reporter'
554565
onToggle={() => toggleAccordionOpen('reporter')}
555566
reporterPlugins={reporterPlugins}
556567
isSuperuser={isSuperuser}
568+
packageConfigurationProviderPlugins={
569+
packageConfigurationProviderPlugins
570+
}
571+
secrets={secrets.data || []}
572+
isRerun={ortRun?.data != null}
557573
/>
558574
<NotifierFields
559575
form={form}

0 commit comments

Comments
 (0)