screwdriver-data-schema
Version:
Internal Data Schema of Screwdriver
87 lines (77 loc) • 2.8 kB
JavaScript
'use strict';
const Joi = require('joi');
const Annotations = require('../config/annotations');
const Base = require('../config/base');
const Job = require('../config/job');
const Parameters = require('../config/parameters');
const Regex = require('../config/regex');
const WorkflowGraph = require('../config/workflowGraph');
const Pipeline = require('../models/pipeline');
const SCHEMA_JOB_COMMAND = Joi.object()
.keys({
name: Joi.string(),
command: Joi.string(),
locked: Joi.boolean().optional()
})
.unknown(false)
.label('Named command to execute');
const SCHEMA_JOB_COMMANDS = Joi.array().items(SCHEMA_JOB_COMMAND).min(1).label('List of named commands to execute');
const SCHEMA_JOB_PERMUTATION = Joi.object()
.keys({
annotations: Annotations.annotations,
blockedBy: Job.blockedBy,
cache: Base.cachePerm,
commands: SCHEMA_JOB_COMMANDS,
description: Job.description,
environment: Job.environment,
freezeWindows: Job.freezeWindows,
image: Job.image,
order: Job.order,
parameters: Job.parameters,
provider: Job.provider,
requires: Job.requires,
secrets: Job.secrets,
settings: Job.settings,
sourcePaths: Job.sourcePaths,
stage: Joi.object()
.keys({
name: Joi.string().regex(Regex.STAGE_NAME).required()
})
.unknown(false),
subscribe: Base.subscribe,
templateId: Job.templateId
})
.label('Job permutation');
const SCHEMA_JOB_PERMUTATIONS = Joi.array().items(SCHEMA_JOB_PERMUTATION).label('List of job permutations');
const SCHEMA_JOBS = Joi.object()
// Jobs can only be named with A-Z,a-z,0-9,-,_
.pattern(Regex.JOB_NAME, SCHEMA_JOB_PERMUTATIONS)
// All others are marked as invalid
.unknown(false)
.label('List of available job configurations');
const SCHEMA_OUTPUT = Joi.object()
.keys({
annotations: Annotations.annotations,
errors: Joi.array().items(Joi.string()).optional(),
jobs: SCHEMA_JOBS,
childPipelines: Base.childPipelines,
workflowGraph: WorkflowGraph.workflowGraph,
parameters: Parameters.parameters.default({}),
warnMessages: Joi.array().optional(),
stages: Base.stages.optional(),
subscribe: Base.subscribe,
templateVersionId: Pipeline.fields.templateVersionId
})
.label('Execution information');
const SCHEMA_INPUT = Joi.object({
yaml: Joi.string().label('screwdriver.yaml contents')
}).label('Validation Input');
/**
* Input and output specification for validation
* @type {Object}
*/
module.exports = {
input: SCHEMA_INPUT,
output: SCHEMA_OUTPUT,
jobPermutations: SCHEMA_JOB_PERMUTATIONS
};