gitlab-org--gitlab-foss/spec/support/atlassian/jira_connect/schemata.rb

292 lines
8.7 KiB
Ruby

# frozen_string_literal: true
module Atlassian
module Schemata
class << self
def build_info
{
'type' => 'object',
'additionalProperties' => false,
'required' => %w(
schemaVersion pipelineId buildNumber updateSequenceNumber
displayName url state issueKeys testInfo references
lastUpdated
),
'properties' => {
'schemaVersion' => schema_version_type,
'pipelineId' => { 'type' => 'string' },
'buildNumber' => { 'type' => 'integer' },
'updateSequenceNumber' => { 'type' => 'integer' },
'displayName' => { 'type' => 'string' },
'lastUpdated' => iso8601_type,
'url' => { 'type' => 'string' },
'state' => state_type,
'issueKeys' => issue_keys_type,
'testInfo' => {
'type' => 'object',
'required' => %w(totalNumber numberPassed numberFailed numberSkipped),
'properties' => {
'totalNumber' => { 'type' => 'integer' },
'numberFailed' => { 'type' => 'integer' },
'numberPassed' => { 'type' => 'integer' },
'numberSkipped' => { 'type' => 'integer' }
}
},
'references' => {
'type' => 'array',
'items' => {
'type' => 'object',
'required' => %w(commit ref),
'properties' => {
'commit' => {
'type' => 'object',
'required' => %w(id repositoryUri),
'properties' => {
'id' => { 'type' => 'string' },
'repositoryUri' => { 'type' => 'string' }
}
},
'ref' => {
'type' => 'object',
'required' => %w(name uri),
'properties' => {
'name' => { 'type' => 'string' },
'uri' => { 'type' => 'string' }
}
}
}
}
}
}
}
end
def deployment_info
{
'type' => 'object',
'additionalProperties' => false,
'required' => %w(
deploymentSequenceNumber updateSequenceNumber
associations displayName url description lastUpdated
state pipeline environment
),
'properties' => {
'deploymentSequenceNumber' => { 'type' => 'integer' },
'updateSequenceNumber' => { 'type' => 'integer' },
'associations' => {
'type' => %w(array),
'items' => association_type,
'minItems' => 1
},
'displayName' => { 'type' => 'string' },
'description' => { 'type' => 'string' },
'label' => { 'type' => 'string' },
'url' => { 'type' => 'string' },
'lastUpdated' => iso8601_type,
'state' => state_type,
'pipeline' => pipeline_type,
'environment' => environment_type,
'schemaVersion' => schema_version_type
}
}
end
def feature_flag_info
{
'type' => 'object',
'additionalProperties' => false,
'required' => %w(
updateSequenceId id key issueKeys summary details
),
'properties' => {
'id' => { 'type' => 'string' },
'key' => { 'type' => 'string' },
'displayName' => { 'type' => 'string' },
'issueKeys' => issue_keys_type,
'summary' => summary_type,
'details' => details_type,
'updateSequenceId' => { 'type' => 'integer' },
'schemaVersion' => schema_version_type
}
}
end
def details_type
{
'type' => 'array',
'items' => combine(summary_type, {
'required' => ['environment'],
'properties' => {
'environment' => {
'type' => 'object',
'additionalProperties' => false,
'required' => %w(name),
'properties' => {
'name' => { 'type' => 'string' },
'type' => {
'type' => 'string',
'pattern' => '^(development|testing|staging|production)$'
}
}
}
}
})
}
end
def combine(map_a, map_b)
map_a.merge(map_b) do |k, a, b|
a.respond_to?(:merge) ? a.merge(b) : a + b
end
end
def summary_type
{
'type' => 'object',
'additionalProperties' => false,
'required' => %w(url status lastUpdated),
'properties' => {
'lastUpdated' => iso8601_type,
'url' => { 'type' => 'string' },
'status' => feature_status_type
}
}
end
def feature_status_type
{
'type' => 'object',
'additionalProperties' => false,
'required' => %w(enabled),
'properties' => {
'enabled' => { 'type' => 'boolean' },
'defaultValue' => { 'type' => 'string' },
'rollout' => rollout_type
}
}
end
def rollout_type
{
'type' => 'object',
'additionalProperties' => false,
'properties' => {
'percentage' => { 'type' => 'number' },
'text' => { 'type' => 'string' },
'rules' => { 'type' => 'number' }
}
}
end
def environment_type
{
'type' => 'object',
'additionalProperties' => false,
'required' => %w(id displayName type),
'properties' => {
'id' => { 'type' => 'string', 'maxLength' => 255 },
'displayName' => { 'type' => 'string', 'maxLength' => 255 },
'type' => {
'type' => 'string',
'pattern' => '(unmapped|development|testing|staging|production)'
}
}
}
end
def pipeline_type
{
'type' => 'object',
'additionalProperties' => false,
'required' => %w(id displayName url),
'properties' => {
'id' => { 'type' => 'string', 'maxLength' => 255 },
'displayName' => { 'type' => 'string', 'maxLength' => 255 },
'url' => { 'type' => 'string', 'maxLength' => 2000 }
}
}
end
def schema_version_type
{ 'type' => 'string', 'pattern' => '1.0' }
end
def state_type
{
'type' => 'string',
'pattern' => '(pending|in_progress|successful|failed|cancelled)'
}
end
def association_type
{
'type' => 'object',
'additionalProperties' => false,
'required' => %w(associationType values),
'properties' => {
'associationType' => {
'type' => 'string',
'pattern' => '(issueKeys|issueIdOrKeys)'
},
'values' => issue_keys_type
}
}
end
def issue_keys_type
{
'type' => 'array',
'items' => { 'type' => 'string' },
'minItems' => 1,
'maxItems' => 100
}
end
def deploy_info_payload
payload('deployments', deployment_info)
end
def build_info_payload
payload('builds', build_info)
end
def ff_info_payload
pl = payload('flags', feature_flag_info)
pl['properties']['properties'] = {
'type' => 'object',
'additionalProperties' => { 'type' => 'string' },
'maxProperties' => 5,
'propertyNames' => { 'pattern' => '^[^_][^:]+$' }
}
pl
end
def payload(key, schema)
{
'type' => 'object',
'additionalProperties' => false,
'required' => ['providerMetadata', key],
'properties' => {
'providerMetadata' => provider_metadata,
key => { 'type' => 'array', 'items' => schema }
}
}
end
def provider_metadata
{
'type' => 'object',
'required' => %w(product),
'properties' => { 'product' => { 'type' => 'string' } }
}
end
def iso8601_type
{
'type' => 'string',
'pattern' => '^-?([1-9][0-9]*)?[0-9]{4}-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$'
}
end
end
end
end