James E. Blair ca83980bb7 Clean up safety check
The safety check was originally written to detect when a dependncy
cycle changed without the pipeline manager noticing.

Since the dependency cycle refactor, items can have multiple changes
and previous processes that were designed around updates to items
causing cascading updates to items behind them (but in the same bundle)
no longer make as much sense.  However, the "safety check" now seems
to make more sense as the primary method for determining that a
dependency cycle has changed.  It fits in well with other checks
in pipeline processing now that it examines the situation for a
single item.

Resolve the temporary safety check by keeping it.  It is cleaned up
a bit and moved earlier in the pipeline processing.  We can also
clean up the slightly awkward silent dequeue/re-enqueue method and
incorporate it into the safety check.  Now the process is:

  If a dpendency cycle changes, dequeue the item without reporting
  and then re-enqueue all of the items changes.

This means that if a dependency cycle (no matter how large) is
split in half, we will keep both halves (now separate) in the
pipeline.  This behavior is likely to be the most intuitive to
users.

In general, there are two ways to update a dependency cycle: with a
new patchset that changes the graph (typically only gerrit) or with
a PR message or topic change (gerrit and others).  To achieve some
consistency between these methods, we reuse the same re-enqueue method
in both cases (but in the case of a patchset superceding a change,
we don't re-enqueue the old change; but we do expect the
patchset-created event to enqueue the new version).  The timing is
still a little different, but the results are the same.

Change-Id: Ifa42b081cbd103ef04d8814c27ab5c51aa5e8335
2024-02-09 07:39:53 -08:00
2024-02-09 07:39:40 -08:00
2024-02-09 07:39:53 -08:00
2024-02-09 07:39:53 -08:00
2018-05-17 08:33:40 -07:00
2022-12-20 08:57:53 -08:00
2019-04-19 19:25:28 +00:00
2012-09-26 14:23:10 +00:00
2018-03-19 09:25:52 -07:00
2023-08-28 10:13:53 -07:00
2012-05-29 14:49:32 -07:00
2020-02-28 09:43:56 +01:00
2023-02-14 14:55:16 +00:00
2020-07-22 08:45:46 -07:00
2023-07-27 17:09:54 -07:00
2023-07-25 11:04:19 -07:00
2023-04-05 14:01:08 +02:00

Zuul

Zuul is a project gating system.

The latest documentation for Zuul v3 is published at: https://zuul-ci.org/docs/zuul/

If you are looking for the Edge routing service named Zuul that is related to Netflix, it can be found here: https://github.com/Netflix/zuul

If you are looking for the Javascript testing tool named Zuul, it can be found here: https://github.com/defunctzombie/zuul

Getting Help

There are two Zuul-related mailing lists:

zuul-announce

A low-traffic announcement-only list to which every Zuul operator or power-user should subscribe.

zuul-discuss

General discussion about Zuul, including questions about how to use it, and future development.

You will also find Zuul developers on Matrix <https://matrix.to/#/#zuul:opendev.org>.

Contributing

To browse the latest code, see: https://opendev.org/zuul/zuul To clone the latest code, use git clone https://opendev.org/zuul/zuul

Bugs are handled at: https://storyboard.openstack.org/#!/project/zuul/zuul

Suspected security vulnerabilities are most appreciated if first reported privately following any of the supported mechanisms described at https://zuul-ci.org/docs/zuul/user/vulnerabilities.html

Code reviews are handled by gerrit at https://review.opendev.org

After creating a Gerrit account, use git review to submit patches. Example:

# Do your commits
$ git review
# Enter your username if prompted

Join us on Matrix to discuss development or usage.

License

Zuul is free software. Most of Zuul is licensed under the Apache License, version 2.0. Some parts of Zuul are licensed under the General Public License, version 3.0. Please see the license headers at the tops of individual source files.

Python Version Support

Zuul requires Python 3. It does not support Python 2.

Since Zuul uses Ansible to drive CI jobs, Zuul can run tests anywhere Ansible can, including Python 2 environments.

Description
The Gatekeeper, or a project gating system
Readme 157 MiB
Languages
Python 87.9%
JavaScript 9.6%
C# 1.2%
CSS 0.4%
Shell 0.4%
Other 0.4%