Skip to content

Commit d93f50c

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. 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 7183d28 commit d93f50c

3 files changed

Lines changed: 61 additions & 16 deletions

File tree

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

Lines changed: 24 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,17 @@ type EvaluatorFieldsProps = {
4041
value: string;
4142
onToggle: () => void;
4243
isSuperuser: boolean;
44+
packageConfigurationProviderPlugins: PreconfiguredPluginDescriptor[];
45+
secrets: Secret[];
4346
};
4447

4548
export const EvaluatorFields = ({
4649
form,
4750
value,
4851
onToggle,
4952
isSuperuser,
53+
packageConfigurationProviderPlugins,
54+
secrets,
5055
}: EvaluatorFieldsProps) => {
5156
return (
5257
<div className='flex flex-row align-middle'>
@@ -60,19 +65,26 @@ export const EvaluatorFields = ({
6065
className='my-4 mr-4 data-[state=checked]:bg-green-500'
6166
checked={field.value}
6267
onCheckedChange={field.onChange}
63-
id='evaluator-enabled-switch'
6468
/>
65-
{!isSuperuser && (
66-
<Label htmlFor='evaluator-enabled-switch'>Evaluator</Label>
67-
)}
6869
</>
6970
</FormControl>
7071
)}
7172
/>
72-
{isSuperuser && (
73-
<AccordionItem value={value} className='flex-1'>
74-
<AccordionTrigger onClick={onToggle}>Evaluator</AccordionTrigger>
75-
<AccordionContent>
73+
<AccordionItem value={value} className='flex-1'>
74+
<AccordionTrigger onClick={onToggle}>Evaluator</AccordionTrigger>
75+
<AccordionContent className='flex flex-col gap-6'>
76+
<PluginMultiSelectField
77+
form={form}
78+
name='jobConfigs.evaluator.packageConfigurationProviders'
79+
configName='jobConfigs.evaluator.packageConfigurationProviderConfig'
80+
label='Package configuration providers'
81+
description={
82+
<>Configure the package configuration providers to use.</>
83+
}
84+
plugins={packageConfigurationProviderPlugins}
85+
secrets={secrets}
86+
/>
87+
{isSuperuser && (
7688
<FormField
7789
control={form.control}
7890
name='jobConfigs.evaluator.keepAliveWorker'
@@ -95,9 +107,9 @@ export const EvaluatorFields = ({
95107
</FormItem>
96108
)}
97109
/>
98-
</AccordionContent>
99-
</AccordionItem>
100-
)}
110+
)}
111+
</AccordionContent>
112+
</AccordionItem>
101113
</div>
102114
);
103115
};

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

Lines changed: 21 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,8 @@ type ReporterFieldsProps = {
4243
onToggle: () => void;
4344
reporterPlugins: PreconfiguredPluginDescriptor[];
4445
isSuperuser: boolean;
46+
packageConfigurationProviderPlugins: PreconfiguredPluginDescriptor[];
47+
secrets: Secret[];
4548
};
4649

4750
export const ReporterFields = ({
@@ -50,12 +53,15 @@ export const ReporterFields = ({
5053
onToggle,
5154
reporterPlugins,
5255
isSuperuser,
56+
packageConfigurationProviderPlugins,
57+
secrets,
5358
}: ReporterFieldsProps) => {
5459
const reporterOptions = reporterPlugins.map((plugin) => ({
5560
id: plugin.id,
5661
label: plugin.displayName,
5762
summary: plugin.summary,
5863
}));
64+
const evaluatorEnabled = form.watch('jobConfigs.evaluator.enabled');
5965

6066
return (
6167
<div className='flex flex-row align-middle'>
@@ -74,7 +80,7 @@ export const ReporterFields = ({
7480
/>
7581
<AccordionItem value={value} className='flex-1'>
7682
<AccordionTrigger onClick={onToggle}>Reporter</AccordionTrigger>
77-
<AccordionContent>
83+
<AccordionContent className='flex flex-col gap-6'>
7884
<MultiSelectField
7985
form={form}
8086
name='jobConfigs.reporter.formats'
@@ -84,6 +90,19 @@ export const ReporterFields = ({
8490
}
8591
options={reporterOptions}
8692
/>
93+
{!evaluatorEnabled && (
94+
<PluginMultiSelectField
95+
form={form}
96+
name='jobConfigs.reporter.packageConfigurationProviders'
97+
configName='jobConfigs.reporter.packageConfigurationProviderConfig'
98+
label='Package configuration providers'
99+
description={
100+
<>Configure the package configuration providers to use.</>
101+
}
102+
plugins={packageConfigurationProviderPlugins}
103+
secrets={secrets}
104+
/>
105+
)}
87106
{form.watch('jobConfigs.reporter.formats').includes('WebApp') && (
88107
<FormField
89108
control={form.control}

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

Lines changed: 16 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,21 @@ const CreateRunPage = () => {
488494
value='evaluator'
489495
onToggle={() => toggleAccordionOpen('evaluator')}
490496
isSuperuser={isSuperuser}
497+
packageConfigurationProviderPlugins={
498+
packageConfigurationProviderPlugins
499+
}
500+
secrets={secrets.data || []}
491501
/>
492502
<ReporterFields
493503
form={form}
494504
value='reporter'
495505
onToggle={() => toggleAccordionOpen('reporter')}
496506
reporterPlugins={reporterPlugins}
497507
isSuperuser={isSuperuser}
508+
packageConfigurationProviderPlugins={
509+
packageConfigurationProviderPlugins
510+
}
511+
secrets={secrets.data || []}
498512
/>
499513
<NotifierFields
500514
form={form}

0 commit comments

Comments
 (0)