Release Notes

Greenwave 2.3.0

Released 6 March 2024

  • Allows querying multiple decision contexts in a single decision

  • RemoteRule now supports a customized remote URL

  • Responds a 502 Bad Gateway HTTP error, when Koji or remote rule server are not available

  • Waived requirements now contain a waiver ID

  • Adds a landing page with the configuration information

  • Improves a RemoteRule handling (dealing with 404 error, regardless of other rules)

  • Allows matching of multiple product versions

  • Changes a status string, making it more consistent

Greenwave 2.2.0

Released 29 September 2022

  • Drops previously deprecated and misnamed blacklist policy attribute. It has been replaced by excluded_packages.

  • Adds additional message headers supported by the new stomp.py consumers to allow clients to select which messages they are interested in. The new headers and related decision change attributes:

    • subject_type

    • subject_identifier

    • product_version

    • decision_context

    • policies_satisified

    • summary

  • Fixes frequent message consumer disconnections.

  • Fixes waiving multiple scenarios. If a matching waiver has scenario=null, it will apply to all test results disregarding their scenario values.

  • Fixes using correct git commit URL from Koji build metadata (https://pagure.io/fedora-infrastructure/issue/10896).

Greenwave 2.1.0

Released 18 July 2022

  • Fixes timeouts in new ResultsDB and WaiverDB message listeners (increases heartbeat so that long decision making won’t cause the timeout).

  • Fixes decision update messages for legacy fedmsg-based consumers (includes topic to message body).

  • Replaces old unmaintained python-memcached library with pymemcache.

  • Removes old unused fedmsg code, obsolete Jenkinsfile and Vagrantfile.

Greenwave 2.0.0

Released 1 June 2022

  • Prometheus metrics endpoint /api/v1.0/metrics has been removed because it did not work correctly with multiple Gunicorn web workers and threads. Use separate statsd service and set GREENWAVE_STATSD_HOST environment variable (format is <STATSD_SERVER>:<STATSD_PORT>). If the variable is empty or unset, metrics will not be sent. Statsd data are sent using non-blocking UDP so any connection issues are nonfatal.

  • Multi-threaded workers in Gunicorn can be now enabled (smaller memory footprint).

  • Added new STOMP message consumers. This deprecates the old fedmsg consumers.

  • Application container image is much smaller (based on Red Hat Universal Base Image 8.5) containing more up-to-date dependencies from PyPI. Virtual environment under /venv has to be activated before running the application. This is handled automatically by the entrypoint script (/src/docker/docker-entrypoint.sh).

  • Poetry now manages the dependencies.

  • Project has been moved to GitHub.

  • GitHub Actions now run all tests including functional, linters, security scans and build/push container images.

  • CA bundle file override support through CA_URL environment variable has been dropped due to potential security issues. OpenShift supports mounting the file to replace the system CA bundle.

Greenwave 1.10.0

Released 18 January 2022

  • !Policy tag is now optional in remote rule policies

  • Added a support for valid_since and valid_until to PassingTestCaseRule

Greenwave 1.9.0

Released 19 July 2021

  • RHEL product versions in Brew/Koji build tasks are now recognized properly.

  • Internal subject type configuration can use regular expression to extract short product version from artifact name.

  • Satisfied requirements with type “fetched-gating-yaml” now contain “testcase” field so as not to break existing clients.

  • Unexpected or unsupported Koji task types are now ignored when guessing product version for new test results allowing decision updates to be properly published.

Greenwave 1.8.0

Released 24 May 2021

  • Remote rule file URLs are listed in the decision response

  • Improved performance of ResultsDB message consumer by caching passed results

  • Improved an error description when a Koji build identifier is an invalid format

  • Fixed publishing decision change for composes

  • Only one field decision_contexts (preferred) or decision_context (obsolete) can be set

  • Fixed returning multiple results for different scenarios and the same test case from the cache

  • Documentation has been updated and moved to readthedocs.org

Greenwave 1.7.0

Released 13 January 2021

  • Added a support for the ‘scenario’ field in waivers

  • Greenwave will now return a JSON error message when the Koji connection times out

  • Koji client and requests will be cached in resultsdb-consumer

  • Decision change message won’t be published on ‘QUEUED’ and ‘RUNNING’ test result messages

  • Greenwave will now cache successful (passed) results

  • REMOTE_RULE_POLICIES now supports multiple URL templates (list)

Greenwave 1.6.2

Released 5 October 2020

  • Changes for subject type redhat-container-image. There are two queries now. One for the subject type itself and second is for the koji-build subject type.

  • When looking for the appropriate subject type for the received message, the name of subject type are now being checked first

Greenwave 1.6.1

Released 2 September 2020

  • Koji “getBuild()” XML RPC calls are now cached even if the build is not found. In rare cases, when using a fake koji_build artifact, this can save a lot of time.

  • Consumers using fedmsg can now work with stomp_ack_mode=client-individual option. In this mode, invalid fedmsg messages that cause an exception are ACKed and not processed again (instead of NACKed and resent).

Greenwave 1.6.0

Released 25 August 2020

  • New policy field decision_contexts allows multiple decision contexts to be added to the single policy. Old field decision_context is still supported for old policies. However, it is obsolete and should not be used together with the new field.

  • REMOTE_RULE_POLICIES['*'] is now used before DIST_GIT_URL_TEMPLATE if both were specified.

  • Koji XML RPC calls now use REQUESTS_TIMEOUT option instead of the unspecified default timeout which caused waiting on results indefinitely.

Greenwave 1.5.5

Released 16 June 2020

  • Subject information is now included also for passed test cases

  • Waived requirements are now consistent for both missed and failed tests

  • More precise error in logs for non-found Koji builds

  • Duplicate requirements are now being checked after waiving

Greenwave 1.5.4

Released 17 March 2020

  • New field for Remote Rule URL template {subject_id} can now be used to place a subject identifier to Remote Rule URL.

Greenwave 1.5.3

Released 3 March 2020

  • Exceptions and subject types are now properly logged by message consumers.

  • Default configuration path for subject types in the container is now correctly set for message consumers.

  • Paths to policies and subject types in the container can newly be overridden by environment variables GREENWAVE_SUBJECT_TYPES_DIR and GREENWAVE_POLICIES_DIR unless these are already specified in the configuration file.

  • The container no longer contains duplicate source files.

Greenwave 1.5.2

Released 18 February 2020

  • Fixed some issues regarding backward compatibility of the remote rule configurations (if REMOTE_RULE_POLICIES wasn’t set).

  • GIT archive is no longer supported for remote rules.

  • Message consumers will retry decision requests on failure.

  • Fixed getting all compose test results with distinct system_variant.

  • Fixed initializing consumer when using fedora-messaging (broken in v1.4.2).

Greenwave 1.5.1

Released 5 February 2020

  • Configuration of DIST_GIT_URL_TEMPLATE is now backward compatible with the one for versions below 1.5.0

Greenwave 1.5.0

Released 2 February 2020

  • Remote rule changes:
    • Remote rules can now use GIT archive mechanism again

    • Remote rules can use different servers depending on the subject type

    • Base URL is now part of the URL template for HTTP mechanism. So DIST_GIT_BASE_URL should now be directly included to DIST_GIT_URL_TEMPLATE in configuration. If there is a {pkg_namespace} placeholder in URL template, slash symbol (/) will be added automatically to its name when it is not empty, so there should be no additional slash in URL template.

  • The Greenwave container image now uses Fedora 31 base image.

Greenwave 1.4.2

Released 3 December 2019

  • Greenwave now handles infrastructure errors during tests: Summary now contains error count and error_reason.

  • If the same test is configured both in the global policy and in the gating.yaml file, it is being returned only once.

  • product_versions field is no longer mandatory in the gating.yaml file.

Greenwave 1.4.1

Released 11 November 2019

  • Greenwave now using extra->source->original_url field instead of just source field to retreive SCM information from Koji build. If there is no source nor extra->source->original_url field, other rules are still being checked.

  • Added support for the redhat-container-image subject type. This type is now also allowed for using in the RemoteRule

Greenwave 1.4.0

Released 15 October 2019

  • Changing the upstream exception handling. Connection timeout now causes 504 response, other connection error cause 502, missing build in Koji causes 404.

Greenwave 1.3.2

Released 9 September 2019

  • Removed pull of gating.yaml with git archive. SHA1 hashes seem not be to allowed when invoking git-archive. Since the rev field is needed to retrieve the gating.yaml file, this mode was removed.

Greenwave 1.3.1

Released 28 August 2019

  • In previous version, if gating.yaml was missing for a subject in a new result, decision update message was not published even if the decision changed. This is fixed now.

  • ResultsDB consumer now uses brew_task_id from ResultsDB message data if available instead of getting the task ID from Brew/Koji.

Greenwave 1.3.0

Released 27 June 2019

  • RemoteRule has a new optional attribute required which allows to treat a missing gating.yaml file as a failed requirement. See Missing remote rule file.

  • Status code 500 is no longer returned if a gating.yaml file cannot be retrieved. Instead, status code 502 is returned with a specific error.

  • Documentation now contains recommendation for the maximum number of subjects in a single decision request. See sample requests for POST /api/v1.0/decision.

Greenwave 1.2.2

Released 23 June 2019

  • Use fedora-messaging topic “resultsdb.result.new” instead of “resultsdb.result.new”.

Greenwave 1.2.1

Released 15 July 2019

  • Disable sphinxcontrib-issuetracker integration. This extension appears to no longer be maintained. The following issue prevents adopting a newer version of Sphinx: https://github.com/ignatenkobrain/sphinxcontrib-issuetracker/ issues/23.

  • General code optimizations and documentation update.

  • Correct the waiverdb consumer to use the correct messaging setting.

  • Bug fix - Add retry logic when fetching data from dist-git.

  • Bug fix - Fix matching some wrong product versions.

  • Fun addition - Added life-decision endpoint. Ask a question to Greenwave checking the /life-decision endpoint, it will give you an advice for your life. Greenwave is just a service, it cannot give you every answers for your life decisions, but it can help you to find the answer inside your heart.

Greenwave 1.2.0

Released 15 May 2019

  • Return warning if there is no parent policy for a remote rule policy: users mistakenly configure a parent policy with a decision_context and a gating.yaml file with another decision_context. This can cause unnecessary delays for the user. In order to avoid this, add a check in the validate_gating_yaml endpoint to print a warning message notifying the user about it.

  • Bug fix - Omit comparing result_id values for decision change: when Greenwave receives a new result message from ResultsDB, it tries to compare the old decision (ignoring the new result) with new one (for all its policies) so it can publish decision update message only when the decision changed. The new decision was seen as “changed” when any of its data differ from the old decision. The problem is that decision data include result IDs so it’s always seen as “changed” if the new result is part of the new decision.

  • Check old decision before a specific time: the decision endpoint allows to pass results and waivers IDs lists to ignore (ignore_result, ignore_waiver). These are used to compare the new decision with older one. In case of multiple new results or waivers there could be a race condition. This change introduces new parameters results_since and waivers_since, used to determin the decision before these specific dates. This solves the race conditions. ignore_result and ignore_waiver are not used anymore to gather the old decision, but they are still parameters of the API for backwards compatibility.

  • Add support for on-demand policies: enhancing the /decision endpoint API to allow a new parameter rules that will allow the user to pass some rules. These rules will be immediately processes by Greenwave that will, “on demand”, check the decision (as usually querying ResultsDB and WaiverDB) for those rules and return a response.

Greenwave 1.1.0

Released 04 April 2019

  • Retrieve only latest results when verbose=True: that’s a decision API performance improvement and refactor.

  • PackageSpecificBuild is obsolete, not deprecated: fixing the error message, to be sure to not create confusion.

  • Add the option to use git archive to retrieve a gating.yaml file from dist-git: this is to address when the dist-git deployment doesn’t have a UI that updates in real-time, such as cgit.

  • Consider scenario when selecting latest results for the decision making process.

  • Add tests for subject type bodhi_update.

  • Return warning if there is no parent policy for a remote rule policy: users may mistakenly configure a parent policy with a decision_context and a gating.yaml file with another decision_context. This can cause unnecessary delays for the user. In order to avoid this, add a check in the validate_gating_yaml endpoint.

  • Bug fix: Greenwave was publishing a message even when the decision didn’t change.

  • Greenwave now allows messaging also with fedora-messaging.

  • Remove duplicated waivers and results from response: when asked for a decision, Greenwave returns multiple results or waivers when verbose==True in case the same subject gets repeated.

  • Add several other tests and improved dev environment.

Greenwave 1.0.0

Released 04 February 2019

  • Replace PackageSpecificBuild with a packages whitelist on the policy. Also deprecating the key “blacklist” and introduced instead excluded_packages: unifing these mechanisms and tweak the terminology to be a little more consistent and self-describing. The plan is to support “blacklist” for the next 4 months and then stop supporting it completely.

  • Removed the GET method from the /validate-gating-yaml endpoint: POST is enough.

Greenwave 0.9.13

Released 11 January 2019

  • Stop hard-coding subject types so that any subject type can be used. This will allow Greenwave to support additional subject types without any code or configuration changes.

Greenwave 0.9.12

Released 10 December 2018

  • Don’t attempt to make decisions from old-style compose fedmsgs: greenwave was trying to make compose decisions based on the old-style taskotron.result.new messages with type ‘compose’. But that is not possible in a reliable way. So that attempt was removed.

  • Fix RemotePolicy for redhat-module subject type: RemotePolicy class was incorrectly forcing the koji_build subject type for redhat-module.

  • Don’t try and make a decision for pipeline msgs with empty NVR.

Greenwave 0.9.11

Released 29 November 2018

  • RemoteRule feature enabled also for redhat-modules: the RemoteRule feature allows the user to specify additional policies on a gating.yaml file in the dist-git repo. This feature was available only for koji_builds, from now on it will be available also for redhat-modules.

Greenwave 0.9.10

Released 29 November 2018

  • Support for the new subject type redhat-module.

  • Subject type component-version is properly consumed in resultsdb-consumer.

  • Capitalize the first letter of the summary for a passing gating decision.

  • Support for SCM URLs without the namespace. When checking for RemoteRules in artifact’s originating SCM repository, it was assumed the repository was always nested in a namespace.

Greenwave 0.9.9

Released 8 November 2018

  • Undeprecate subject parameter for decision endpoint. This parameter is still heavily used by Bodhi. It is done so because the subject parameter allows clients to perform a single request to check the decision of various subjects.

  • Check RemoteRule configuration at start up time instead of during each RemoteRule check. To allow RemoteRule functionality, the configuration must contain the required dist-git and Koji URLs. As well as the RemoteRule policy.

  • Remove Bodhi dependency, i.e. asking for all builds from a Bodhi update. This removes cyclic dependency (Bodhi depends on Greenwave) and simplifies the code. Decision for bodhi_update no longer expands to include related koji_build items from the Bodhi update. All builds have to be stated explicitly in the “subject” field. Decision change message for bodhi_update is no longer published if a test result changes for a koji_build in the Bodhi update. As a side effect, the formerly deprecated “subject” field (replaced with “subject_identifier” and “subject_type”) has to be used to query for a decision on multiple koji_builds.

Greenwave 0.9.8

Released 17 October 2018

  • Adjust greenwave to support new PELC (Product Export License Control) type: a new subject type is available: “component-version”. Greenwave is adjusted to accept this new type (PR #311).

  • Improved the user experience not returning exception details to the user when calling the API.

  • Fixed issue #282: improved the RemoteRule feature, that allows the user to define additional policies directly in the dist-git repo using a gating.yaml file. Checking the decision_context and others in gating.yaml files: use policies from remote gating.yaml files only if they match decision_context, product_version and subject_type for current decision (as it’s done for internal policies).

  • Adjust naming scheme for one prometheus metric according to the best practices.

  • Bug fix (issue #318): Remote policies not considered for decision change. Decision change message only respects policies configured locally on the server and ignores RemoteRule rules.

Greenwave 0.9.7

Released 25 September 2018

  • Non-applicable requirements are no longer counted in decision summary and are not listed in satisfied_requirements in decision response. This makes some decisions easier to read.

  • Try to guess the product version in the decision change: omits to publish an incorrect decision messages if it’s possible to guess the product version from the new test result subject.

  • Accepting and treating as absent new results with outcomes “QUEUED” and “RUNNING” for resultsdb instances that support those outcomes.

Greenwave 0.9.6

Released 11 September 2018

  • Fetching all results when querying ResultsDB if the verbose flag is true.

  • Fix wrong retrieving of the gating.yaml file for the RemoteRule feature. Greenwave was using the NVR to guess the pkg/container name to get the repo url for the gating.yaml file. This was not always right. Now Greenwave will use the source link in the build received from koji/brew.

  • Always report in the decision message the information about the satisfied requirements.

Greenwave 0.9.5

Released 20 August 2018

  • Waivers with waived=false don’t waive failed test results (this was broken in previous versions).

  • Error messages for retrieving gating.yaml are more specific so package maintainers can discover errors early.

  • Performance is improved by doing smaller and more specific queries to ResultsDB only when needed (#117).

Greenwave 0.9.4

Released 08 August 2018

  • Fixed a bug in waiver processing that failed to match koji_build waivers with brew-build results.

Greenwave 0.9.3

Released 08 August 2018.

  • Fixed doc publication.

  • Fixed Waiverdb consumer: preventing it to stop when an error occurs when analyzing if a decision change is required.

Greenwave 0.9.2

Released 06 August 2018.

  • Small code improvement: removed unsed variable.

  • Fixed retrieving old decisions when publishing a new message about a decision change (when received a message about a new result) and improved the logging for errors in case of exception.

Greenwave 0.9.1

Released 26 July 2018.

  • Removing useless check in the RemoteRule feature that is blocking the decision.

Greenwave 0.9.0

Released 25 July 2018.

  • Content of gating.yaml can be verified by posting it to new endpoint POST /api/v1.0/validate-gating-yaml (#217).

    curl --data-binary '@gating.yaml' \
        https://greenwave-web-greenwave.app.os.fedoraproject.org/api/v1.0/validate-gating-yaml
    
  • Parsing of policies and gating.yaml is now more type-safe.

  • Decision for compose is based on results with give compose ID for all architecture/variant combinations (these are stored in results as system_architecture and system_variant). Previously only single latest result was considered.

  • Summary messages with an “invalid gating.yaml” failed test are clearer about the failing tests (#260).

  • Decision update messages are emitted for old compose tests.

  • Retrieving gating.yaml file for containers is fixed.

Greenwave 0.8.1

Released 4 July 2018.

  • Failure to retrieve a Bodhi update when making a decision is now ignored.

Greenwave 0.8

Released 3 July 2018.

  • Policies require subject_type to be defined (#126). Policy attributes relevance_key and relevance_value are no longer used (#74). Both relevance_key: original_spec_nvr and relevance_value: koji_build in policy files should be changed to subject_type: koji_build.

  • Messages for decisions contain single subject_type (Subject types) and subject_identifier (#123).

  • Asking for a decision about a Bodhi update no longer requires to pass a list of NVRs of the builds in the update. This is now done automatically by querying Bodhi and applying the relevant policies for those builds as well. The BODHI_URL config setting must be set for this feature to work.

  • Old RemoteOriginalSpecNvrRule for extending policies renamed to RemoteRule. See RemoteRule (#220).

  • The documentation now includes a section targeted at package maintainers to explain how they can define package-specific policies (#222). See Package-specific policies.

  • Policy attribute id is now optional in gating.yaml (#217).

  • Policy attribute blacklist is now optional.

  • In case a package’s gating.yaml file is invalid or malformed, Greenwave will now return an unsatisfied decision with an unsatisfied requirement of type invalid-gating-yaml. This can be waived in order to allow a package to proceed through a gating point in spite of the invalid gating.yaml file. Previously, Greenwave would return a 500 error response and it was not possible to waive the invalid gating.yaml file. (#221)

  • Settings greenwave_cache for fedmsg was dropped in favor of CACHE settings in settings.py.

  • Verbose decisions contain satisfied_requirements (#124).

  • New endpoint GET /api/v1.0/about deprecates GET /api/v1.0/version (#189).

  • Switch to Python 3 and drop Python 2 support.

  • HTTP status codes 502 and 504 are now returned for timeouts and connection errors to related services. Previously HTTP 500 was returned (#203).

  • Fixed giving incorrect test decisions for multiple items.

Greenwave 0.7.1

Released 10 May 2018.

  • The patch to enable relevance_key and relevance_value behavior on policies has been rebased and pulled in from the downstream Fedora release.

Greenwave 0.7

Released 10 May 2018.

  • New RemoteOriginalSpecNvrRule for extending policies (#75).

  • In case Greenwave found no matching results for a decision, the summary text has been re-worded to be clearer and to indicate how many results were expected (#145).

  • Wildcard support for matching multiple product versions. This allows to specify product_versions like fedora-* in policies to match fedora-27, fedora-28 and any future release.

  • Wildcard support in the repos list in rules in policy files (#155).

  • Both new and old ResultsDB message format are now supported.

Greenwave 0.6.1

Released 1 Mar 2018.

Greenwave 0.6

Released 16 Feb 2018.

A number of issues have been resolved in this release:

  • Added logo on the README page.

  • Changed Greenwave for submission of waiver in Waiverdb, not anymore with the result_id, but with subject/testcase.

  • Introduced a verbose flag that returns all of the results and waivers associated with the subject of a decision.

  • Improvements for running in an OpenShift environment.

Greenwave 0.5

Released 25 Oct 2017.

A number of improvements and bug fixes are included in this release:

  • Greenwave announces decisions about specified sets of subject keys (#92).

  • The /decision endpoint now includes scenario values in the API response which is useful for distinguishing between openQA results. See PR#108.

Greenwave 0.4

Released 25 Oct 2017.

A number of improvements and bug fixes are included in this release:

  • Policies are allowed to opt out of a list of packages. See PR#91.

  • Greenwave now supports using ‘scenario’ in the policy rules. See PR#96.

  • Fixed for message extractions in the message consumers. See PR#97.

  • Configured cache with the SHA1 mangler. See PR#98.

Greenwave 0.3

Released 03 Oct 2017.

A number of issues have been resolved in this release:

  • Fixed the waiverdb consumer in PR#89 to use the correct value for subject.

  • Shipped the fedmsg configuration files.

Greenwave 0.2

Released 27 Sep 2017.

A number of issues have been resolved in this release:

  • Expanded POST /api/v1.0/decision to accept a list of dicts as the subject of a decision (#34).

  • For safety, the policies are loaded with yaml.safe_load_all (#35).

  • Corrected the API docs examples (#36).

  • Added type checks when loading the policies (#60).

  • Added JSONP support (#65).

  • Added a new HTTP API endpoint GET /api/v1.0/policies exposing raw policies (#72).

  • Employed an actively-invalidated cache mechanism to cache resultsdb and waiverdb results in order to improve gating performance (#77).

  • Removed the init methods on our YAMLObject classes which are not called at all (#78).

  • Greenwave now sends POST requests for getting waivers to avoid HTTP Error 413 (#83).

  • Greenwave now publishes messages when decision contexts change (#87).

Other updates

Also numerous improvements have made to the test and docs for Greenwave.

Greenwave 0.1

Initial release, 14 Aug 2017.