50dd589966
"abort-builds" must be present in job_contents_keys in order for it to properly work. Also add a multibranch test for the yamlparser that will verify that this works properly. Change-Id: Ide9cd0f89a19002977cdcc2dfb9cd873e7d16945
200 lines
4.4 KiB
Python
200 lines
4.4 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from .loc_loader import LocDict
|
|
from .position import Pos
|
|
|
|
|
|
job_contents_keys = {
|
|
# Same as for macros.
|
|
"parameters",
|
|
"properties",
|
|
"builders",
|
|
"wrappers",
|
|
"triggers",
|
|
"publishers",
|
|
"scm",
|
|
"pipeline-scm",
|
|
"reporters",
|
|
# General.
|
|
"description",
|
|
"project-type",
|
|
"folder",
|
|
"node",
|
|
"jdk",
|
|
"actions",
|
|
"disabled",
|
|
"display-name",
|
|
"block-downstream",
|
|
"block-upstream",
|
|
"auth-token",
|
|
"concurrent",
|
|
"workspace",
|
|
"child-workspace",
|
|
"quiet-period",
|
|
"retry-count",
|
|
"logrotate",
|
|
"raw",
|
|
# Builders.
|
|
"prebuilders",
|
|
"postbuilders",
|
|
# HipChat.
|
|
"hipchat",
|
|
# Notificatoins.
|
|
"notifications",
|
|
# project Flow.
|
|
"dsl",
|
|
"needs-workspace",
|
|
"dsl-file",
|
|
# GithubOrganization.
|
|
"prune-dead-branches",
|
|
"days-to-keep",
|
|
"number-to-keep",
|
|
"periodic-folder-trigger",
|
|
"github-org",
|
|
"script-path",
|
|
# Matrix.
|
|
"execution-strategy",
|
|
"yaml-strategy",
|
|
"p4-strategy",
|
|
"axes",
|
|
# Maven.
|
|
"maven",
|
|
"per-module-email",
|
|
# WorkflowMultiBranch.
|
|
"sandbox",
|
|
"script-id",
|
|
"script-path",
|
|
"prune-dead-branches",
|
|
"days-to-keep",
|
|
"number-to-keep",
|
|
"abort-builds",
|
|
"periodic-folder-trigger",
|
|
# Pipeline.
|
|
"dsl",
|
|
"sandbox",
|
|
# project Workflow.
|
|
"dsl",
|
|
"sandbox",
|
|
}
|
|
|
|
view_contents_keys = {
|
|
# Common.
|
|
"description",
|
|
"filter-executors",
|
|
"filter-queue",
|
|
# All
|
|
# <nothing>
|
|
# List.
|
|
"job-name",
|
|
"job-filters",
|
|
"width",
|
|
"alignment",
|
|
"columns",
|
|
"regex",
|
|
"recurse",
|
|
# Sectioned.
|
|
"sections",
|
|
# SectionedText.
|
|
"width",
|
|
"alignment",
|
|
"text",
|
|
"style",
|
|
# DeliveryPipeline.
|
|
"aggregated-changes-grouping-pattern",
|
|
"allow-abort",
|
|
"allow-manual-triggers",
|
|
"allow-pipeline-start",
|
|
"allow-rebuild",
|
|
"link-relative",
|
|
"link-to-console-log",
|
|
"max-number-of-visible-pipelines",
|
|
"name",
|
|
"no-of-columns",
|
|
"no-of-pipelines",
|
|
"paging-enabled",
|
|
"show-absolute-date-time",
|
|
"show-aggregated-changes",
|
|
"show-aggregated-pipeline",
|
|
"show-avatars",
|
|
"show-changes",
|
|
"show-description",
|
|
"show-promotions",
|
|
"show-static-analysis-results",
|
|
"show-test-results",
|
|
"show-total-build-time",
|
|
"update-interval",
|
|
"sorting",
|
|
"components",
|
|
"regexps",
|
|
# Nested.
|
|
"views",
|
|
"default-view",
|
|
"columns",
|
|
# Pipeline.
|
|
"first-job",
|
|
"name",
|
|
"no-of-displayed-builds",
|
|
"title",
|
|
"link-style",
|
|
"css-Url",
|
|
"latest-job-only",
|
|
"manual-trigger",
|
|
"show-parameters",
|
|
"parameters-in-headers",
|
|
"start-with-parameters",
|
|
"refresh-frequency",
|
|
"definition-header",
|
|
}
|
|
|
|
|
|
def split_contents_params(data, contents_keys):
|
|
contents = data.copy_with(
|
|
{key: value for key, value in data.items() if key in contents_keys}
|
|
)
|
|
params = data.copy_with(
|
|
{key: value for key, value in data.items() if key not in contents_keys}
|
|
)
|
|
return (contents, params)
|
|
|
|
|
|
@dataclass
|
|
class Defaults:
|
|
name: str
|
|
pos: Pos
|
|
params: dict
|
|
contents: dict # Values that go to job contents.
|
|
|
|
@classmethod
|
|
def add(cls, config, roots, data, pos):
|
|
d = data.copy()
|
|
name = d.pop_required_loc_string("name")
|
|
contents, params = split_contents_params(
|
|
d, job_contents_keys | view_contents_keys
|
|
)
|
|
defaults = cls(name, pos, params, contents)
|
|
roots.defaults[name] = defaults
|
|
|
|
@classmethod
|
|
def empty(cls):
|
|
return Defaults("empty", pos=None, params={}, contents={})
|
|
|
|
def merged_with_global(self, global_):
|
|
return Defaults(
|
|
name=f"{self.name}-merged-with-global",
|
|
pos=self.pos,
|
|
params=LocDict.merge(global_.params, self.params),
|
|
contents=LocDict.merge(global_.contents, self.contents),
|
|
)
|