Bodhi¶
Bodhi is designed to democratize the package update testing and release process for RPM based Linux distributions. It provides an interface for developers to propose updates to a distribution, and an interface for testers to leave feedback about updates through a +1/-1 karma system.
Bodhi’s main features are:
Provides an interface for developers and release engineers to manage pushing out package updates for multiple distribution versions.
Generates pre-release test repositories for end users and testers to install proposed updates.
Gives testers an interface to leave feedback about package updates, leading to higher quality package updates.
Announces the arrival of new packages entering the collection.
Publishes end-user release notes known as errata.
Generates yum repositories.
Queries ResultsDB for automated test results and displays them on updates.
User Guide¶
Automatic Updates¶
Updates for releases which haven’t yet reached the activation point (e.g. Rawhide) are automatically created when Koji/robosignatory tags a build in the release candidate tag.
The Update is then processed through the common flow: if gating tests pass, the Update is pushed to Testing and, immediatly after, to Stable. Usually it takes seconds or few minutes for the Update to reach the Stable state.
It may happen sometimes that Bodhi misses the fedora-messaging message that announces a build have been tagged in the release candidate tag. In those cases the Update is not automatically created. In this situation the user must avoid creating a manual Update, because that Update will never be processed since it relates to a Release which is not composed by Bodhi. Instead the user should manually re-tag the affected build in the release candidate tag, so that a new fedora-messaging message is sent and Bodhi will (hopefully) catch and process it.
So, for example, assuming Fedora 33 is Rawhide, if a user builds foo-1.2.3-1.fc33 and the Update is not automatically created, they can re-tag the build in release candidate tag by using koji CLI with:
$ koji untag-build f33-updates-candidate foo-1.2.3-1.fc33
...
$ koji tag-build f33-updates-candidate foo-1.2.3-1.fc33
Associate bugs to automatic updates¶
Bugs can be associated to automatic updates by using appropriate keyword in the RPM changelog of a build. The regex used to aquire the bug ids can be set in Bodhi config file. For a default Bodhi installation this is automatically set to:
fix(es)|close(s)|resolve(s)(:) (fedora|epel|rh|rhbz)#BUG_ID
The regex is performed case insensitive. So, if you want bug number 123456 to be attached to an automatic update and closed upon update reaching stable, you can add a line (or more than one) to the RPM changelog like this:
%changelog
* Sat Apr 04 2020 Mattia Verga <mattia@fedoraproject.org> - 0.78-1
- Update to 0.78
- Fixes rhbz#123456
- Resolves: epel#777777
Fedora Linux specific regex¶
Fedora (and EPEL) may use a different regex to catch bug IDs from changelog.
The current regex configuration is set to just:
(fedora|epel|rh|rhbz)#BUG_ID
which means that every occurrence of a bug ID with the appropriate prefix will match, without the need of a particular keyword. So, the former example may be shrinked to:
%changelog
* Sat Apr 04 2020 Mattia Verga <mattia@fedoraproject.org> - 0.78-1
- Update to 0.78 (rhbz#123456, epel#777777)
If you want to avoid closing a bug, you can put a whitespace between the prefix and the bug ID, like rhbz #123456.
Buildroot Overrides¶
Warning
Koji’s buildroot is the set of packages that are available to use during a build. Normally this set of packages only includes packages that have been marked as stable in Bodhi. There are times when a developer will want to add a package to Koji’s buildroot that is not yet stable so that it can be used to build another package. This is where Bodhi’s buildroot override functionality comes into play.
Developers can create a buildroot override in Bodhi’s create menu in the upper right hand corner, or they can use the bodhi command line interface to do it.
Once a buildroot override is created, Bodhi will present a hint to the developer describing how to
use the koji
CLI to wait for the override to appear in the buildroot. Once koji
confirms the
package is present in the buildroot, subsequent builds that depend on it may be performed.
Buildroot overrides have expiration dates, and Bodhi will automatically remove them from the build root when those dates are reached. Developers can also use the web interface or CLI to manually expire them if desired.
Fedora-Flavored Markdown¶
Description¶
Text fields in Bodhi2 support an enhanced version of markdown. This is a cheat sheet for your reference.
Be advised that, even if Bodhi supports a wide set of markups, the update notes will be used for the description field in appstream tag, which instead supports only a reduced set of markups. Unsupported markup may be showed as plain text or lead to unexpected beahvior in package managers GUI!
You can do HEADERS by underlining or by prefixing with the #
character:
This is an H1
=============
This is an H2
-------------
# This is another H1
## This is another H2
You can do BLOCKQUOTES using email-style prefixes with the >
character:
> This is a quotation
> over many lines
> > and it can be nested(!)
LISTS work like you’d expect, by prefixing with any of the *
, +
,
or -
characters:
Check out this list:
* This
* is
* a list...
You need a blank line between a paragraph and the start of a list for the renderer to pick up on it.
EMPHASIS can be addedd like this:
*italics*
_italics_
**bold**
__bold__
You can save your code references from being misinterpreted as emphasis by
surrounding them with backtick characters (`
):
Use `the_best_function()` and _not_ that crummy one
LINKS look like this:
[text](http://getfedora.org)
…but we also support bare links if you just provide a URL.
You can create CODE BLOCKS by indenting every line of the block by at least 4 spaces or 1 tab.
Here is a code block:
for i in range(4):
print i
print("done")
You can reference BUG REPORTS by simply writing something of the form
tracker#ticketid
.
This fixes PHP#1234 and Python#2345
…we will automatically generate links to the tickets in the appropriate trackers in place. The supported bug tracker prefixes are: (these are all case-insensitive)
Fedora, RHBZ and RH (all point to the Red Hat Bugzilla)
GCC
GNOME
KDE
Mozilla
PEARL
PEAR
PHP
Python
SOURCEWARE
And you can refer to OTHER USERS by prefixing their username with the
@
symbol.
Thanks @mattdm
This will generate a link to their profile, but it won’t necessarily send them a notification unless they have a special FMN rule set up to catch it.
Lastly, you can embed inline IMAGES with syntax like this:

Testing updates¶
Bodhi’s primary use case is to gate proposed software updates based on testing feedback. Feedback can be provided automatically by CI systems, or can be provided by humans through comments and karma.
Karma¶
Authenticated users may post positive or negative karma onto an update, along with a comment to describe their experience. Once the update reaches its karma threshold (set by the packager), it may be pushed out to the stable repositories. This will happen automatically if the update is configured to use Bodhi’s autokarma system, or manually by the packager if it is not.
Some updates are associated with Bugzilla tickets, and these updates will allow the tester to mark whether they think the given bug is addressed by the update. Updates may also be linked to Wiki documents that describe a testing plan for the associated packages, and the tester may provide feedback for each of the wiki test pages as well.
Automated tests¶
Bodhi may also provide feedback from automated test systems if it is configured to do so. To view this feedback, click on the update’s “Automated Tests” tab.
Bodhi may also be configured to query Greenwave for automated test based gating decisions on updates. If this is enabled, the update’s web page will display the current status of Greenwave’s gating decision.
Stable push¶
An update can be pushed to stable repository either manually or automatically, through Bodhi’s autotime or autokarma features.
For becoming pushable to stable an update must fullfill some criteria set by the associated release. Tipically, each release has a mandatory_days_in_testing and a critpath_min_karma values that define the threshold after that the associated updates can be pushed to stable. The mandatory_days_in_testing define the minimum amount of days each update must spend in testing repository. The critpath_min_karma is the minimum karma that each update must reach. An update can be manually pushed to stable by its submitter whatever threshold is reached first. For example, if a release has a critpath_min_karma of +2, an update which reaches a +2 karma can be pushed to stable even if it hasn’t reached the `mandatory_days_in_testing`.
When submitting an update, the user can enable the autotime and the autokarma features and set the related values stable_days and stable_karma for that specific update. The stable_days value define the minimum amount of days each update must spend in testing repository before the autopush is performed. It must be equal or greater than the release mandatory_days_in_testing. The stable_karma is the minimum karma that each update must reach before the autopush is performed. It must be equal or greater than the release critpath_min_karma. For example, if a release has a mandatory_days_in_testing of 7, an update which has autotime enabled and stable_days set to 10 will be pushable after 7 days by manual action, but the autopush will be performed after 3 more days.
Update states¶
Once submitted to Bodhi, updates move through the following states:
Pending: The update has not yet been pushed to the testing or stable repositories.
Pending/Testing: The package is ready to go testing, and will wait until the next update push.
Testing: The package is in the updates-testing repository for people to test.
Testing/Stable: The package is ready to go stable, and will wait until the next update push.
Stable: The package has been released to the main updates repository.
Obsolete: The package has been obsoleted by a different update
Unpushed: The update has been removed from testing.
Note
Testing
means that the update is being tested by the automatic test
systems (ie: CI (continuous integration) tests are running), and Stable
means
that the builds of the update are available in the buildroot.Pending¶
Once an update is submitted to Bodhi it will enter the pending state. Bodhi will perform some sanity checks on the update request. Is the package built and available in koji? Is it tagged as an updates candidate for the release it is intended for? The update path for the package will also be checked at this point to make sure you don’t release a newer version of a package on an older release. The update must not break the upgrade path or it will be rejected.
Bodhi will send e-mail notifications when the update has been signed and pushed.
Pending/Testing¶
The update is ready to be pushed into the testing repositories, which will happen at the next compose run.
Testing¶
The testing status means that the update has been pushed to its release’s testing repository. While in the testing repository users may provide feedback via karma and comments. Once enough feedback is generated, Bodhi’s web interface can be used to release the update by clicking ‘Mark as Stable’, or it can be removed by using ‘Unpush’. The command line interface can also be used to perform these actions.
If the update is configured to use the ‘autokarma’, it will automatically be pushed or unpushed based on the feedback from testers. This feature can be disabled if you wish to push your update to the stable repository only manually. By default, if your update achieves a karma of 3, it will automatically be pushed to stable, and will be unpushed if it reaches -3.
Also, the ‘autotime’ setting can be enabled, so that the update will be automatically pushed to stable after spending a certain amount of time in testing repositories, even if it has not reached a minimum karma. On the other hand, if any user submits negative karma, the ‘autotime’ feature will be disabled.
Testing/Stable¶
The update is ready to be pushed into the stable repositories, which will happen at the next compose run. The update will remain in the testing repository during this state.
Stable¶
After an update is pushed to the stable repository, it is marked as stable in Bodhi. At this point, Bodhi will close associated bugs, and will send out update notices to the appropriate e-mail addresses.
Obsolete¶
When submitting a new version of a package, Bodhi will automatically obsolete any pending or testing updates that do not have an active push request. Once obsoleted, the new update will inherit the old update’s bugs and notes.
Unpushed¶
The developer has decided to pull the update from the testing repository. This state can only be reached if the update is in the testing state.
Revoking push requests¶
When an update is moving from pending to testing or from testing to stable, the developer can revoke the push request either from the webUI or from CLI with the ‘revoke’ command.
Revoking a testing request will set the update to the Unpushed state. The developer can then re-submit the update to testing and restart the update flow.
Revoking a stable request will cause the update to remain in the testing repositories and not be pushed to stable at the next compose. Be aware if any of ‘autokarma’ or ‘autotime’ are enabled, the update will automatically be resubmitted to stable after a short amount of time. To prevent that the developer has to edit the update and disable those automatisms.
Frozen updates¶
A package is said to be in a frozen state when a release is stabilized before the release Beta or GA (Generaly Available). In such a state, all updates are blocked and release engineering will only push the updates that have been given a freeze break exception to fix a bug.
Release notes¶
v8.0.2¶
Released on 2024-01-11. This is a bugfix release.
Bug fixes¶
Fixed Automated Tests table in the web UI not showing missing results or remote rule errors correctly (PR#5581).
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Williamson
v8.0.1¶
Released on 2023-12-24. This is a bugfix release that fixes an urgent issue about bodhi-server not honouring cookie authentication settings.
Bug fixes¶
The Bodhi authentication policy wasn’t honoring settings from config (PR#5572).
Contributors¶
The following developers contributed to this release of Bodhi:
Mattia Verga
v8.0.0¶
Released on 2023-12-09. This is a major release that introduces several breaking changes. Please read the details below and make sure to update any customized value in your config file.
Backwards incompatible changes¶
The ‘required testcases’ feature is removed, as it mostly just duplicated what we do with Greenwave, only worse. The SaveUpdate schema is modified (PR#5548).
The custom skopeo-light script has been dropped. Please adjust your config file to use the real skopeo command (#5505).
Build NVRs are added to the Bugzilla comment. Please adjust initial_bug_msg in Bodhi config during upgrade (#5513).
Settings for repodata and updateinfo can now be set by an external config file and no more hardcoded. Custom settings can be applied per Release, see the devel/ci/integration/bodhi/createrepo_c.ini file for reference (#5521).
Dependency changes¶
libcomps >= 0.20 is required to correctly validate repodata created with createrepo_c >= 1.0. Bodhi can now support all compression method available in createrepo_c (PR#5455).
Authentication and Authorization have been ported to Pyramid 2.0 Security Policies and session serializer has been switched from PickleSerializer to JSONSerializer. Bodhi will now require Pyramid > 2.0. (#5091).
Bodhi now can run with sqlalchemy 2. At the same time the minimum required sqlalchemy version is raised to 1.4 (#5105).
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Summary of the migrations:
The Release model has gained a released_on column which reports the date of first release.
The requirements column has been removed from both Package and Update models.
The email column of the User model has been modified to UnicodeText.
Features¶
Support for storing critical path data in PDC is removed, as it is no longer needed (PR#5431).
Server: added a get_critpath_components json endpoint to list critical path components configured for a Release (PR#5484).
The release timeline graph now uses logarithmic scale for better display (PR#5492).
The webUI now allows unpushing Rawhide updates which fail gating tests (PR#5542).
Releases can now inherit buildroot override tags from other releases by settings in Bodhi config file (#4737).
Update notes are now converted to plaintext when printed in email or messages (#5049).
Members of QA groups defined in configuration are now able to waive or trigger tests for any update, despite they’re packagers/provenpackagers or not (#5448).
Make the update.comment message schema more informative (#5469).
Release data now give information about the status of pre_beta and post_beta and of the first date of release (#5481).
Builds associated to unpushed updates can now be moved to other existing updates (#5485).
JSON APIs now support quering Releases by multiple states, for example ?state=pending&state=frozen (#5518).
The UpdateReadyForTesting message format is simplified, and the message is now published on update creation and edit with changed builds instead of push to testing (#5538).
Bug fixes¶
Exclude locked updates being composed from being modified by cron tasks (PR#5524).
WebUI will not show the “push to testing” option meanwhile the update is waiting for builds to be signed (PR#5550).
Updates ejected from the composes would remain stuck in pending state due to wrong tags applied to thei builds (#5396).
Usernames containing a - are now correctly matched when mentioning (#5453).
Sidetags in the dropdown of the new update form are now sorted alphabetically (#5470).
Fixed “cannot access local variable ‘tags’” error when editing flatpak updates (#5503).
The new update page now displays a meaningful page title (#5540).
Contributors¶
The following developers contributed to this release of Bodhi:
Aurélien Bompard
Adam Williamson
Jonathan Lebon
Lenka Segura
Mattia Verga
Owen W. Taylor
Ryan Lerch
v7.2.2¶
Released on 2023-10-03. This is a bugfix release.
Bug fixes¶
Contributors¶
The following developers contributed to this release of Bodhi:
Owen Taylor
Adam Williamson
Mattia Verga
v7.2.1¶
Released on 2023-07-30. This is a bugfix release.
Features¶
If an update has got any failing test, an help box is displayed in the Automated Tests tab (PR#5382).
Bug fixes¶
On the Automated Tests tab, passed tests that are ‘required’ now correctly show as such (PR#5388).
client: do not rely on HOME being defined in os.environ variables (PR#5398).
server: when resubmitting a pending update to testing, make sure the release candidate tag is applied to all builds (PR#5400).
Fixed wrong update attribution in ready for testing message string (#5415).
Fixed missing whitespace in “bodhi update completed push to testing” (#5416).
Update testing instruction command is now clearer as it now warns users that it may take up to 24 hours for an update to propagate to mirrors (#5428).
Development improvements¶
Added support for dnf5 to repository sanity check tests (#5404).
Contributors¶
The following developers contributed to this release of Bodhi:
Aurélien Bompard
Adam Williamson
Mattia Verga
v7.2.0¶
Released on 2023-04-30. This is a bugfix release.
Features¶
Bodhi will not try to recalculate the gating status in response to a new result or a new waiver if the status is ignored (PR#5202).
update.edit messages now include new_builds and removed_builds properties (PR#5237).
The Releases list webpage now hide inactive (disabled or archived) releases by default (PR#5264).
Bug fixes¶
Icons for tests in QUEUED and RUNNING states were not displayed in the webUI (PR#5187).
Updated links to Bodhi extended markdown description page (PR#5190).
The title in the update webpage now has no more a hyperlink (#5089).
The bundled selectize js component was downgraded to 0.14.0 to solve a bug where the bug list was emptied upon editing an update (#5233).
Link to Koji builds are now correctly encoded (#5272).
Development improvements¶
Use functools lru_cache for caching Release.all_releases() and Release.get_tags() instead of a custom implementation (PR#5238).
Contributors¶
The following developers contributed to this release of Bodhi:
Aurélien Bompard
Adam Williamson
Kevin Fenzi
Mattia Verga
Mikolaj Izdebski
Michal Konečný
v7.1.1¶
Released on 2023-03-18. This is a minor feature release.
Features¶
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Williamson
Michal Konečný
v7.1.0¶
Released on 2023-03-11. This is a feature release.
Dependency changes¶
Bodhi now uses pymediawiki instead of the unmaintained simplemediawiki to fetch test cases (PR#4852).
Features¶
bodhi-messages is updated to include additional properties in the message schemas. The additional properties are: app_name, agent_name, and __str__ (#4950).
Bug fixes¶
Retrieving sidetags list for a user not known to Koji caused an exception in bodhi-server (PR#4994).
Added support for bleach >= 6.0.0 (PR#5003).
bodhi-client: do not run koji wait-repo when expiring a buildroot override (#4830).
bodhi-client: fix –version option (#4981).
Update notes are now capped to a default of 10k characters, the value can be customized in config (#4982).
Fixed webUI template where karma and comment icons where misaligned at highly commented discussions (#4986).
Fixed the template of the update details page, where the testcases tab was always empty (#5000).
The link to the test gating tab in the update page was fixed (#5032).
The composer is now safer about not triggering stable composes for frozen releases (#5080).
Rawhide updates which are obsoleted before being pushed will now not be pushed to stable to avoid confusion (#5113).
Frozen releases didn’t show up in filters (#5115).
Contributors¶
The following developers contributed to this release of Bodhi:
Kevin Fenzi
Mattia Verga
Ryan Lerch
v7.0.1¶
Released on 2023-01-14. This is a bugfix release.
Bug fixes¶
Contributors¶
The following developers contributed to this release of Bodhi:
Mattia Verga
v7.0.0¶
Released on 2022-11-26. This is a major release that fully enables frozen release state in bodhi-server and adds Kerberos authentication to bodhi-client.
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Features¶
Bodhi client now autenticates using Kerberos by default and falls back to browser-based OIDC mechanism. (PR#4602).
Critical path information can now be read from JSON files (in the form output by the releng critpath.py script), using config options critpath.type = json and critpath.jsonpath (PR#4755).
Frozen releases updates will now be forced into testing before being pushed to stable (PR#4831).
The new update form UI will now display a warning when a release is approaching EOL (PR#4834).
Bodhi-push now defaults to push only testing composes for frozen releases (#4478).
Bug fixes¶
Editing a stuck Rawhide side-tag update (usually when gating tests fail) will no more cause builds to be tagged with the release candidate-tag to prevent the automatic update consumer from creating an automatic update and breaking the side-tag update (PR#4745).
Bodhi client will not show the secret in terminal when logging in via browser (PR#4814).
The check_signed_builds sometimes failed to unstuck updates due to the use of a wrong tag (PR#4819).
Updateinfo.xml metadata generation has been changed in order to try to fix errors reported by yum on EPEL (#2487).
Releases in frozen state will now be listed in the release page and a warning box will be showed for updates of those releases (#4103).
The date_approved property of the Update model is now set when the update is ready to be pushed to stable (#4171).
Scenario is now included in request data when waiving test results (#4270).
The update page now shows a single combined gating status, instead of listing the result of each separate greenwave query (#4320).
Bodhi-client now raises a generic SysExit exception instead of click.exceptions.Abort when a user aborts authentication, so external scripts can avoid importing Click in their code (#4623).
Development improvements¶
Bodhi client now supports configuring OIDC storage path. (PR#4603).
For gating, Bodhi now queries all Greenwave ‘decision contexts’ together, reducing the number of queries needed. (PR#4821).
References to never used side_tag_active and side_tag_expired update statuses and the Update.side_tag_locked property have been removed (PR#4823).
The date_pushed database column of the Update model has been dropped and replaced by a property, no change should be noticeable to users (#4837).
Contributors¶
The following developers contributed to this release of Bodhi:
Aurélien Bompard
Adam Williamson
Maxwell G
Mattia Verga
Matej Focko
Tomas Tomecek
v6.0.1¶
Released on 2022-06-23. This is a bugfix release.
Dependency changes¶
Features¶
Allow disabling autokarma, autotime and close-bugs when editing an update by CLI (PR#4564).
Bug fixes¶
Fix a small template issue about the karma thumbs display (PR#4562).
Autokarma, autotime and close-bugs automatisms may have been accidentally overridden when editing updates by CLI (#4563).
In very peculiar circumstances, side-tag Rawhide updates may remain stuck if a user posts a negative karma or tries to set a request before Bodhi automatically pushes the update to stable (#4566).
Don’t crash when Ipsilon has no userinfo (#4569).
Contributors¶
The following developers contributed to this release of Bodhi:
Aurélien Bompard
Mattia Verga
v6.0.0¶
This is a major release that adds authentication with OpenID Connect.
Backwards incompatible changes¶
Support authentication with OpenID Connect, in addition to OpenID. The old OpenID authentication can be accessed by using
/login?method=openid
as the login URL. The bodhi client is switched to OIDC entirely, plain OpenID support has been dropped. Depending on the OIDC provider’s capabilities, users may have to run the bodhi client on a host that has a browser. This will not be the case in Fedora as OOB support has been recently added to Ipsilon. (#1180).
Dependency changes¶
Features¶
Bug fixes¶
Handle invalid characters in RSS export (PR#4513).
Fixed a style issue in the web UI where images posted in comments exceed box width (#4327).
Fix the copyright year in the footer going stale by programatially setting the year. (#4401).
Bodhi will now obsolete updates being pushed to stable when a newer build is pushed to stable (#4446).
Exclude the composes property when serializing the Release object to avoid recursion (#4447).
Adding or removing builds from a side-tag update by CLI causes the from_tag property to be removed (#4452).
Updates comments with negative karma are now highlighted in red in the webUI (#4500).
The “karma thumb” now will show any mixed combination of positive/negative votes, rather than the overall count (#4501).
Fixed a tagging problem when updating the builds list in a side-tag update (#4551).
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Saleh
Aurélien Bompard
Adam Williamson
Lenka Segura
Mattia Verga
Miro Hrončok
Ryan Lerch
Tomáš Hrčka
Older releases¶
Below are the historic release notes of older versions:
5.x release notes¶
These are the release notes for the 5.x series of Bodhi releases.
v5.7.5¶
This is a feature release.
Features¶
Prepare the Bodhi client to be compatible with an OIDC-enabled server. (PR#4391).
Contributors¶
The following developers contributed to this release of Bodhi:
Aurélien Bompard
v5.7.4¶
This is a bugfix release that should help with several more problems after 7.5.3 release.
Features¶
Bug fixes¶
Bodhi will now retry to get a build changelog if Koji returns empty rpm headers. See also https://pagure.io/koji/issue/3178 (#4316).
Fixed an issue about some bug title never fetched from Bugzilla (#4317).
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Saleh
Aurélien Bompard
Adam Williamson
Lenka Segura
Mattia Verga
v5.7.3¶
This is a bugfix release that should help with several more problems after 7.5.2 release.
Bug fixes¶
Fixed an issue where Bodhi was throwing 5xx “NoSuchColumnError testcases.id” errors because of a misconfigured table (#4302).
v5.7.2¶
This is a bugfix release that should help with several problems after 7.5.1 release.
Bug fixes¶
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Saleh
Mattia Verga
v5.7.1¶
This is a bugfix release.
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Summary of the migrations:
Add End of life (eol) field to the releases (PR#4241).
Backwards incompatible changes¶
Query on both relevant Greenwave decision contexts for critical-path updates. Update.get_test_gating_info() now returns a list of decision dictionaries, not a single decision dictionary. The API endpoint /updates/{id}/get-test-results similarly now returns a single-key dictionary whose value is a list of decisions, not a single decision dictionary. (#4259).
Features¶
Added support for release names ending with “N” such as EPEL next (PR#4222).
Set a delta parameter of 30 days when quering datagrepper for bodhi-related user activity (PR#4255).
Added support for setting flags in generated advisories to require logging out and logging back in for the update to take effect (#4213).
Replace Greenwave decision change message consumer with ResultsDB and WaiverDB message consumers (#4230).
Bug fixes¶
Fix an issue that caused the builds in a side-tag update to not be tagged correctly when the build list of the update was modified (PR#4161).
Bodhi will now delete the side-tag in Koji when an update is pushed to stable. Builds that were tagged in the side-tag but were not pushed as part of the update will be untagged. This is required to make sure to not leave stale side-tags in the Koji database (PR#4228).
Updates for archived releases cannot be edited anymore (PR#4236).
Correctly mark automatic updates as critpath when appropriate (#4177).
Fixed an issue with validators that prevents inconsistent refusal of bodhi override with maximum duration (#4182).
Fixed an issue where the search result box was cutted off out of screen borders (#4206).
Fixed a javascript bug which prevented the “waive tests” button to be displayed in UI (#4208).
Fixed an issue with validators that prevented a side-tag update owner to edit their update after adding a build for which they don’t have commit access (#4209).
Avoid gating status ping-pong on update creation, assume status ‘waiting’ for 2 hours or until first failed test (#4221).
For new packages submitted to repositories, the changelog was not generated and attached to the automatic Update. This prevented the bugs mentioned in the changelog to be closed by Bodhi (#4232).
Staging Bodhi now uses staging Bugzilla URL for bug links (#4238).
Fixed an issue where editing Updates always caused to set the request to Testing (#4263).
Development improvements¶
Add End of life (eol) field to the releases (#4240).
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Saleh
Adam Williamson
Clement Verna
dalley
Justin Caratzas
Jonathan Wakely
Karma Dolkar
Kevin Fenzi
Lenka Segura
Mattia Verga
Miro Hrončok
Michael Scherer
Andrea Misuraca
Neal Gompa
Patrick Uiterwijk
Pierre-Yves Chibon
Rayan Das
Samyak Jain
Sebastian Wojciechowski
Tomas Hrcka
v5.7.0¶
This is a feature release.
Features¶
Bug fixes¶
Fixed an error about handling bugs in automatic updates (PR#4170).
Side-tag wheren’t emptied when updates for current releases were pushed to stable (PR#4173).
Bodhi will avoid sending both ‘update can now be pushed’ and ‘update has been pushed’ notifications at the same time on updates pushed automatically (#3846).
Clear request status when release goes EOL (#4039).
Allow bodhi to not operate automatically on bugs linked to in changelog for specific releases (#4094).
Use the release git branch name to query PDC for critpath components (#4177).
Avoid using datetime.utcnow() for updateinfo <updated_date> and <issued_date> elements, use “date_submitted” instead. (#4189).
Updates which already had a comment that they can be pushed to stable were not automatically pushed to stable when the stable_days threshold was reached (#4042).
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Saleh
Adam Williamson
Clement Verna
Daniel Alley
Mattia Verga
Andrea Misuraca
v5.6.1¶
This is a bugfix release.
Bug fixes¶
Fix two reflected XSS vulnerabilities - CVE: CVE-2020-15855
Contributors¶
The following developers contributed to this release of Bodhi:
Patrick Uiterwijk
v5.6¶
This is a feature release.
Dependency changes¶
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Features¶
Added a from_side_tag bool search parameter for Updates and allow searching for that and for gating status from WebUI (PR#4119).
Allow overriding critpath.stable_after_days_without_negative_karma based on release status (PR#4135).
Users which owns a side-tag can now create updates from that side-tag even if it contains builds for which they haven’t commit access (#4014).
Bug fixes¶
Fix encoding of package and user names in search results (PR#4104).
Fix autotime display on update page (PR#4110).
Set update.stable_days to 0 for Releases not composed by Bodhi itself (PR#4111).
Ignore builds in Unpushed updates when checking for duplicate builds (#1809).
Make automatic updates obsolete older updates stuck in testing due to failing gating tests (#3916).
Fix 404 pages for bot users with nonstandard characters in usernames (#3993).
Fixed documentation build with Sphinx3 (#4020).
Serve the documentation directly from the WSGI application using WhiteNoise. (#4066).
Updates from side-tag for non-rawhide releases were not pushed to testing (#4087).
Side-tag updates builds were not editable in the WebUI (#4122).
Fixed “re-trigger tests” button not showed on update page (#4144).
Fixed a crash in automatic_updates handler due to get_changelog() returning an unhandled exception (#4146).
Fixed a crash in automatic_updates handler due to trying access update.alias after the session was closed (#4147).
Some comments orphaned from their update where causing internal server errors. We now enforce a not null check so that a comment cannot be created without associating it to an update. The orphaned comments are removed from the database by the migration script. (#4155).
Dockerfile for pip CI tests has been fixed (#4158).
Development improvements¶
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Saleh
Clement Verna
Justin Caratzas
Jonathan Wakely
Karma Dolkar
Mattia Verga
Pierre-Yves Chibon
Rayan Das
Sebastian Wojciechowski
v5.5¶
This is a bugfix release.
Bug fixes¶
Disable manual creation of updates for releases not composed by Bodhi and add some bits in the docs on how to handle automatic updates not being created (#4058).
Fix TestCase validation upon feedback submission (#4088).
Do not let update through when bodhi fails to talk to greenwave. (#4089).
Fix package name encoding in URLs (#4095).
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Saleh
Clement Verna
Karma Dolkar
Mattia Verga
Pierre-Yves Chibon
v5.4.1¶
This is a {major|feature|bugfix} release that adds [short summary].
Bug fixes¶
Make sure to close the bugs associated to a rawhide update. (#4067).
Contributors¶
The following developers contributed to this release of Bodhi:
Clement Verna
Mattia Verga
v5.4.0¶
This is a minor release.
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Summary of the migrations:
Migrate relationship between TestCase and Package to TestCase and Build. The migration script will take care of migrate existing data to the new relation.
The user_id column in comments table has been set to be not nullable.
The notes column in buildroot_overrides table has been converted to UnicodeText (from Unicode).
Bug fixes¶
Associate TestCase to Build instead of Package, allowing to remove old testcases from updates (#1794).
Replace koji krb_login with gssapi_login. (#4029).
Making sure that builds of side tag update for normal releases are marked as signed. (#4032).
Handle Cornice 5.0 JSON error handling. (#4033).
Cap buildroot overrides notes to a maximum of 2k characters and convert the database field to UnicodeText (#4044).
Development improvements¶
Contributors¶
The following developers contributed to this release of Bodhi:
Clement Verna
Karma Dolkar
Mattia Verga
Miro Hrončok
Sebastian Wojciechowski
v5.3.0¶
This is a minor release.
Dependency changes¶
Splitted handle_update task into two celery tasks for bugs and testcases. These two new tasks will make use of Celery’s autoretry_for and retry_backoff features to circumvent external services connection problems. retry_backoff needs Celery >= 4.2 (PR#3989).
Features¶
Associate bugs mentioned in rpm changelog to automatically created Rawhide updates; the bugs mentioned with the format fix(es)|close(s) (fedora|epel|rh|rhbz)#BUG_ID will be associated to the update and automatically closed (#3925).
Bug fixes¶
Use jquery-typeahead for bodhi searchbar and always show the input field (#1455).
Reset update.date_testing when editing builds (#3493).
Removed pending_testing tag when self.request is still in UpdateRequest.testing (#3944).
Fix the broken privacy policy link for update’s comment box. (#3971).
Do not bound the database session created using TransactionalSessionMaker class to the object created. Since threads are sharing the memory binding to the session object, it makes it possible for threads to override a previous session leading to unexpected behaviours. (#3979).
Editing builds in an update should not remove override tags (#3988).
Make Test Cases look clickable. (#4003).
If an update include no builds, use alias as title (#4012).
Development improvements¶
Revise display for update’s settings
Showed a ‘stable by karma: disabled’ and a ‘stable by time: disabled’ in the UI when appropriate. Also added a ‘Autotime: <Bool>’ to the CLI output. (#3957).
Avoid using a database session in the tag_update_builds_task. (#3981).
Avoid using a database session in the handle side tag task. (#3983).
Ignore celery task’s results we don’t use. (#3995).
Documentation improvements¶
Reference the state that happens when an update is revoked (#2902).
Document the full set of bug trackers that can be reference in Bodhi’s markdown. Also added a section to Bodhi’s Sphinx docs about Bodhi markdown, and listed the bug trackers there as well. (#3209).
Add information to Bodhi docs that Bodhi has frozen release state (#3505).
Contributors¶
The following developers contributed to this release of Bodhi:
Clement Verna
Karma Dolkar
Mattia Verga
Richard O. Gregory
Tomas Kopecek
v5.2.2¶
This is a bugfix release.
Bug fixes¶
Only pass scalar argument to celery (part 2). Avoid the celery enqueuer emitting SQL queries to resolve attributes, and therefore opening new transactions. (#8b30a825).
Contributors¶
The following developers contributed to this release of Bodhi:
Clement Verna
v5.2.1¶
This is a bugfix release.
Bug fixes¶
Get the update object in the celery worker from the database. (#3966).
Contributors¶
The following developers contributed to this release of Bodhi:
Clement Verna
v5.2.0¶
This is a feature and bugfix release.
Features¶
Added __current__, __pending__ and __archived__ macro filters to quickly filter Updates by Release status (PR#3892).
Added search filtering capabilities to the Overrides page (PR#3903).
Output the update install command into the bugs comments. Also change the stable_bug_msg and testing_bug_msg settings format to use placeholders in place of %s: if you have customized these settings you will need to adjust them to the new format. Here it is the list of the available placeholders: {update_title}, {update_beauty_title}, {update_alias}, {repo}, {install_instructions}, {update_url} (#740).
Tag builds for updates asynchronously using Celery tasks. (#3061).
Add a Liveness and Readyness endpoints for OpenShift probes. (#3854).
Allow revoking the push to stable action (#3921).
Bug fixes¶
Place 404 Not Found in the middle of the website (PR#3835).
RPM changelog was not automatically added in the notes for Rawhide updates as expected (PR#3931).
Add back the ability to add abitairy text as a build. (#3707, #3765).
Allow to comment on update that were pushed to stable. (#3748).
Make comments submission to use common code with other forms and avoid clearing the spinner until the page refreshes (#3837).
Try to avoid timeout error when requesting latest_candidates with hide_existing=true (#3841).
Allow task id to be null in the bodhi.update.status.testing message schema. (#3852).
Sent UpdateReadyForTestingV1 only for rpm (#3855).
Prevent whitespaces string to be set as display name of an update (#3877).
Fixed pagination issue when using multiple values for the same filter (#3885).
Make sure we send the fedora-messaging messages before trigerring a celery task. (#3904).
Prevent updates from sidetags being stuck in Testing (#3912).
Do not allow to push back to testing a stable update (#3936).
Development improvements¶
Other changes¶
Use Celery Beat instead of cron jobs. The corresponding CLIs have been adjusted to trigger the task. They will still block until the task is done, but it may not be running on the host that the CLI was called on. The affected CLIs are:
bodhi-clean-old-composes
,bodhi-expire-overrides
,bodhi-approve-testing
, andbodhi-check-policies
(#2867).
Contributors¶
The following developers contributed to this release of Bodhi:
Adam Saleh
Aurélien Bompard
Adam Williamson
Clement Verna
Eli Young
Karma Dolkar
Mattia Verga
Michal Konečný
Nils Philippsen
Pierre-Yves Chibon
Elliott Sales de Andrade
Richard O. Gregory
Rick Elrod
Ryan Lerch
Stephen Coady
subhamkrai
Sebastian Wojciechowski
v5.1.1¶
This is a bugfix release.
Bug fixes¶
Fix the Fedora Messaging exception caught for publish backoff (PR#3871).
Only pass scalar arguments to celery tasks to avoid lingering database transactions (PR#3902).
Fix bug title escaping to prevent a JS crash while editing updates (#3714).
Fix potential race condition with the celery worker accessing an update before the web request was commited. (#3858).
Contributors¶
The following developers contributed to this release of Bodhi:
Aurélien Bompard
Clement Verna
Mattia Verga
v5.1.0¶
This is a feature and bugfix release.
Features¶
Bug fixes¶
Fix BuildrootOverrides editing/expiring from the UI (#3710).
Fix the traceback when builds are being signed without being included in an update (#3720).
Increase the size of the update alias column (#3779).
Fix JS error when removing a bug from the list in the update form (PR#3796).
Disable warnings when adding Security Response bugs to an update (#3789).
Manage single build update conflicting builds. (#3828).
Contributors¶
The following developers contributed to this release of Bodhi:
Aurélien Bompard
Clement Verna
Mattia Verga
Pierre-Yves Chibon
Rick Elrod
Ryan Lerch
v5.0.0¶
This is a major release with many backwards incompatible changes.
Backwards incompatible changes¶
Celery is introduced to handle the long-running tasks (#2851).
Fedmenu was removed from the UI (#2194).
Remove deprecated
search_packages
path (PR#3411).Remove
critpath_karma
from the UI (#2194).Remove unused and incorrect
server.bugs.Bugzilla.get_url()
function.Print errors to stderr in command line tools.
Dependency changes¶
Celery is a new required dependency (#2851).
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Features¶
Update fedora-bootstrap to latest 1.5.0.
Add ctype to the ComposeComplete (#3297).
Add knowledge of branch freezes to the Release model (#1038, #1563).
API: Create/edit updates from Koji tags (#3009).
Add javascript confirmation for unpushing updates.
Use versioned dir name for static files.
Improve the performance of validate_build_uniqueness.
Add option to create/edit updates side tags to CLI (#2325).
Overhaul the new update form.
Mark updates not composed by bodhi as pushed when stable.
Allow multiple status params for update list views (#3429).
Send a message when an update is ready to be tested (#3428).
Create additional side tags on multi build tag (#3473).
Create comment when CI tests starts, but don’t send an email (#3403).
Add support for creating sidetag updates to webui.
Create a Dashboard for logged in users.
Clean up Javascript, CSS and fonts.
Add a new config item,
automatic_updates_blacklist
, which is a list of users to not process auto updates from.Document what the update states mean for rawhide.
Add a filtering/searching interface to the updates query view.
Add the list of packages in the update description to rss feed.
Transform markdown code to html for better readability of the rss feed.
Add frozen release state to bodhi releases list.
Add API call to retrigger update tests.
Tidy up the UI.
Add –user and –password to all actions of the bodhi CLI supporting –openid-api (for example: waive and trigger) (PR#3550).
Update ChartJS package and redesign Release page (PR#3671).
Automatically created updates (e.g. Fedora Rawhide single package updates) now include a changelog entry in the update notes. (#3192).
Move multi build update that failed to merge in rawhide to pending. (#3514).
Bug fixes¶
Handle connection problems when talking to Wiki (#3361).
Make Bodhi able to clear models.Release._all_releases cache (#2177).
Query Greenwave in batches to avoid timeouts.
Template, js and style fixes.
Allow to configure a release without an override tag (#3447).
Determine a release for sidetag updates (#3480).
Change update status to testing if every build is signed (#3475).
Delete additional tags once an side tag update was pushed to stable (#3476).
Turn off autokarma and autotime for automatic updates (#3424).
Make
display_name
optional in template (#3470).Sign new builds to
<sidetag>-pending-signing
(#3485).Allow only 1 update per side tag (#3484).
Disable comments on updates when update is pushed and stable (#2050).
Unify rawhide simple build update with multi build update (#3513).
Prevent crash when compose contains update without builds (#3471).
Added build.update.pushed = True for the signed consumer so that it can be unpushed. (#3625).
Development improvements¶
Rename bteststyle to blint.
Update developer documentation.
Run mypy directly in Vagrant (#3335).
More type annotations.
Add WaiverDB and Greenwave to development environment (#3011).
Provide authentication in the integration testing environment.
Make it easier to develop using VS Code.
Add option to vagrant provisioning to use stg infra.
Introduction of Towncrier to manage the release notes (#3562).
Other changes¶
List items in RSS feed starting from the most recent (PR#3621).
Contributors¶
The following developers contributed to Bodhi 5.0.0:
Anatoli Babenia
Aurélien Bompard
Randy Barlow
Clement Verna
David Fan
dimitraz
Lukas Holecek
Mattia Verga
Michal Konečný
Nils Philippsen
Ondrej Nosek
Pierre-Yves Chibon
Rick Elrod
Ryan Lerch
Robert Scheck
Rob Shelly
Sam Robbins
Stephen Coady
siddharthvipul
subhamkrai
Sebastian Wojciechowski
4.x release notes¶
These are the release notes for the 4.x series of Bodhi releases.
v4.1.0¶
This is a feature release that adds single-package gating.
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Features¶
Add autopush and stable_days to an update. When
autopush
is true, the approve_testing cronjob will push the update to stable if it has meet the testing requirements (stable_days
).stable_days
cannot be smaller than the releasemandatory_days_in_testing
(#2978).Add a login reminder for posting feedback.
Add
package_manager
enum andtesting_repository
string to Release model. No default is provided, so if one wants Bodhi to display the install command for an update, they need to manually edit the existing releases after the database migration.Add a Greenwave message consumer to update the
test_gating_status
value.Add the flatpak releases to the greenwave config.
Automatically create Rawhide updates in
testing
state.
Bug fixes¶
Log permanent failures for debugging. Previously, exceptions were raised which caused the affected messages to be placed back into the queue (#3306).
Fix downloading packages for updates with multiple builds.
Verify the correct number of received items in the client.
Do not ask for original_spec_nvr results from greenwave. This will have for effect to improve the performance of bodhi’s requests to greenwave.
Bodhi will now retry for up to 10 minutes if it receives
koji.AuthError
(#1201).Don’t raise Exception on non-existing composes (#3318).
Correct grammar on a comment that Bodhi writes.
Log unsuccessful attempt to set request as INFO (#3293).
Use update.alias instead of update.title in updates rss link.
Make sure
%{uid}
in krb ccache gets replaced with the effective UID.Create composes based on update’s alias in bodhi-push (#3160).
User should be able to set
Update.display_name
(#1369).Make
meets_testing_requirements()
comply with policy (#1307, #1508, #1796, #3282).Order builds by nvr in all places so the ordering is always consistent.
Development improvements¶
Leave the global log level in peace when testing.
Update the Developer documentation
Disable
warm_cache_on_start
in unittest (#3311).Use flake8-import-order to enforce PEP-8 imports.
Contributors¶
The following developers contributed to Bodhi 4.1.0:
Aurélien Bompard
Clement Verna
Mattia Verga
Michal Konečný
Nils Philippsen
Patrick Uiterwijk
Pierre-Yves Chibon
Randy Barlow
Sebastian Wojciechowski
Troy Dawson
v4.0.2¶
This is a bugfix release.
Bug fixes¶
Drop updateinfo <id> tag detection (#3269).
Contributors¶
The following developers contributed to Bodhi 4.0.2:
Patrick Uiterwijk
v4.0.1¶
This is a bugfix release.
Bug fixes¶
Contributors¶
The following developers contributed to Bodhi 4.0.1:
Randy Barlow
Patrick Uiterwijk
v4.0.0¶
This is a major release with many backwards incompatible changes.
Backwards incompatible changes¶
Values NULL and 0 are not allowed in update’s stable_karma and unstable_karma (#1029).
Updates no longer have a
title
attribute. This affects many elements of Bodhi’s REST API, including URLs (update titles can no longer be used to reference updates, only aliases), REST API data structures, and Bodhi’s messages (#186, #1542, #1714, and #1946).The
prefer_ssl
setting has been renamed tolibravatar_prefer_tls
and now defaults toTrue
instead ofNone
(#1921).Integration with pkgdb is no longer supported (#1970).
The
/admin/
API has been removed (#1985).The relationship between Packages and Users was dropped. As a result, the
packages
parameter in users query API has also been removed (#1997).Support for CVE tracking was dropped. It was technically not possible to use the feature, so it is unlikely to affect any deployments (#1998).
The
processing
update status has been removed (#1999).The
/masher
API has been removed (#2024).Default sqlalchemy.url setting points to PostgreSQL instead of SQLite (#2040).
The
Masher
was renamed toComposer
. As a result, thebodhi-clean-old-mashes
script was renamed tobodhi-clean-old-composes
, notification topicsmashtask.start
,mashtask.mashing
,mashtask.complete
,mashtask.sync.wait
andmashtask.sync.done
was renamed tocompose.start
,compose.composing
,compose.complete
,compose.sync.wait
andcompose.sync.done
, configuration settingsmash_dir
,mash_stage_dir
andmax_concurrent_mashes
was renamed tocompose_dir
,compose_stage_dir
andmax_concurrent_composes
(#2151).The
bodhi-monitor-composes
script has been removed (#2171).The stacks feature has been removed (#2241).
The
bodhi-manage-releases
script has been removed (#2420).Support for anonymous comments was dropped. As a result, the
anonymous
field on the Comment object was removed and comments query API parameteranonymous
was dropped. Allcaptcha.*
settings were removed (#2700).Bodhi client and server no longer support Python 2. Python 3.6+ are the only supported Python releases (#2759).
Support for the
ci_url
on theBuild
object was dropped (#2782).Support for
active_releases
parameter in updates query API was dropped (#2815).Support for fedmsg has been dropped (#2838).
The
/updates/ALIAS/TITLE
API has been removed (#2869).Support for update’s old_updateid was dropped (#2903).
The UI no longer has fedmsg integrations to show events happening elsewhere in Bodhi (#2913).
Support for update’s greenwave_unsatisfied_requirements was dropped (#2958).
The batching feature was dropped, and thus updates can no longer be in the batched request state. As a result, the bodhi-dequeue-stable CLI has also been removed (#2977).
Support for obsolete scripts in
tools
folder was dropped (#2980).Support for update’s greenwave_summary_string has been dropped (#1339 and #2988).
Bug objects no longer include a
private
field (#3016).The CLI now defaults to the
--wait
flag when creating or editing buildroot overrides. The old behavior can be achieved with the--no-wait
flag (#3006).All messages and API responses that serialize updates no longer have a
submitter
field. This was redundant with the includeduser.name
field, and was only in place for compatibility with Bodhi 1 which was EOL many years ago (#3144).All of Bodhi’s fedmsgs have been changed. A new bodhi.messages packages has been added with new published message schemas. Note that only the fields listed in the documented schemas are supported in Bodhi 4, even though Bodhi still sends messages similar to the messages it sent in the past. Message consumers should not rely on any undocumented fields in these messages. If you need information that is not included in the supported schema, please work with the Bodhi project to get the schema adjusted accordingly. Bodhi’s messages are now documented in Bodhi Server APIs.
The
fedmsg_enabled
setting was removed, since fedmsg is not used anymore.
Dependency changes¶
pkgdb is no longer required (#1970).
cryptography is no longer required (#2700).
Fonts are no longer required for the captcha (Bodhi previously defaulted to using liberation-mono-fonts, but this wasn’t a strict requirement since the font was configurable) (#2700).
pillow is no longer required (#2700).
six is no longer required for the client or server (#2759).
bodhi-server
now depends onbodhi-messages
.kitchen is no longer required (#3094).
hawkey is no longer required.
PyYAML is now a required dependency (#3174).
Bodhi now requires Python 3.6 or greater (#2856).
Bodhi no longer uses or works with
fedmsg
.Backoff is now a required dependency (#3237).
Server upgrade instructions¶
The Bodhi server must be upgraded from Bodhi 3.13.0 or newer to 4.0.0 (i.e., it is not supported to upgrade a server older than 3.13.0 directly to 4.0.0 as 4.0.0 has trimmed database migrations from the older releases.
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Features¶
Bodhi now provides a
RateLimiter
log filter and documents how to use it. Together withpyramid_sawing
it is now possible to get rate limited e-mail tracebacks from the web server (#969).All updates in a release are set to obsolete status when the release is archived (#2204).
Bodhi will now comment on updates when their test gating status changes (#2210).
bodhi-push
now blocks composing retired releases (#2555).A new
bodhi.messages
Python package has been added as a convenience for Python consumers who wish to subscribe to Bodhi’s messages (#2842).Bodhi can now create zchunked
updateinfo.xml
files (#2904).The server has a new
warm_cache_on_start
setting, defaulting toTrue
. It is mostly useful when developing Bodhi and controls whether the Bodhi initialization should build caches or not (#2942).The compose states are now documented (#2974).
Added a database index on
build.update_id
, which sped up some common queries (#3038).Log messages are emitted when buildroot overrides are expired to explain why they were expired (#3060).
A missing database index was discovered on
comments.update_id
. Adding it improved performance of a common query by about 99.7% and as a result many Bodhi operations are much faster now, including update retrieval in the API, CLI, and web UI (#3062 and #3201).The CLI now allows users to add and remove builds from updates with
--addbuilds
and--removebuilds
flags (#3125).Users can now use markdown to easily reference GCC and Sourceware tickets (#3129).
A new log message is emitted when an update is blocked due to test gating (#3143).
The CLI can now download debuginfo with the new
--debuginfo
flag (#3148).
Bug fixes¶
Since the
active_releases
query parameter was dropped, an issue causing strange pagination results is no longer present (#2316).Waiver details are now displayed in the web UI (#2365).
The JavaScript will no longer crash when run in Fedora’s staging environment (#2523).
Fixed a crash in Bodhi’s error handler (#2588).
Fixed a crash on the HTML rendering of
/composes/
when composes were in a particular state (#2826).Correctly handle
ConnectionResetError
in the Composer (#2850).The CLI’s composes info subcommand is now documented in its man page (#2927).
The
mail.templates_basepath
setting is now documented (#2931).Fixed pipeline results showing with heading ‘undefined’ (#2969).
Compare enum values instead of descriptions (#3012 and #3119).
The
bodhi-approve-testing
script is a lot less chatty (#3021).Bodhi’s API can now serialize internal server errors as JSON so that the clients can properly display error messages (#3035).
The
--composed-by-bodhi
flag is now documented in thebodhi
man page (#3085).A variety of spelling and grammatical errors were fixed (#3131).
Bodhi’s markdown now uses TLS for links to pear in its markdown (#3173).
Stop using an API that
dnf
removed (#3198).Do not crash on invalid RSS requests (#3227).
Development improvements¶
Removed flash_log, since it didn’t make sense (#1165).
Removed some useless assert statements (#1200, #2848, and #2888).
An unused enum value was removed (#1999).
The integration tests now run against all supported Fedora releases (#2824).
Bodhi’s release process is now documented (#2918).
met_testing_requirements()
got a much needed rename and refactor (#3158).The Vagrant box now uses the same number of CPUs as the host (#3197).
Numerous docblock corrections and improvements.
Introduced type annotation to a few modules and added CI enforcement on them with
mypy
.Numerous improvements have been made to Bodhi’s CI tests, including expanded test coverage.
The Vagrant environment now uses unsafe IO for a small speed boost.
The integration tests run more efficiently now.
Contributors¶
The following developers contributed to Bodhi 4.0.0:
Adam Williamson
Anatoli Babenia
Aurélien Bompard
Clement Verna
Jeremy Cline
Jonathan Dieter
Josh Soref
Mattia Verga
Miro Hrončok
Nils Philippsen
Owen W. Taylor
Patrick Uiterwijk
Sebastian Wojciechowski
Troy Dawson
Randy Barlow
Older releases¶
3.x release notes¶
These are the release notes for the 3.x series of Bodhi releases.
v3.14.0¶
This is a feature release.
Features¶
Bug fixes¶
Development improvements¶
Log why buildroot overrides are expired (#3060).
Contributors¶
The following developers contributed to Bodhi 3.14.0:
Nils Philippsen
Sebastian Wojciechowski
Owen Taylor
v3.13.3¶
This is a bugfix release.
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Bug fixes¶
Mark updates as “tests ignored” if Greenwave fails to respond (#3044).
v3.13.2¶
This is a bugfix release.
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Bug fixes¶
Contributors¶
The following developers contributed to Bodhi 3.13.2:
Aurélien Bompard
Randy Barlow
v3.13.1¶
Server upgrade instructions¶
No special instructions are needed for this release.
Bug fix¶
This is a bugfix release, addressing an issue that was introduced in 3.13.0:
v3.13.0¶
This is a feature release.
Deprecations¶
Authentication with OpenID is deprecated (#1180).
bodhi-untag-branched
is deprecated (#1197).The Update’s
title
field is deprecated (#1542).Integration with pkgdb is deprecated (#1970).
The
/masher/
view is deprecated (#2024).bodhi-monitor-composes
is deprecated (#2171).The stacks feature is deprecated (#2241).
bodhi-manage-releases
is deprecated (#2420).Anonymous comments are deprecated (#2700).
The
ci_url
attribute on Builds is deprecated (#2782).The
active_releases
query parameter on the Updates query URL is deprecated (#2815).Support for fedmsg is deprecated (#2838).
Support for Bodhi 1’s URL scheme is deprecated (#2869 and #2903).
The
/admin/
API is deprecated (#2899).The fedmsg UI integration is deprecated (#2913).
CVE support is deprecated (#2915).
Dependency changes¶
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Features¶
A new
bodhi-shell
CLI is included with the server package that initialized a Python shell with some handy aliases that are useful for debugging Bodhi (#1792).Updates that obsolete security updates will now be set as security updates themselves (#1798)
The CLI no longer crashes when creating multiple buildroot overrides in one command (#2031).
The CLI can now display information about waivers (#2267).
Releases can now be marked as not being composed by Bodhi, which will be useful if we want to use Bodhi to tag builds into releases without composing those releases, e.g., Fedora Rawhide (#2317).
BuildrootOverrides are now prevented for builds that fail the test gating status (#2537).
The web interface now displays instructions for installing updates (#2799).
The CLI now has flags that allow users to override the OpenID API URL to use. This is useful for deployments that aren’t for Fedora and also for developers, who can use it to authenticate against a different OpenID server than Fedora’s production instance (Fedora’s staging instance is nice to use for this) (#2820).
The web UI search box uses a slightly longer delay before issuing the search request (51c2fa8c).
Messages can now be published by
fedora_messaging
, a replacement forfedmsg
(e30c5f21).Associating updates with private Bugzilla tickets is now handled gracefully (7ac316ac).
Bug fixes¶
The
bodhi-approve-testing
CLI script is now more resilient against failures (#1016).The update edit page will return a HTTP 403 instead of a HTTP 400 if a user tries to edit an update they don’t have permissions to edit (#1737).
The
bodhi
CLI now has a--wait
flag when creating BuildrootOverrides that will causebodhi
to wait on Koji to finish adding the override to the buildroot before exiting (#1807).The waive button is now displayed on locked updates (#2271).
Editing an update with the CLI no longer sets the type back to the default of bugfix (#2528).
bodhi-approve-testing
now sets up a log handler (#2698).Some missing commands were added to the
bodhi
man page (1e6c2596).A formatting issue was fixed in the command line client (996b4ec5).
Development improvements¶
bodhi-ci
now has an integration test suite that launches a live Bodhi server, some of its network dependencies, and tests it with some web and CLI requests (24304334).bodhi-ci
’s status report now displays the run time for finished tasks (26af5ef4).bodhi-ci
now prints a continuous status report, which is helpful in knowing what it is currently doing (f3ca62ad).We now do type checking enforcement on
bodhi-ci
(2c070055).
Contributors¶
The following developers contributed to Bodhi 3.13.0:
Aurélien Bompard
Jeremy Cline
Mattia Verga
Ryan Lerch
Sebastian Wojciechowski
Vismay Golwala
Randy Barlow
v3.12.0¶
This is a small feature release.
Server upgrade instructions¶
No special actions are needed when applying this update.
Features¶
Add a new
bugzilla_api_key
setting so that Bodhi can authenticate with an API key instead of a username and password. It is hoped that this will solve an issue Bodhi has been experiencing with Red Hat’s Bugzilla instance since it upgraded to version 5, where Bodhi is often told it needs to log in to Bugzilla when making changes to issues (#2827).Logging around Bodhi’s use of the Bugzilla API is expanded (#2831).
Contributors¶
The following developers contributed to Bodhi 3.12.0:
Randy Barlow
v3.11.3¶
This is a bugfix release.
Server upgrade instructions¶
No special actions are needed when applying this update.
Bug fixes¶
Correctly handle multiple builds with the search form in the new update JavaScript web UI code (#2791).
Contributors¶
The following developers contributed to Bodhi 3.11.3:
Mattia Verga
v3.11.2¶
This is a bugfix release, addressing an issue that was solved incorrectly with 3.11.1.
Server upgrade instructions¶
No special actions are needed when applying this update.
Bug fixes¶
Correctly catch
http.client.IncompleteRead
while Composing and retry (#2758).
Contributors¶
The following developers contributed to Bodhi 3.11.2:
Randy Barlow
v3.11.1¶
This is a bugfix release, addressing a few issues with running Bodhi under Python 3.
Server upgrade instructions¶
No special actions are needed when applying this update.
Bug fixes¶
Pass the correct type, str, to
smtplib.SMTP.sendmail()
for its to and from address parameters (#2756).Allow
EnumSymbols
to be sorted (#2757).Catch
http.client.IncompleteRead
while Composing and retry (#2758).Correctly handle timestamps from Koji (#2768).
The captcha now works under Python 3 (#2786).
Do not reverse the logout/reboot options in the web UI on Python 3 (#2778).
Contributors¶
The following developers contributed to Bodhi 3.11.1:
Patrick Uiterwijk
Randy Barlow
v3.11.0¶
Dependency changes¶
Bodhi now fully supports Python 3.
Bodhi now works with markdown 3 and click 7.
Bodhi no longer requires pyramid_tm.
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Features¶
It is now possible to query update by more fields:
alias
,approved-before
,modified-before
,pushed-before
,active-releases
,severity
, andsubmitted-before
, and the fields are documented in the bindings (#181).It is now possible to query by update title (#251).
It is now possible to filter comments, updates, and overrides with multiple users at once (#2489).
The
bodhi releases
subcommand now has alist
feature (#2536).A new compose state was added for waiting on the mirrors to sync updated repositories (#2550).
A new server CLI script called
bodhi-sar
has been added to retrieve personally identifiable information from Bodhi (#2553).The
waive
subcommand is now documented in thebodhi
man page (#2610).bodhi-push
now has a--yes/-y
flag (#2635).The
composes
andreleases
subcommands are now documented in thebodhi
man page (#2642).The composer now logs more information when items are missing from the generated
repomd.xml
file (#2643).The comment submit button now renders more clearly on some browsers (#2649).
Bodhi is now able to determine container repository names from Koji metadata, instead of hard coding it (#2658).
The
bodhi
CLI’s pagination features are now documented (#2663).There is now a
bodhi composes info
subcommand (#2683).
Bug fixes¶
Bodhi now disallows empty comments (#2009).
bodhi-check-policies
now sets up a log handler to silence warnings (#2156).The
test_gating_status
is now set back to waiting when updates are waived (#2364).Bugzilla permission errors should not cause error e-mails to be sent anymore (#2431).
The waive button is now only displayed if there are failed tests to waive (#2545).
Correctly handle unicode characters in update notes in the CLI (#2546).
The test waiver dialog now shows the test case name (#2571).
Examples were corrected in the
bodhi
CLI help text and man page (#2640 and #2641).The new update web form received a number of improvements and bug fixes. Builds and bugs lists are refreshed every time a new package is selected in the input field. Manual added bugs and builds are not added to the lists if they are already present after having been retrieved from package selection. When an error in AJAX query occurs it is now displayed as an error message. AJAX queries now have a timeout. And we now avoid form submit when pressing Enter while entering text in the package text input field (#2648).
A misleading composer log entry was corrected (#2667).
An incorrect error message was corrected (#2703).
Development improvements¶
Bodhi’s CI job now reports each test as an individual GitHub status line, which makes it much easier to identify the cause of test failures when they occur (#2584).
Due to the above, Mergify is now configured to only enforce passing tests on branched releases, since Rawhide failures are often not due to pull request patches (#2594).
Use update.get_url() to generate comments URL (#2596).
Unnecessary repetition was removed from the
BugTracker
class (#2607).A typo was fixed in the docstring of
Bugzilla.get_url()
(#2608).CI now uses the Jenkins Pipeline plugin, which allows us to run the CI jobs much more efficiently, and only requires a single node to parallelize the tasks (#2609).
A new development tool,
devel/ci/bodhi-ci
, was created to replacedevel/run_tests.sh
as the CI test running tool. It is designed to be useful to developers for running the CI suite locally, and has help text to guide you in usage (#2616).Do not expose the Duffy key in CI logs (#2617).
Use markdown’s Extension API to register FFMarkdown instead of an undocumented internal API. This allows Bodhi to work with markdown-3.0.0 (#2618).
Explicitly name the skopeo-lite src/dest_creds parameters. Also fix two unit tests for click-7.0.0. This allows Bodhi to work with click-7.0.0 (#2621).
Upgraded to Mergify 2 (#2686).
Bodhi’s tests now run about 40% faster (#2687).
Contributors¶
The following developers contributed to Bodhi 3.11.0:
Mattia Verga
Owen W. Taylor
Patrick Uiterwijk
Ryan Lerch
Sebastian Wojciechowski
sedrubal
Randy Barlow
v3.10.1¶
This releases fixes a crash while composing modular repositories (#2631).
v3.10.0¶
Dependency changes¶
The composer now requires hawkey.
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Features¶
It is no longer an error if a developer tries to create an override for a build that already had an override. Instead, Bodhi helpfully edits the old override automatically (#2030).
The UI displays the date that expired overrides became expired (#2136).
Security updates now require severity to be set (#2206).
The Waiver UI now gives the user more context (#2270 and #2363).
The CLI can be used to edit Release mail templates (#2475).
A new
clean_old_composes
setting allows admins to disable the automatic compose cleanup feature that was new in Bodhi 3.9.0 (#2561).The API can filter releases by state (beb69a05).
The CLI now has a
--debug
flag on a couple of commands (1bd76179).The bindings have some debug level logging when retrieving Greenwave status (b55fa453).
The UI now makes it clear that only authenticated users can leave karma on updates (3b551c32).
Bodhi can now manage Flatpaks (1a6c4e88).
Bodhi now ships a
/usr/bin/bodhi-skopeo-lite
, which is intended to be an alternative for use with theskopeo.cmd
setting. It allows for multi-arch containers and Flatpaks to be managed by Bodhi (a0496fc9).The composer now uses librepo/hawkey to do much more extensive testing on the produced yum repositories to ensure they are valid (7dda554a).
Bug fixes¶
More space was added around some buttons so they don’t touch on small screens (#1902).
The
bodhi releases
subcommands no longer prompt for password when not necessary (#2496).The submit feedback button now appears on low resolution screens (#2509).
Articles were fixed in a tooltip on the update page (075f8a9d).
The CLI can again display missing required tests (cf75ff81).
Fix a failure that sometimes occurred when editing multi-build updates (d997ed4f).
Unknown Koji tags will no longer cause an Exception when creating new updates (78dd4aaf).
Development improvements¶
Contributors¶
The following developers contributed to Bodhi 3.10.0:
Anatoli Babenia
Clement Verna
Mattia Verga
Owen W. Taylor
Patrick Uiterwijk
Pierre-Yves Chibon
Ralph Bean
Rick Elrod
Vismay Golwala
Randy Barlow
v3.9.0¶
Server upgrade instructions¶
This release contains database migrations. To apply them, run:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Deprecation¶
bodhi-manage-releases
is now deprecated. The bodhi
CLI now has a releases
section that
performs the tasks that bodhi-manage-releases
is used for.
Dependency changes¶
Features¶
Bodhi now comments in the same POST as status changes on Bugzilla comments (#336).
The RSS feeds now have titles (#1119).
bodhi-clean-old-mashes
is automatically run after each successful compose (#1304).The
bodhi
CLI can now edit releases’pending_signing_tag
fields (#1337).White space is stripped when searching for packages or updates (#2046).
Severity is displayed in the web UI (#2108).
Bugzilla bugs are sorted by number on the update bugs tab (#2222).
The web UI now queries Greenwave with each page load to display the test gating status, rather than displaying the cached value from Bodhi’s database. This allows users to see the current status of their update from Greenwave’s perspective. This change also causes Bodhi to retrieve the test results from Greenwave rather than from ResultsDB, which means the test results tab now shows the same test results that influence the gating decision (#2370, #2393, and #2425)
The waiver API is now documented (#2390).
The CLI and bindings can now paginate results when querying updates and overrides (#2405).
The
bodhi
CLI can now manage releases (#2419).Comments have a mouse hoverover for timestamps (60e2cddb).
The compose is now skipped if the repo is already staged (9d94edb4).
Update statuses have a descriptive tooltip in the web UI (40d04226).
A new
/updates/{id}/get-test-results
API endpoint was added that can retrieve the test results for an update from Greenwave (9631a9b6).API users can specify which results they’d like to waive in the waiver API (7d51ee54).
Update CI status is now displayed in the CLI (4ab03afe).
The CLI can now waive test results (833a9c14).
Bug fixes¶
Do not alter Bugzilla tickets that are not related to an approved product (#1043 and #2336).
Only comments after the most recent karma reset event are considered for critpath karma (#1996).
The homepage now uses correct link for critical path updates (#2094).
Bug and test case karma is now correctly registered (#2130, #2189, and #2456).
The web UI no longer uses a hardcoded Koji URL, and gets it from the new
koji_web_url
setting instead (#2182).The Bodhi CLI will no longer reset unedited fields to their defaults when editing updates (#2208).
Return a helpful error when notes are not supplied when creating an update (#2214).
Removed a conflicting HTTPForbidden handler (#2258).
The RSS view for an update now works when the update has comments with no text (#2314).
Composes that fail the sanity check are now thrown out (#2374).
The uniqueness constraint on e-mail was dropped since it was not useful and did cause occasional problems (#2387).
e-mail templates are no longer hardcoded and are now stored on the filesystem (#2396).
Failure to act on private Bugzilla tickets is no longer logged at error level (#2431).
Block quotes are now correctly styled (fd843a4e).
The validators will no longer report spurious errors due to previously failed validations (5241205b).
Development improvements¶
Python 2 line test coverage was raised to 99% (#2409).
The development build system now implements the addTag and deleteTag calls (4787a3ec).
The
querystring
validator is now used from Cornice (f9900c05).The tests now initialize the BodhiClient with a username so the tests will pass when there is a cached username (such as on a Fedora system that has Bodhi credentials) (773232b6).
A new subclass of
webtest.TestApp
was created so tests would pass on Python 3 (847873f5).devel/Vagrantfile.example
was renamed toVagrantfile
(e985fa3c).The tests now pass on systems that don’t use UTC (63543675).
Python 3 line test coverage was significantly increased, up to 98%.
A few warnings have been fixed.
Contributors¶
The following developers contributed to Bodhi 3.9.0:
Clement Verna
Eli Young
Lumir Balhar
Mattia Verga
Miro Hrončok
Owen W. Taylor
Patrick Uiterwijk
Pierre-Yves Chibon
Ralph Bean
Vismay Golwala
Randy Barlow
v3.8.1¶
Bugs¶
Contributor¶
Thanks to Miro Hrončok for fixing these issues.
Deprecation¶
bodhi-manage-releases
has been deprecated and will be removed in a future release. Please usebodhi releases
instead (#2419).
v3.8.0¶
Features¶
Container releases may now have a trailing “C” in their name (#2250).
The number of days an update has been in its current state is now displayed by the CLI (#2176 and #2269).
Composes are no longer batched by category (security vs. non-security, updates vs. testing) as this was not found to be beneficial and did slow the compose process down (68c7936e).
A fedmsg is now transmitted when an update’s time in testing is met (99923f18).
New states for updates that are related to side tags have been documented (d7b54323).
Bugs¶
Development improvements¶
The container composer has been refactored to use a cleaner helper function (#2259).
Bodhi’s models now support side tags, a planned feature for an upcoming Bodhi release (#2275).
Compose.from_updates() returns a list in Python 3 (#2291).
Some silliness was removed from the universe, as
bodhi.server.models.BodhiBase.get()
no longer requires a database session to be passed to it (#2298).The in-memory dogpile cache backend is used for development by default (#2300).
The CI container no longer installs Pungi, which speeds the CI testing time up (#2306).
Dropped support for
str
arguments fromutil.cmd()
(#2332).Python 3 line test coverage has increased to 85%.
Server upgrade instructions¶
This update contains a migration to add two new updates states for side tags. After installing the new server packages, you need to run the migrations:
$ sudo -u apache /usr/bin/alembic -c /etc/bodhi/alembic.ini upgrade head
Contributors¶
The following developers contributed to Bodhi 3.8.0:
Mattia Verga
Eli Young
Lumir Balhar
Patrick Uiterwijk
Ralph Bean
Paul W. Frields
Randy Barlow
v3.7.0¶
Features¶
Bugs¶
Contributors¶
The following developers contributed to Bodhi 3.7.0:
Pierre-Yves Chibon
Patrick Uiterwijk
Randy Barlow
v3.6.1¶
Bug fixes¶
The update template no longer crashes on locked updates (#2288).
Do not cache calculated libravatar links (#2289).
Warm the release cache at startup to avoid intermingled queries (#2296).
Warm the home page cache at startup to avoid slow responses and intermingled queries (#2297).
Interpret the
dogpile.cache.expiration_time
as anint
instead of astr
(#2299).Do not cache the Koji latest candidates (#2301).
Do not require the web server to have Pungi installed since it does not use it (#2303).
Contributors¶
The following developers contributed patches to Bodhi 3.6.1:
Patrick Uiterwijk
Randy Barlow
v3.6.0¶
Deprecation¶
bodhi-monitor-composes
has been deprecated and will be removed in a future release. Please usebodhi composes list
instead (#2170).
Dependency changes¶
Pungi 4.1.20 or higher is now required.
six
is now a required dependency.Skopeo is now a required dependency for Bodhi installations that compose containers.
Features¶
The UI no longer lists a user’s updates from retired releases by default (#752).
The CLI now supports update severity (#1814).
There is now a REST API to find out the status of running or failed composes (#2015).
The CLI now has a
composes
section which is able to query the server to display the status of composes (#2016).Bodhi is now able to identify containers in Koji (#2027).
Bodhi is now able to compose containers (#2028).
There is now a
cache_dir
setting that can be used to direct Bodhi where to store ashelve
while generating metadata (9b08f7be).There is now documentation about buildroot overrides (3450073c).
Bodhi will now include RPM changelogs in e-mails (07b27fe8).
Bodhi’s update e-mail now instruct
dnf
users to use the--advisory
flag (9fd56f99).A new
wait_for_repo_sig
setting will allow Bodhi to work with signed repodata (eea40394).
Bugs¶
Bodhi will not reopen VERIFIED or CLOSED bugs anymore (#1091, #1349, #2168).
Bugzilla tickets will no longer get too much text inserted into their fixedin field (#1430).
The CLI –close-bugs flag now works correctly (#1818).
Fix ACL lookup for Module Packages (#2251).
Captcha errors are now correctly noted on cookies instead of the session, which was incompatible with Cornice 3 (900e80a3).
The
prefer_ssl
setting now properly works (9f55c7d2).
Development improvements¶
Uniqueness on a release’s branch column was dropped, since container releases will likely use the same branch name as RPM releases (#2216).
Bodhi now learns the Pungi output dir directly from Pungi (dbc337e5).
The composer now uses a semaphore to keep track of how many concurrent composes are running (66f995e1).
CI tests are now also run against Fedora 28 (#2215).
Bodhi is now up to 98% line test coverage, from 95% in the 3.5.0 release.
It is now possible to run the same tests that CI runs in the Vagrant environment by running
devel/run_tests.sh
.The Bodhi CLI now supports Python 3 with 100% test coverage.
The Bodhi server also now supports Python 3, but only has 78% test coverage with Python 3 as many tests need to be converted to pass on Python 3, thus it is not yet recommended to run Bodhi server on Python 3 even though it is theoretically possible.
Contributors¶
The following developer contributed patches to Bodhi 3.6.0:
Lumir Balhar
Patrick Uiterwijk
Mattia Verga
Clément Verna
Pierre-Yves Chibon
Jan Kaluza
Randy Barlow
v3.5.2¶
3.5.2 is an important bug fix release. Users are strongly recommended to use it over 3.5.1, which introduced the bug.
Bug fix¶
Fix loop variable leaking in sorted_updates, which led to packages not being tagged in Koji when they are pushed to a repository (#2243).
Contributor¶
Thanks to Patrick Uiterwijk for submitting the fix for this release.
v3.5.1¶
3.5.1 inadvertently introduced a bug that caused packages not to be tagged properly in Koji. Users are advised to skip this release and use 3.5.2 instead.
Bug fixes¶
Contributor¶
All 3.5.1 fixes were submitted by Patrick Uiterwijk.
v3.5.0¶
Feature¶
Allow version-specific repomd url overrides (#2199).
Bugs¶
The location of the release notes was fixed in the developer docs (#2154).
Use “:“‘s instead of “-“‘s as the NSV separator for Modules (#2167).
bodhi-push
no longer authenticates to Koji (#2190).Two tag references were fixed in
bodhi-untag-branched
(59c83fc7).Ensure there is a Greenwave summary to display before displaying it (c07daf96).
Development improvements¶
The composer was refactored to split Pungi-specific code out into a new intermediate base class, to prepare the way for a coming container composer. This way the future container composer can share code with the RPM and Module composer code, while only using Pungi for the latter two (#2152).
The Vagrant development environment was upgraded to Fedora 27 (#2158).
Contributors¶
The following developers contributed to Bodhi 3.5.0:
Patrick Uiterwijk
Jan Kaluza
Pierre-Yves Chibon
Anatoli Babenia
Randy Barlow
v3.4.0¶
Features¶
Bug fixes¶
Development improvements¶
All of Bodhi’s public code now has docblocks that follow PEP-257.
Contributors¶
The following developers contributed to Bodhi 3.4.0:
Matt Jia
Lubomír Sedlář
Randy Barlow
v3.3.0¶
Features¶
Test gating status is now polled whenever an update is created or edited (#1514).
Check the state of updates when they are missing signatures during
bodhi-push
(#1781).There is now a web interface that displays the status of running composes (#2022).
There is now an API for waiving test results (d52cc1a6).
The Update states are now documented (6f4a48a4).
A Testing updates doc was written (f1f2d011).
A man page for
bodhi-expire-overrides
was written (e4402a32).A man page for
bodhi-manage-releases
was written (84d01668).Update status and request fields are now indexed for more performant searching (768ccb6c).
updateinfo.xml
now includes the severity level on security updates (8c9c1bf9).Only request the global_component field for critpath PDC lookups (46f35882).
Newer updates are checked first by
bodhi-check-policies
(c8942556).
Bugs¶
Development improvements¶
Contributors¶
The following developers contributed to Bodhi 3.3.0:
Matt Jia
Jonathan Lebon
Yadnyawalkya Tale
Patrick Uiterwijk
Till Maas
Ken Dreyer
Randy Barlow
v3.2.0¶
Config change¶
The default value for greenwave_api_url
was changed from
https://greenwave.fedoraproject.org/api/v1.0
to
https://greenwave-web-greenwave.app.os.fedoraproject.org/api/v1.0
as the old value was a
non-extant domain.
Dependency changes¶
Bodhi now requires
cornice>=3
(#1922).pydns is no longer a dependency (#1959).
Bodhi now formally documents that it requires PostgreSQL >= 9.2.0 in Administration.
Bodhi no longer requires
progressbar
.
Features¶
There is now a man page for
bodhi-dequeue-stable
.The composer backend no longer uses lock files, but instead stores its state in the database. This is a mix of feature, bug fix, and refactor. The feature is that there is now a
bodhi-monitor-composes
CLI tool that allows admins to monitor the progress of running composes. This also fixed a few bugs in the process, such as allowing users to comment on updates while they are being composed. More than anything, it is a refactor as it allows us to add a compose management API which will enable Fedora to add container support to Bodhi in the future (#717, #1245, #2014).
Bugs¶
Pending updates can no longer become batched and must wait until they’ve been composed into the testing repository (#1930).
The PDC critpath code was refactored to be more efficient and resilient (#2035).
A uniqueness constraint that was accidentally dropped for
packages.{name,type}
was added back (#2038).The CLI help text was corrected to remove spaces between the list of builds in the example for creating multi-build updates (#2071).
Releases with no configured days in testing no longer crash Bodhi (#2076).
bodhi-check-policies
now also operates on pushed updates (#2085).The client bindings’
update_str()
method was refactored and now does cleaner line wrapping (3ef05fa9).Do not fail the compose if there is an error when writing the changelog (88fc8405).
Do not fail to write a changelog when Koji returns lists (dc7546c0).
The composer now checkpoints adding comments, so they don’t get sent twice if a compose is resumed after they were already sent (03d87c98).
Development improvements¶
The link to the developer docs was corrected in the
README
file (#2044).The Developer documentation has been reorganized and is now easier to read (243d278f).
There is now autogenerated documentation on the Database models (7f8121a8).
builds.package_id
is now non-nullable (e87201fb).updates.release_id
is now non-nullable (5371bbd1).Much progress was made towards Python 3 support.
Docblocks were written for many more modules.
Line test coverage is now up to 95%.
Some unused and unreachable code was removed.
The devbuildsys now supports el6 and el7 builds.
Contributors¶
The following developers contributed to Bodhi 3.2.0:
Chenxiong Qi
Lumir Balhar
Matt Jia
Patrick Uiterwijk
Till Maas
Randy Barlow
v3.1.0¶
Special instructions¶
The Alembic configuration file has changed to use the Python path of the migrations. In order to run the new migrations, you should ensure your alembic.ini has
script_location = bodhi:server/migrations
.
Dependency changes¶
The client formally depends on
iniparse
now. It needed this before but the dependency was undocumented (ddf47eb2).Bodhi no longer uses or requires
webhelpers
. RSS feeds are now generated byfeedgen
, a new required dependency.Bodhi no longer uses or requires
bunch
.
Features¶
The CLI now prints a helpful hint about how to use
koji wait-repo
when creating or editing a buildroot override, or when a query for overrides returns exactly one result (#1376).Bodhi now uses connection pooling when making API requests to other services (#1753).
The bindings now conditionally import
dnf
(#1812).It is now possible to query for Releases by a list of primary keys, by using the querystring
ids
with thereleases/
API.Builds now serialize their
release_id
field.It is now possible to configure a maximum number of mash threads that Bodhi will run at once, which is handy if the new Pungi masher has been mean to your NAS. There is a new
max_concurrent_mashes
setting in production.ini, which defaults to2
.There is now a man page for
bodhi-clean-old-mashes
.The documentation was reorganized by type of reader (14e81a81).
The documentation now uses the Alabaster theme (f15351e2).
The CLI now has a
--arch
flag that can be used when downloading updates to specify which architecture is desired (6538c9e9).Bodhi’s documentation now includes an Administration section which includes documentation on its various settings (310f56d4).
Bugs¶
Bodhi now uses the correct comment on critical path updates regarding how many days are required in testing (#1361).
All home page update types now have mouseover titles (#1620).
e-mail subjects again include the version of the updates (#1635).
The bindings will re-attempt authentication upon captcha failures (#1787).
The formatting is fixed on mobile for the edit/create update form (#1791).
The “Push to Stable” button is now rendered in the web UI on batched updates (#1907).
Do not fail the mash if a changelog is malformed (#1989).
bodhi-dequeue-stable
no longer dies if it encounters updates that can’t be pushed stable (#2004).Unreachable RSS Accept-header based redirects were fixed (6f3db0c0).
Fixed an unsafe default in
bodhi.server.util.call_api()
(9461b3a4).Bodhi now distinguishes between testing and stable when asking Greenwave for gating decisions (6d907a7a).
The CLI now renders the correct URL for updates without aliases (caaa0e6e).
Development improvements¶
The database migrations are now shipped as part of the Python distribution (PR#1777).
The developer docs pertaining to using virtualenvs have been corrected and improved (#1797).
The
test_utils.py
tests now use theBaseTestCase
, which allows them to pass when run by themselves (#1817).An obsolete mash check for symlinks was removed (#1819).
A mock was moved inside of a test to avoid inter-test dependencies (#1848).
Bodhi is now compliant with
flake8
’sE722
check (#1927).The JJB YAML file is now tested to ensure it is valid YAML (#1934).
Some code has been prepared for Python 3 compatibility (d7763560).
There is now formal documentation on how to submit patches to Bodhi (bb20a0ee).
Bodhi is now tested by Fedora containers in the CentOS CI environment (36d603f0).
Bodhi is now tested against dependencies from PyPI (1e8fb65d).
The
development.ini.example
file has been reduced to a minimal form, which means we no longer need to document the settings in two places (2b7dc4e5).Bodhi now runs CI tests for different PRs in parallel (6427309f).
Vagrantfile.example
has been moved todevel/
for tidiness (21ff2e58).It is now easier to replicate the CI environment locally by using the
devel/run_tests.sh
script.Many more docblocks have been written across the codebase.
Line test coverage is now at 93%.
Release contributors¶
The following developers contributed to Bodhi 3.1.0:
Alena Volkova
Aman Sharma
Caleigh Runge-Hottman
Dusty Mabe
František Zatloukal
Jeremy Cline
Ken Dreyer
Lumir Balhar
Martin Curlej
Patrick Uiterwijk
Pierre-Yves Chibon
Ralph Bean
Ryan Lerch
Randy Barlow
3.0.0¶
Backwards incompatible changes¶
Support for the
USERNAME
environment variable in all of Bodhi’s CLI tools has been dropped, as it conflicts with GDM’s variable by the same name. Many users do not have the same FAS username as they use on their desktop, and this variable causes confusion in the CLI (#1789).The layout of the repositories after mash is now different.
The following settings have been removed from Bodhi, as Pungi now manages comps files instead of Bodhi:
* ``compose_atomic_trees`` * ``comps_dir`` * ``comps_url`` * ``mash_conf``
bodhi-push
no longer has a--staging
flag as it was not needed. It was used to determine the mashing directory to look for lock files, but the directories it looked in were hardcoded instead of using themash_dir
setting. With 3.0.0,mash_dir
is used and the--staging
flag is no longer needed.
Dependency changes¶
Bodhi no longer uses or requires mash.
Bodhi no longer uses or requires fedmsg-atomic-composer.
Pungi is now a required dependency for Bodhi, replacing mash.
jinja2 is now a required dependency for Bodhi, used by its masher.
New settings¶
The production.ini
file supports some new settings:
pungi.basepath
specifies which path Bodhi should find Pungi config files inside. Defaults to/etc/bodhi
.pungi.cmd
specifies the command to runpungi
with. Defaults to/usr/bin/pungi-koji
.pungi.conf.module
should be the name of a jinja2 template file found inpungi.basepath
that will be rendered to generate a Pungi config file that will be used to mash RPM repositories (yum, dnf, and atomic repositories). Defaults topungi.module.conf
, meaning that an/etc/bodhi/pungi.module.conf
is the default config file for Modules.pungi.conf.rpm
should be the name of a jinja2 template file found inpungi.basepath
that will be rendered to generate a Pungi config file that will be used to mash RPM repositories (yum, dnf, and atomic repositories). Defaults topungi.rpm.conf
, meaning that an/etc/bodhi/pungi.rpm.conf
is the default config file for RPMs.The
pungi.conf.*
setting files above have the following jinja2 template variables available to them:* 'id': The id of the Release being mashed. * 'release': The Release being mashed. * 'request': The request being mashed. * 'updates': The Updates being mashed.
You will need to create variants.xml
templates inside pungi.basepath
as well. These
templates will have access to the same template variables described above, and should be named
variants.rpm.xml.j2
and variants.module.xml.j2
, for RPM composes and module composes,
respectively.
Features¶
The 3.0.0 release is focused on delivering one big change that enables a variety of features: the use of Pungi to do mashing rather than mash. The most notable feature this enables is the ability to deliver update repositories for modules, but in general all of Pungi’s feature set is now available for Bodhi to use.
Bodhi now supports non-RPM artifacts, namely, modules (#653, #1330).
Via Pungi, Bodhi is now able to use Koji signed repos (#909).
Via Pungi, Bodhi is now able to generate OSTrees that are more consistent with Fedora’s release day OSTrees (#1182).
Bodhi now uses Pungi instead of the retiring mash project (#1219).
Bugs¶
Bodhi, via Pungi, will now reliably produce repomd files (#887).
Bodhi’s CLI no longer uses USERNAME, which conflicted with GDM for users who use a different local system username than their FAS username. For such users, there was no workaround other than to constantly use the
--user
flag, and the environment variable wasn’t particularly useful anymore now that the Bodhi CLI remembers usernames after one successful authentication (#1789).
Release contributors¶
The following developers contributed to Bodhi 3.0.0:
Patrick Uiterwijk
Adam Miller
Dusty Mabe
Kushal Das
Randy Barlow
Older releases¶
2.x release notes¶
This document contains release notes for the old 2.x release series.
2.12.2¶
Bugs¶
Release contributors¶
The following developers contributed to Bodhi 2.12.2:
Randy Barlow
2.12.1¶
Bugs¶
Use separate directories to clone the comps repositories (PR#1885).
Release contributors¶
The following developers contributed to Bodhi 2.12.1:
Patrick Uiterwijk
Randy Barlow
2.12.0¶
Features¶
Bugs¶
Use generic superclass models where possible (#1793).
Release contributors¶
The following developers contributed to Bodhi 2.12.0:
Pierre-Yves Chibon
Randy Barlow
2.11.0¶
Features¶
Bodhi now batches non-urgent updates together for less frequent churn. There is a new
bodhi-dequeue-stable
CLI that is intended be added to cron that looks for batched updates and moves them to stable (#1157).
Bugs¶
Improved bugtracker linking in markdown input (#1406).
Don’t disable autopush when the update is already requested for stable (#1570).
There is now a timeout on fetching results from ResultsDB in the backend (#1597).
Critical path updates now have positive days_to_stable and will only comment about pushing to stable when appropriate (#1708).
Development improvements¶
More docblocks have been written.
Release contributors¶
The following developers contributed to Bodhi 2.11.0:
Caleigh Runge-Hottman
Ryan Lerch
Rimsha Khan
Randy Barlow
2.10.1¶
Bug fixes¶
Adjust the Greenwave subject query to include the original NVR of the builds (PR#1765).
Release contributors¶
The following developers contributed to Bodhi 2.10.1:
Ralph Bean
2.10.0¶
Compatibility changes¶
This release of Bodhi has a few changes that are technically backward incompatible in some senses, but it was determined that each of these changes are justified without raising Bodhi’s major version, often due to features not working at all or being unused. Justifications for each are given inline.
dnf and iniparse are now required dependencies for the Python bindings. Justification: Technically, these were needed before for some of the functionality, and the bindings would traceback if that functionality was used without these dependencies being present. With this change, the module will fail to import without them, and they are now formal dependencies.
Support for EL 5 has been removed in this release. Justification: EL 5 has become end of life.
The pkgtags feature has been removed. Justification: It did not work correctly and enabling it was devastating (#1634).
Some bindings code that could log into Koji with TLS certificates was removed. Justification: It was unused (b4474676).
Bodhi’s short-lived
ci_gating
feature has been removed, in favor of the new Greenwave integration feature. Thus, theci.required
andci.url
settings no longer function in Bodhi. Thebodhi-babysit-ci
utility has also been removed. Justification: The feature was never completed and thus no functionality is lost (PR#1733).
Features¶
There are new search endpoints in the REST API that perform ilike queries to support case insensitive searching. Bodhi’s web interface now uses these endpoints (#997).
It is now possible to search by update alias in the web interface (#1258).
Exact matches are now sorted first in search results (#692).
The CLI now has a
--mine
flag when searching for updates or overrides (#811, #1382).The CLI now has more search parameters when querying overrides (#1679).
The new case insensitive search is also used when hitting enter in the search box in the web UI (#870).
Bodhi is now able to query Pagure for FAS groups for ACL info (f9414601).
The Python bindings’
candidates()
method now automatically initializes the username (6e8679b6).CLI errors are now printed in red text (431b9078).
The graphs on the metrics page now have mouse hovers to indicate numerical values (#209).
Bodhi now has support for using Greenwave to gate updates based on test results. See the new
test_gating.required
,test_gating.url
, andgreenwave_api_url
settings inproduction.ini
for details on how to enable it. Note also that this feature introduces a new server CLI tool,bodhi-check-policies
, which is intended to be run via cron on a regular interval. This CLI tool communicates with Greenwave to determine if updates are passing required tests or not (PR#1733).
Bug fixes¶
The autokarma check box’s value now persists when editing updates (#1692, #1482, and #1308).
The CLI now catches a variety of Exceptions and prints user readable errors instead of tracebacks (#1126, #1626).
The Python bindings’
get_releases()
method now uses a GET request (#784).The HTML sanitization code has been refactored, which fixed a couple of issues where Bodhi didn’t correctly escape things like e-mail addresses (#1656, #1721).
The bindings’ docstring for the
comment()
method was corrected to state that theemail
parameter is used to make anonymous comments, rather than to enable or disable sending of e-mails (#289).The web interface now links directly to libravatar’s login page instead of POSTing to it (#1674).
The new/edit update form in the web interface now works with the new typeahead library (#1731).
Development improvements¶
Several more modules have been documented with PEP-257 compliant docblocks.
Several new tests have been added to cover various portions of the code base, and Bodhi now has 89% line test coverage. The goal is to reach 100% line coverage within the next 12 months, and then begin to work towards 100% branch coverage.
Release contributors¶
The following developers contributed to Bodhi 2.10.0:
Ryan Lerch
Matt Jia
Matt Prahl
Jeremy Cline
Ralph Bean
Caleigh Runge-Hottman
Randy Barlow
2.9.1¶
2.9.1 is a security release for CVE-2017-1002152.
Release contributors¶
Thanks to Marcel for reporting the issue. Randy Barlow wrote the fix.
2.9.0¶
Features¶
It is now possible to set required Taskotron tests with the
--requirements
CLI flag (#1319).The CLI now has tab completion in bash (#1188).
Updates that are pending testing now go straight to stable if they reach required karma (#632).
The automated tests tab now shows a count on info results (1de12f6a).
The UI now displays a spinner while a search is in progress (#436).
It is now possible to middle click on search results in the web UI (#461).
Pending releases are now displayed on the home page (#1619).
Links without an explicit scheme can now be detected as links (#1721).
Bugs¶
Wiki test cases are no longer duplicated (#780).
The server bodhi-manage-releases script now uses the new Bodhi bindings (#1338).
The server bodhi-manage-releases script now supports the
--url
flag (0181a344).The
--help
output from the Bodhi CLI is cleaner and more informative (#1457).The CLI now provides more informative error messages when creating duplicate overrides (#1377).
E-mail subjects now include build versions again (#1635).
Taskotron results with the same scenario key are now all displayed (d5b0bfa3).
The front page UI elements now line up (#1659).
The UI now properly urlencodes search URLs to properly escape characters such as “+” (#1015).
e-mail addresses are now properly processed by the markdown system (#1656).
Development improvements¶
The bundled typeahead JavaScript library is rebased to version 1.1.1 from the maintained fork at https://github.com/corejavascript/typeahead.js . The main typeahead repo appears to be unmaintained and contained a bug that we were hitting: https://github.com/twitter/typeahead.js/issues/1381
Docblocks were written for several more modules.
Bodhi now hard depends on rpm instead of conditionally importing it (#1166).
Bodhi now has CI provided by CentOS that is able to test pull requests. Thanks to Brian Stinson and CentOS for providing this service to the Bodhi project!
Some ground work has been done in order to enable batched updates, so that medium and low priority updates can be pushed on a less frequent interval than high priority (security or urgent) updates.
Bodhi now uses py.test as the test runner instead of nose.
Tox is now used to run the style tests.
There is now a unified test base class that creates a single TestApp for the tests to use. The TestApp was the source of a significant memory leak in Bodhi’s tests. As a result of this refactor, Bodhi’s tests now consume about 450 MB instead of about 4.5 GB. As a result, the example Vagrantfile now uses 2 GB of RAM instead of 5 GB. It is likely possible to squeeze it down to 1 GB or so, if desired.
Bodhi now supports both the bleach 1 and bleach 2 APIs (#1718).
Release contributors¶
The following developers contributed to Bodhi 2.9.0:
Ryan Lerch
Jeremy Cline
Clement Verna
Caleigh Runge-Hottman
Kamil Páral
Brian Stinson
Martin Curlej
Trishna Guha
Brandon Gray
Randy Barlow
2.8.1¶
Bugs¶
Release contributors¶
The following contributors submitted patches for Bodhi 2.8.1:
Patrick Uiterwijk (the true 2.8.1 hero)
Randy Barlow
2.8.0¶
Special instructions¶
There is a new setting,
ci.required
that defaults to False. If you wish to use CI, you must add a cron task to call the newbodhi-babysit-ci
CLI periodically.
Deprecation¶
The /search/packages
API call has been deprecated.
New Dependencies¶
Bodhi now uses Bleach to sanitize markdown input from the user. python-bleach 1.x is a new dependency in this release of Bodhi.
Features¶
The API, fedmsg messages, bindings, and CLI now support non-RPM content ( #1325, #1326, #1327, and #1328). Bodhi now knows about Fedora’s new module format, and is able to handle everything they need except publishing (which will appear in a later release). This release is also the first Bodhi release that is able to handle multiple content types.
Improved OpenQA support in the web UI (#1471).
The type icons are now aligned in the web UI (4b6b7597 and d0940323).
There is now a man page for
bodhi-approve-testing
(cf8d897f).Bodhi can now automatically detect whether to use DDL table locks if BDR is present during migrations (059b5ab7).
Locked updates now grey out the edit buttons with a tooltip to make the lock more obvious to the user (#1492).
Users can now do multi-line literal code blocks in comments (#1509).
The web UI now has more descriptive placeholder text (1a7122cd).
All icons now have consistent width in the web UI (6dfe6ff3).
The front page has a new layout (6afb6b07).
Bodhi is now able to use Pagure and PDC as sources for ACL and package information (59551861).
Bodhi’s configuration loader now validates all values and centralizes defaults. Thus, it is now possible to comment most of Bodhi’s settings file and achieve sane defaults. Some settings are still required, see the default
production.ini
file for documentation of all settings and their defaults. A few unused settings were removed (#1488, #1489, and 263b7b7f).The web UI now displays the content type of the update (#1329).
Bodhi now has a new
ci.required
setting that defaults to False. If enabled. updates will gate based on Continuous Integration test results and will not proceed to updates-testing unless the tests pass (0fcb73f8).Update builds are now sorted by NVR (#1441).
The backend code is reworked to allow gating on resultsdb data and requirement validation performance is improved (#1550).
Bodhi is now able to map distgit commits to Builds, which helps map CI results to Builds. There is a new
bodhi-babysit-ci
CLI that must be run periodically in cron ifci.required
isTrue
(ae01e5d1).
Bugs¶
A half-hidden button is now fully visible on mobile devices (#1467).
The signing status is again visible on the update page (#1469).
The edit update form will not be presented to users who are not auth’d (#1521).
The CLI
--autokarma
flag now works correctly (#1378).E-mail subjects are now shortened like the web UI titles (#882).
The override editing form is no longer displayed unless the user is logged in (#1541).
Development improvements¶
Several more modules now pass pydocstyle PEP-257 tests.
The development environment has a new
bshell
alias that sets up a usable Python shell, initialized for Bodhi.Lots of warnings from the unit tests have been fixed.
The dev environment cds to the source folder upon
vagrant ssh
.There is now a
bfedmsg
development alias to see fedmsgs.A new
bresetdb
development alias will reset the database to the same state as whenvagrant up
completed.Some unused code was removed (afe5bd8c).
Test coverage was raised significantly, from 85% to 88%.
The development environment now has httpie by default.
The default Vagrant memory was raised (#1588).
Bodhi now has a Jenkins Job Builder template for use with CentOS CI.
A new
bdiff-cover
development alias helps compare test coverage in current branch to thedevelop
branch, and will alert the developer if there are any lines missing coverage.
Release contributors¶
The following developers contributed to Bodhi 2.8.0:
Ryan Lerch
Ralph Bean
Pierre-Yves Chibon
Matt Prahl
Martin Curlej
Adam Williamson
Kamil Páral
Clement Verna
Jeremy Cline
Matthew Miller
Randy Barlow
2.7.0¶
Features¶
The bodhi CLI now supports editing an override. (#1049).
The Update model is now capable of being associated with different Build types (#1394).
The bodhi CLI now supports editing an update using the update alias. (#1409).
The web UI now uses Fedora 26 in its example text instead of Fedora 20 (ec0c619a).
The Build model is now polymorphic to support non-RPM content (#1393).
Bugs¶
Development improvements¶
SQL queries are no longer logged by default.
fedmsgs are now viewable in the development environment.
There is a new test to ensure there is only one Alembic head.
There is a new bash alias, bteststyle, that runs the code style tests.
The BuildrootOverride model is now documented.
Release contributors¶
The following contributors submitted patches for Bodhi 2.7.0:
Clement Verna
Jeremy Cline
Bianca Nenciu
Caleigh Runge-Hottman
Adam Williamson
Robert Scheck
Ryan Lerch
Randy Barlow
2.6.2¶
This release focused on CLI authentication issues. One of the issues requires users to also update their python-fedora installation to at least 0.9.0.
Bugs¶
Release contributors¶
The following contributors submitted patches for Bodhi 2.6.2:
Randy Barlow
2.6.1¶
This release fixes 4 issues with three commits.
Bugs¶
Release contributors¶
The following contributors submitted patches for Bodhi 2.6.1:
Jeremy Cline
Randy Barlow
2.6.0¶
Special instructions¶
The database migrations have been trimmed in this release. To upgrade to this version of Bodhi from a version prior to 2.3, first upgrade to Bodhi 2.3, 2.4, or 2.5, run the database migrations, and then upgrade to this release.
Bodhi cookies now expire, but cookies created before 2.6.0 will not automatically expire. To expire all existing cookies so that only expiring tickets exist, you will need to change
authtkt.secret
to a new value in your settings file.
Dependency adjustments¶
zope.sqlalchemy is no longer a required dependency (PR#1414).
WebOb is no longer a directly required dependency, though it is still indirectly required through pyramid.
Features¶
The web UI footer has been restyled to fit better with the new theme (PR#1366).
A link to documentation has been added to the web UI footer (#1321).
The bodhi CLI now supports editing updates (#937).
The CLI’s
USERNAME
environment variable is now documented, and its--user
flag is clarified (28dd380a).The icons that we introduced in the new theme previously didn’t have titles. Consequently, a user might not have know what these icons meant. Now if a user hovers over these icons, they get a description of what they mean, for example: “This is a bugfix update” or “This update is in the critical path” (#1362).
Update pages with lots of updates look cleaner (#1351).
Update page titles are shorter now for large updates (#957).
Add support for alternate architectures to the MasherThread.wait_for_sync() (#1343).
Update lists now also include type icons next to the updates (5983d99c).
Testing updates use a consistent label color now (62330644).
openQA results are now displayed in the web ui (450dbafe).
Bodhi cookies now expire. There is a new
authtkt.timeout
setting that sets Bodhi’s session lifetime, defaulting to 1 day.
Bugs¶
Comments that don’t carry karma don’t count as a user’s karma vote (#829).
The web UI now uses the update alias instead of the title so editors of large updates can click the edit button (#1161).
Initialize the bugtracker in
main()
instead of on import so that docs can be built without installing Bodhi (PR#1359).Make the release graph easier to read when there are many datapoints (#1172).
Optimize the JavaScript that loads automated test results from ResultsDB (#983).
Bodhi’s testing approval comment now respects the karma reset event (#1310).
pop
andcopy
now lazily load the configuration (#1423).
Development improvements¶
A new automated PEP-257 test has been introduced to enforce docblocks across the codebase. Converting the code will take some time, but the code will be expanded to fully support PEP-257 eventually. A few modules have now been documented.
Test coverage is now 84%.
The Vagrant environment now has vim with a simple vim config to make sure spaces are used instead of tabs (PR#1372).
The Package database model has been converted into a single-table inheritance model, which will aid in adding multi-type support to Bodhi. A new RpmPackage model has been added. (PR#1392).
The database initialization code is unified (e9a26042).
The base model class now has a helpful query property (8167f262).
.pyc files are now removed when running the tests in the dev environment (9e9adb61).
An unused inherited column has been dropped from the builds table (e8a95b12).
Release contributors¶
The following contributors submitted patches for Bodhi 2.6.0:
Jeremy Cline
Ryan Lerch
Clement Verna
Caleigh Runge-Hottman
Bianca Nenciu
Adam Williamson
Ankit Raj Ojha
Jason Taylor
Randy Barlow
2.5.0¶
Bodhi 2.5.0 is a feature and bugfix release.
Features¶
The web interface now uses the Fedora Bootstrap theme. The layout of the update page has also been revamped to display the information about an update in a clearer manner. (#1313).
The
bodhi
CLI now has a--url
flag that can be used to switch which Bodhi server it communicates with. TheBODHI_URL
environment can also be used to configure this flag.The documentation has been reorganized.
The Python bindings are now documented.
Bodhi will now announce that karma has been reset to 0 when builds are added or removed from updates (6d6de4bc).
Bodhi will now announce that autokarma has been disabled when an update received negative karma (d3ccc579).
The docs theme is now Alabaster (57a80f42).
The Bodhi documentation now has a description of Bodhi on the landing page (#1322).
The REST API is now documented (#1323).
The client Python bindings can now accept a
base_url
that doesn’t end in a slash (1087939b).
Bugs¶
The position of the Add Comment button is now the bottom right. (#902).
An unusuable
--request
flag has been removed from a CLI command (#1187).The cursor is now a pointer when hovering over Releases button (#1296).
The number of days to stable is now correctly calculated on updates (#1305).
Fix a query regular expression so that Fedora update ids work (d5bec3fa).
Karma thresholds can now be set when autopush is disabled (#1033).
Development improvements¶
The Vagrant development environment automatically configures the BODHI_URL environment variable so that the client talks to the local server instead of production or staging.
Test coverage is up another percentage to 82%.
Bodhi is now PEP-8 compliant.
The development environment now displays all Python warnings once.
Release contributors¶
The following developers contributed to Bodhi 2.5.0:
Ryan Lerch
Trishna Guha
Jeremy Cline
Ankit Raj Ojha
Ariel O. Barria
Randy Barlow
2.4.0¶
Bodhi 2.4.0 is a feature and bugfix release.
Features¶
The web interface now displays whether an update has autopush enabled (#999).
Autopush is now disabled on any update that receives authenticated negative karma (#1191).
Bodhi now links to Koji builds via TLS instead of plaintext (#1246).
Some usage examples have been added to the
bodhi
man page.Bodhi’s server package has a new script called
bodhi-clean-old-mashes
that can recursively delete any folders with names that end in a dash followed by a string that can be interpreted as a float, sparing the newest 10 by lexigraphical sorting. This should help release engineers keep the Koji mashing folder clean.There is now a
bodhi.client.bindings
module provided by the Bodhi client package. It contains Python bindings to Bodhi’s REST API.The
bodhi
CLI now prints autokarma and thresholds when displaying updates.bodhi-push
now has a--version
flag.There are now man pages for
bodhi-push
andinitialize_bodhi_db
.
Bugs¶
Users’ e-mail addresses will now be updated when they log in to Bodhi (#902).
The masher now tests for
repomd.xml
instead of the directory that contains it (#908).Users can now only upvote an update once (#1018).
Only comment on non-autokarma updates when they meet testing requirements (#1009).
Autokarma can no longer be set to NULL (#1048).
Users can now be more fickle than ever about karma (#1064).
Critical path updates can now be free of past negative karma ghosts (#1065).
Bodhi now comments on non-autokarma updates after enough time has passed (#1094).
bodhi-push
now does not crash when users abort a push (#1107).bodhi-push
now does not print updates when resuming a push (#1113).Bodhi now says “Log in” and “Log out” instead of “Login” and “Logout” (#1146).
Bodhi now configures the Koji client to retry, which should help make the masher more reliable (#1201).
Bodhi is now compatible with Pillow-4.0.0 (#1262).
The bodhi cli no longer prints update JSON when setting the request (#1408195).
Bodhi’s signed handler now skips builds that were not assigned to a release.
The comps file is now cloned into an explicit path during mashing.
The buildsystem is now locked during login.
Development improvements¶
A great deal of tests were written for Bodhi. Test coverage is now up to 81% and is enforced by the test suite.
Bodhi’s server code is now PEP-8 compliant.
The docs now contain contribution guidelines.
The build system will now fail with a useful Exception if used without being set up.
The Vagrantfile is a good bit fancier, with hostname, dnf caching, unsafe but performant disk I/O, and more.
The docs now include a database schema image.
Bodhi is now run by systemd in the Vagrant guest.
The Vagrant environment now has several helpful shell aliases and a helpful MOTD to advertise them to developers.
The development environment now uses Fedora 25 by default.
The test suite is less chatty, as several unicode warnings have been fixed.
Dependency change¶
Bodhi server now depends on click for
bodhi-push
.
Release contributors¶
The following contributors submitted patches for Bodhi 2.4.0:
Trishna Guha
Patrick Uiterwijk
Jeremy Cline
Till Mass
Josef Sukdol
Clement Verna
andreas
Ankit Raj Ojha
Randy Barlow
2.3.3¶
Bodhi 2.3.3 converts koji auth to be done with krb5 and fixes one bug:
Thanks to Patrick Uiterwijk for contributing both of these commits!
2.3.2¶
Bodhi 2.3.2 is a bugfix release that addresses the following issues:
push.py
now defaults to the current releases (#1071).Fixed a typo in the masher in sending an ostree compose message (PR#1072).
Fixed a typo in looking up an e-mail template (#1073).
The fedmsg name is now passed explicitly (PR#1079).
The man page was corrected to state that builds should be comma separated (PR#1095).
Fixed a race condition between robosignatory and the signed handler (#1111).
Fix querying the updates for resumption in
push.py
(e7cb3f13).push.py
now prompts for the username if not given (abeca57e).
Release contributors¶
The following contributors authored patches for 2.3.2:
Patrick Uiterwijk
Randy Barlow
2.3.1¶
Bodhi 2.3.1 fixes #1067,
such that edited updates now tag new builds into the pending_signing_tag
instead of the pending_testing_tag
. This is needed for automatic signing
gating to work.
2.3.0¶
Bodhi 2.3.0 is a feature and bug fix release.
Features¶
The package input field is now autofocused when creating new updates (PR#876).
Releases now have a
pending_signing_tag
(3fe3e219).fedmsg notifications are now sent during ostree compositions (b972cad0).
Critical path updates will have autopush disabled if they receive negative karma (b1f71006).
The e-mail templates reference dnf for Fedora and yum for Enterprise Linux (1c1f2ab7).
Updates are now obsoleted if they reach the unstable threshold while pending (f033c74c).
Bodhi now gates Updates based on whether they are signed yet or not (PR#1011).
Bugs¶
Candidate builds and bugs are no longer duplicated while searching (#897).
The Bugzilla connection is only initialized when needed (950eee2c).
A sorting issue was fixed on the metrics page so the data is presented correctly (487acaaf).
The Copyright date in the footer of the web interface is updated (1447b6c7).
Bodhi will comment with the required time instead of the elapsed time on updates (#1017).
Bodhi will only comment once to say that non-autopush updates have reached the threshold (#1009).
/masher/
is now allowed in addition to/masher
for GET requests (cdb621ba).
Dependencies¶
Bodhi now depends on fedmsg-atomic-composer >= 2016.3, which addresses a few issues during mashing.
Development improvements¶
Bodhi 2.3.0 also has a few improvements to the development environment that make it easier to contribute to Bodhi or improve Bodhi’s automated tests:
Documentation was added to describe how to connect development Bodhi to staging Koji (7f3b5fa2).
An unused
locked_date_for_update()
method was removed (b87a6395).The development.ini.example base_address was changed to localhost so requests would be allowed (0fd5901d).
The
setup.py
file has more complete metadata, making it more suitable for submission to PyPI (5c201ac2).The #bodhi and #fedora-apps channels are now documented in the readme file (52093069).
A new test has been added to enforce PEP-8 style and a few modules have been converted to conform (bbafc9e6).
Release contributors¶
The following contributors authored patches for 2.3.0:
Josef Sukdol
Julio Faracco
Patrick Uiterwijk
Randy Barlow
Richard Fearn
Trishna Guha
2.2.4¶
This release fixes two issues:
2.2.3¶
This release fixes #951, which prevented updates with large numbers of packages to be viewable in web browsers.
2.2.2¶
This is another in a series of bug fix releases for Bodhi this week. In this release, we’ve fixed the following issues:
2.2.1¶
Bodhi 2.2.1 is a bug fix release, primarily focusing on mashing issues:
2.2.0¶
Bodhi 2.2.0 is a security and feature release, with a few bug fixes as well.
Security¶
This update addresses CVE-2016-1000008 by disallowing the re-use of solved captchas. Additionally, the captcha is warped to make it more difficult to solve through automation. Thanks to Patrick Uiterwijk for discovering and reporting this issue.
Features¶
Bodhi’s
approve_testing.py
script will now comment on updates when they have reached a stable karma threshold (5b0d1c7c).The web interface now displays a push to stable button when the karma reaches the right level when autokarma is disabled (#772 and #796).
Masher messages now have an “agent”, so it is possible to tell which user ran the mash (45e4fc9f).
Locked updates now list the time they were locked (#831).
Bugs are closed and commented on in the same Bugzilla POST (#404).
Karma values equal to 0 are no longer displayed with a green background to better distinguish them from positive karma reports (#799).
Updates display a link to the feedback guidelines (#865).
The new CLI now has a man page (95574831).
The CLI now has a
--version
flag (#895).
Bugs¶
Locked updates that aren’t part of a current push will now be pushed and warnings will be logged (bf4bdeef). This should help us to fix #838.
Don’t show users an option to push to stable on obsoleted updates (#848).
taskotron updates are shown per build, rather than per update (ce2394c6, 8e199668).
The Sphinx documentation now builds again (b3f80b1b).
Validator messages are now more useful and helpful (#630).
The Bodhi CLI no longer depends on the server code to function (#900).
Private bugs will no longer prevent the updates consumer from continuing (#905).
bootstrap is now included in the setuptools manifest for the server package (#919).
Commit log¶
The above lists are the highlights of what changed. For a full list of the changes since 2.1.8, please see the changelog.
API Guide¶
Bodhi Server APIs¶
Message API¶
Bodhi sends a number of AMQP messages. Each message has a formally defined schema. Bodhi provides a
convenient bodhi.messages
Python package that allows you to interact with messages
via handy Python classes. If you are unable to use Python 3.6+, Bodhi also publishes its message
schemas via JSON Schema.
Warning
Bodhi’s messages do contain fields that are not documented in its JSON schemas. Bodhi does not make any guarantees about data that is not documented in its schema, and thus it is subject to change. Please work with the Bodhi project if you need data that is not part of Bodhi’s schemas.
Base¶
Python objects¶
Define Bodhi’s base classes for its message schemas.
Each message is defined as a Python class. For details, see fedora-messaging documentation on messages.
- class bodhi.messages.schemas.base.BodhiMessage(body=None, headers=None, topic=None, properties=None, severity=None)[source]
Bases:
Message
A base class for Bodhi messages.
- property agent: str | None
Return the agent’s username for this message.
- Returns:
The agent’s username, or None if the body has no agent key.
- property agent_avatar: None | str
Return a URL to the avatar of the user who caused the action.
- Returns:
The URL to the user’s avatar, or None if username is None.
- property agent_name: str | None
Return the agent’s username for this message.
- Returns:
The agent’s username, or None if the body has no agent key.
- property app_icon: str
Return a URL that points to the application’s icon.
This is used when displaying the message to users.
- Returns:
A URL for Bodhi’s app icon.
- property app_name: str
Return the name of the application that generated the message.
- Returns:
the name of the application (bodhi)
- property containers: Iterable[str]
List of containers affected by the action that generated this message.
- Returns:
A list of affected container names.
- property flatpaks: Iterable[str]
List of flatpaks affected by the action that generated this message.
- Returns:
A list of affected flatpaks names.
- classmethod from_dict(message: dict) BodhiMessage [source]
Generate a message based on the given message dictionary.
- Parameters:
message – A dictionary representation of the message you wish to instantiate.
- Returns:
A Message.
- property modules: Iterable[str]
List of modules affected by the action that generated this message.
- Returns:
A list of affected module names.
- property usernames: List[str]
List of users affected by the action that generated this message.
- Returns:
A list of affected usernames.
- class bodhi.messages.schemas.base.BuildV1(nvr: str)[source]
Bases:
NamedTuple
A model for referencing a Build.
- nvr
The koji id of the build.
- Type:
str
- __annotations__ = {'nvr': <class 'str'>}
- __getnewargs__()
Return self as a plain tuple. Used by copy and pickle.
- __match_args__ = ('nvr',)
- static __new__(_cls, nvr: str)
Create new instance of BuildV1(nvr,)
- __orig_bases__ = (<function NamedTuple>,)
- __repr__()
Return a nicely formatted representation string
- __slots__ = ()
- nvr: str
Alias for field number 0
- property package: str
Return the name of the package that this build is associated with.
- static schema() dict [source]
Return a schema snippet for a Build.
- class bodhi.messages.schemas.base.FedMsgEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]
Bases:
JSONEncoder
Encoder with convenience support.
If an object has a
__json__()
method, use it to serialize to JSON.- default(obj)[source]
Encode objects which don’t have a more specific encoding method.
- class bodhi.messages.schemas.base.ReleaseV1(name: str)[source]
Bases:
NamedTuple
A model for referencing a Release.
- name
The name of the release.
- Type:
str
- __annotations__ = {'name': <class 'str'>}
- __getnewargs__()
Return self as a plain tuple. Used by copy and pickle.
- __match_args__ = ('name',)
- static __new__(_cls, name: str)
Create new instance of ReleaseV1(name,)
- __orig_bases__ = (<function NamedTuple>,)
- __repr__()
Return a nicely formatted representation string
- __slots__ = ()
- name: str
Alias for field number 0
- static schema() dict [source]
Return a schema snippet for a Build.
- class bodhi.messages.schemas.base.UpdateV1(alias: str, builds: Iterable[BuildV1], user: UserV1, status: str, request: None | str, release: ReleaseV1)[source]
Bases:
NamedTuple
A model for referencing an Update object.
- alias
The alias of the update.
- Type:
str
- builds
A list of builds associated with the update.
- Type:
Iterable[bodhi.messages.schemas.base.BuildV1]
- __annotations__ = {'alias': <class 'str'>, 'builds': typing.Iterable[bodhi.messages.schemas.base.BuildV1], 'release': ForwardRef('ReleaseV1'), 'request': typing.Optional[str], 'status': <class 'str'>, 'user': ForwardRef('UserV1')}
- __getnewargs__()
Return self as a plain tuple. Used by copy and pickle.
- __match_args__ = ('alias', 'builds', 'user', 'status', 'request', 'release')
- static __new__(_cls, alias: str, builds: Iterable[BuildV1], user: UserV1, status: str, request: None | str, release: ReleaseV1)
Create new instance of UpdateV1(alias, builds, user, status, request, release)
- __orig_bases__ = (<function NamedTuple>,)
- __repr__()
Return a nicely formatted representation string
- __slots__ = ()
- alias: str
Alias for field number 0
- builds: Iterable[BuildV1]
Alias for field number 1
- property packages: Iterable[str]
Return a list of package names included in this update.
- release: ReleaseV1
Alias for field number 5
- request: None | str
Alias for field number 4
- static schema() dict [source]
Return a schema snippet for an Update.
- status: str
Alias for field number 3
- user: UserV1
Alias for field number 2
- class bodhi.messages.schemas.base.UserV1(name: str)[source]
Bases:
NamedTuple
A model for referencing a User object.
- name
The User’s account name
- Type:
str
- __annotations__ = {'name': <class 'str'>}
- __getnewargs__()
Return self as a plain tuple. Used by copy and pickle.
- __match_args__ = ('name',)
- static __new__(_cls, name: str)
Create new instance of UserV1(name,)
- __orig_bases__ = (<function NamedTuple>,)
- __repr__()
Return a nicely formatted representation string
- __slots__ = ()
- name: str
Alias for field number 0
- static schema() dict [source]
Return a schema snippet for a User.
Buildroot overrides¶
Python objects¶
Message schema for Buildroot Overrides.
Each message is defined as a Python class. For details, see fedora-messaging documentation on messages.
- class bodhi.messages.schemas.buildroot_override.BuildrootOverrideMessage(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Base class for the buildroot_override messages.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property agent_name: str¶
Return the agent’s username for this message.
- Returns:
The agent’s username.
- property build: BuildV1¶
Return the build that was overridden.
- property packages: Iterable[str]¶
List of packages affected by the action that generated this message.
- Returns:
A list of affected package names.
- property submitter: UserV1¶
Return the name of the submitter for the override.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- property url: str¶
Return a URL to the action that caused this message to be emitted.
- Returns:
A relevant URL.
- property usernames: List[str]¶
List of users affected by the action that generated this message.
- Returns:
A list of affected usernames.
- class bodhi.messages.schemas.buildroot_override.BuildrootOverrideTagV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BuildrootOverrideMessage
Sent when a buildroot override is added and tagged into the build root.
- __annotations__ = {}¶
- topic = 'bodhi.buildroot_override.tag'¶
- class bodhi.messages.schemas.buildroot_override.BuildrootOverrideUntagV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BuildrootOverrideMessage
Sent when a buildroot override is untagged from the build root.
- __annotations__ = {}¶
- topic = 'bodhi.buildroot_override.untag'¶
JSON schemas¶
Compose¶
Python objects¶
Message schema for Composes.
Each message is defined as a Python class. For details, see fedora-messaging documentation on messages.
- class bodhi.messages.schemas.compose.ComposeCompleteV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Sent when a compose task completes.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property ctype: str¶
Return the compose type.
- property repo: str¶
Return the name of the repository being composed.
- property success: bool¶
Return the name of the repository being composed.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
The message summary.
- topic = 'bodhi.compose.complete'¶
- class bodhi.messages.schemas.compose.ComposeComposingV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Sent when the compose task composes.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property repo: str¶
Return the name of the repository being composed.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.compose.composing'¶
- class bodhi.messages.schemas.compose.ComposeStartV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Sent when a compose task starts.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.compose.start'¶
- class bodhi.messages.schemas.compose.ComposeSyncDoneV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Sent when a compose task sync is done.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property repo: str¶
Return the name of the repository being composed.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.compose.sync.done'¶
- class bodhi.messages.schemas.compose.ComposeSyncWaitV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Sent when a compose task sync is waiting.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property repo: str¶
Return the name of the repository being composed.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.compose.sync.wait'¶
- class bodhi.messages.schemas.compose.RepoDoneV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Sent when a repo is created and ready to be signed or otherwise processed.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property repo: str¶
Return the name of the repository being composed.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.repo.done'¶
JSON schemas¶
Errata¶
Python objects¶
Message schema for Errata.
Each message is defined as a Python class. For details, see fedora-messaging documentation on messages.
- class bodhi.messages.schemas.errata.ErrataPublishV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Sent when an errata is published.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- property agent_name: str¶
Return the agent’s username for this message.
- Returns:
The agent’s username.
- property packages: Iterable[str]¶
List of package names affected by the action that generated this message.
- Returns:
A list of affected package names.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- topic = 'bodhi.errata.publish'¶
- property update: UpdateV1¶
Return the Update from this errata.
- property url: str¶
Return a URL to the action that caused this message to be emitted.
- Returns:
A relevant URL.
JSON schemas¶
Update¶
Python objects¶
Message schema for Updates.
Each message is defined as a Python class. For details, see fedora-messaging documentation on messages.
- class bodhi.messages.schemas.update.UpdateCommentV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateMessage
Sent when a comment is made on an update.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property agent_name: str¶
Return the agent’s username for this message.
- Returns:
The agent’s username.
- property karma: int¶
Return the karma from this comment.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.update.comment'¶
- property user: UserV1¶
Return the user who wrote this comment.
- class bodhi.messages.schemas.update.UpdateCompleteStableV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateMessage
Sent when an update is available in the stable repository.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.update.complete.stable'¶
- class bodhi.messages.schemas.update.UpdateCompleteTestingV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateMessage
Sent when an update is available in the testing repository.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.update.complete.testing'¶
- class bodhi.messages.schemas.update.UpdateEditV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateMessage
Sent when an update is edited.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property new_bugs: Iterable[int]¶
Return an iterable of the new bugs that have been added to the update.
- Returns:
A list of Bugzilla bug IDs.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.update.edit'¶
- class bodhi.messages.schemas.update.UpdateEditV2(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateEditV1
Sent when an update is edited. Newer version.
Has ‘new_builds’ and ‘removed_builds’ properties.
- __annotations__ = {'body_schema': typing.Any}¶
- class bodhi.messages.schemas.update.UpdateEjectV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateMessage
Sent when an update is ejected from the push.
- __annotations__ = {}¶
- property reason: str¶
Return the reason this update was ejected from the compose.
- property repo: str¶
Return the name of the repository that this update is associated with.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.update.eject'¶
- class bodhi.messages.schemas.update.UpdateKarmaThresholdV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateMessage
Sent when an update reaches its karma threshold.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property status: str¶
Return the threshold that was reached.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.update.karma.threshold.reach'¶
- class bodhi.messages.schemas.update.UpdateMessage(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Base class for update messages.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property packages: Iterable[str]¶
List of names of packages affected by the action that generated this message.
- Returns:
A list of affected package names.
- property update: UpdateV1¶
Return the Update referenced by this message.
- property url: str¶
Return a URL to the action that caused this message to be emitted.
- Returns:
A relevant URL.
- property usernames: List[str]¶
List of users affected by the action that generated this message.
- Returns:
A list of affected usernames.
- class bodhi.messages.schemas.update.UpdateReadyForTestingV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
BodhiMessage
Sent when an update is ready to be tested. Original version.
Does not have ‘update’ property or inherit from UpdateMessage.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property agent_name: str | None¶
Return the agent’s username for this message.
- Returns:
The agent’s username, or None if the body has no agent key.
- property packages: Iterable[str]¶
List of names of packages affected by the action that generated this message.
- Returns:
A list of affected package names.
- severity = 10¶
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.update.status.testing.koji-build-group.build.complete'¶
- property url: str¶
Return a URL to the action that caused this message to be emitted.
- Returns:
A relevant URL.
- property usernames: List[str]¶
List of users affected by the action that generated this message.
- Returns:
A list of affected usernames.
- class bodhi.messages.schemas.update.UpdateReadyForTestingV2(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateReadyForTestingV1
Sent when an update is ready to be tested. Newer version.
Has ‘update’ property, like other update messages.
- __annotations__ = {'body_schema': typing.Any}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- renamed = {'$ref': '#/definitions/artifactbuild'}¶
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- class bodhi.messages.schemas.update.UpdateReadyForTestingV3(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateMessage
Sent when an update is ready to be tested. Simplified version.
Specifically, this message is sent:
When an update is created
When an update is edited and its builds change
When a “re-trigger tests” request is made via the web UI or API
These are the points where we expect that automated systems will test the update.
Inherits from UpdateMessage and only contains as much extra information (in the ‘artifact’ dict) as the Fedora CI schedulers actually need.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- severity = 10¶
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.update.status.testing.koji-build-group.build.complete'¶
- class bodhi.messages.schemas.update.UpdateRequestMessage(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateMessage
Sent when an update’s request is changed.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- class bodhi.messages.schemas.update.UpdateRequestObsoleteV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateRequestMessage
Sent when an update is requested to be obsoleted.
- __annotations__ = {}¶
- topic = 'bodhi.update.request.obsolete'¶
- class bodhi.messages.schemas.update.UpdateRequestRevokeV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateRequestMessage
Sent when an update is revoked.
- __annotations__ = {}¶
- topic = 'bodhi.update.request.revoke'¶
- class bodhi.messages.schemas.update.UpdateRequestStableV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateRequestMessage
Sent when an update is submitted as a stable candidate.
- __annotations__ = {}¶
- topic = 'bodhi.update.request.stable'¶
- class bodhi.messages.schemas.update.UpdateRequestTestingV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateRequestMessage
Sent when an update is submitted as a testing candidate.
- __annotations__ = {}¶
- topic = 'bodhi.update.request.testing'¶
- class bodhi.messages.schemas.update.UpdateRequestUnpushV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateRequestMessage
Sent when an update is requested to be unpushed.
- __annotations__ = {}¶
- topic = 'bodhi.update.request.unpush'¶
- class bodhi.messages.schemas.update.UpdateRequirementsMetStableV1(body=None, headers=None, topic=None, properties=None, severity=None)[source]¶
Bases:
UpdateMessage
Sent when all the update requirements are met for stable.
- __annotations__ = {}¶
- __str__() str [source]¶
Return a human-readable representation of this message.
This should provide a detailed representation of the message, much like the body of an email.
- Returns:
A human readable representation of this message.
- property summary: str¶
Return a short, human-readable representation of this message.
This should provide a short summary of the message, much like the subject line of an email.
- Returns:
A summary for this message.
- topic = 'bodhi.update.requirements_met.stable'¶
JSON schemas¶
Python bindings¶
This module provides Python bindings to the Bodhi REST API.
- class bodhi.client.bindings.BodhiClient(base_url: str = 'https://bodhi.fedoraproject.org/', client_id: str = 'bodhi-client', id_provider: str = 'https://id.fedoraproject.org/openidc', staging: bool = False, oidc_storage_path: str | None = None)[source]¶
Bases:
object
Python bindings to the Bodhi server REST API.
- __dict__ = mappingproxy({'__module__': 'bodhi.client.bindings', '__doc__': 'Python bindings to the Bodhi server REST API.', '__init__': <function BodhiClient.__init__>, '_build_oidc_client': <function BodhiClient._build_oidc_client>, 'send_request': <function BodhiClient.send_request>, 'ensure_auth': <function BodhiClient.ensure_auth>, 'clear_auth': <function BodhiClient.clear_auth>, 'username': <property object>, 'save': <function BodhiClient.save>, 'request': <function BodhiClient.request>, 'waive': <function BodhiClient.waive>, 'trigger_tests': <function BodhiClient.trigger_tests>, 'query': <function BodhiClient.query>, 'get_test_status': <function BodhiClient.get_test_status>, 'comment': <function BodhiClient.comment>, 'save_override': <function BodhiClient.save_override>, 'get_compose': <function BodhiClient.get_compose>, 'list_composes': <function BodhiClient.list_composes>, 'list_overrides': <function BodhiClient.list_overrides>, 'csrf': <function BodhiClient.csrf>, 'parse_file': <function BodhiClient.parse_file>, 'latest_builds': <function BodhiClient.latest_builds>, 'testable': <function BodhiClient.testable>, 'compose_str': <staticmethod(<function BodhiClient.compose_str>)>, 'override_str': <staticmethod(<function BodhiClient.override_str>)>, 'update_str': <function BodhiClient.update_str>, 'get_releases': <function BodhiClient.get_releases>, 'get_koji_session': <function BodhiClient.get_koji_session>, 'koji_session': <property object>, 'candidates': <function BodhiClient.candidates>, '__dict__': <attribute '__dict__' of 'BodhiClient' objects>, '__weakref__': <attribute '__weakref__' of 'BodhiClient' objects>, '__annotations__': {}})¶
- __init__(base_url: str = 'https://bodhi.fedoraproject.org/', client_id: str = 'bodhi-client', id_provider: str = 'https://id.fedoraproject.org/openidc', staging: bool = False, oidc_storage_path: str | None = None)[source]¶
Initialize the Bodhi client.
- Parameters:
base_url – The URL of the Bodhi server to connect to. Ignored if
`staging`
is True.client_id – The OpenID Connect Client ID.
staging – If True, use the staging server. If False, use base_url.
oidc_storage_path – Path to a file were OIDC credentials are stored
- __module__ = 'bodhi.client.bindings'¶
- __weakref__¶
list of weak references to the object (if defined)
- candidates() Iterable[dict] [source]¶
Get a list list of update candidates.
- Returns:
A list of koji builds (dictionaries returned by koji.listTagged()) that are tagged as candidate builds and are owned by the current user.
- comment(update: str, comment: str, karma: int = 0) munch.Munch [source]¶
Add a comment to an update.
- Parameters:
update – The alias of the update comment on.
comment – The text of the comment to add to the update.
karma – The amount of karma to leave. May be -1, 0, or 1. Defaults to 0.
- Returns:
The response from the post to comments/.
- static compose_str(compose: dict, minimal: bool = True) str [source]¶
Return a string representation of a compose.
- Parameters:
compose – A dictionary representation of a Compose.
minimal – If True, return a minimal one-line representation of the compose. Otherwise, return a more verbose string. Defaults to True.
- Returns:
A human readable string describing the compose.
- csrf() str [source]¶
Return CSRF token if already acquired, otherwise login, get a CSRF, cache it, and return.
If there is already a CSRF token, this method returns it.
If there is not, this method ensures that we know the username, logs in if we aren’t already logged in acquires and caches a CSRF token, and returns it.
- Returns:
The CSRF token.
- get_compose(release: str, request: str) munch.Munch [source]¶
Get information about compose.
- Parameters:
release – The name of the release.
request – The request (
testing
,stable
).
- Returns:
The response from Bodhi to the request.
- Raises:
ComposeNotFound – If the server returns a 404 error code.
- get_koji_session() ClientSession [source]¶
Return an authenticated koji session.
- Returns:
An initialized authenticated koji client.
- get_releases(**kwargs) munch.Munch [source]¶
Return a list of bodhi releases.
This method returns a dictionary in the following format:
{"releases": [ {"dist_tag": "dist-f12", "id_prefix": "FEDORA", "locked": false, "name": "F12", "long_name": "Fedora 12"}]}
- Parameters:
kwargs – A dictionary of extra parameters to pass along with the request.
- Returns:
A dictionary describing Bodhi’s release objects.
- get_test_status(update: str) munch.Munch [source]¶
Query bodhi for the test status of the specified update..
- Parameters:
update – The alias of the update to retrieve the test status of.
- Returns:
The response from Bodhi describing the query results.
- property koji_session: ClientSession¶
Return an authenticated koji session.
- Returns:
An initialized authenticated koji client.
- latest_builds(package: str) munch.Munch [source]¶
Get the latest builds for a package.
- Parameters:
package – The package name, for example “kernel”.
- Returns:
A dict-like object of the release dist tag to the latest build.
- list_composes() munch.Munch [source]¶
List composes.
- Returns:
A dictionary-like representation of the Composes.
- list_overrides(user: str | None = None, packages: str | None = None, expired: bool | None = None, releases: str | None = None, builds: str | None = None, rows_per_page: int | None = None, page: int | None = None) munch.Munch [source]¶
List buildroot overrides.
- Parameters:
user – A username whose buildroot overrides you want returned.
packages – Comma separated package names to filter buildroot overrides by.
expired – If True, only return expired overrides. If False, only return active overrides.
releases – Comma separated Release shortnames to filter buildroot overrides by.
builds – Comma separated build NVRs to filter overrides by.
rows_per_page – Limit the results to a certain number of rows per page.
page – Return a specific page of results.
- Returns:
A dictionary-like representation of the Overrides.
- static override_str(override: dict, minimal: bool = True) str [source]¶
Return a string representation of a given override dictionary.
- Parameters:
override – An override dictionary.
minimal – If True, return a minimal one-line representation of the override. Otherwise, return a more verbose string. Defaults to True.
- Returns:
A human readable string describing the given override.
- parse_file(input_file: str) List[Dict[str, Any]] [source]¶
Parse an update template file.
- Parameters:
input_file – The filename of the update template.
- Returns:
- A list of dictionaries of parsed update values which
can be directly passed to the
save
method.
- Raises:
ValueError – If the
input_file
does not exist, or if it cannot be parsed.
- query(**kwargs) munch.Munch [source]¶
Query bodhi for a list of updates.
- Parameters:
alias (str) – The update alias.
updateid (str) – The update ID (eg: FEDORA-2015-0001).
content_type (str) – A content type (rpm, module) to limit the query to.
releases (str) – A comma separated list of releases that you wish to query updates for.
status (str) – The update status (
pending
,testing
,stable
,obsolete
,unpushed
)type (str) – The type of the update:
security
,bugfix
,enhancement
, andnewpackage
.bugs (str) – A comma separated list of Red Hat Bugzilla IDs.
request (str) – An update request to query for
testing
,stable
,unpush
,obsolete
or None.mine (bool) – If True, only query the users updates. Default: False.
packages (str) – A space or comma delimited list of package names.
limit (int) – A deprecated argument, sets
rows_per_page
. See its docstring for more info.approved_before (str) – A datetime string.
approved_since (str) – A datetime string.
builds (str) – A space or comma delimited string of build nvrs.
critpath (bool) – A boolean to query only critical path updates.
locked (bool) – A boolean to filter only locked updates.
modified_before (str) – A datetime string to query updates that have been modified before a certain time.
modified_since (str) – A datetime string to query updates that have been modified since a certain time.
pushed (bool) – A boolean to filter only pushed updates.
pushed_before (str) – A datetime string to filter updates pushed before a certain time.
pushed_since (str) – A datetime string to filter updates pushed since a certain time.
severity (str) – A severity type to filter by (
unspecified
,urgent
,high
,medium
,low
).submitted_before (str) – A datetime string to filter updates submitted before a certain time.
submitted_since (str) – A datetime string to filter updates submitted after a certain time.
suggest (str) – Query for updates that suggest a user restart (
logout
,reboot
).gating (str) – filter by TestGatingStatus description.
from_side_tag (bool) – A boolean to filter updates created from side tag or from normal workflow.
user (str) – Query for updates submitted by a specific user.
rows_per_page (int) – Limit the results to a certain number of rows per page (min:1 max: 100 default: 20).
page (int) – Return a specific page of results.
- Returns:
The response from Bodhi describing the query results.
- request(update: str, request: str) munch.Munch [source]¶
Request an update state change.
- Parameters:
update – The alias of the update.
request – The request (
testing
,stable
,obsolete
,unpush
,revoke
).
- Returns:
The response from Bodhi to the request.
- Raises:
UpdateNotFound – If the server returns a 404 error code.
- save(**kwargs) munch.Munch [source]¶
Save an update.
This entails either creating a new update, or editing an existing one. To edit an existing update, you must specify the update alias in the
edited
keyword argument.- Parameters:
display_name (str) – The name of the update.
builds (str) – A list of koji builds for this update.
type (str) – The type of this update:
security
,bugfix
,enhancement
, andnewpackage
.bugs (str) – A list of Red Hat Bugzilla ID’s associated with this update.
notes (str) – Details as to why this update exists.
request (str) – Request for this update to change state, either to
testing
,stable
,unpush
,obsolete
or None.close_bugs (bool) – Close bugs when update is stable.
suggest (str) – Suggest that the user reboot or logout after update. (
reboot
,logout
).autotime (bool) – Allow bodhi to automatically change the state of this update based on the time spent in testing by this update. It will push your update to
stable
once it reaches thestable_days
.stable_days (int) – The minimun amount of time an update has to spend in
testing
before being automatically pushed tostable
.autokarma (bool) – Allow bodhi to automatically change the state of this update based on the
karma
from user feedback. It will push your update tostable
once it reaches thestable_karma
and unpush your update when reachingunstable_karma
.stable_karma (int) – The upper threshold for marking an update as
stable
.unstable_karma (int) – The lower threshold for unpushing an update.
edited (str) – The update alias of the existing update that we are editing.
severity (str) – The severity of this update (
urgent
,high
,medium
,low
).requirements (str) – A list of required Taskotron tests that must pass for this update to reach stable. (e.g.
dist.rpmdeplint
,dist.upgradepath
,dist.rpmlint
, etc).require_bugs (bool) – A boolean to require that all of the bugs in your update have been confirmed by testers.
require_testcases (bool) – A boolean to require that this update passes all test cases before reaching stable.
from_tag (str) – The name of a Koji tag from which to pull builds instead of providing them manually in builds.
- Returns:
The Bodhi server’s response to the request.
- save_override(nvr: str, notes: str, duration: int | None = None, expiration_date: datetime | None = None, edit: bool = False, expired: bool = False) munch.Munch [source]¶
Save a buildroot override.
This entails either creating a new buildroot override, or editing an existing one.
- Parameters:
nvr – The nvr of a koji build.
notes – Notes about why this override is in place.
duration – Number of days from now that this override should expire.
expiration_date – Date when this override should expire. This argument or the
duration
argument must be provided.edit – True if we are editing an existing override, False otherwise. Defaults to False.
expired – Set to True to expire an override. Defaults to False.
- Returns:
A dictionary-like representation of the saved override.
- send_request(url, verb='GET', **kwargs)[source]¶
Send the request to the Bodhi server.
- Parameters:
url (str) – The relative URL on the Bodhi server
verb (str, optional) – The HTTP method. Defaults to “GET”.
- Returns:
The response as returned by python-requests.
- Return type:
requests.Response
- testable() Iterator[dict] [source]¶
Return a generator that iterates installed testing updates.
This method is a generator that yields packages that you currently have installed that you have yet to test and provide feedback for.
Only works on systems with dnf.
- Returns:
- An iterable of dictionaries describing updates that match builds installed on
the local system.
- Return type:
generator
- Raises:
RuntimeError – If the dnf Python bindings are not installed.
- trigger_tests(update: str) munch.Munch [source]¶
Trigger tests for update.
- Parameters:
update – The alias of the update to run tests for.
- Returns:
The response from the post to trigger_tests/.
- update_str(update: dict, minimal: bool = False) str [source]¶
Return a string representation of a given update dictionary.
- Parameters:
update – An update dictionary, acquired by the
list
method.minimal – If True, return a minimal one-line representation of the update. Otherwise, return a more verbose representation. Defaults to False.
- Returns:
A human readable string describing the given update.
- property username¶
Return the authenticated username.
- waive(update: str, comment: str, tests: Iterable[str] | None = None) munch.Munch [source]¶
Waive unsatisfied requirements on an update.
- Parameters:
update – The alias of the update.
comment – A comment explaining the waiver.
tests – The list of unsatisfied requirements to waive. If not specified, all unsatisfied requirements of this update will be waived.
- Returns:
The response from Bodhi to the request.
- Raises:
UpdateNotFound – If the server returns a 404 error code.
- exception bodhi.client.bindings.BodhiClientException(*args, **kwargs)[source]¶
Bases:
RequestException
Used to indicate there was an error in the client.
- __module__ = 'bodhi.client.bindings'¶
- exception bodhi.client.bindings.ComposeNotFound(release: str, request: str, **kwargs)[source]¶
Bases:
BodhiClientException
Used to indicate that a referenced Compose is not found on the server.
- __annotations__ = {}¶
- __init__(release: str, request: str, **kwargs)[source]¶
Initialize the Exception.
- Parameters:
release – The release component of the compose that was not found.
request – The request component of the compose that was not found.
- __module__ = 'bodhi.client.bindings'¶
- exception bodhi.client.bindings.UpdateNotFound(update: str, **kwargs)[source]¶
Bases:
BodhiClientException
Used to indicate that a referenced Update is not found on the server.
- __annotations__ = {}¶
- __init__(update: str, **kwargs)[source]¶
Initialize the Exception.
- Parameters:
update – The alias of the update that was not found.
- __module__ = 'bodhi.client.bindings'¶
Contributor Guide¶
Developer documentation¶
This page contains information for developers who wish to contribute to Bodhi.
Contribution guidelines¶
Before you submit a pull request to Bodhi, please ensure that it meets these criteria:
All tests must pass.
New code must have 100% test coverage. This one is particularly important, as we don’t want to deploy any broken code into production. At the end of
btest
run, you can see your code coverage. If you are not using BCD environment you can check the code coverage by runningdiff-cover coverage.xml --compare-branch=origin/develop --fail-under=100
.New functions, methods, and classes must have docblocks that explain what the code block is, and describing any parameters it accepts and what it returns (if anything). You can use the
pydocstyle
utility to automatically check your code for this. You can also runpydocstyle /bodhi
in BCD.Parameter and return value types should be declared using type hints.
New code must follow PEP-8. You can use the
flake8
utility to automatically check your code.If you want to run the three above at once you can use
blint
alias in BCD.Make sure your commits are atomic. With only rare exceptions, each improvement or bug fix should have exactly one commit. This makes it much easier to peruse the git history to find out which changes relate to a feature or bugfix implementation, and is particularly valuable when commits need to be cherry picked. If you need to build upon prior unmerged commits while fixing a different issue, feel free to send more than one commit in the same pull request.
Your commit messages must include a Signed-off-by tag with your name and e-mail address, indicating that you agree to the Developer Certificate of Origin. Bodhi uses version 1.1 of the certificate, which reads:
Developer Certificate of Origin Version 1.1 Copyright (C) 2004, 2006 The Linux Foundation and its contributors. 1 Letterman Drive Suite D4700 San Francisco, CA, 94129 Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Developer's Certificate of Origin 1.1 By making a contribution to this project, I certify that: (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
For example, Randy Barlow’s commit messages include this line:
Signed-off-by: Randy Barlow <randy@electronsweatshop.com>
Code may be submitted by opening a pull request at github.com/fedora-infra/bodhi, or you may e-mail a patch to the mailing list.
If your changes contain database migrations, you must add a file named
summary.migration
in thenews
directory, wheresummary
is a short textual description of the change (or the issue number you’re fixing).If it is not present already, add a file in the
news
directory namedusername.author
whereusername
is the first part of your commit’s email address, and containing the name you want to be credited as.If you think that the changes you make should be in release notes, add a file in the
news
directory with the format explained below.
Release Notes¶
To add entries to the release notes, create a file in the news
directory in the
source.type
name format, where the source
part of the filename is:
42
when the change is described in issue42
PR42
when the change has been implemented in pull request42
, and there is no associated issueCabcdef
when the change has been implemented in changesetabcdef
, and there is no associated issue or pull request.
And where the extension type
is one of:
bic
: for backwards incompatible changesdependency
: for dependency changesfeature
: for new featuresbug
: for bug fixesdev
: for development improvementsdocs
: for documentation improvementsother
: for other changes
The content of the file will end up in the release notes. It should not end with a .
(full stop). A preview of the release notes can be generated with towncrier --draft
.
Issues¶
Bodhi uses GitHub’s issue tracker and kanban boards to track and plan issues and work. If you aren’t sure what you’d like to work on, take a look at Bodhi’s labels which are used to categorize the various issues. Each label has a short description explaining its purpose.
Easy Fix¶
If you are looking for some easy tasks to get started with Bodhi development, have a look at Bodhi’s EasyFix tickets.
CI Tests¶
All Bodhi pull requests are tested in Github Actions.
Sometimes tests fail, and when they do you can visit the test job that failed by clicking the
Details link next to it in the report that appears on the pull request page. Links to individual pull request
builds can be found on your pull request on GitHub by clicking the “Details” link next to
continuous-integration/jenkins/pr-merge
. From there you can inspect the full console output, or
you can click into the “Pipeline Steps” on the left to see the output of each individual job.
Bodhi’s CI pipeline workflow is described in the Github Actions workflow files in
.github/workflows
. These files describe to Github how it should run Bodhi’s tests. If you are
not familiar with Github Actions, please refer to the extensive upstream documentation.
It is possible for you to run these same tests locally. There is a devel/ci/bodhi-ci
script
that is used by the pipeline to do the heavy lifting. This script is intended to be
run as root since it uses docker
(or optionally, podman
). It has a handy -x
flag that
will cause it to exit immediately upon failure. You can also choose to test specific releases, and
there are a variety of other features. Be sure to check out its --help
flag to learn how to use
it. Thus, if I want to run the tests on only f28 and f29 and I want it to exit immediately upon
failure, I can execute the script like this:
$ sudo devel/ci/bodhi-ci all -r f28 -r f29 -x
Create a Bodhi development environment¶
You can use Bodhi’s “BCD” container-based development environment. Using Vagrant or a local Python virtualenv are no longer supported. See the BCD Guide for instructions on using BCD.
You can configure Visual Studio Code to run unit-tests inside with Bodhi BCD - VS Code Guide.
Release process¶
This document describes the process for making a Bodhi release.
Branches¶
Bodhi follows semantic versioning, and so backwards incompatible changes get a major release, releases with new features get a minor release, and releases that only contain bug fixes get a patch release.
To aid in maintaining this scheme, Bodhi uses branches named with the scheme major.minor
to keep
track of feature releases. Once a major.minor
branch is created and a release is tagged, only
bugfixes should be added to that branch.
When you wish to make a patch release, simply cherry pick (described below) the patches you wish to
include in the release to the appropriate major.minor
branch.
If you wish to make a minor release, you will need to create a new major.minor
branch.
Typically we would do this by branching from a desired commit on the develop
branch, unless
there are backwards incompatible changes in develop
. If develop
has backwards incompatible
commits that we don’t want to release with, you should branch from the most recent major.minor
branch, and then cherry pick the desired commits from develop
.
Of course, if you want to make a new major release, simply create a major.minor
branch from the
desired commit on develop
.
Backporting Patches with Mergify¶
To simplify the release process, almost all patches are sent to the develop
branch. Once they
are reviewed and merged, they can be cherry picked to a major.minor
branch if desired. To aid in
this process, we use Mergify’s patch backporting feature. For each actively maintained
release there should be a backporting action in the Mergify config and an associated GitHub label.
For example, as of the time of this writing we have active 3.12 and 3.13 branches, so we have GitHub
labels called 3.12-backports
and 3.13-backports
. Any pull requests tagged with either of
these tags will cause Mergify to backport the associated patch to the relevant branch via a new pull
request.
Note
The backporting feature is configured in .mergify.yml
.
Deploying a development snapshot to Staging¶
On the Fedora Infrastructure, the Bodhi Staging instance is used to test out Bodhi in an enviroment as close to production as possible.
To run this procedure, you will need the ability to run playbooks on batcave, and your Fedora Account on needs to be a member the sysadmin-bodhi group on both accounts staging and accounts production
To deploy to staging:
Merge the changes into the staging branch.
After the changes are pushed,the Build Staging snapshot in Koji github action generates SRPMs, and submits them to build in koji. Once successfully built, The packages (bodhi-server, bodhi-client, and bodhi messages) are then automatically tagged into the f34-infra-stg koji tag.
Note that each snapshot package will have the following version format appended to the current version: ^<YYYYMMDDHHMM>git<githash>. For example:
bodhi-client-5.7.5^202203102341gite878e73-1.fc34
bodhi-server-5.7.5^202203102341gite878e73-1.fc34
bodhi-messages-5.7.5^202203102341gite878e73-1.fc34
Sometimes it takes a couple of minutes for the builds to appear in the f34-infra koji repo, so check that the newly built packages are available to the bodhi-backend01 machine with:
ssh bodhi-backend01.stg.iad2.fedoraproject.org [bodhi-backend01 ~][STG]$ dnf list bodhi-server bodhi-client --refresh --all Installed Packages bodhi-client.noarch 5.7.5^202202010001gitabcdefg-1.fc34 @infrastructure-tags-stg bodhi-server.noarch 5.7.5^202202010001gitabcdefg-1.fc34 @infrastructure-tags-stg Available Packages bodhi-client.noarch 5.7.5^202203102341gite878e73-1.fc34 @infrastructure-tags-stg bodhi-server.noarch 5.7.5^202203102341gite878e73-1.fc34 @infrastructure-tags-stg
The packages listed in
available packages
should be the ones just built in koji after pushing to the staging branchWith the packages available, run the following four playbooks on batcave01:
# Run the bodhi-backend playbook to ensure everything is up to date $ sudo rbac-playbook -l staging groups/bodhi-backend.yml # Synchronize the database from production to staging $ sudo rbac-playbook manual/staging-sync/bodhi.yml -l staging # Upgrade the Bodhi backend on staging $ sudo rbac-playbook manual/upgrade/bodhi.yml -l staging # Upgrade the Bodhi frontend on staging $ sudo rbac-playbook openshift-apps/bodhi.yml -l staging
The final playbook in that run will cause the openshift images for bodhi to rebuild and redeploy. In a few minutes the new version of bodhi will appear on https://bodhi.stg.fedoraproject.org.
You can check the status of the openshift image builds and deployment on https://os.stg.fedoraproject.org
How to make a release¶
Preparation¶
If you are making a new major or new minor release:
Prepare the
.mergify.yml
file for the newmajor.minor
branch as described above.Raise the version to the appropriate value in
bodhi-*/pyproject.toml
and in the spec files inbodhi-*/*.spec
.Add missing authors to the release notes fragments by changing to the
news
directory and running theget-authors.py
script, but check for duplicates and errorsGenerate the release notes by running
towncrier build --version VERSION
. Be aware that any commits that were cherry picked to a previous release branch will show up again, and we wouldn’t want to mark those commits as being newAdd a note to all the associated issues and pull requests to let them know they will be included in this release.
Push those changes to the upstream repository (via a PR or not)
Create the branch protection rule in GitHub’s UI and tick the following boxes:
Require pull request reviews before merging
Require status checks to pass before merging
Require branches to be up to date before merging
DCO
fXX-diff-cover
,fXXdocs
,fXX-integration
, andfXX-unit
whereXX
is the Fedora version that this Bodhi release is going to run on.
Create the new
major.minor
branch in the repository, and switch to that branch.Adjust
diff-cover
to use the newmajor.minor
branch for comparison indevel/ci/bodhi-ci
. You can find the spot to edit by searching for the--compare-branch
flag being passed todiff-cover
. This change should remain in that release branch only.In
.github/workflows/tests.yml
, add the newmajor.minor
branch in the list of branches on which CI is run.Push that new branch to the upstream repository
Build a beta¶
Bodhi uses the Fedora Rawhide spec file to build production RPMs for the Fedora Infrastructure repositories. As upstream Bodhi does not have any infrastructure of its own for beta testing, we use Fedora’s staging instance of Bodhi to do our beta testing. Thus, in order to build and test the beta using these instructions, you will need administrative access to the staging Bodhi deployment and you will need access to build in the staging infrastructure repository.
To build the beta, follow these steps:
Clone the Bodhi spec file repository:
$ fedpkg clone bodhi
Alter the spec file to build the commit you want to test rather than a tagged release. Use a value less than one for the release field on betas (for example the first might be 0.0, the second might be 0.1, and so on). For example, to test
e0ca5bc5d36e8cca5bd126879a036006356645e6
(which is a 3.13 beta), a patch like this will work:$ git diff diff --git a/bodhi.spec b/bodhi.spec index eaf3415..d3684be 100644 --- a/bodhi.spec +++ b/bodhi.spec @@ -1,16 +1,21 @@ %global bashcompdir %(pkg-config --variable=completionsdir bash-completion 2>/dev/null) %global bashcomproot %(dirname %{bashcompdir} 2>/dev/null) +%global commit e0ca5bc5d36e8cca5bd126879a036006356645e6 +%global commit_short %(c=%{commit}; echo ${c:0:7}) + Name: bodhi -Version: 3.12.0 -Release: 100%{?dist} +Version: 3.13.0 +Release: 0.0.beta.%{commit_short}%{?dist} BuildArch: noarch License: GPLv2+ Summary: A modular framework that facilitates publishing software updates Group: Applications/Internet URL: https://github.com/fedora-infra/bodhi -Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz +Source0: %{url}/archive/%{commit}/%{name}-%{commit}.tar.gz +Patch0: 0000-Set-the-version-to-beta-0.patch BuildRequires: %{py2_dist click} BuildRequires: %{py2_dist iniparse} @@ -241,7 +248,7 @@ updates for a software distribution. %prep -%autosetup -p1 -n bodhi-%{version} +%autosetup -p1 -n bodhi-%{commit} # Kill some dev deps sed -i '/pyramid_debugtoolbar/d' setup.py @@ -270,7 +277,7 @@ make %{?_smp_mflags} -C docs man %install %py2_install # Let's remove all the server stuff since we don't ship Python 2 version of the server anymore. -rm -rf %{buildroot}/%{python2_sitelib}/%{name}_server-%{version}-py%{python2_version}.egg-info +rm -rf %{buildroot}/%{python2_sitelib}/%{name}_server-%{version}b0-py%{python2_version}.egg-info rm -rf %{buildroot}/%{python2_sitelib}/%{name}/server %py3_install @@ -346,7 +353,7 @@ rm .coveragerc %doc README.rst %dir %{python2_sitelib}/%{name}/ %{python2_sitelib}/%{name}/__init__.py* -%{python2_sitelib}/%{name}-%{version}-py%{python2_version}.egg-info +%{python2_sitelib}/%{name}-%{version}b0-py%{python2_version}.egg-info %files -n python3-bodhi @@ -355,21 +362,21 @@ rm .coveragerc %dir %{python3_sitelib}/%{name}/ %{python3_sitelib}/%{name}/__init__.py %{python3_sitelib}/%{name}/__pycache__ -%{python3_sitelib}/%{name}-%{version}-py%{python3_version}.egg-info +%{python3_sitelib}/%{name}-%{version}b0-py%{python3_version}.egg-info %files -n python2-bodhi-client %license COPYING %doc README.rst %{python2_sitelib}/%{name}/client -%{python2_sitelib}/%{name}_client-%{version}-py%{python2_version}.egg-info +%{python2_sitelib}/%{name}_client-%{version}b0-py%{python2_version}.egg-info %files -n python3-bodhi-client %license COPYING %doc README.rst %{python3_sitelib}/%{name}/client -%{python3_sitelib}/%{name}_client-%{version}-py%{python3_version}.egg-info +%{python3_sitelib}/%{name}_client-%{version}b0-py%{python3_version}.egg-info %files server @@ -392,7 +400,7 @@ rm .coveragerc %config(noreplace) %{_sysconfdir}/fedmsg.d/* %dir %{_sysconfdir}/bodhi/ %{python3_sitelib}/%{name}/server -%{python3_sitelib}/%{name}_server-%{version}-py%{python3_version}.egg-info +%{python3_sitelib}/%{name}_server-%{version}b0-py%{python3_version}.egg-info %{_mandir}/man1/bodhi-*.1* %{_mandir}/man1/initialize_bodhi_db.1* %attr(-,bodhi,root) %{_datadir}/%{name} @@ -406,6 +414,10 @@ rm .coveragerc %changelog +* Fri Jan 11 2019 Randy Barlow <bowlofeggs@fedoraproject.org> - 3.13.0-0.0.beta.e0ca5bc +- Update to 3.13.0. +- https://github.com/fedora-infra/bodhi/releases/tag/3.13.0 + * Mon Dec 17 2018 Randy Barlow <bowlofeggs@fedoraproject.org> - 3.12.0-100 - Upgrade to 3.12.0. - https://github.com/fedora-infra/bodhi/releases/tag/3.12.0 $ cat 0000-Set-the-version-to-beta-0.patch From 77f54fee023fcbfb06f7e72b3b993d39f7678efa Mon Sep 17 00:00:00 2001 From: Randy Barlow <randy@electronsweatshop.com> Date: Fri, 11 Jan 2019 09:19:47 -0500 Subject: [PATCH] Set the version to beta 0. Signed-off-by: Randy Barlow <randy@electronsweatshop.com> --- docs/conf.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 59edc0a8..1ba87387 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -63,7 +63,7 @@ copyright = u'2007-{}, Red Hat, Inc.'.format(datetime.datetime.utcnow().year) # The short X.Y version. version = '3.13' # The full version, including alpha/beta/rc tags. -release = '3.13.0' +release = '3.13.0b0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/setup.py b/setup.py index 44566ff5..74297bb5 100644 --- a/setup.py +++ b/setup.py @@ -42,7 +42,7 @@ def get_requirements(requirements_file='requirements.txt'): here = os.path.abspath(os.path.dirname(__file__)) README = open(os.path.join(here, 'README.rst')).read() -VERSION = '3.13.0' +VERSION = '3.13.0b0' # Possible options are at https://pypi.python.org/pypi?%3Aaction=list_classifiers CLASSIFIERS = [ 'Development Status :: 5 - Production/Stable', -- 2.20.1
Perform any other spec file alterations that might be needed for this release (such as adding or removing dependencies).
Build the beta for Fedora Infrastructure’s staging repository. At the time of writing, Bodhi runs on Fedora 29, so here’s an example of building for the f29-infra-stg repository:
$ rpmbuild --define "dist .fc29.infra" -bs bodhi.spec Wrote: /home/bowlofeggs/rpmbuild/SRPMS/bodhi-3.13.0-0.0.beta.e0ca5bc.fc29.src.rpm $ koji build f29-infra /home/bowlofeggs/rpmbuild/SRPMS/bodhi-3.13.0-0.0.beta.e0ca5bc.fc29.src.rpm
Build the beta for bowlofegg’s bodhi-pre-release Copr repository:
$ copr build bowlofeggs/bodhi-pre-release /home/bowlofeggs/rpmbuild/SRPMS/bodhi-3.13.0-0.0.beta.e0ca5bc.fc29.src.rpm
It’s a good idea to also do a scratch build against Fedora Rawhide just to make sure things build there:
$ koji build --scratch rawhide /home/bowlofeggs/rpmbuild/SRPMS/bodhi-3.13.0-0.0.beta.e0ca5bc.fc29.src.rpm
Deploy the beta to staging¶
To deploy to beta to staging, read the Fedora Infrastructure Bodhi SOP.
Notify people that the beta has been deployed so they can test and provide feedback.
You can notify the tickets that are referenced in the release notes, Fedora IRC channels (
#bodhi
, #fedora-admin
, #fedora-apps
, #fedora-devel
, #fedora-releng
, and
#fedora-qa
), and the Fedora infrastructure mailing list.
Test the beta¶
Testing beta builds in staging can be a bit tricky. One problem you may encounter is that the staging Koji instance doesn’t have all the data from production, and its database most likely wasn’t synchronized with production data at the same time that Bodhi’s database was. The latter means that Bodhi may reference some data that isn’t in the staging Koji database. To overcome this problem, I’ve found it to be best to make a fresh build of a package in the staging Koji database so I can be sure that Koji has the RPM and that Bodhi can be synchronized with Koji about the resulting update.
I personally update with a small package that I have ACLs on called python-rpdb. I usually just bump the release on it and make another build, being careful to do this in the staging git repository and not production. Then I make an update in staging Bodhi with that build and do my testing from there. I don’t do extremely extensive testing, since that is what our unit and integration tests are for.
One test I recommend, however, is to run a compose with the newly minted update. At the time of this
writing, our integration test suite does not test integration with Koji or Pungi, and this is a
critical function of Bodhi. To do this, you will need to mark the build as being signed using
bodhi-shell
because we don’t sign builds in staging. Then run bodhi-push
on
bodhi-backend01.stg.fedoraproject.org
. As an example, if I had built a test update for
python-rpdb-2.3-3.fc29
and I wanted to sign and then compose it, I would run this:
$ sudo -u apache bodhi-shell
>>> b = m.Build.query.filter_by(nvr='python-rpdb-2.3-3.fc29').one()
>>> b.signed = True
>>> m.Session().commit()
$ sudo -u apache bodhi-push --builds python-rpdb-2.3-3.fc29
Note
We limit to just the build we built for testing here, because a full compose will fail due to the issues described earlier between staging and production Koji.
Note
If there are existing composes in the database due to the production to staging database
sync, you will not be able to create a new compose as described above. bodhi-push
will
force you to resume the existing composes. Unfortunately, they will also fail due to
referencing builds from production Koji that are not in the staging Koji. You will need to
use bodhi-shell
to clear our these composes:
$ sudo -u apache bodhi-shell
>>> for u in m.Update.query.filter_by(locked=True):
... u.locked = False
...
>>> m.Session().commit()
Now you should be able to resume the composes, and bodhi-push will see that there’s nothing to do in any of them and will remove them.
Of course, if you find issues during testing you should fix those issues upstream and produce a new beta and test again.
Release Bodhi upstream¶
Once you are satisfied with the quality of the beta and the beta has been in staging for a while (a week is typical) to give people time to test and provide feedback, it is time to make a release.
We start by checking out the branch we want to make a release on, and we use git tag
to create a
tag. Be sure to use the -s flag to sign the commit with your GPG key:
$ git tag -s 3.13.0
Your $EDITOR
will be opened for you to write the release notes into the tag. You can copy the
release notes into there, and I typically change the format from RST to markdown for this because
it’s a little easier to read in plain text, and we will also paste the release notes into GitHub in
a bit and it’ll be useful to have a markdown version anyway. You don’t need to use markdown if you
prefer not to, it’s just a suggestion.
Note
If you do use markdown in the git tag notes, don’t use the #
character to specify
headings because git will interpret those lines as comments.
Push the tag up to GitHub:
$ git push origin --tags
Now go to the releases page in GitHub, click the tags submenu, find the tag you just made, click the “…“‘s next to it, and choose “Create release”. I usually just make the title along the lines of “Bodhi 3.13.0 released”. It’d be nice if GitHub used the tag message you just wrote in git, but it does not. Fortunately, you might have just formatting it with markdown anyway and can copy and paste it into the GitHub release notes:
$ git show 3.13.0
The next step is to release Bodhi to PyPI. To do this, we will make a source build:
$ python3 setup.py sdist
This will drop source tarballs into the dist/
folder for the various bodhi packages. Now you can
use twine
to sign the builds and upload them to PyPI, substituting your GPG key ID where mine is
below:
$ twine upload -s -i 3BDD2462 dist/*
Release Bodhi downstream¶
Next it is time to release Bodhi downstream. Don’t forget to remove the patch you made earlier to set its version to a beta, and all the code that used commit hashes instead of versions.
Build the release for all targeted Fedora versions.
Note
Be sure to consider whether the version you are releasing would be backwards incompatible for the various stable releases of Bodhi. Major releases should only go to Rawhide.
Build the release for bowlofegg’s bodhi Copr repository:
$ copr build bowlofeggs/bodhi /home/bowlofeggs/rpmbuild/SRPMS/bodhi-3.13.0-1.fc29.src.rpm
Deploy the beta to staging and production¶
As before, read the Fedora Infrastructure Bodhi SOP for details on how we deploy Bodhi in Fedora Infrastructure.
It is wise to deploy the real release to staging as a sanity check before deploying to production.
Notifications¶
Notify people that the release and deployment are done. You can notify the tickets that are
referenced in the release notes, Fedora IRC channels (#bodhi
, #fedora-admin
,
#fedora-apps
, #fedora-devel
, #fedora-releng
, and #fedora-qa
), and the Fedora
infrastructure mailing list.
BCD - the Bodhi Container Development environment¶
BCD is an Ansible-orchestrated, Podman-powered container-based development environment for Bodhi. It lets you quickly and easily test your changes in a live Bodhi environment, without any external dependencies, root privilege requirements, or virtual machines. It’s also convenient for running the unit tests.
To get started on a Fedora or Enterprise Linux-ish system, do:
$ sudo dnf install ansible-core ansible-collection-containers-podman podman
$ ./bcd run
Your newly provisioned bodhi development instance is now available at http://localhost.localdomain:6543/ .
The AMQP message broker web interface is available at http://localhost:15672/. The default username
is guest
and the password is guest
.
The Waiverdb web interface is available at http://localhost:6544/ , and the Greenwave web interface is available at http://localhost:6545/ .
The Ipsilon identity service web interface is available at http://localhost:6546/ (though there isn’t much reason to use it directly in this environment).
Other commands¶
Other command commands are ./bcd stop
to stop all containers, ./bcd remove
to remove all
containers, bcd logs (container)
to view the logs for a container, bcd shell (container)
to shell into a container (the Bodhi container by default), and ./bcd cis
to clear Ipsilon’s
session cache. This is necessary to log in to Bodhi as a different user - first log out, then run
./bcd cis
, then log in again. If you don’t clear the session cache Ipsilon will just keep
logging you in as the same user. Run ./bcd -h
or ./bcd (subcommand) -h
for more help.
Containers¶
Behind the scenes, BCD uses an Ansible playbook that controls a pod of Podman containers. The
pod is called bodhi-dev
. The full names of the containers are bodhi-dev-database
,
bodhi-dev-waiverdb
, bodhi-dev-greenwave
, bodhi-dev-rabbitmq
, bodhi-dev-ipsilon
and
bodhi-dev-bodhi
. BCD commands which take a container name use shortened names with ‘bodhi-dev-’
omitted, for convenience. You can interact with the pod and the containers directly using normal
podman commands if you wish - to start and stop individual containers, for instance.
The ‘database’ container runs postgresql and is initialized with a dump of real data for waiverdb and Bodhi, both of which connect to it. The ‘waiverdb’ and ‘greenwave’ containers run those services respectively, which are used by Bodhi for retrieving test results and test waivers and deciding on the gating status of updates. Note that the ‘greenwave’ container is configured to connect to the real, production ResultsDB and forward results from it, so the results shown and the gating status calculated will change to reflect the real-world state. The ‘rabbitmq’ container runs an instance of the RabbitMQ message broker which Bodhi will publish messages to and consume messages from. The ‘ipsilon’ container runs the authentication service (see below for details). And, of course, the ‘bodhi’ container runs Bodhi itself. It has your source tree mapped as a volume, so changes you make to your source tree are immediately reflected in the development environment. The server will automatically reload when any Python source file is changed.
The Bodhi container uses systemd, so you can shell into it and stop or restart the bodhi service or any of the ancillary services it runs, if you need to.
Authentication¶
The BCD environment uses an instance of the Ipsilon authentication service (as also used for Fedora authentication in the real world). This instance is configured in testauth mode, which means you can log in as any user at all with the password ‘ipsilon’. If you log in as a user that does not exist in the Bodhi database, it will be added.
Note that the group memberships and email addresses for real users are not the same as in the real world. This Ipsilon instance is configured by default to say that all users are members of the groups “fedora-contributors” and “packagers” and also a group of the same name as their username, and have the email address “username@example.com”. These values will be changed in the Bodhi database on login.
There is a special mechanism for testing different group memberships. You can login with a username like ‘someuser:groups=somegroup1,somegroup2’ to log in as user ‘someuser’ but with your groups reported as ‘somegroup1’ and ‘somegroup2’ (you will not be reported as a member of ‘packagers’ or ‘fedora-contributors’ in this case). You can also take advantage of the ‘user is a member of the group with the same name’ mechanism, e.g. by logging in as ‘provenpackager’ to be reported as a member of the ‘provenpackager’ group.
As mentioned above, switching users can be a bit tricky, as Ipsilon likes to cache the session
(this is sort of what it’s supposed to do, after all). To switch users, log out, run ./bcd cis
,
then log in again. If things get really messy you may need to stop and remove the bodhi and ipsilon
containers to get back to a clean state.
Quick tips about the BCD environment¶
You can shell into the running Bodhi container like this:
# Make sure your bodhi checkout is your shell's cwd
$ ./bcd shell
Note the container must be running, or this will fail. Once you are inside the development
environment, there are a helpful set of commands in your .bashrc
that will be printed to the
screen via the /etc/motd
file. Be sure to familiarize yourself with these:
Welcome to the Bodhi development environment! Here are some helpful commands:
bdocs: Build Bodhi's documentation.
blint: Run a series of linter checks.
btest: Run Bodhi's test suite (includes blint and bdocs).
bmessages: Display the log of Bodhi's messages on the bus.
blog: View Bodhi's log. (Support all the systemctl options, such as -lf).
bresetdb: Drop and reimport the database.
brestart: Restart the Bodhi service.
bodhi-shell: Get a handy python shell initialized with Bodhi models.
bstart: Start the Bodhi service.
bstop: Stop the Bodhi service.
The BODHI_URL and BODHI_OPENID_PROVIDER variables are set so the
the bodhi client will use the local development server and all
requests should work correctly.
You can run `systemctl start fm-consumer@remote.service` to run a
callback consumer that listens to real messages on the production
bus from Koji and ResultsDB, though this dev env may not be able
to correctly process all messages.
Happy hacking!
The code from your development host will be mounted in /bodhi
in the Bodhi container.
You can edit this code on the host, and the changes will automatically be reflected in the container.
The development server is run inside the container by the bodhi.service
systemd unit.
You can use bodhi-shell
to get a Python shell quickly set up with a nice environment for you to hack
in. Here’s an example where we use bodhi-shell
to set an update’s request to stable:
[root@bodhi-dev bodhi]# bodhi-shell
Python 3.12.0 (main, Oct 2 2023, 00:00:00) [GCC 13.2.1 20230918 (Red Hat 13.2.1-3)] on linux
Type "help" for more information.
Environment:
app The WSGI application.
registry Active Pyramid registry.
request Active request object.
root Root of the default resource tree.
root_factory Default root factory used to create `root`.
Custom Variables:
m bodhi.server.models
s bodhi.server.Session
>>> u = m.Update.query.filter_by(alias='FEDORA-2016-840ff89708').one()
>>> u.request = m.UpdateRequest.stable
>>> s().commit()
Debugging with Visual Studio Code¶
Visual Studio Code’s Dev Containers <https://code.visualstudio.com/docs/devcontainers/containers> extension may be able to use the environment provided by Vagrant, with support for discovering, running and debugging unit-tests. The person who implemented BCD doesn’t use VS Code, so we don’t really know. Please try it and tell us, then we can make this doc better.
This provides an IDE alternative to running btest from ./bcd shell.
This assumes you have working environment as described in BCD - the Bodhi Container Development environment
Configure VS Code for BCD¶
Since BCD uses podman, this handy guide from Stack Overflow <https://stackoverflow.com/questions/77167514> should help. You want to start the BCD containers as described in the BCD page, then set up podman so VS Code will be able to see it (as explained on the SO question), then finally have VS Code attach to the running bodhi-dev-bodhi container. The upstream VS Code docs explain that to attach to a running container, you should either select Dev Containers: Attach to Running Container from the Command Palette (F1) or use the Remote Explorer in the Activity Bar and from the Containers view, select the Attach to Container inline action on the container you want to connect to.
Again, we haven’t tried this. Sorry. Let us know how it goes. The following instructions are preserved mostly unmodified from when this page documented using VS Code with Vagrant. They’re probably still more or less relevant to BCD.
Debugging application running in BCD¶
When inside the container set the debug configuration in launch.json for Pyramid (you should get the pyramid conf as a suggestion):
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Pyramid Application",
"type": "python",
"request": "launch",
"module": "pyramid.scripts.pserve",
"args": [
"/home/vagrant/development.ini"
],
"pyramid": true,
"jinja": false,
},
When you want to start application for debugging, you first need to run systemctl stop bodhi in the container shell, otherwise the debugger will complain about ports already in use, as it will launch another instance of bodhi inside of the application.
After you stopped the bodhi service, you can run the “Python: Pyramid Application” from the Debug pane (Ctrl+Shift+D) and the application will stop on breakpoints.
Debugging unit-tests¶
For running unit-tests install Python Test Explorer for Visual Studio Code <https://marketplace.visualstudio.com/items?itemName=littlefoxteam.vscode-python-test-adapter> extension Open settings (CTRL+Comma), and in the settings for the container, swith to JSON view and make the following configuration changes:
{
"python.testing.pytestEnabled": true,
"python.testing.pytestPath": "py.test-3",
"pythonTestExplorer.testFramework": "pytest",
"python.pythonPath": "python3",
"python.testing.pytestArgs": ["--no-cov"]
}
Currently coverage reporting and debugging don’t work at the same time, due to a reported issue. Currently suggested workaround is to disable the coverage-reporting with –no-cov parameter. The issue is currently tracked in https://github.com/microsoft/vscode-python/issues/693
After configuring you should be able to populate the test-explorer with unit tests and start debugging!
Debugging celery¶
If you want to debug code running in the celery worker, you first need to stop the celery service and then start celery from inside vs-code, in similar fashion as you’d run pserve in previous example.
Database models¶
Click below to explore Bodhi’s database models:
Bodhi's database models. |
Database Schema¶
The Bodhi database schema can be seen below.

Database schema.¶
Admin Guide¶
Administration¶
System Requirements¶
Bodhi is currently only supported on active Fedora releases. It requires PostgreSQL >= 9.2.0.
Configuration¶
The Bodhi server is configured via an INI file found at /etc/bodhi/production.ini
. Bodhi ships
an example production.ini
file that has all settings documented. Most settings have reasonable
defaults if not defined, and the example settings file describes the default values in the
commented settings. Here is a copy of the example config file with in-line documentation:
# The commented values in this config file represent the defaults.
#
# Note that under Python 3, you will need to use %% instead of % to put a literal % into the value
# of the config. Many settings use a %s for positional substitution, and those will need to be
# encoded as %%s.
[app:main]
use = egg:bodhi-server
##
## Messages
##
# The approve-testing scheduled task will post this message as a comment from the bodhi user on
# updates that reach the required time in testing if they are not stable yet. Positional
# substitution is used, and the %%d will be replaced with the time in testing required for the
# update.
# testing_approval_msg = This update can be pushed to stable now if the maintainer wishes
# not_yet_tested_msg = This update has not yet met the minimum testing requirements defined in the <a href="https://fedoraproject.org/wiki/Package_update_acceptance_criteria">Package Update Acceptance Criteria</a>
# not_yet_tested_epel_msg = This update has not yet met the minimum testing requirements defined in the <a href="https://fedoraproject.org/wiki/EPEL_Updates_Policy">EPEL Update Policy</a>
# The comment that Bodhi will post on updates when a user posts negative karma.
# disable_automatic_push_to_stable = Bodhi is disabling automatic push to stable due to negative karma. The maintainer may push manually if they determine that the issue is not severe.
# Libravatar - If this is true libravatar will work as normal. Otherwise, all
# libravatar links will be replaced with the string "libravatar.org" so that
# the tests can still pass.
# libravatar_enabled = True
# Set this to true if you want to do federated dns libravatar lookup
# libravatar_dns = False
# If libravatar_dns is True, libravatar_prefer_tls will define what gets handed to
# libravatar.libravatar_url()'s https setting. It may be set to True or False, but defaults to None,
# which is effectively False.
# libravatar_prefer_tls = True
##
## Legal
##
# If you set this, Bodhi will display a link in the footer called "Legal" that points to the
# supplied link.
# legal_link =
# If you set this, Bodhi will display a link in the footer called "Privacy policy" that points to
# the supplied link. It will also link the privacy policy under the comment box.
# privacy_link =
# Cache_dir is used for writing temporary cache files used in the composer process.
# cache_dir =
# The URL for a datagrepper to use in various templates.
##
## Testing
##
## Query the wiki for test cases
# query_wiki_test_cases = False
# wiki_url = https://fedoraproject.org/w/api.php
# test_case_base_url = https://fedoraproject.org/wiki/
# Set this to True to enable gating based on policies enforced by Greenwave. If you set this to
# True, be sure to add a cron job to run the bodhi-check-policies CLI periodically.
# test_gating.required = False
# If this is set to a URL, a "More information about test gating" link will appear on update pages for users
# to click and learn more.
# test_gating.url =
# The API url of Greenwave.
# greenwave_api_url = https://greenwave-web-greenwave.app.os.fedoraproject.org/api/v1.0
# The URL for waiverdb's API
# waiverdb_api_url = https://waiverdb-web-waiverdb.app.os.fedoraproject.org/api/v1.0
# An access token used to authenticate to waiverdb
# waiverdb.access_token =
# Email domain to prepend usernames to
# default_email_domain = fedoraproject.org
# domain for generated message IDs
# message_id_email_domain = admin.fedoraproject.org
# Where to search for e-mail templates. Each release has a mail_template attribute that defines the
# name of a mail template, and Bodhi will look in the path defined by this setting to find the named
# template.
# mail.templates_basepath = bodhi.server:email/templates/
##
## Composer settings
##
# Where to initially compose repositories. You can use %(here)s to reference the location of this file.
# compose_dir =
# The max number of compose threads running at the same time
# max_concurrent_composes = 2
# Whether to clean old composes at the end of each run.
# clean_old_composes = true
# Where to symlink the latest repos by their tag name. You can use %(here)s to reference the
# location of this file.
# compose_stage_dir =
# Whether to wait for repomd.xml.asc signature files in the repo when composing updates or not
# wait_for_repo_sig = False
# The following jinja2 template variables are available for use to customize the Pungi configs and
# variants files to the Release and Updates:
#
# * 'id': The id of the Release being composed.
# * 'release': The Release being composed.
# * 'request': The request being composed.
# * 'updates': The Updates being composed.
# * 'cr_config': The createrepo_c settings loaded from config file.
#
# NOTE: The jinja2 configuration for these templates replaces the {'s and }'s with ['s and ]'.
# e.g.: a block becomes [% if <something %], and a variable is [[ varname ]].
# The base path where pungi configs will be stored. You will need to put variants.xml templates
# inside pungi.basepath as well. These templates will have access to the same template variables
# described above, and should be named variants.rpm.xml.j2 and variants.module.xml.j2, for RPM
# composes and module composes, respectively.
# pungi.basepath = /etc/bodhi
# The Pungi executable to use when composing.
# pungi.cmd = /usr/bin/pungi-koji
# The following settings reference filenames of jinja2 templates found in pungi.basepath to be used
# as Pungi configs for composing modules or RPMs (The RPM config includes dnf, yum, and atomic repos).
# pungi.conf.module = pungi.module.conf
# pungi.conf.rpm = pungi.rpm.conf
# A space separated list of extra arguments to be passed on to Pungi during composing.
# pungi.extracmdline =
# What to pass to Pungi's --label flag, which is metadata included in its composeinfo.json.
# pungi.labeltype = Update
# Path to the file with createrepo_c settings
# createrepo_c_config = /etc/bodhi/createrepo_c.ini
# The skopeo executable to use to copy container images.
# You can put credentials for skopeo to use in $HOME/.docker/config.json
# https://github.com/projectatomic/skopeo#private-registries-with-authentication
#
# skopeo.cmd = /usr/bin/skopeo
# Comma separated list of extra flags to pass to the skopeo copy command.
# skopeo.extra_copy_flags =
# Container hostnames. You can specify a port as well, using the traditional syntax (i.e., localhost:5000).
# container.destination_registry = registry.fedoraproject.org
# container.source_registry = candidate-registry.fedoraproject.org
##
## Mirror settings
##
# file_url: Used in the repo metadata to set RPM URLs.
# file_url = https://download.fedoraproject.org/pub/fedora/linux/updates
# {release}_({version}_){request}_master_repomd: This is used by the composer to determine when a
# primary architecture push has been synchronized to the master mirror for a given release and
# request. The composer will verify that the checksum of repomd.xml at the master URL matches the
# expected value, and will poll the URL until this test passes. Substitute release and request
# for each release id (replacing -'s with _'s) and request (stable, testing). Used for the
# arches listed in {release}_{version}_primary_arches when it is defined, else used for all
# arches. You must put two %%s's in this setting - the first will be replaced with the release
# version and the second will be replaced with the architecture.
# If a version of the option exists with a matching version, it has priority over one without.
# examples (these settings do not have defaults):
# fedora_stable_master_repomd = http://download01.phx2.fedoraproject.org/pub/fedora/linux/updates/%%s/%%s/repodata/repomd.xml
# fedora_28_stable_master_repomd = http://download01.phx2.fedoraproject.org/pub/fedora/linux/updates/%%s/Everything/%%s/repodata/repomd.xml
# fedora_testing_master_repomd = http://download01.phx2.fedoraproject.org/pub/fedora/linux/updates/testing/%%s/%%s/repodata/repomd.xml
# fedora_epel_stable_master_repomd = http://download01.phx2.fedoraproject.org/pub/epel/%%s/%%s/repodata/repomd.xml
# fedora_epel_testing_master_repomd = http://download01.phx2.fedoraproject.org/pub/epel/testing/%%s/%%s/repodata/repomd.xml
# {release}_({version}_){request}_alt_master_repomd: This is used by the composer to determine when a
# secondary architecture push has been synchronized to the master mirror for a given release and
# request. The composer will verify that the checksum of repomd.xml at the master URL matches the
# expected value, and will poll the URL until this test passes. Substitute release and request
# for each release id (replacing -'s with _'s) and request (stable, testing). Used for the
# arches not listed in {release}_{version}_primary_arches if it is defined. You must put two
# %%s's in this setting - the first will be replaced with the release version and the second will
# be replaced with the architecture.
# If a version of the option exists with a matching version, it has priority over one without.
# examples (these settings do not have defaults):
# fedora_stable_alt_master_repomd = http://download01.phx2.fedoraproject.org/pub/fedora-secondary/updates/%%s/%%s/repodata/repomd.xml
# fedora_28_stable_alt_master_repomd = http://download01.phx2.fedoraproject.org/pub/fedora-secondary/updates/%%s/Everything/%%s/repodata/repomd.xml
# fedora_testing_alt_master_repomd = http://download01.phx2.fedoraproject.org/pub/fedora-secondary/updates/testing/%%s/%%s/repodata/repomd.xml
## The base url of this application
# base_address = https://admin.fedoraproject.org/updates/
## Primary architechures by release
##
## {release}_{version}_primary_arches: Releases that have alternative arches must define their
## primary arches here. Any arches found during composing that are not present here are assumed
## to be alternative arches. This is used during the wait_for_repo() step of the compose where
## Bodhi polls the master repo to find out whether the compose has made it to the repo or not.
## Bodhi looks for primary arches with the {release}_{request}_master_repomd setting above, and
## for alternative arches at the {release}_{request}_alt_master_repomd setting above. If this
## is not set, Bodhi will assume the release only has primary arches.
# example (not a default): fedora_26_primary_arches = armhfp x86_64
##
## Email setting
##
# The hostname of an SMTP server Bodhi can use to deliver e-mail.
# smtp_server =
# The updates system itself. This e-mail address is used as the From address for e-mails that Bodhi
# sends. It is also used as the username for Bugzilla if bugzilla_api_key is undefined and
# bodhi_password is defined.
# bodhi_email = updates@fedoraproject.org
# An API key that Bodhi should use when accessing Bugzilla. If set, the bodhi_password setting is
# ignored.
# bugzilla_api_key =
# This is the password used to access Bodhi's bugzilla account. Ignored if bugzilla_api_key is set.
# bodhi_password =
# The address that gets the requests
# release_team_address = bodhiadmin-members@fedoraproject.org
# Public lists where we send update announcements.
# These variables should be named per: Release.prefix_id.lower()_announce_list
# fedora_announce_list = package-announce@lists.fedoraproject.org
# fedora_test_announce_list = test@lists.fedoraproject.org
# fedora_epel_announce_list = epel-package-announce@lists.fedoraproject.org
# fedora_epel_test_announce_list = epel-devel@lists.fedoraproject.org
# Superuser groups
#
# Defined in and tied to the Fedora Account System (limited to 16 characters)
# admin_groups = proventesters security_respons bodhiadmin sysadmin-main
# Users that we don't want to show up in the "leaderboard(s)"
# stats_blacklist = bodhi anonymous
# A list of non-person users
# system_users = bodhi
# The number of days used for calculating the 'top testers' metric
# top_testers_timeframe = 7
# Cache settings
# dogpile.cache.backend = dogpile.cache.dbm
# dogpile.cache.expiration_time = 100
# dogpile.cache.arguments.filename = /var/cache/bodhi-dogpile-cache.dbm
# If True (the default), warm up caches when the Bodhi process starts up. Otherwise, they will get warmed
# on first use.
# warm_cache_on_start = True
# Exclude sending emails to these users
# exclude_mail = bodhi
##
## Buildsystem settings
##
# What buildsystem do we want to use? For development, we'll use a fake
# buildsystem that always does what we tell it to do. For production, we'll
# want to use 'koji'.
# buildsystem = dev
# trusted_build_sources = git+https://src.fedoraproject.org/,https://src.fedoraproject.org/
# The base URL to Koji, used to construct HTML links to Koji builds in the web UI
# koji_web_url = https://koji.fedoraproject.org/koji/
# Koji's XML-RPC hub
# koji_hub = https://koji.stg.fedoraproject.org/kojihub
# URL of where users should go to set up their notifications
# fmn_url = https://apps.fedoraproject.org/notifications/
# Koji krb5
# krb_principal =
# krb_keytab =
# krb_ccache=
##
## ACL system
## Choices are 'pagure', which will query the pagure_url below, or 'dummy', which will
## always return guest credentials (used for local development).
##
# acl_system = dummy
# Add your username here to enable ACL rights in the development environment. Only has an effect if
# you are using the dummy acl_system.
# acl_dummy_committer =
##
## Pagure
##
# pagure_url = https://src.fedoraproject.org/pagure/
# This is the namespace where we expect to find the git sources for packages.
# Values are in the form `PackageType:PagureNamespace`
# pagure_namespaces = rpm:rpms, module:modules, container:container, flatpak:flatpaks
##
## Bug tracker settings
##
# Set this to bugzilla to turn on Bugzilla integration.
# bugtracker =
# A template that Bodhi will use when commenting on Bugzilla tickets when Updates that reference
# them are created. These placeholders are available:
# - {update_alias}
# - {update_beauty_title}
# - {update_release}
# - {update_url}
# initial_bug_msg = {update_alias} ({update_beauty_title}) has been submitted as an update to {update_release}.\n{update_url}
# A template that Bodhi will use when commenting on Bugzilla tickets when Updates that reference
# them are marked stable. These placeholders are available:
# - {update_title}
# - {update_beauty_title}
# - {update_alias}
# - {repo}
# - {install_instructions}
# - {update_url}
# stable_bug_msg = {update_alias} ({update_beauty_title}) has been pushed to the {repo} repository.\n. If problems still persists, please make note of it in this bug report.
# The following two templates are used to comment on Bugzilla tickets. %%s will be substituted with
# the update's URL. The first is used for all updates, unless the epel setting in defined, which
# will be used for all Updates on Releases that have an id_prefix of FEDORA-EPEL.
# testing_bug_msg =
# See https://fedoraproject.org/wiki/QA:Updates_Testing for
# instructions on how to install test updates.
# You can provide feedback for this update here: %%s
# testing_bug_epel_msg =
# See https://fedoraproject.org/wiki/QA:Updates_Testing for
# instructions on how to install test updates.
# You can provide feedback for this update here: %%s
##
## Bugzilla settings.
##
# The username/password for our bugzilla account comes
# from the bodhi_{email,password} fields.
# A URL to a Bugzilla instance's xmlrpc.cgi script for Bodhi to use.
# bz_server = https://bugzilla.redhat.com/xmlrpc.cgi
# A URL to a Bugzilla instance's REST api for Bodhi to use.
# bz_server_rest = https://bugzilla.redhat.com/rest/
# Bodhi will avoid touching bugs that are not against the following comma-separated products.
# Fedora's production Bodhi instance sets this to Fedora,Fedora EPEL
# bz_products =
# Exclude some Releases where Updates are created automatically to touch bugs.
# Comma separated list of Release.name values
# bz_exclude_rels = ELN
# A template to use for links to Bugzilla tickets. %%s will be filled in with the bug number.
# buglink = https://bugzilla.redhat.com/show_bug.cgi?id=%%s
# A regex used to recognize bug numbers in build changelog to be associated to automatic updates.
# Since this is not treated as raw string, remember to use double backslash.
# bz_regex = (?:fix(?:es)?|close(?:s)?)\\s(?:fedora|epel|rh(?:bz)?)#(\\d{5,})
##
## Critical Path Packages
## https://fedoraproject.org/wiki/Critical_path_package
##
# You can allow Bodhi to read critpath packages from JSON files (expected to
# be generated by the `critpath.py` script from the releng repo) by setting
# this value to `json`. If it isn't set, it'll just use the hardcoded list
# below.
# critpath.type =
# If critpath.type is set to `json`, this value sets the directory where Bodhi
# will look for the JSON files. The filenames should match Bodhi release
# 'branch' values, which should be the name of the git branch for the release.
# critpath.jsonpath = /etc/bodhi/critpath
# You can hardcode a list of critical path packages instead of using JSON
# files. This is used if critpath.type is not defined.
# critpath_pkgs =
# The number of admin approvals it takes to be able to push a critical path
# update to stable for a pending release.
# critpath.num_admin_approvals = 2
# The net karma required to submit a critical path update to a pending release.
# critpath.min_karma = 2
# Allow critpath to submit for stable after 2 weeks with no negative karma
# critpath.stable_after_days_without_negative_karma = 14
# The minimum amount of time an update must spend in testing before
# it can reach the stable repository
fedora.mandatory_days_in_testing = 7
fedora_epel.mandatory_days_in_testing = 14
##
## Release status
##
# You can define alternative policies than the defaults for specific Releases by defining a setting
# of the form Release.name.status (with -'s removed from the name). You can set the status to any
# string you like, and then for each status, you can override the mandatory days in testing, the
# critpath number of admin approvals, and the critpath minimum karma. For example, if we want to set
# Fedora 28 as a pre-beta, and we want it to have different rules in pre-beta and post-beta, we
# could do something like this:
#f28.status = pre_beta
#f28.pre_beta.mandatory_days_in_testing = 3
#f28.pre_beta.critpath.num_admin_approvals = 0
#f28.pre_beta.critpath.min_karma = 1
#f28.pre_beta.critpath.stable_after_days_without_negative_karma = 3
#f28.post_beta.mandatory_days_in_testing = 7
#f28.post_beta.critpath.num_admin_approvals = 0
#f28.post_beta.critpath.min_karma = 2
#f28.post_beta.critpath.stable_after_days_without_negative_karma = 5
##
## Buildroot Override
##
# Maximum number of days a buildroot override may expire in, from creation time.
# buildroot_limit = 31
# You can have releases to extend its buildroot override tags from other releases.
# When submitting a Buildroot Override for that Release, the build will be tagged
# with the override_tag of its Release AND the override tags of the inherited releases.
# Left Release.name goes lowercase, right Release.names must be specified exactly.
# Below is an example, all EPEL-9 builds submitted as buildroot overrides will also
# be tagged as EPEL-9N and EPEL-8 overrides.
# epel-9.override-extend = EPEL-9N,EPEL-8
##
## Groups
##
# FAS Groups that we want to pay attention to
# When a user logs in, bodhi will look for any of these groups and associate
# them with the user. They will then appear as the users effective principals in
# the format "group:groupname" and can be used in Pyramid ACE's.
#
# Defined in and tied to the Fedora Account System (limited to 16 characters)
# important_groups = proventesters provenpackager releng security_respons packager bodhiadmin
# Groups that can push updates for any package
#
# Defined in and tied to the Fedora Account System (limited to 16 characters)
# admin_packager_groups = provenpackager releng security_respons
# User must be a member of this group to submit updates
# mandatory_packager_groups = packager
##
## updateinfo.xml configuration
##
# updateinfo_rights = Copyright (C) {CURRENT_YEAR} Red Hat, Inc. and others.
##
## Authentication & Authorization
##
# pyramid.openid settings.
# openid.success_callback = bodhi.server.auth.utils:remember_me
# openid.provider = https://id.fedoraproject.org/openid/
# openid.url = https://id.fedoraproject.org/
# openid_template = {username}.id.fedoraproject.org
# openid.sreg_required = email nickname
# If this is undefined, Bodhi will concatenate the groups listed in the following other settings
# from this file: important_groups, admin_packager_groups, mandatory_packager_groups, and
# admin_groups. You likely want this default, but can override it here if you know what you are
# doing. You can also override it here if you do not know what you are doing, but that would be
# inadvisable.
# openid.groups = DEFAULT_DOCUMENTED_ABOVE
# OIDC (OpenID Connect)
oidc.fedora.client_id = oidc-client_id
oidc.fedora.client_secret = oidc-client_secret
oidc.fedora.server_metadata_url = http://id.dev.fedoraproject.org/openidc/.well-known/openid-configuration
# CORS allowed origins for cornice services
# This can be wide-open. read-only, we don't care as much about.
cors_origins_ro = *
# This should be more locked down to avoid cross-site request forgery.
cors_origins_rw = https://bodhi.fedoraproject.org
cors_connect_src = https://*.fedoraproject.org/ wss://hub.fedoraproject.org:9939/
##
## Pyramid settings
##
pyramid.reload_templates = false
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
debugtoolbar.hosts = 127.0.0.1 ::1
##
## Database
##
# This must be a PostgreSQL database. You can encode a username and password in the URL. For
# example, postgresql://username:password@hostname/database_name
# sqlalchemy.url = postgresql://localhost/bodhi
# sqlalchemy_extra.statement_timeout = 30000
##
## Templates
##
# Where Bodhi's templates are stored. You likely don't want or need to adjust this setting.
# mako.directories = bodhi.server:templates
##
## Authentication & Sessions
##
# CHANGE THESE IN PRODUCTION!
# authtkt.secret = CHANGEME
# session.secret = CHANGEME
# authtkt.secure = True
# How long should an authorization ticket be valid for, in seconds? Defaults to one day.
# authtkt.timeout = 86400
# pyramid_beaker
session.type = file
session.data_dir = %(here)s/data/sessions/data
session.lock_dir = %(here)s/data/sessions/lock
session.key = mykey
session.cookie_on_exception = true
# Tell the browser to only send the cookie over TLS
session.secure = true
# Create a cookie that is only valid for one day
session.timeout = 86400
cache.regions = default_term, second, short_term, long_term
cache.type = memory
cache.second.expire = 1
cache.short_term.expire = 60
cache.default_term.expire = 300
cache.long_term.expire = 3600
# Celery configuration file
celery_config = /etc/bodhi/celeryconfig.py
[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543
[pshell]
m = bodhi.server.models
#db = bodhi.server.util.pshell_db
t = transaction
# Begin logging configuration
[loggers]
keys = root, bodhi, sqlalchemy, celery, celery_worker_job
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = INFO
handlers = console
[logger_bodhi]
level = DEBUG
handlers =
qualname = bodhi
[logger_sqlalchemy]
level = INFO
handlers =
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither. (Recommended for production systems.)
[logger_celery]
level = INFO
handlers =
qualname = celery
[logger_celery_worker_job]
level = ERROR
handlers =
qualname = celery.worker.job
propagate = 1
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
# End logging configuration
Logging¶
The example configuration above includes an example default logging configuration. However, you may
wish to do something more advanced, such as e-mail error messages to an address with rate limiting.
Bodhi provides a rate limiting Python logging Filter at `bodhi.server.logging.RateLimiter`
.
Unfortunately, it is not possible to use Python logging filters with Pyramid’s ini file, so if you
wish to use Bodhi’s `RateLimiter`
log filter, you will need to configure Pyramid to use
pyramid_sawing so that it can use more advanced logging configuration. As a quick example, you
might put something like this into /etc/bodhi/production.ini
to configure Pyramid to use
`pyramid_sawing`
and to look for a logging config at `/etc/bodhi/logging.yaml`
:
pyramid.includes =
pyramid_sawing
pyramid_sawing.file = /etc/bodhi/logging.yaml
Then you could configure all of you logging in `/etc/bodhi/logging.yaml`
. Here is a snippet you
could use in that file to get Bodhi to e-mail error logs, but to limit them to one e-mail per hour
per process per spot in the code that logs errors:
---
version: 1
formatters:
generic:
format: '%(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s'
filters:
rate_limit:
(): bodhi.server.logging.RateLimiter
rate: 3600
handlers:
smtp:
class: logging.handlers.SMTPHandler
mailhost: "smtp.example.com"
fromaddr: "bodhi@example.com"
toaddrs:
- "admin@example.com"
subject: "Bodhi had a sad"
level: ERROR
formatter: generic
filters: [rate_limit]
loggers:
bodhi:
level: INFO
handlers: [smtp]
propagate: 0
root:
level: NOTSET
handlers: []
You can read more detail about the `RateLimiter`
below:
- class bodhi.server.logging.RateLimiter(rate: int = 3600)[source]¶
Bases:
Filter
Log filter that rate-limits logs based on time.
The rate limit is applied to records by filename and line number.
Filters can be applied to handlers and loggers. Configuring this via dictConfig is possible, but has somewhat odd syntax:
log_config = { "filters": { "60_second_filter": { "()": "fedmsg_migration_tools.filters.RateLimiter", "rate": "60" } } "handlers": { "rate_limited": { "filters": ["60_second_filter"], ... } } "loggers": { "fedmsg_migration_tools": { "filters": ["60_second_filter"], ... } } }
This was shamelessly stolen from https://github.com/fedora-infra/fedmsg-migration-tools/blob/0cafc8f/fedmsg_migration_tools/filters.py which is also licensed GPLv2+.
- rate¶
How often, in seconds, to allow records. Defaults to hourly.
Components¶
Web Server¶
Bodhi has a web server component that runs its REST API and serves the web interface.
Message Consumers¶
The following sections document the list of messaging consumers.
Automatic updates¶
This consumer will create updates automatically when builds are tagged to a Release’s candidate tag,
if the Release associated with that tag is configured to do so by having its
create_automatic_updates
boolean set to True.
Composer¶
Bodhi has a process called the “composer” that is responsible for generating the repositories that move packages along the path to their destiny. For each release, there are two composes that get run, one for the release’s testing repository, and the other for the release’s stable repository.
Administrators can use the bodhi-push
tool to start composes. To view the status of composes
once they have been started, users can use bodhi composes list
or they can visit the
/composes/
URL on the server. Composes can be in the following states:
requested: The compose has been created by
bodhi-push
, but the composer has not yet started working on the task.pending: The composer has received the task and will start it when it has free threads to do so.
initializing: The composer has started working on the task.
updateinfo: The composer is generating the
updateinfo.xml
file.punging: The composer is waiting for Pungi to finish creating the repository.
syncing_repo: The composer is polling the master mirror and waiting until the newly composed repository is present there.
notifying: The composer is sending out notifications about the updates.
success: The composer has successfully finished the task. This state does not last long as the records of successful composes are deleted shortly after reaching this state.
failed: The composer has failed. An administrator will usually have to inspect the error message associated with the compose to determine what action to take to correct the problem, and then the compose can be resumed with
bodhi-push
.signing_repo: The composer is waiting on the repository to be signed.
cleaning: The composer is cleaning up old composes. This state only occurs if
clean_old_composes
is set to True in the settings.
Greenwave Handler¶
Bodhi’s greenwave handler watches for messages sent from greenwave about bodhi updates that have been tested. When a message is recieved, the appropriate update is updated with the greenwave test status.
Signed Handler¶
Bodhi’s signed handler is responsible for watching for messages from Robosignatory when it signs builds, and marking those builds as signed in the Bodhi database.
Update Handler¶
Bodhi’s update handler watches for messages sent from the web server when updates are created or edited. When it sees these messages, it does background tasks, such as querying bugzilla to determine the titles on associated tickets, or querying the Wiki to retrieve test case information.
Community¶
Bodhi is maintained by the Fedora Project and its source code and issue tracker are on GitHub.
There is a mailing list and an IRC channel on Libera, #bodhi
for discussion about Bodhi.
Fedora runs a production instance and staging instance. Online documentation is available.