1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-11-24 20:06:55 +01:00
unleash.unleash/src/lib/openapi/spec/release-plan-schema.ts
2025-11-13 13:41:23 +02:00

95 lines
3.6 KiB
TypeScript

import type { FromSchema } from 'json-schema-to-ts';
import { releasePlanMilestoneSchema } from './release-plan-milestone-schema.js';
import { releasePlanTemplateSchema } from './release-plan-template-schema.js';
import { releasePlanMilestoneStrategySchema } from './release-plan-milestone-strategy-schema.js';
import { constraintSchema } from './constraint-schema.js';
import { createFeatureStrategySchema } from './create-feature-strategy-schema.js';
import { createStrategyVariantSchema } from './create-strategy-variant-schema.js';
import { parametersSchema } from './parameters-schema.js';
import { transitionConditionSchema } from './transition-condition-schema.js';
import { safeguardSchema } from './safeguard-schema.js';
import { metricQuerySchema } from './metric-query-schema.js';
import { safeguardTriggerConditionSchema } from './safeguard-trigger-condition-schema.js';
export const releasePlanSchema = {
$id: '#/components/schemas/releasePlanSchema',
additionalProperties: false,
description: 'Schema representing the creation of a release plan.',
type: 'object',
required: [
'id',
'discriminator',
'name',
'featureName',
'environment',
'createdByUserId',
'createdAt',
'milestones',
'releasePlanTemplateId',
],
properties: {
id: releasePlanTemplateSchema.properties.id,
discriminator: {
type: 'string',
description:
'A field to distinguish between release plans and release templates.',
example: 'plan',
nullable: false,
enum: ['plan'],
},
name: releasePlanTemplateSchema.properties.name,
description: releasePlanTemplateSchema.properties.description,
featureName: {
type: 'string',
description: 'The name of the feature that uses this release plan.',
example: 'my-feature',
},
environment: {
type: 'string',
description: 'The environment that this release plan is for.',
example: 'production',
},
createdByUserId: releasePlanTemplateSchema.properties.createdByUserId,
createdAt: releasePlanTemplateSchema.properties.createdAt,
activeMilestoneId: {
type: 'string',
description:
'The ID of the currently active milestone in this release plan.',
example: '01JB9GGTGQYEQ9D40R17T3YVW1',
nullable: true,
},
milestones: releasePlanTemplateSchema.properties.milestones,
releasePlanTemplateId: {
type: 'string',
description:
'The ID of the release plan template that this release plan is based on.',
example: '01JB9GGTGQYEQ9D40R17T3YVW2',
nullable: false,
},
safeguards: {
type: 'array',
description:
'An array of safeguards configured for this release plan.',
items: {
$ref: '#/components/schemas/safeguardSchema',
},
},
},
components: {
schemas: {
releasePlanMilestoneSchema,
releasePlanMilestoneStrategySchema,
createFeatureStrategySchema,
parametersSchema,
constraintSchema,
createStrategyVariantSchema,
transitionConditionSchema,
safeguardSchema,
metricQuerySchema,
safeguardTriggerConditionSchema,
},
},
} as const;
export type ReleasePlanSchema = FromSchema<typeof releasePlanSchema>;