From 2bab6e7361873b326de5620b16c92570e76cc763 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Mon, 7 Aug 2017 09:52:45 -0700 Subject: [PATCH] Require a base job This makes base jobs required and allows for a per-tenant default. Story: 2001110 Task: 4793 Change-Id: I26ffddad8358c156cfac749ce98af70f3447f671 --- doc/source/admin/tenants.rst | 9 +++++ doc/source/glossary.rst | 7 ++++ doc/source/user/config.rst | 23 ++++++++--- .../ansible/git/common-config/zuul.yaml | 4 ++ .../base-jobs/git/common-config/zuul.yaml | 24 +++++++++++ .../base-jobs/git/org_project/.zuul.yaml | 13 ++++++ .../config/base-jobs/git/org_project/README | 1 + .../git/org_project/playbooks/my-job.yaml | 2 + .../git/org_project/playbooks/other-job.yaml | 2 + tests/fixtures/config/base-jobs/main.yaml | 9 +++++ .../git/common-config/zuul.yaml | 4 ++ .../data-return/git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.yaml | 4 ++ .../git-driver/git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.yaml | 4 ++ .../in-repo/git/common-config/zuul.yaml | 4 ++ .../inventory/git/common-config/zuul.yaml | 4 ++ .../config/merges/git/common-config/zuul.yaml | 4 ++ .../git/org_common-config/zuul.yaml | 5 +++ .../git/common-config/zuul.yaml | 4 ++ .../multi-tenant/git/common-config/zuul.yaml | 4 ++ .../openstack/git/project-config/zuul.yaml | 1 + .../pre-playbook/git/common-config/zuul.yaml | 4 ++ .../push-reqs/git/org_common-config/zuul.yaml | 4 ++ .../email/git/common-config/zuul.yaml | 4 ++ .../newer-than/git/common-config/zuul.yaml | 4 ++ .../older-than/git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.yaml | 4 ++ .../reject/git/common-config/zuul.yaml | 4 ++ .../state/git/common-config/zuul.yaml | 4 ++ .../username/git/common-config/zuul.yaml | 4 ++ .../vote1/git/common-config/zuul.yaml | 4 ++ .../vote2/git/common-config/zuul.yaml | 4 ++ .../config/roles/git/common-config/zuul.yaml | 4 ++ .../semaphore/git/common-config/zuul.yaml | 4 ++ .../semaphore/zuul-reconfiguration.yaml | 4 ++ .../config/shadow/git/local-config/zuul.yaml | 1 + .../single-tenant/git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.d/jobs.yaml | 4 ++ .../sql-driver/git/common-config/zuul.yaml | 4 ++ .../streamer/git/common-config/zuul.yaml | 4 ++ .../success-url/git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.d/jobs.yaml | 4 ++ .../tenant-parser/git/common-config/zuul.yaml | 4 ++ .../git/org_common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.yaml | 4 ++ .../git/common-config/zuul.yaml | 4 ++ tests/fixtures/layouts/autohold.yaml | 4 ++ tests/fixtures/layouts/basic-github.yaml | 5 +++ tests/fixtures/layouts/crd-github.yaml | 9 +++++ tests/fixtures/layouts/dependent-github.yaml | 6 +++ tests/fixtures/layouts/dequeue-github.yaml | 4 ++ tests/fixtures/layouts/disable_at.yaml | 4 ++ .../layouts/dont-ignore-ref-deletes.yaml | 4 ++ tests/fixtures/layouts/files-github.yaml | 4 ++ tests/fixtures/layouts/footer-message.yaml | 4 ++ tests/fixtures/layouts/idle.yaml | 4 ++ .../fixtures/layouts/ignore-dependencies.yaml | 4 ++ tests/fixtures/layouts/inheritance.yaml | 4 ++ tests/fixtures/layouts/irrelevant-files.yaml | 4 ++ tests/fixtures/layouts/labeling-github.yaml | 4 ++ .../layouts/live-reconfiguration-add-job.yaml | 4 ++ .../live-reconfiguration-del-project.yaml | 4 ++ .../live-reconfiguration-failed-job.yaml | 4 ++ .../live-reconfiguration-shared-queue.yaml | 4 ++ tests/fixtures/layouts/merge-failure.yaml | 4 ++ tests/fixtures/layouts/merging-github.yaml | 4 ++ tests/fixtures/layouts/no-jobs-project.yaml | 4 ++ tests/fixtures/layouts/no-jobs.yaml | 4 ++ tests/fixtures/layouts/no-timer.yaml | 4 ++ tests/fixtures/layouts/nonvoting-job.yaml | 4 ++ .../fixtures/layouts/nonvoting-pipeline.yaml | 4 ++ tests/fixtures/layouts/one-job-project.yaml | 4 ++ tests/fixtures/layouts/push-tag-github.yaml | 5 +++ tests/fixtures/layouts/rate-limit.yaml | 4 ++ .../layouts/repo-checkout-four-project.yaml | 4 ++ .../repo-checkout-no-timer-override.yaml | 4 ++ .../layouts/repo-checkout-no-timer.yaml | 4 ++ .../fixtures/layouts/repo-checkout-post.yaml | 4 ++ .../layouts/repo-checkout-six-project.yaml | 4 ++ .../layouts/repo-checkout-timer-override.yaml | 4 ++ .../fixtures/layouts/repo-checkout-timer.yaml | 4 ++ .../layouts/repo-checkout-two-project.yaml | 4 ++ tests/fixtures/layouts/repo-deleted.yaml | 4 ++ tests/fixtures/layouts/reporting-github.yaml | 4 ++ .../layouts/reporting-multiple-github.yaml | 5 +++ .../fixtures/layouts/requirements-github.yaml | 13 ++++++ tests/fixtures/layouts/reviews-github.yaml | 4 ++ tests/fixtures/layouts/smtp.yaml | 4 ++ tests/fixtures/layouts/tags.yaml | 4 ++ tests/fixtures/layouts/three-projects.yaml | 4 ++ tests/fixtures/layouts/timer-smtp.yaml | 4 ++ tests/fixtures/layouts/timer.yaml | 4 ++ tests/unit/test_configloader.py | 3 +- tests/unit/test_model.py | 8 ++++ tests/unit/test_v3.py | 40 +++++++++++++++++++ zuul/configloader.py | 18 +++++++-- zuul/model.py | 4 ++ 102 files changed, 520 insertions(+), 9 deletions(-) create mode 100644 tests/fixtures/config/base-jobs/git/common-config/zuul.yaml create mode 100644 tests/fixtures/config/base-jobs/git/org_project/.zuul.yaml create mode 100644 tests/fixtures/config/base-jobs/git/org_project/README create mode 100644 tests/fixtures/config/base-jobs/git/org_project/playbooks/my-job.yaml create mode 100644 tests/fixtures/config/base-jobs/git/org_project/playbooks/other-job.yaml create mode 100644 tests/fixtures/config/base-jobs/main.yaml diff --git a/doc/source/admin/tenants.rst b/doc/source/admin/tenants.rst index b518c913d8..a1709a6f3d 100644 --- a/doc/source/admin/tenants.rst +++ b/doc/source/admin/tenants.rst @@ -165,3 +165,12 @@ configuration. An example tenant definition is: can be limited to the protected branches which are gated. This is a tenant wide setting and can be overridden per project. This currently only affects GitHub projects. + + .. attr:: default-parent + :default: base + + If a job is defined without an explicit :attr:`job.parent` + attribute, this job will be configured as the job's parent. + This allows an administrator to configure a default base job to + implement local policies such as node setup and artifact + publishing. diff --git a/doc/source/glossary.rst b/doc/source/glossary.rst index 6c8a4b44ff..d4dbf01c67 100644 --- a/doc/source/glossary.rst +++ b/doc/source/glossary.rst @@ -6,6 +6,13 @@ Glossary .. glossary:: :sorted: + base job + + A job with no parent. A base job may only be defined in a + :term:`config-project`. Multiple base jobs may be defined, but + each tenant has a single default job which will be used as the + parent of any job which does not specify one explicitly. + check By convention, the name of a pipeline which performs pre-merge diff --git a/doc/source/user/config.rst b/doc/source/user/config.rst index 446718baa9..b2e4be2a87 100644 --- a/doc/source/user/config.rst +++ b/doc/source/user/config.rst @@ -17,9 +17,10 @@ they specify one of two security contexts for that project. A *config-project* is one which is primarily tasked with holding configuration information and job content for Zuul. Jobs which are defined in a config-project are run with elevated privileges, and all -Zuul configuration items are available for use. It is expected that -changes to config-projects will undergo careful scrutiny before being -merged. +Zuul configuration items are available for use. Base jobs (that is, +jobs without a parent) may only be defined in config-projects. It is +expected that changes to config-projects will undergo careful scrutiny +before being merged. An *untrusted-project* is a project whose primary focus is not to operate Zuul, but rather it is one of the projects being tested or @@ -439,6 +440,12 @@ specialization before arriving at a particular job. A job may inherit from any other job in any project (however, if the other job is marked as ``final``, some attributes may not be overidden). +A job with no parent is called a *base job* and may only be defined in +a :term:`config-project`. Every other job must have a parent, and so +ultimately, all jobs must have an inheritance path which terminates at +a base job. Each tenant has a default parent job which will be used +if no explicit parent is specified. + Jobs also support a concept called variance. The first time a job definition appears is called the reference definition of the job. Subsequent job definitions with the same name are called variants. @@ -503,11 +510,17 @@ Here is an example of two job definitions: this name to use as the main playbook for the job. This name is also referenced later in a project pipeline configuration. + .. TODO: figure out how to link the parent default to tenant.default.parent + .. attr:: parent + :default: Tenant default-parent Specifies a job to inherit from. The parent job can be defined - in this or any other project. Any attributes not specified on - a job will be collected from its parent. + in this or any other project. Any attributes not specified on a + job will be collected from its parent. If no value is supplied + here, the job specified by :attr:`tenant.default-parent` will be + used. If **parent** is set to ``null`` (which is only valid in + a :term:`config-project`), this is a :term:`base job`. .. attr:: description diff --git a/tests/fixtures/config/ansible/git/common-config/zuul.yaml b/tests/fixtures/config/ansible/git/common-config/zuul.yaml index 7a144fbc4d..c70191feae 100644 --- a/tests/fixtures/config/ansible/git/common-config/zuul.yaml +++ b/tests/fixtures/config/ansible/git/common-config/zuul.yaml @@ -69,6 +69,10 @@ data: value: vartest_secret +- job: + name: base + parent: null + - job: name: base-urls success-url: https://success.example.com/zuul-logs/{build.uuid}/ diff --git a/tests/fixtures/config/base-jobs/git/common-config/zuul.yaml b/tests/fixtures/config/base-jobs/git/common-config/zuul.yaml new file mode 100644 index 0000000000..0603d237d4 --- /dev/null +++ b/tests/fixtures/config/base-jobs/git/common-config/zuul.yaml @@ -0,0 +1,24 @@ +- pipeline: + name: check + manager: independent + trigger: + gerrit: + - event: patchset-created + success: + gerrit: + Verified: 1 + failure: + gerrit: + Verified: -1 + +- job: + name: my-base + parent: null + tags: + - mybase + +- job: + name: other-base + parent: null + tags: + - otherbase diff --git a/tests/fixtures/config/base-jobs/git/org_project/.zuul.yaml b/tests/fixtures/config/base-jobs/git/org_project/.zuul.yaml new file mode 100644 index 0000000000..9844c143f1 --- /dev/null +++ b/tests/fixtures/config/base-jobs/git/org_project/.zuul.yaml @@ -0,0 +1,13 @@ +- job: + name: my-job + +- job: + name: other-job + parent: other-base + +- project: + name: org/project + check: + jobs: + - my-job + - other-job diff --git a/tests/fixtures/config/base-jobs/git/org_project/README b/tests/fixtures/config/base-jobs/git/org_project/README new file mode 100644 index 0000000000..9daeafb986 --- /dev/null +++ b/tests/fixtures/config/base-jobs/git/org_project/README @@ -0,0 +1 @@ +test diff --git a/tests/fixtures/config/base-jobs/git/org_project/playbooks/my-job.yaml b/tests/fixtures/config/base-jobs/git/org_project/playbooks/my-job.yaml new file mode 100644 index 0000000000..f679dceaef --- /dev/null +++ b/tests/fixtures/config/base-jobs/git/org_project/playbooks/my-job.yaml @@ -0,0 +1,2 @@ +- hosts: all + tasks: [] diff --git a/tests/fixtures/config/base-jobs/git/org_project/playbooks/other-job.yaml b/tests/fixtures/config/base-jobs/git/org_project/playbooks/other-job.yaml new file mode 100644 index 0000000000..f679dceaef --- /dev/null +++ b/tests/fixtures/config/base-jobs/git/org_project/playbooks/other-job.yaml @@ -0,0 +1,2 @@ +- hosts: all + tasks: [] diff --git a/tests/fixtures/config/base-jobs/main.yaml b/tests/fixtures/config/base-jobs/main.yaml new file mode 100644 index 0000000000..3ab6dcaad9 --- /dev/null +++ b/tests/fixtures/config/base-jobs/main.yaml @@ -0,0 +1,9 @@ +- tenant: + name: tenant-one + default-parent: my-base + source: + gerrit: + config-projects: + - common-config + untrusted-projects: + - org/project diff --git a/tests/fixtures/config/conflict-config/git/common-config/zuul.yaml b/tests/fixtures/config/conflict-config/git/common-config/zuul.yaml index 792fc8fcde..469dd7e672 100644 --- a/tests/fixtures/config/conflict-config/git/common-config/zuul.yaml +++ b/tests/fixtures/config/conflict-config/git/common-config/zuul.yaml @@ -1,2 +1,6 @@ +- job: + name: base + parent: null + - job: name: trusted-zuul.yaml-job diff --git a/tests/fixtures/config/data-return/git/common-config/zuul.yaml b/tests/fixtures/config/data-return/git/common-config/zuul.yaml index 38107e5134..4db7eb6941 100644 --- a/tests/fixtures/config/data-return/git/common-config/zuul.yaml +++ b/tests/fixtures/config/data-return/git/common-config/zuul.yaml @@ -12,6 +12,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: data-return diff --git a/tests/fixtures/config/dependency-graph/git/common-config/zuul.yaml b/tests/fixtures/config/dependency-graph/git/common-config/zuul.yaml index 975d04e87d..4179226469 100644 --- a/tests/fixtures/config/dependency-graph/git/common-config/zuul.yaml +++ b/tests/fixtures/config/dependency-graph/git/common-config/zuul.yaml @@ -19,6 +19,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: A diff --git a/tests/fixtures/config/disk-accountant/git/common-config/zuul.yaml b/tests/fixtures/config/disk-accountant/git/common-config/zuul.yaml index 83a5158a31..4a13e731d7 100644 --- a/tests/fixtures/config/disk-accountant/git/common-config/zuul.yaml +++ b/tests/fixtures/config/disk-accountant/git/common-config/zuul.yaml @@ -12,6 +12,10 @@ gerrit: verified: -1 +- job: + name: base + parent: null + - job: name: dd-big-empty-file diff --git a/tests/fixtures/config/duplicate-pipeline/git/common-config/zuul.yaml b/tests/fixtures/config/duplicate-pipeline/git/common-config/zuul.yaml index dabe58ce0a..117e3814cf 100755 --- a/tests/fixtures/config/duplicate-pipeline/git/common-config/zuul.yaml +++ b/tests/fixtures/config/duplicate-pipeline/git/common-config/zuul.yaml @@ -26,6 +26,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/config/git-driver/git/common-config/zuul.yaml b/tests/fixtures/config/git-driver/git/common-config/zuul.yaml index 128bbb502a..34d1136934 100644 --- a/tests/fixtures/config/git-driver/git/common-config/zuul.yaml +++ b/tests/fixtures/config/git-driver/git/common-config/zuul.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/config/implicit-roles/git/common-config/zuul.yaml b/tests/fixtures/config/implicit-roles/git/common-config/zuul.yaml index 5b2636f68c..c941573e6b 100644 --- a/tests/fixtures/config/implicit-roles/git/common-config/zuul.yaml +++ b/tests/fixtures/config/implicit-roles/git/common-config/zuul.yaml @@ -10,3 +10,7 @@ failure: gerrit: Verified: -1 + +- job: + name: base + parent: null diff --git a/tests/fixtures/config/in-repo/git/common-config/zuul.yaml b/tests/fixtures/config/in-repo/git/common-config/zuul.yaml index bfd61992f0..ff4268b7c0 100644 --- a/tests/fixtures/config/in-repo/git/common-config/zuul.yaml +++ b/tests/fixtures/config/in-repo/git/common-config/zuul.yaml @@ -69,6 +69,10 @@ type: approved trigger: {} +- job: + name: base + parent: null + - job: name: common-config-test diff --git a/tests/fixtures/config/inventory/git/common-config/zuul.yaml b/tests/fixtures/config/inventory/git/common-config/zuul.yaml index 177633d620..d2179b79da 100644 --- a/tests/fixtures/config/inventory/git/common-config/zuul.yaml +++ b/tests/fixtures/config/inventory/git/common-config/zuul.yaml @@ -31,6 +31,10 @@ - compute1 - compute2 +- job: + name: base + parent: null + - job: name: single-inventory nodes: diff --git a/tests/fixtures/config/merges/git/common-config/zuul.yaml b/tests/fixtures/config/merges/git/common-config/zuul.yaml index 7ae2ef0df1..1ea5048071 100644 --- a/tests/fixtures/config/merges/git/common-config/zuul.yaml +++ b/tests/fixtures/config/merges/git/common-config/zuul.yaml @@ -32,6 +32,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/config/multi-driver/git/org_common-config/zuul.yaml b/tests/fixtures/config/multi-driver/git/org_common-config/zuul.yaml index 7b5a77c014..7a5c1905e7 100644 --- a/tests/fixtures/config/multi-driver/git/org_common-config/zuul.yaml +++ b/tests/fixtures/config/multi-driver/git/org_common-config/zuul.yaml @@ -26,8 +26,13 @@ gerrit: Verified: 0 +- job: + name: base + parent: null + - job: name: project-gerrit + - job: name: project1-github diff --git a/tests/fixtures/config/multi-tenant-semaphore/git/common-config/zuul.yaml b/tests/fixtures/config/multi-tenant-semaphore/git/common-config/zuul.yaml index 5b2636f68c..4abe532121 100644 --- a/tests/fixtures/config/multi-tenant-semaphore/git/common-config/zuul.yaml +++ b/tests/fixtures/config/multi-tenant-semaphore/git/common-config/zuul.yaml @@ -10,3 +10,7 @@ failure: gerrit: Verified: -1 + +- job: + name: base + parent: null \ No newline at end of file diff --git a/tests/fixtures/config/multi-tenant/git/common-config/zuul.yaml b/tests/fixtures/config/multi-tenant/git/common-config/zuul.yaml index 8e29d3bf89..27f2fd5e3a 100644 --- a/tests/fixtures/config/multi-tenant/git/common-config/zuul.yaml +++ b/tests/fixtures/config/multi-tenant/git/common-config/zuul.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: python27 nodes: diff --git a/tests/fixtures/config/openstack/git/project-config/zuul.yaml b/tests/fixtures/config/openstack/git/project-config/zuul.yaml index b3a8b0cb07..2506db08f2 100644 --- a/tests/fixtures/config/openstack/git/project-config/zuul.yaml +++ b/tests/fixtures/config/openstack/git/project-config/zuul.yaml @@ -35,6 +35,7 @@ - job: name: base + parent: null timeout: 30 nodes: - name: controller diff --git a/tests/fixtures/config/pre-playbook/git/common-config/zuul.yaml b/tests/fixtures/config/pre-playbook/git/common-config/zuul.yaml index cfece30a9c..0a6c5573de 100644 --- a/tests/fixtures/config/pre-playbook/git/common-config/zuul.yaml +++ b/tests/fixtures/config/pre-playbook/git/common-config/zuul.yaml @@ -12,6 +12,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: python27 pre-run: playbooks/pre diff --git a/tests/fixtures/config/push-reqs/git/org_common-config/zuul.yaml b/tests/fixtures/config/push-reqs/git/org_common-config/zuul.yaml index 6569966756..63af1c96e5 100644 --- a/tests/fixtures/config/push-reqs/git/org_common-config/zuul.yaml +++ b/tests/fixtures/config/push-reqs/git/org_common-config/zuul.yaml @@ -76,6 +76,10 @@ gerrit: - event: ref-updated +- job: + name: base + parent: null + - job: name: job1 diff --git a/tests/fixtures/config/requirements/email/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/email/git/common-config/zuul.yaml index 1626168c87..90c9ac234c 100644 --- a/tests/fixtures/config/requirements/email/git/common-config/zuul.yaml +++ b/tests/fixtures/config/requirements/email/git/common-config/zuul.yaml @@ -30,6 +30,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project1-job diff --git a/tests/fixtures/config/requirements/newer-than/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/newer-than/git/common-config/zuul.yaml index 2980ef131a..5f266a45c5 100644 --- a/tests/fixtures/config/requirements/newer-than/git/common-config/zuul.yaml +++ b/tests/fixtures/config/requirements/newer-than/git/common-config/zuul.yaml @@ -32,6 +32,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project1-job diff --git a/tests/fixtures/config/requirements/older-than/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/older-than/git/common-config/zuul.yaml index 9e2f5d7f34..4287a94f9c 100644 --- a/tests/fixtures/config/requirements/older-than/git/common-config/zuul.yaml +++ b/tests/fixtures/config/requirements/older-than/git/common-config/zuul.yaml @@ -32,6 +32,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project1-job diff --git a/tests/fixtures/config/requirements/reject-username/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/reject-username/git/common-config/zuul.yaml index 333a4c779b..aabfb6a941 100644 --- a/tests/fixtures/config/requirements/reject-username/git/common-config/zuul.yaml +++ b/tests/fixtures/config/requirements/reject-username/git/common-config/zuul.yaml @@ -30,6 +30,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project1-job diff --git a/tests/fixtures/config/requirements/reject/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/reject/git/common-config/zuul.yaml index 9aef0c5022..2661eed39a 100644 --- a/tests/fixtures/config/requirements/reject/git/common-config/zuul.yaml +++ b/tests/fixtures/config/requirements/reject/git/common-config/zuul.yaml @@ -46,6 +46,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project1-job diff --git a/tests/fixtures/config/requirements/state/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/state/git/common-config/zuul.yaml index 081b655702..715b89f67a 100644 --- a/tests/fixtures/config/requirements/state/git/common-config/zuul.yaml +++ b/tests/fixtures/config/requirements/state/git/common-config/zuul.yaml @@ -49,6 +49,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-job diff --git a/tests/fixtures/config/requirements/username/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/username/git/common-config/zuul.yaml index d5f3553432..778ac16474 100644 --- a/tests/fixtures/config/requirements/username/git/common-config/zuul.yaml +++ b/tests/fixtures/config/requirements/username/git/common-config/zuul.yaml @@ -30,6 +30,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project1-job diff --git a/tests/fixtures/config/requirements/vote1/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/vote1/git/common-config/zuul.yaml index 787cf0de08..b5d7498d31 100644 --- a/tests/fixtures/config/requirements/vote1/git/common-config/zuul.yaml +++ b/tests/fixtures/config/requirements/vote1/git/common-config/zuul.yaml @@ -32,6 +32,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project1-job diff --git a/tests/fixtures/config/requirements/vote2/git/common-config/zuul.yaml b/tests/fixtures/config/requirements/vote2/git/common-config/zuul.yaml index b91a2160d9..3f41868a2b 100644 --- a/tests/fixtures/config/requirements/vote2/git/common-config/zuul.yaml +++ b/tests/fixtures/config/requirements/vote2/git/common-config/zuul.yaml @@ -36,6 +36,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project1-job diff --git a/tests/fixtures/config/roles/git/common-config/zuul.yaml b/tests/fixtures/config/roles/git/common-config/zuul.yaml index a1b6e42f87..7ae62632b0 100644 --- a/tests/fixtures/config/roles/git/common-config/zuul.yaml +++ b/tests/fixtures/config/roles/git/common-config/zuul.yaml @@ -32,6 +32,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: common-config-test diff --git a/tests/fixtures/config/semaphore/git/common-config/zuul.yaml b/tests/fixtures/config/semaphore/git/common-config/zuul.yaml index 5eeee21763..c8bd322f0a 100644 --- a/tests/fixtures/config/semaphore/git/common-config/zuul.yaml +++ b/tests/fixtures/config/semaphore/git/common-config/zuul.yaml @@ -19,6 +19,10 @@ name: test-semaphore-two max: 2 +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/config/semaphore/zuul-reconfiguration.yaml b/tests/fixtures/config/semaphore/zuul-reconfiguration.yaml index 128bbb502a..34d1136934 100644 --- a/tests/fixtures/config/semaphore/zuul-reconfiguration.yaml +++ b/tests/fixtures/config/semaphore/zuul-reconfiguration.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/config/shadow/git/local-config/zuul.yaml b/tests/fixtures/config/shadow/git/local-config/zuul.yaml index dc2133f0a4..87f46b7a82 100644 --- a/tests/fixtures/config/shadow/git/local-config/zuul.yaml +++ b/tests/fixtures/config/shadow/git/local-config/zuul.yaml @@ -13,6 +13,7 @@ - job: name: base + parent: null - job: name: test2 diff --git a/tests/fixtures/config/single-tenant/git/common-config/zuul.yaml b/tests/fixtures/config/single-tenant/git/common-config/zuul.yaml index b768a83048..c92b232f54 100644 --- a/tests/fixtures/config/single-tenant/git/common-config/zuul.yaml +++ b/tests/fixtures/config/single-tenant/git/common-config/zuul.yaml @@ -40,6 +40,10 @@ - event: ref-updated ref: ^(?!refs/).*$ +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/config/split-config/git/common-config/zuul.d/jobs.yaml b/tests/fixtures/config/split-config/git/common-config/zuul.d/jobs.yaml index 280342c84c..9d155995fd 100644 --- a/tests/fixtures/config/split-config/git/common-config/zuul.d/jobs.yaml +++ b/tests/fixtures/config/split-config/git/common-config/zuul.d/jobs.yaml @@ -1,2 +1,6 @@ +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/config/sql-driver/git/common-config/zuul.yaml b/tests/fixtures/config/sql-driver/git/common-config/zuul.yaml index 01a8d0ffbd..b8f4d67ec1 100644 --- a/tests/fixtures/config/sql-driver/git/common-config/zuul.yaml +++ b/tests/fixtures/config/sql-driver/git/common-config/zuul.yaml @@ -14,6 +14,10 @@ resultsdb: resultsdb_failures: +- job: + name: base + parent: null + - job: name: project-merge diff --git a/tests/fixtures/config/streamer/git/common-config/zuul.yaml b/tests/fixtures/config/streamer/git/common-config/zuul.yaml index 5a653b4c1d..f9925fe5a1 100644 --- a/tests/fixtures/config/streamer/git/common-config/zuul.yaml +++ b/tests/fixtures/config/streamer/git/common-config/zuul.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: python27 vars: diff --git a/tests/fixtures/config/success-url/git/common-config/zuul.yaml b/tests/fixtures/config/success-url/git/common-config/zuul.yaml index 6fbad0ddd8..8929240249 100644 --- a/tests/fixtures/config/success-url/git/common-config/zuul.yaml +++ b/tests/fixtures/config/success-url/git/common-config/zuul.yaml @@ -16,6 +16,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: docs-draft-test success-url: http://docs-draft.example.org/{change.number:.2}/{change.number}/{change.patchset}/{pipeline.name}/{job.name}/{build.uuid:.7}/publish-docs/ diff --git a/tests/fixtures/config/templated-project/git/common-config/zuul.d/jobs.yaml b/tests/fixtures/config/templated-project/git/common-config/zuul.d/jobs.yaml index e05187122d..f9de1ad909 100644 --- a/tests/fixtures/config/templated-project/git/common-config/zuul.d/jobs.yaml +++ b/tests/fixtures/config/templated-project/git/common-config/zuul.d/jobs.yaml @@ -1,3 +1,7 @@ +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/config/tenant-parser/git/common-config/zuul.yaml b/tests/fixtures/config/tenant-parser/git/common-config/zuul.yaml index ec371e837d..e21f967cd5 100644 --- a/tests/fixtures/config/tenant-parser/git/common-config/zuul.yaml +++ b/tests/fixtures/config/tenant-parser/git/common-config/zuul.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: common-config-job diff --git a/tests/fixtures/config/unprotected-branches/git/org_common-config/zuul.yaml b/tests/fixtures/config/unprotected-branches/git/org_common-config/zuul.yaml index c0fbf0d28a..b16683f2f7 100644 --- a/tests/fixtures/config/unprotected-branches/git/org_common-config/zuul.yaml +++ b/tests/fixtures/config/unprotected-branches/git/org_common-config/zuul.yaml @@ -17,3 +17,7 @@ start: github: comment: true + +- job: + name: base + parent: null diff --git a/tests/fixtures/config/zuul-connections-multiple-gerrits/git/common-config/zuul.yaml b/tests/fixtures/config/zuul-connections-multiple-gerrits/git/common-config/zuul.yaml index 87182b0b41..d70a384ecc 100644 --- a/tests/fixtures/config/zuul-connections-multiple-gerrits/git/common-config/zuul.yaml +++ b/tests/fixtures/config/zuul-connections-multiple-gerrits/git/common-config/zuul.yaml @@ -43,6 +43,10 @@ another_gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/config/zuul-connections-same-gerrit/git/common-config/zuul.yaml b/tests/fixtures/config/zuul-connections-same-gerrit/git/common-config/zuul.yaml index e16bb80e43..eb65279186 100644 --- a/tests/fixtures/config/zuul-connections-same-gerrit/git/common-config/zuul.yaml +++ b/tests/fixtures/config/zuul-connections-same-gerrit/git/common-config/zuul.yaml @@ -11,6 +11,10 @@ alt_voting_gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/config/zuultrigger/parent-change-enqueued/git/common-config/zuul.yaml b/tests/fixtures/config/zuultrigger/parent-change-enqueued/git/common-config/zuul.yaml index aae8b8d019..3dd8324701 100644 --- a/tests/fixtures/config/zuultrigger/parent-change-enqueued/git/common-config/zuul.yaml +++ b/tests/fixtures/config/zuultrigger/parent-change-enqueued/git/common-config/zuul.yaml @@ -45,6 +45,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: project-check diff --git a/tests/fixtures/config/zuultrigger/project-change-merged/git/common-config/zuul.yaml b/tests/fixtures/config/zuultrigger/project-change-merged/git/common-config/zuul.yaml index f0f3584415..a5c5a1c60e 100644 --- a/tests/fixtures/config/zuultrigger/project-change-merged/git/common-config/zuul.yaml +++ b/tests/fixtures/config/zuultrigger/project-change-merged/git/common-config/zuul.yaml @@ -43,6 +43,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-check diff --git a/tests/fixtures/layouts/autohold.yaml b/tests/fixtures/layouts/autohold.yaml index 015e5623d8..515f79dc1e 100644 --- a/tests/fixtures/layouts/autohold.yaml +++ b/tests/fixtures/layouts/autohold.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-test2 nodes: diff --git a/tests/fixtures/layouts/basic-github.yaml b/tests/fixtures/layouts/basic-github.yaml index 709fd029b1..d7b323a28d 100644 --- a/tests/fixtures/layouts/basic-github.yaml +++ b/tests/fixtures/layouts/basic-github.yaml @@ -17,8 +17,13 @@ failure: github: {} +- job: + name: base + parent: null + - job: name: project-test1 + - job: name: project-test2 diff --git a/tests/fixtures/layouts/crd-github.yaml b/tests/fixtures/layouts/crd-github.yaml index 11bdf7601f..9696226934 100644 --- a/tests/fixtures/layouts/crd-github.yaml +++ b/tests/fixtures/layouts/crd-github.yaml @@ -27,16 +27,25 @@ failure: github: {} +- job: + name: base + parent: null + - job: name: project1-test + - job: name: project2-test + - job: name: project3-test + - job: name: project4-test + - job: name: project5-test + - job: name: project6-test diff --git a/tests/fixtures/layouts/dependent-github.yaml b/tests/fixtures/layouts/dependent-github.yaml index 46cc7b3aba..eb741633a6 100644 --- a/tests/fixtures/layouts/dependent-github.yaml +++ b/tests/fixtures/layouts/dependent-github.yaml @@ -15,10 +15,16 @@ github: unlabel: 'merge' +- job: + name: base + parent: null + - job: name: project-test1 + - job: name: project-test2 + - job: name: project-merge failure-message: Unable to merge change diff --git a/tests/fixtures/layouts/dequeue-github.yaml b/tests/fixtures/layouts/dequeue-github.yaml index 25e92c99ef..ae61cd5356 100644 --- a/tests/fixtures/layouts/dequeue-github.yaml +++ b/tests/fixtures/layouts/dequeue-github.yaml @@ -8,6 +8,10 @@ - opened - changed +- job: + name: base + parent: null + - job: name: one-job-project-merge diff --git a/tests/fixtures/layouts/disable_at.yaml b/tests/fixtures/layouts/disable_at.yaml index 09082a425a..7b1b8c896e 100644 --- a/tests/fixtures/layouts/disable_at.yaml +++ b/tests/fixtures/layouts/disable_at.yaml @@ -15,6 +15,10 @@ to: you@example.com disable-after-consecutive-failures: 3 +- job: + name: base + parent: null + - job: name: project-test1 nodes: diff --git a/tests/fixtures/layouts/dont-ignore-ref-deletes.yaml b/tests/fixtures/layouts/dont-ignore-ref-deletes.yaml index 6a05fe60c0..6a92deb64b 100644 --- a/tests/fixtures/layouts/dont-ignore-ref-deletes.yaml +++ b/tests/fixtures/layouts/dont-ignore-ref-deletes.yaml @@ -7,6 +7,10 @@ ref: ^(?!refs/).*$ ignore-deletes: false +- job: + name: base + parent: null + - job: name: project-post nodes: diff --git a/tests/fixtures/layouts/files-github.yaml b/tests/fixtures/layouts/files-github.yaml index 734b945452..ec352590c0 100644 --- a/tests/fixtures/layouts/files-github.yaml +++ b/tests/fixtures/layouts/files-github.yaml @@ -6,6 +6,10 @@ - event: pull_request action: opened +- job: + name: base + parent: null + - job: name: project-test1 files: diff --git a/tests/fixtures/layouts/footer-message.yaml b/tests/fixtures/layouts/footer-message.yaml index e5003716f0..4ee25f6781 100644 --- a/tests/fixtures/layouts/footer-message.yaml +++ b/tests/fixtures/layouts/footer-message.yaml @@ -25,6 +25,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: project-test1 # success-url: http://logs.exxxample.com/{change.number}/{change.patchset}/{pipeline.name}/{job.name} diff --git a/tests/fixtures/layouts/idle.yaml b/tests/fixtures/layouts/idle.yaml index 49c45acc10..ec3140877c 100644 --- a/tests/fixtures/layouts/idle.yaml +++ b/tests/fixtures/layouts/idle.yaml @@ -5,6 +5,10 @@ timer: - time: '* * * * * */1' +- job: + name: base + parent: null + - job: name: project-bitrot nodes: diff --git a/tests/fixtures/layouts/ignore-dependencies.yaml b/tests/fixtures/layouts/ignore-dependencies.yaml index 9eab9f4045..89a82b330c 100644 --- a/tests/fixtures/layouts/ignore-dependencies.yaml +++ b/tests/fixtures/layouts/ignore-dependencies.yaml @@ -12,6 +12,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project1-merge diff --git a/tests/fixtures/layouts/inheritance.yaml b/tests/fixtures/layouts/inheritance.yaml index 146ca4dea1..3fe7fd4987 100644 --- a/tests/fixtures/layouts/inheritance.yaml +++ b/tests/fixtures/layouts/inheritance.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-test-irrelevant-starts-empty diff --git a/tests/fixtures/layouts/irrelevant-files.yaml b/tests/fixtures/layouts/irrelevant-files.yaml index fbcca8f7fe..97f58e7caf 100644 --- a/tests/fixtures/layouts/irrelevant-files.yaml +++ b/tests/fixtures/layouts/irrelevant-files.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-test-irrelevant-files diff --git a/tests/fixtures/layouts/labeling-github.yaml b/tests/fixtures/layouts/labeling-github.yaml index 33ce993020..2441a9c581 100644 --- a/tests/fixtures/layouts/labeling-github.yaml +++ b/tests/fixtures/layouts/labeling-github.yaml @@ -19,6 +19,10 @@ unlabel: - 'test' +- job: + name: base + parent: null + - job: name: project-labels diff --git a/tests/fixtures/layouts/live-reconfiguration-add-job.yaml b/tests/fixtures/layouts/live-reconfiguration-add-job.yaml index 1616dcbc91..57d2a5fa81 100644 --- a/tests/fixtures/layouts/live-reconfiguration-add-job.yaml +++ b/tests/fixtures/layouts/live-reconfiguration-add-job.yaml @@ -19,6 +19,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/live-reconfiguration-del-project.yaml b/tests/fixtures/layouts/live-reconfiguration-del-project.yaml index 1eada5ce59..b149af0a4a 100644 --- a/tests/fixtures/layouts/live-reconfiguration-del-project.yaml +++ b/tests/fixtures/layouts/live-reconfiguration-del-project.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/live-reconfiguration-failed-job.yaml b/tests/fixtures/layouts/live-reconfiguration-failed-job.yaml index 2b97419621..c4719f4f10 100644 --- a/tests/fixtures/layouts/live-reconfiguration-failed-job.yaml +++ b/tests/fixtures/layouts/live-reconfiguration-failed-job.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/live-reconfiguration-shared-queue.yaml b/tests/fixtures/layouts/live-reconfiguration-shared-queue.yaml index 3cbed68def..e363b4cf83 100644 --- a/tests/fixtures/layouts/live-reconfiguration-shared-queue.yaml +++ b/tests/fixtures/layouts/live-reconfiguration-shared-queue.yaml @@ -32,6 +32,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/merge-failure.yaml b/tests/fixtures/layouts/merge-failure.yaml index cc683a975b..7c5121c0f5 100644 --- a/tests/fixtures/layouts/merge-failure.yaml +++ b/tests/fixtures/layouts/merge-failure.yaml @@ -46,6 +46,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/merging-github.yaml b/tests/fixtures/layouts/merging-github.yaml index 9f43f7550d..c9673b98da 100644 --- a/tests/fixtures/layouts/merging-github.yaml +++ b/tests/fixtures/layouts/merging-github.yaml @@ -13,6 +13,10 @@ merge: true comment: false +- job: + name: base + parent: null + - project: name: org/project merge: diff --git a/tests/fixtures/layouts/no-jobs-project.yaml b/tests/fixtures/layouts/no-jobs-project.yaml index 593a8d7b8b..8f965e2a74 100644 --- a/tests/fixtures/layouts/no-jobs-project.yaml +++ b/tests/fixtures/layouts/no-jobs-project.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: project-testfile files: diff --git a/tests/fixtures/layouts/no-jobs.yaml b/tests/fixtures/layouts/no-jobs.yaml index facae0a40a..301b27a853 100644 --- a/tests/fixtures/layouts/no-jobs.yaml +++ b/tests/fixtures/layouts/no-jobs.yaml @@ -32,6 +32,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: gate-noop diff --git a/tests/fixtures/layouts/no-timer.yaml b/tests/fixtures/layouts/no-timer.yaml index fda7b8b6ca..3790ea7dab 100644 --- a/tests/fixtures/layouts/no-timer.yaml +++ b/tests/fixtures/layouts/no-timer.yaml @@ -20,6 +20,10 @@ gerrit: - event: ref-updated +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/layouts/nonvoting-job.yaml b/tests/fixtures/layouts/nonvoting-job.yaml index c536e1156b..6a912bf399 100644 --- a/tests/fixtures/layouts/nonvoting-job.yaml +++ b/tests/fixtures/layouts/nonvoting-job.yaml @@ -19,6 +19,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: nonvoting-project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/nonvoting-pipeline.yaml b/tests/fixtures/layouts/nonvoting-pipeline.yaml index be5d5afcd3..d8468ddf97 100644 --- a/tests/fixtures/layouts/nonvoting-pipeline.yaml +++ b/tests/fixtures/layouts/nonvoting-pipeline.yaml @@ -9,6 +9,10 @@ failure: gerrit: {} +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/one-job-project.yaml b/tests/fixtures/layouts/one-job-project.yaml index db117b1b09..4b682d34db 100644 --- a/tests/fixtures/layouts/one-job-project.yaml +++ b/tests/fixtures/layouts/one-job-project.yaml @@ -40,6 +40,10 @@ - event: ref-updated ref: ^(?!refs/).*$ +- job: + name: base + parent: null + - job: name: one-job-project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/push-tag-github.yaml b/tests/fixtures/layouts/push-tag-github.yaml index 54683e9cfb..5805127b05 100644 --- a/tests/fixtures/layouts/push-tag-github.yaml +++ b/tests/fixtures/layouts/push-tag-github.yaml @@ -14,8 +14,13 @@ - event: push ref: ^refs/tags/.*$ +- job: + name: base + parent: null + - job: name: project-post + - job: name: project-tag diff --git a/tests/fixtures/layouts/rate-limit.yaml b/tests/fixtures/layouts/rate-limit.yaml index 9392f5e0a5..1f32dbff14 100644 --- a/tests/fixtures/layouts/rate-limit.yaml +++ b/tests/fixtures/layouts/rate-limit.yaml @@ -24,6 +24,10 @@ window-decrease-type: exponential window-decrease-factor: 2 +- job: + name: base + parent: null + - job: name: project-merge diff --git a/tests/fixtures/layouts/repo-checkout-four-project.yaml b/tests/fixtures/layouts/repo-checkout-four-project.yaml index 36937e986c..17303f56c6 100644 --- a/tests/fixtures/layouts/repo-checkout-four-project.yaml +++ b/tests/fixtures/layouts/repo-checkout-four-project.yaml @@ -32,6 +32,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: integration required-projects: diff --git a/tests/fixtures/layouts/repo-checkout-no-timer-override.yaml b/tests/fixtures/layouts/repo-checkout-no-timer-override.yaml index de3bfe0ffb..4680869667 100644 --- a/tests/fixtures/layouts/repo-checkout-no-timer-override.yaml +++ b/tests/fixtures/layouts/repo-checkout-no-timer-override.yaml @@ -7,6 +7,10 @@ gerrit: - event: ref-updated +- job: + name: base + parent: null + - job: name: integration branches: master diff --git a/tests/fixtures/layouts/repo-checkout-no-timer.yaml b/tests/fixtures/layouts/repo-checkout-no-timer.yaml index 2b65850162..ed20bb1667 100644 --- a/tests/fixtures/layouts/repo-checkout-no-timer.yaml +++ b/tests/fixtures/layouts/repo-checkout-no-timer.yaml @@ -7,6 +7,10 @@ gerrit: - event: ref-updated +- job: + name: base + parent: null + - job: name: integration override-branch: stable/havana diff --git a/tests/fixtures/layouts/repo-checkout-post.yaml b/tests/fixtures/layouts/repo-checkout-post.yaml index 9698289a8c..191569c1ec 100644 --- a/tests/fixtures/layouts/repo-checkout-post.yaml +++ b/tests/fixtures/layouts/repo-checkout-post.yaml @@ -6,6 +6,10 @@ - event: ref-updated ref: ^(?!refs/).*$ +- job: + name: base + parent: null + - job: name: integration required-projects: diff --git a/tests/fixtures/layouts/repo-checkout-six-project.yaml b/tests/fixtures/layouts/repo-checkout-six-project.yaml index c0de47d0bc..9a81eaeed9 100644 --- a/tests/fixtures/layouts/repo-checkout-six-project.yaml +++ b/tests/fixtures/layouts/repo-checkout-six-project.yaml @@ -32,6 +32,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: integration required-projects: diff --git a/tests/fixtures/layouts/repo-checkout-timer-override.yaml b/tests/fixtures/layouts/repo-checkout-timer-override.yaml index 594d74c5a9..99fc4f5624 100644 --- a/tests/fixtures/layouts/repo-checkout-timer-override.yaml +++ b/tests/fixtures/layouts/repo-checkout-timer-override.yaml @@ -5,6 +5,10 @@ timer: - time: '* * * * * */1' +- job: + name: base + parent: null + - job: name: integration branches: master diff --git a/tests/fixtures/layouts/repo-checkout-timer.yaml b/tests/fixtures/layouts/repo-checkout-timer.yaml index 3c4d030c39..e70773249a 100644 --- a/tests/fixtures/layouts/repo-checkout-timer.yaml +++ b/tests/fixtures/layouts/repo-checkout-timer.yaml @@ -5,6 +5,10 @@ timer: - time: '* * * * * */1' +- job: + name: base + parent: null + - job: name: integration required-projects: diff --git a/tests/fixtures/layouts/repo-checkout-two-project.yaml b/tests/fixtures/layouts/repo-checkout-two-project.yaml index e25554b445..7910ae7a65 100644 --- a/tests/fixtures/layouts/repo-checkout-two-project.yaml +++ b/tests/fixtures/layouts/repo-checkout-two-project.yaml @@ -32,6 +32,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: integration required-projects: diff --git a/tests/fixtures/layouts/repo-deleted.yaml b/tests/fixtures/layouts/repo-deleted.yaml index cea3ddac44..6e6c301f20 100644 --- a/tests/fixtures/layouts/repo-deleted.yaml +++ b/tests/fixtures/layouts/repo-deleted.yaml @@ -32,6 +32,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/reporting-github.yaml b/tests/fixtures/layouts/reporting-github.yaml index ddb0588383..159f205516 100644 --- a/tests/fixtures/layouts/reporting-github.yaml +++ b/tests/fixtures/layouts/reporting-github.yaml @@ -78,6 +78,10 @@ comment: true status: 'failure' +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/fixtures/layouts/reporting-multiple-github.yaml b/tests/fixtures/layouts/reporting-multiple-github.yaml index 22fa1e7be5..0126ec5b49 100644 --- a/tests/fixtures/layouts/reporting-multiple-github.yaml +++ b/tests/fixtures/layouts/reporting-multiple-github.yaml @@ -22,8 +22,13 @@ github_ent: status: 'success' +- job: + name: base + parent: null + - job: name: project1-test1 + - job: name: project2-test2 diff --git a/tests/fixtures/layouts/requirements-github.yaml b/tests/fixtures/layouts/requirements-github.yaml index 891a36613c..f2ecd16fbe 100644 --- a/tests/fixtures/layouts/requirements-github.yaml +++ b/tests/fixtures/layouts/requirements-github.yaml @@ -183,24 +183,37 @@ github: comment: true +- job: + name: base + parent: null + - job: name: project1-pipeline + - job: name: project2-trigger + - job: name: project3-reviewusername + - job: name: project4-reviewreq + - job: name: project5-reviewuserstate + - job: name: project6-newerthan + - job: name: project7-olderthan + - job: name: project8-requireopen + - job: name: project9-requirecurrent + - job: name: project10-label diff --git a/tests/fixtures/layouts/reviews-github.yaml b/tests/fixtures/layouts/reviews-github.yaml index 1cc887adc8..f186fbe7f1 100644 --- a/tests/fixtures/layouts/reviews-github.yaml +++ b/tests/fixtures/layouts/reviews-github.yaml @@ -11,6 +11,10 @@ label: - 'tests passed' +- job: + name: base + parent: null + - job: name: project-reviews diff --git a/tests/fixtures/layouts/smtp.yaml b/tests/fixtures/layouts/smtp.yaml index bf1d273dec..5ea75ced7d 100644 --- a/tests/fixtures/layouts/smtp.yaml +++ b/tests/fixtures/layouts/smtp.yaml @@ -38,6 +38,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/tags.yaml b/tests/fixtures/layouts/tags.yaml index 646160e2f8..f86f5ab9da 100644 --- a/tests/fixtures/layouts/tags.yaml +++ b/tests/fixtures/layouts/tags.yaml @@ -11,6 +11,10 @@ gerrit: Verified: -1 +- job: + name: base + parent: null + - job: name: merge tags: diff --git a/tests/fixtures/layouts/three-projects.yaml b/tests/fixtures/layouts/three-projects.yaml index 6481fb9104..51cd40601b 100644 --- a/tests/fixtures/layouts/three-projects.yaml +++ b/tests/fixtures/layouts/three-projects.yaml @@ -32,6 +32,10 @@ Verified: 0 precedence: high +- job: + name: base + parent: null + - job: name: project-merge hold-following-changes: true diff --git a/tests/fixtures/layouts/timer-smtp.yaml b/tests/fixtures/layouts/timer-smtp.yaml index 66e9aafdc9..a27b183685 100644 --- a/tests/fixtures/layouts/timer-smtp.yaml +++ b/tests/fixtures/layouts/timer-smtp.yaml @@ -10,6 +10,10 @@ from: zuul_from@example.com subject: Periodic check for {change.project} succeeded +- job: + name: base + parent: null + - job: name: project-bitrot-stable-old success-url: http://logs.example.com/{job.name}/{build.number} diff --git a/tests/fixtures/layouts/timer.yaml b/tests/fixtures/layouts/timer.yaml index 45f137cd68..e1c4e77743 100644 --- a/tests/fixtures/layouts/timer.yaml +++ b/tests/fixtures/layouts/timer.yaml @@ -18,6 +18,10 @@ timer: - time: '* * * * * */1' +- job: + name: base + parent: null + - job: name: project-test1 diff --git a/tests/unit/test_configloader.py b/tests/unit/test_configloader.py index 1ba4ed94be..3b5c206b72 100644 --- a/tests/unit/test_configloader.py +++ b/tests/unit/test_configloader.py @@ -305,5 +305,6 @@ class TestConfigConflict(ZuulTestCase): tenant = self.sched.abide.tenants.get('tenant-one') jobs = sorted(tenant.layout.jobs.keys()) self.assertEquals( - ['noop', 'trusted-zuul.yaml-job', 'untrusted-zuul.yaml-job'], + ['base', 'noop', 'trusted-zuul.yaml-job', + 'untrusted-zuul.yaml-job'], jobs) diff --git a/tests/unit/test_model.py b/tests/unit/test_model.py index 3538555fac..6a63125e4d 100644 --- a/tests/unit/test_model.py +++ b/tests/unit/test_model.py @@ -65,6 +65,7 @@ class TestJob(BaseTestCase): '_source_context': self.context, '_start_mark': self.start_mark, 'name': 'job', + 'parent': None, 'irrelevant-files': [ '^docs/.*$' ]}) @@ -184,6 +185,7 @@ class TestJob(BaseTestCase): '_source_context': self.context, '_start_mark': self.start_mark, 'name': 'base', + 'parent': None, 'timeout': 30, 'pre-run': 'base-pre', 'post-run': 'base-post', @@ -389,6 +391,7 @@ class TestJob(BaseTestCase): '_source_context': self.context, '_start_mark': self.start_mark, 'name': 'base', + 'parent': None, 'timeout': 30, }) layout.addJob(base) @@ -487,6 +490,7 @@ class TestJob(BaseTestCase): '_source_context': self.context, '_start_mark': self.start_mark, 'name': 'base', + 'parent': None, 'timeout': 30, }) layout.addJob(base) @@ -565,6 +569,7 @@ class TestJob(BaseTestCase): '_source_context': self.context, '_start_mark': self.start_mark, 'name': 'base', + 'parent': None, 'timeout': 30, }) layout.addJob(base) @@ -614,6 +619,7 @@ class TestJob(BaseTestCase): base = configloader.JobParser.fromYaml(tenant, layout, { '_source_context': base_context, '_start_mark': self.start_mark, + 'parent': None, 'name': 'base', }) layout.addJob(base) @@ -639,6 +645,7 @@ class TestJob(BaseTestCase): '_source_context': self.context, '_start_mark': self.start_mark, 'name': 'job', + 'parent': None, 'allowed-projects': ['project'], }) self.layout.addJob(job) @@ -679,6 +686,7 @@ class TestJob(BaseTestCase): '_source_context': self.context, '_start_mark': self.start_mark, 'name': 'job', + 'parent': None, }) auth = model.AuthContext() auth.secrets.append('foo') diff --git a/tests/unit/test_v3.py b/tests/unit/test_v3.py index 7038471e35..15cb561610 100755 --- a/tests/unit/test_v3.py +++ b/tests/unit/test_v3.py @@ -1120,3 +1120,43 @@ class TestMaxNodesPerJob(AnsibleZuulTestCase): self.waitUntilSettled() self.assertNotIn("exceeds tenant max-nodes", B.messages[0], "B should not fail because of nodes limit") + + +class TestBaseJobs(ZuulTestCase): + tenant_config_file = 'config/base-jobs/main.yaml' + + def test_multiple_base_jobs(self): + A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A') + self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1)) + self.waitUntilSettled() + self.assertHistory([ + dict(name='my-job', result='SUCCESS', changes='1,1'), + dict(name='other-job', result='SUCCESS', changes='1,1'), + ], ordered=False) + self.assertEqual(self.getJobFromHistory('my-job'). + parameters['zuul']['jobtags'], + ['mybase']) + self.assertEqual(self.getJobFromHistory('other-job'). + parameters['zuul']['jobtags'], + ['otherbase']) + + def test_untrusted_base_job(self): + """Test that a base job may not be defined in an untrusted repo""" + in_repo_conf = textwrap.dedent( + """ + - job: + name: fail-base + parent: null + """) + + file_dict = {'.zuul.yaml': in_repo_conf} + A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A', + files=file_dict) + self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1)) + self.waitUntilSettled() + self.assertEqual(A.reported, 1, + "A should report failure") + self.assertEqual(A.patchsets[0]['approvals'][0]['value'], "-1") + self.assertIn('Base jobs must be defined in config projects', + A.messages[0]) + self.assertHistory([]) diff --git a/zuul/configloader.py b/zuul/configloader.py index 1036a2cb36..0ecbc14089 100644 --- a/zuul/configloader.py +++ b/zuul/configloader.py @@ -344,7 +344,7 @@ class JobParser(object): 'override-branch': str} job = {vs.Required('name'): str, - 'parent': str, + 'parent': vs.Any(str, None), 'failure-message': str, 'success-message': str, 'failure-url': str, @@ -441,9 +441,19 @@ class JobParser(object): job.auth.secrets.append(secret.decrypt( job.source_context.project.private_key)) + is_variant = layout.hasJob(conf['name']) if 'parent' in conf: - parent = layout.getJob(conf['parent']) - job.inheritFrom(parent) + if conf['parent'] is not None: + parent = layout.getJob(conf['parent']) + job.inheritFrom(parent) + else: + if not conf['_source_context'].trusted: + raise Exception( + "Base jobs must be defined in config projects") + else: + if not is_variant: + parent = layout.getJob(tenant.default_base_job) + job.inheritFrom(parent) # Roles are part of the playbook context so we must establish # them earlier than playbooks. @@ -984,6 +994,7 @@ class TenantParser(object): 'max-nodes-per-job': int, 'source': TenantParser.validateTenantSources(connections), 'exclude-unprotected-branches': bool, + 'default-parent': str, } return vs.Schema(tenant) @@ -997,6 +1008,7 @@ class TenantParser(object): if conf.get('exclude-unprotected-branches') is not None: tenant.exclude_unprotected_branches = \ conf['exclude-unprotected-branches'] + tenant.default_base_job = conf.get('default-parent', 'base') tenant.unparsed_config = conf unparsed_config = model.UnparsedTenantConfig() diff --git a/zuul/model.py b/zuul/model.py index 26a79636f4..9a89f75d70 100644 --- a/zuul/model.py +++ b/zuul/model.py @@ -2238,6 +2238,9 @@ class Layout(object): return self.jobs[name][0] raise Exception("Job %s not defined" % (name,)) + def hasJob(self, name): + return name in self.jobs + def getJobs(self, name): return self.jobs.get(name, []) @@ -2456,6 +2459,7 @@ class Tenant(object): self.name = name self.max_nodes_per_job = 5 self.exclude_unprotected_branches = False + self.default_base_job = None self.layout = None # The unparsed configuration from the main zuul config for # this tenant.