2021-02-22 17:27:13 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Atlassian
|
|
|
|
module Schemata
|
2021-03-08 18:12:59 +05:30
|
|
|
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' => {
|
2021-02-22 17:27:13 +05:30
|
|
|
'type' => 'object',
|
2021-03-08 18:12:59 +05:30
|
|
|
'required' => %w(totalNumber numberPassed numberFailed numberSkipped),
|
2021-02-22 17:27:13 +05:30
|
|
|
'properties' => {
|
2021-03-08 18:12:59 +05:30
|
|
|
'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' }
|
|
|
|
}
|
2021-02-22 17:27:13 +05:30
|
|
|
}
|
2021-03-08 18:12:59 +05:30
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
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' => '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)$'
|
2021-02-22 17:27:13 +05:30
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-03-08 18:12:59 +05:30
|
|
|
})
|
|
|
|
}
|
|
|
|
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
|
2021-02-22 17:27:13 +05:30
|
|
|
}
|
|
|
|
}
|
2021-03-08 18:12:59 +05:30
|
|
|
end
|
2021-02-22 17:27:13 +05:30
|
|
|
|
2021-03-08 18:12:59 +05:30
|
|
|
def feature_status_type
|
|
|
|
{
|
|
|
|
'type' => 'object',
|
|
|
|
'additionalProperties' => false,
|
|
|
|
'required' => %w(enabled),
|
|
|
|
'properties' => {
|
|
|
|
'enabled' => { 'type' => 'boolean' },
|
|
|
|
'defaultValue' => { 'type' => 'string' },
|
|
|
|
'rollout' => rollout_type
|
|
|
|
}
|
2021-02-22 17:27:13 +05:30
|
|
|
}
|
2021-03-08 18:12:59 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
def rollout_type
|
|
|
|
{
|
|
|
|
'type' => 'object',
|
|
|
|
'additionalProperties' => false,
|
|
|
|
'properties' => {
|
|
|
|
'percentage' => { 'type' => 'number' },
|
|
|
|
'text' => { 'type' => 'string' },
|
|
|
|
'rules' => { 'type' => 'number' }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
end
|
2021-02-22 17:27:13 +05:30
|
|
|
|
2021-03-08 18:12:59 +05:30
|
|
|
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
|
2021-02-22 17:27:13 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|