.. _release-history:
===============
Release history
===============
.. towncrier release notes start
.. _release-0.14.8.dev119+g09c7bc54d:
0.14.8.dev119+g09c7bc54d (2026-05-07)
-------------------------------------
Server
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Restrict artifact creation to registered categories. Unknown categories are
now rejected instead of being accepted without validation. (:issue:`1390`)
- Use ``POST`` for ``/api/1.0/work-request/get-next-for-worker/``, rather than
``GET``. (:issue:`1398`)
Features
^^^^^^^^
- Add an ``observer`` role on scopes, which implies the ``viewer`` role on all
the scope's workspaces. (:issue:`1292`)
- Accept the ``__in`` suffix to ``name`` and ``data__KEY`` matchers in
dictionary lookups. (:issue:`1301`)
- Add ``error_on_empty`` option to dictionary lookups, to indicate that a
lookup must match at least one item. (:issue:`1301`)
- SSO: Implement the ``add_to_group`` option for all OIDC providers.
(:issue:`1450`)
- Add SSO Provider ``AzureEntraProvider`` to simplify configuring Azure Entra.
(:issue:`1450`)
- SSO: Implement the ``email_verified`` and ``group:*`` restrictions for all
OIDC providers, not just GitLab. (:issue:`1450`)
- Record output data when work requests are aborted due to automatic retry
limits.
Bug Fixes
^^^^^^^^^
- Don't enter an infinite loop when trying to create a worker with constraint
failures other than a non-unique name. (:issue:`600`)
- Don't fail to retry workflows that were aborted before becoming pending.
(:issue:`1153`)
- Optimize subqueries used for filtering objects on which a user has a
particular role. (:issue:`1206`)
- Fix incorrect pending and per-architecture task counts in
``/api/1.0/service-status/`` and ``/-/status/queue/``. (:issue:`1449`)
- Don't delete an empty file store root directory in ``debusine-admin
vacuum_storage``. (:issue:`1455`)
- Show the number of distinct files stored in ``debusine-admin scope show``
rather than counting duplicates across artifacts.
Web UI
~~~~~~
Features
^^^^^^^^
- Collection detail: display suite base information.
Bug Fixes
^^^^^^^^^
- Optimize workflow table filtering to use more efficient join strategies.
(:issue:`1206`)
Client
~~~~~~
Features
^^^^^^^^
- Add ``debusine collection relation list`` and ``debusine collection relation
edit`` commands.
- Move more dput-ng configuration to ``/usr/share/dput-ng/``, in line with how
dput-ng 1.45 ships its own configuration files.
Workflows
~~~~~~~~~
Features
^^^^^^^^
- :workflow:`autopkgtest`, :workflow:`blhc`, :workflow:`lintian`,
:workflow:`piuparts`, :workflow:`qa`,
:workflow:`reverse_dependencies_autopkgtest`: Turn ``update_qa_results`` into
an enumeration, with values ``no``, ``yes``, or ``force``; ``force`` skips
the check for whether the :collection:`debian:qa-results` collection already
contains a current matching result. The old boolean values are still
accepted for compatibility. (:issue:`1301`)
Worker
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Workers now execute work requests using short-lived tokens that only
grant the minimum access necessary.
This change is backwards-incompatible with older workers that do not know how
to receive and use this token. (:issue:`523`)
Features
^^^^^^^^
- Worker Pools: Support installing Debusine from Freexian's Debusine Enterprise
repositories and arbitrary custom repositories.
Signing
~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Switch signing logging from Django file-based handlers to systemd
JournalHandler. (:issue:`597`)
.. _release-0.14.7:
debusine 0.14.7 (2026-04-22)
----------------------------
Server
~~~~~~
Features
^^^^^^^^
- Added ``debusine-admin signon_sync`` command to sync user groups with remote
sources of truth.
This requires the signon ``GitlabProvider`` to be configured with
``sync_token`` key in its ``options``, to be a GitLab API token that is able
to
access the membership information of the groups to be synced.
If set up correctly, groups listed in the ``add_to_group`` option will be
checked against their remote membership. Inconsistencies are listed to
``stdout``, or reconciled if ``--fix`` is used. (:issue:`976`)
- :task:`APTMirror`: Make the ``architectures`` parameter optional, and
automatically discover the available architectures if it is unset.
Bug Fixes
^^^^^^^^^
- server: Validate LocalArtifact data during API artifact creation, returning
errors earlier when invalid data is provided. (:issue:`173`)
- Improve error for duplicate workflow template creation. (:issue:`594`)
- Move updates of expensive properties of workflows into the scheduler.
(:issue:`1362`)
- Forbid dependencies between work requests that are not in workflows.
(:issue:`1362`)
- Improve performance of locking workflows for update.
Defer work request completion to a Celery task, so that workers don't get
blocked on workflow locks and sometimes end up discarding completed work.
(:issue:`1404`)
- Run the scheduler when workers are marked connected, but not on other changes
to workers. There is still a regular fallback scheduler run in case this
misses anything. (:issue:`1427`)
- Fix fetching artifacts in private workspaces from worker tasks.
(:issue:`1435`)
- Run the scheduler when work requests are marked pending, completed, or
aborted, but not on other changes to work requests. There is still a regular
fallback scheduler run in case this misses anything. (:issue:`1441`)
- Increase the frequency of the regular fallback scheduler run to once every 15
seconds. (:issue:`1441`)
- Only run ``provisioner`` and ``scheduler`` tasks in their corresponding
services, not in ``debusine-server-celery.service``. (:issue:`1441`)
- Fix high database write bandwidth caused by insufficiently-constrained
``UPDATE`` statements.
- Reduce log noise from locked workflows: once the scheduler has found that it
can't assign a work request to a worker because it's locked, it skips other
work requests in the same workflow.
Documentation
^^^^^^^^^^^^^
- Document ``debusine-admin create_collection``. (:issue:`1430`)
Web UI
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Removed the Web UI components for creating Artifacts and Work Requests, as
the focus for these actions shifts to the debusine-client (:issue:`1192`)
Features
^^^^^^^^
- Updated work request display for workflow callbacks.
When showing a workflow callback, a description is now shown that matches the
workflow callback's docstring.
The work request "Internals" tab is now displayed with a more compact, and
appropriate, ``
`` layout. (:issue:`1319`)
Bug Fixes
^^^^^^^^^
- Filter out work requests with ``allow_failure=True`` (such as regression
reference tests) from the failed workflows list and summary counts in the web
UI. (:issue:`1377`)
Miscellaneous
^^^^^^^^^^^^^
- :issue:`1105`
Client
~~~~~~
Miscellaneous
^^^^^^^^^^^^^
- :issue:`1419`
Tasks
~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- The ``DebusineTaskConfiguration`` bare data entry now has additional fields.
Old ``debusine`` clients will raise validation errors for the extra ``path``
and ``position`` fields when pulling data from new servers. (:issue:`1407`)
Features
^^^^^^^^
- Allow to match task configuration entries using boolean tag expressions.
In a :bare-data:`debusine:task-configuration` entry, ``tags_provided`` and
``tags_required`` can now be strings with a boolean tag expression that match
the corresponding scheduler tag sets in the task to configure.
(:issue:`1394`)
- Added path and position fields to task configuration entries.
The new fields are optional. When set, configuration entries are sorted by
``path`` and ``position`` first.
Configuration entries with those values unset, or with the same values, are
then sorted by presence of subject and context to preserve the existing
behaviour.
The database ID of configuration file entries is used as a last tie breaker
when everything else is the same, to keep sorting deterministic.
If new entries are created on the server that do not have path information
are
checked out, and do not exist in the local repository, they are now added to
a
``new.yaml`` file on the root of the repository instead of each in its own
file
under ``new/``.
It is now possible to have multiple entries in the collection matching the
same
task information, or even duplicate entries, as long as their path and
position
information is different. (:issue:`1407`)
Bug Fixes
^^^^^^^^^
- Autopkgtest artifacts now record ``relates-to`` relationships to the source
and binary package artifacts that were used as input. (:issue:`806`)
- Configure a default TCP timeout for external requests.
Add an ``http_timeout`` configuration parameter to the debusine-worker and
client configuration. (:issue:`1312`)
Worker
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Removed ``--log-file`` option. Worker logs are now written to the systemd
journal. (:issue:`597`)
Features
^^^^^^^^
- Set Worker version in Metadata and log the version (:issue:`323`)
- Lock down the home directory of the signing worker with tighter permissions
(``chmod 700``). (:issue:`1051`)
Bug Fixes
^^^^^^^^^
- The System user (``_system``) that is used for tasks created by
``debusine-admin`` is now an implicit scope and workspace owner, everywhere.
(:issue:`523`)
- Sync async HTTP client timeout with ``DEFAULT_REQUEST_TIMEOUT`` and make it
configurable via ``worker.config.http_timeout``. (:issue:`1416`)
- Send worker log events to module-specific loggers rather than the root
logger. (:issue:`1447`)
Miscellaneous
^^^^^^^^^^^^^
- :issue:`1419`
General
~~~~~~~
Miscellaneous
^^^^^^^^^^^^^
- :issue:`1414`
.. _release-0.14.6:
debusine 0.14.6 (2026-03-29)
----------------------------
This release switches to :ref:`tag-based scheduling
` by default.
We recommend running ``debusine-admin check_scheduler_tags`` immediately
after upgrading to this version to confirm that everything will work
correctly. If necessary, it can be disabled by setting
``FEATURE_TAG_BASED_SCHEDULING = False`` in your
:ref:`local server settings `.
The worker pool is not yet aware of tag-based scheduling (:issue:`1393`)
and still uses the traditional scheduling mechanisms to predict required
worker capacity.
Server
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- The server now requires ``python3-django-cte`` >= 2.0.0, available in
``trixie-backports``.
Features
^^^^^^^^
- Set ``User-Agent`` Header to ``debusine/`` for HTTP requests.
(:issue:`93`)
- The command ``debusine-admin check_scheduler_tags`` can be used to detect
potential problems with ``FEATURE_TAG_BASED_SCHEDULING`` for existing
workers and work request that may need attention before turning the
feature on. (:issue:`326`)
- Extend syntax of lookups to be able to target a specific workspace.
(:issue:`495`)
- Replace the lookup API endpoints with ones usable by users, instead of
workers. (:issue:`691`)
- Cache positive lookup results in the context, so that we don't need to repeat
the same lookup-related queries many times while orchestrating workflows.
:workflow:`reverse_dependencies_autopkgtest`: Pre-cache source and binary
lookups for reverse-dependencies so that child :workflow:`autopkgtest`
workflows don't need to spend time looking them up again. (:issue:`786`)
- Sort ``static_parameters`` and ``runtime_parameters`` following the model
definitions, in API responses. (:issue:`1201`)
- The ``debusine-admin group members`` subcommand now supports a ``--role``
option to specify the role (``member`` or ``admin``) when adding or setting
group members, and lists the role of each member. (:issue:`1290`)
Bug Fixes
^^^^^^^^^
- ``debusine-admin delete_expired``: Take much less aggressive locks, so that
the rest of the service can stay operational while expiry is running.
(:issue:`473`)
- ``debusine-admin vacuum_storage``: Optimize last-modified checks for orphan
files: they incur an I/O cost for local stores, so it's better to only run
them for the rare case of orphan files rather than for all files in the
stores.
``debusine-admin vacuum_storage``: Simplify scan for empty directories.
(:issue:`724`)
- If the work request assigned to an external worker is locked when the worker
tries to get its next work request, return HTTP 423 immediately rather than
blocking. The worker will try again, and this avoids filling up PostgreSQL
connection slots if a large workflow is locked for some time. (:issue:`786`)
- Don't disturb parent workflows when a worker asks for a new work request and
we find that we need to retry some running work requests. (:issue:`1081`)
- :issue:`1352`, :issue:`1383`
- Don't generate emails to admins for explicitly-generated API exceptions, even
if they happen to have HTTP status codes >= 500. (:issue:`1359`)
- Retain artifacts if they extend a non-expired artifact. (:issue:`1360`)
- Nicer logging for debusine.server.celery.update_workflows not getting a lock.
(:issue:`1365`)
- Optimize lookups in :collection:`debian:archive` and
:collection:`debian:suite` collections to use available indexes.
(:issue:`1367`)
- Handle file uploads when deleting expired workspaces. (:issue:`1375`)
- Retry deadlocks while marking a work request as completed by a worker.
(:issue:`1382`)
- Suppress database connection errors (``OperationalError``) from being emailed
to administrators by the ``django.request`` logger to prevent email floods
during database outages. (:issue:`1384`)
- Artifact Relation Creation endpoint: Require the caller to have permission to
create artifacts in the workspace that the origin artifact resides in.
Artifact Relation Deletion endpoint: Require the caller to be an owner of the
origin artifact's workspace.
- Enforce permission checking in all API views.
- Only permit external and signing worker tokens to use the worker websocket.
- Restrict access to the asset-permission-check endpoint to signing workers.
- Restrict submission to the open-metrics API endpoints to Celery workers.
Web UI
~~~~~~
Bug Fixes
^^^^^^^^^
- Collection search now matches anywhere in item names, instead of only
matching prefixes. (:issue:`1145`)
- Display the last page in workflow lists when a requested page number exceeds
the total number of pages, instead of returning a plain 404 error page.
(:issue:`1306`)
- :task:`Piuparts`: fix label (avoid duplicates) if multiple binary packages
are built from the same source. (:issue:`1333`)
- Fix task configuration inspector to better cope with invalid values in the
``collection`` query parameter. (:issue:`1341`)
Client
~~~~~~
Features
^^^^^^^^
- Add workflow template deletion to the client with ``debusine
workflow-template delete``. (:issue:`960`)
Workflows
~~~~~~~~~
Features
^^^^^^^^
- :workflow:`piuparts`: include architecture-independent packages in each
:task:`Piuparts` task. If only architecture-independent packages are
provided: create tasks for all available architectures. (:issue:`1174`)
Bug Fixes
^^^^^^^^^
- :workflow:`qa`: Don't abort top-level ``regression-analysis`` callback due to
failures of its dependencies. (:issue:`1133`)
- :workflow:`qa`: Update the top-level regression analysis incrementally as
tasks finish. (:issue:`1337`)
- :workflow:`autopkgtest`, :workflow:`blhc`, :workflow:`lintian`,
:workflow:`piuparts`: Fix failure to be idempotent if the state of the
``qa_suite`` collection changes. (:issue:`1370`)
- Fix workflow orchestrator crashes if child work requests have been retried.
(:issue:`1400`)
Tasks
~~~~~
Features
^^^^^^^^
- Allow task configuration entries to provide task tags and require worker
tags.
This adds two new fields to task configuration entries, that can be set to
lists
of tags to add to task-provided or task-required tags:
* ``provide_tags`` (list): a list of additional tags to add to task-provided
tags, using the ``workspace`` provenance.
* ``require_tags`` (list): a list of additional tags to add to task-required
tag, using the ``workspace`` provenances. (:issue:`326`)
- Tasks now require architecture tags from workers.
This MR contains a database migration that processes all ``WorkRequests``
objects in the database one at a time, and may take a long time.
On large servers, you can use this script, before upgrading, to pre-fill the
tags in batches to avoid the migration taking a database lock for a long
time.
.. code-block:: python3
#!/usr/bin/python3
import argparse
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "debusine.project.settings")
django.setup()
from django.db import transaction
from django.db.models import QuerySet
import debusine.worker.tags as wtags
from debusine.db.models import WorkRequest
GENERATED_TAGS = [
wtags.BUILD_ARCH_PREFIX + arch
for arch in ("amd64", "arm64", "ppc64el", "armhf", "armel", "i386")
]
def merge_tag_into(tag: str, wr: WorkRequest) -> None:
"""Add tag to tags, in place, keeping it sorted."""
if tag not in wr.scheduler_tags_required:
wr.scheduler_tags_required.append(tag)
wr.scheduler_tags_required.sort()
wr.save()
def sbuild_like() -> QuerySet[WorkRequest]:
return (
WorkRequest.objects.filter(task_data__has_key="build_architecture")
.exclude(task_data__build_architecture=None)
.exclude(scheduler_tags_required__overlap=GENERATED_TAGS)
.order_by()
)
def mmdebstrap_like() -> QuerySet[WorkRequest]:
return (
WorkRequest.objects.filter(
task_data__bootstrap_options__has_key="architecture"
)
.exclude(task_data__bootstrap_options__architecture=None)
.exclude(scheduler_tags_required__overlap=GENERATED_TAGS)
.order_by()
)
@transaction.atomic()
def prefill(count: int, dry_run: bool) -> None:
"""Prefill a batch of ``count`` WorkRequests."""
# sbuild-like tags using build_architecture
total = sbuild_like().count()
print(f"{total} sbuild-like work requests to process")
processed = 0
for wr in sbuild_like()[:count]:
tag = wtags.BUILD_ARCH_PREFIX + wr.task_data["build_architecture"]
merge_tag_into(tag, wr)
processed += 1
print(f"{processed}/{total} sbuild-like work requests processed")
# mmdebstrap-like tags using bootstrap_options.architecture
total = mmdebstrap_like().count()
print(f"{total} mmdebstrap-like work requests to process")
processed = 0
for wr in mmdebstrap_like()[:count]:
tag = (
wtags.BUILD_ARCH_PREFIX
+ wr.task_data["bootstrap_options"]["architecture"]
)
merge_tag_into(tag, wr)
processed += 1
print(f"{processed}/{total} mmdebstrap-like work requests processed")
if dry_run:
raise SystemExit(0)
def main():
parser = argparse.ArgumentParser(
description="Pre-fill build-arch scheduler tags from task data."
)
parser.add_argument(
"--dry-run",
"-n",
action="store_true",
help="do nothing, pretend to perform the operation",
)
parser.add_argument(
"--count",
"-c",
type=int,
default=100,
help="approximate number of WorkRequest to process"
" (may go from 0 to twice this much)",
)
args = parser.parse_args()
prefill(args.count, args.dry_run)
if __name__ == "__main__":
main()
To reiterate: running this code is not required, but it may help mitigate a
slow upgrade for sites with many ``WorkRequest`` objects in their database.
(:issue:`326`)
- Allow to match task configuration entries by task tags.
This adds two new fields to task configuration entries, that restrict
matching
the entries to only those tasks providing or requiring all the listed tags:
* ``tags_provided`` (defaults to ``[]``): a list of tags that the task must
provide
* ``tags_required`` (defaults to ``[]``): a list of tags that the task must
require (:issue:`1231`)
- Add ``architectures`` field to ``extra_repositories`` to filter repositories
by build architecture. (:issue:`1289`)
- Store resolved task input fields in dynamic task data.
This both allows inspecting task inputs in more details, and it allows
reconstructing the task fields from stored values.
Over time, this should allow simplifying task code significantly, as it can
rely on populated input fields and drop the need to save the needed
information
in dynamic data. (:issue:`1346`)
- Use a task input field for task build_architecture, and use a Django setting
for the fallback value.
You can now set the ``DEBUSINE_FALLBACK_ARCHITECTURE`` Django setting, to set
the architecture to use for tasks that require one but do not specify one. It
defaults to ``amd64``.
``build_architecture`` is now resolved via a task input field, which means it
is automatically saved in dynamic task data and is available for inspection,
and its lookup logic can make use of the database in the future.
Tasks that do not need a build architecture now again do not require
potential
workers to have a specific one. (:issue:`1347`)
- Restrict tasks providing ``task:source-package:*`` tags to the system
provenance.
This is intended to make sure that tags match the package that is being
built,
and that users cannot provide extra package-specific tags that could, for
example, trigger secure boot signing. (:issue:`1381`)
Documentation
^^^^^^^^^^^^^
- Documented work request fields relationship with the work request lifetime.
(:issue:`1348`)
- Added ``worker:class`` to the set of documented tags. (:issue:`1391`)
Miscellaneous
^^^^^^^^^^^^^
- :issue:`1345`
Worker
~~~~~~
Features
^^^^^^^^
- Restrict ``worker:type:*`` worker-provided tags to the system provenance.
Give that this information is in the database, this prevents a worker
accidentally or maliciously reporting as the wrong type. (:issue:`326`)
Bug Fixes
^^^^^^^^^
- Workers now run tasks in a working directory outside of /tmp ($HOME/workdir).
(:issue:`1051`)
Signing
~~~~~~~
Bug Fixes
^^^^^^^^^
- :task:`Sign`: Only require ``worker:cap:sbsign`` tag for ``purpose: uefi``.
(:issue:`1380`)
- :task:`SignRepositoryIndex`: Fix type of artifact relation from signed to
unsigned ``Release`` files.
General
~~~~~~~
Features
^^^^^^^^
- Tag-based scheduling is now enabled by default.
Documentation
^^^^^^^^^^^^^
- Promoted the task configuration blueprint to the main documentation.
.. _release-0.14.5:
debusine 0.14.5 (2026-02-24)
----------------------------
Server
~~~~~~
Features
^^^^^^^^
- Add a feature flag to enable tag-based scheduling.
This introduce the temporary ``FEATURE_TAG_BASED_SCHEDULING`` boolean
setting,
defaulting to ``False``, working as a feature flag.
When set to ``True``, it enables tag-based matching of tasks and workers in
the
scheduler.
We do not recommend enabling it: it is not expected to work yet, in this
release of Debusine. (:issue:`326`)
- Add worker-provided tags for tag-based scheduling.
As an initial step to move to tag-based scheduling (see
:ref:`scheduler-tags-reference`), this makes workers report their
capabilities
also using tags, and tasks define required worker tags to match them in
scheduling.
This isn't used for scheduling yet, since filtering server-side would mean
that
no task could get scheduled except on workers that have been updated to
provide
worker tags.
Scheduler tags now appear in work requests in ``debusine work-request-show``
and
in the work request detail in the web UI. (:issue:`326`)
- :task:`APTMirror`: Fetch most files directly rather than calling out to
``apt``.
:task:`APTMirror`: Fetch ``Contents`` and ``Translation`` indexes.
(:issue:`955`)
- :task:`APTMirror`: Add partial mirroring support. (:issue:`1250`)
- :task:`APTMirror`: Add support for mirroring private repositories using HTTP
Basic Authentication. (:issue:`1251`)
- When creating an asset in response to ``debusine asset create``, also create
an ``AssetUsage`` row to allow minimal usage of the new asset in the given
workspace. This only makes a difference for asset usage roles that may be
implied by other roles, such as ``REPOSITORY_SIGNER`` which is implicitly
granted to workspace owners. (:issue:`1313`)
Bug Fixes
^^^^^^^^^
- :task:`APTMirror`: Allow mirrored suites to reuse versions if
``may_reuse_versions`` is set on the suite or its parent archive.
(:issue:`1263`)
- Stop the test SFTP server more reliably (again). (:issue:`1296`)
- :issue:`1314`
Web UI
~~~~~~
Features
^^^^^^^^
- Workflow view: display input artifacts with their lookups and resolved
artifacts. (:issue:`885`)
- Log parsers: Avoid reading logs twice for parsing and rendering. Improve
error messages. (:issue:`1146`)
- Display a "please wait" message while a workflow is being orchestrated, as it
can take some time. (:issue:`1249`)
Bug Fixes
^^^^^^^^^
- Sort collections alphabetically in workspace drop-down menu. (:issue:`1011`)
- DebDiff WorkRequest and Artifact views: shorten excessively long titles.
(:issue:`1177`)
- Show the aborting user in the “Aborted” work request status badge.
(:issue:`1228`)
- Show ``debusine work-request sign`` rather than ``debusine
provide-signature`` in the "Waiting for signature" card. This requires
debusine-client >= 0.13.0, available in ``bookworm-backports-sloppy``,
``trixie-backports``, or ``forky``. (:issue:`1270`)
- Avoid including blank lines when copying log text with sections.
(:issue:`1281`)
- File text widgets: remove trailing newline when copying to the clipboard.
(:issue:`1327`)
Miscellaneous
^^^^^^^^^^^^^
- Use the 'info' color for the 'Running' state badges to make it distinct from
the 'Pending' state.
Client
~~~~~~
Bug Fixes
^^^^^^^^^
- Hide deprecated subcommands from command-line completion. (:issue:`1267`)
Workflows
~~~~~~~~~
Bug Fixes
^^^^^^^^^
- :workflow:`blhc`: Accept ``binary_artifacts`` parameter as an alternative to
``package_build_logs``; if ``binary_artifacts`` is passed, then find the
build logs using relations from the binary artifacts.
:workflow:`qa`: Wait for binary artifacts to exist before populating the
:workflow:`blhc` sub-workflow. The ``package_build_logs`` parameter is no
longer used. (:issue:`1142`)
- :workflow:`update_environments`: More accurately create the environments
requested in the targets parameter. (:issue:`1199`)
- Simplify ``Workflow.ensure_child_*``, avoiding creation of duplicate work
requests in some situations. (:issue:`1269`)
- :workflow:`debdiff`: Handle packages transitioning from arch-dependent to
arch-independent. (:issue:`1300`)
- :workflow:`piuparts`: Store QA results according to the build architecture
(i.e. the architecture where we're running the test), not the architecture of
the input binary packages. (:issue:`1318`)
Tasks
~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Add missing GenerateKey task version.
The GenerateKey task was missing ``TASK_VERSION``, and it has now been added.
Note that the scheduler will likely not find suitable workers for this task
until the signing workers have been updated to match the task version.
Features
^^^^^^^^
- Add initial set of task-provided scheduler tags.
This introduces task-provided tags ``task:scope:*``, ``task:workspace:*``,
``task:group:*``, ``task:source-package:*``.
Using tags for scheduling is still temporarily disabled until all workers are
updated to provide their scheduler tags. (:issue:`326`)
- :task:`Sbuild`: Create relation between :artifact:`debian:package-build-log`
and :artifact:`debian:upload` artifacts. (:issue:`1142`)
Bug Fixes
^^^^^^^^^
- :task:`DebDiff` (and theoretically other tasks): Handle non-UTF-8 output.
(:issue:`1086`)
Worker
~~~~~~
Bug Fixes
^^^^^^^^^
- Don't consider a worker pool worker idle if it has PENDING tasks.
(:issue:`1315`)
Documentation
^^^^^^^^^^^^^
- Recommend enabling ``security.nesting=true`` in the ``debusine`` Incus
profile. (:issue:`1330`)
.. _release-0.14.4:
debusine 0.14.4 (2026-01-30)
----------------------------
Server
~~~~~~
Features
^^^^^^^^
- Emit ``debusine_workflow_orchestrator_duration`` metric indicating how long
workflow orchestrators took to run. (:issue:`1196`)
Bug Fixes
^^^^^^^^^
- Stop the test SFTP server more reliably. (:issue:`1296`)
Web UI
~~~~~~
Features
^^^^^^^^
- Improve DebDiff view load time by optimizing log parsing. (:issue:`1257`)
- Debdiff artifact view: make added and removed file list scrollable.
Workflows
~~~~~~~~~
Bug Fixes
^^^^^^^^^
- :workflow:`debdiff`: fix incorrect binary package pairing by comparing
architecture-independent binaries together and including them in
architecture-dependent comparisons. (:issue:`1175`)
Tasks
~~~~~
Features
^^^^^^^^
- :task:`Autopkgtest`: Return a SKIPPED result if all tests were skipped.
(:issue:`1282`)
Bug Fixes
^^^^^^^^^
- :task:`Lintian`: Allow execution on ``incus-vm``.
Worker
~~~~~~
Miscellaneous
^^^^^^^^^^^^^
- Bump the bundled ``lxc.generator`` and ``incus-agent-setup`` code from
``distrobuilder``.
.. _release-0.14.3:
debusine 0.14.3 (2026-01-26)
----------------------------
Server
~~~~~~
Features
^^^^^^^^
- Improve database error handling for ``debusine-admin check`` and
``debusine-admin migrate``. (:issue:`226`)
- SSO restrict: allow multiple groups to be OR-ed together. (:issue:`1091`)
- Record when work requests are marked pending.
Emit ``debusine_work_request_start_latency`` metric when marking a work
request running. (:issue:`1195`)
- Introduce optional workspace scoping for groups.
Workspace-related groups can still be assigned roles on other workspaces and
their resources.
This removes the requirement of having unique group names across an entire
scope.
The owner group of a newly created child workspace is now scoped to that
workspace and simply called "Owners". (:issue:`1241`)
Bug Fixes
^^^^^^^^^
- Updated examples for serving static files also for repository pages.
(:issue:`1213`)
- Enforce permissions on the file body upload endpoint. (Note that hashes were
already recorded in the artifact creation step, which included permission
checks.) (:issue:`1245`)
- Fix ``/api/1.0/artifact/{workspace}/{artifact_id}/`` when the workspace has
multiple child workspaces. (:issue:`1252`)
- Consider artifacts to be visible via indirect workspace inheritance as well
as direct inheritance. (:issue:`1255`)
- Add ``debusine-admin`` support for workspace-specifc groups.
``debusine-admin`` was lagging behind after the introduction of
workspace-specific group, and this brings it up to date:
* There is a new ``workspace`` column in ``debusine-admin group list``.
* ``debusine-admin group list`` can also filter by workspace name, or
by groups without workspaces.
* For all other commands, groups can be specified either as
``scopename/groupname``, for scope-level groups, or as
``scopename/workspacename/groupname``, for workspace-level groups.
(:issue:`1284`)
- Gracefully handle ``emit_metric`` HTTP failures.
- Validate collection names and categories on the creation endpoint.
Web UI
~~~~~~
Features
^^^^^^^^
- Link to deb archives from workspace detail view. (:issue:`1219`)
- Serve apt archives locally for development.
When ``DEBUG=True``, archives are served under ``/-/__archives__/`` so
that interlinking between the main web UI and the archive web UI works.
Also, starting a ``runserver`` on port ``8081`` makes it the serve the
equivalent of the ``deb.…`` subdomain, to have simpler URLs for setting up
apt
sources for testing.
Bug Fixes
^^^^^^^^^
- Avoid separately flattening each item when rendering a workflow list.
(:issue:`656`)
- DebDiffViewWorkRequestPlugin: shorten description. (:issue:`1177`)
- Fix rendering issues with large text/log files in Firefox (over 10,000 lines)
and improve loading performance in all browsers. (:issue:`1248`)
- :issue:`1260`, :issue:`1280`
- Add UI for workspace-specifc groups.
The UI was lagging behind after the introduction of workspace-specific group.
Now the group management URL structure is duplicated under the workspace URL
namespace, to manage a workspace's groups. (:issue:`1284`)
Client
~~~~~~
Features
^^^^^^^^
- Add ``debusine --version``. (:issue:`465`)
- Improve human readable output for ``workflow create``, ``work-request
create``, ``work-request list``.
Note that the default output of those commands changed: for machine readable
output, use ``--yaml``. (:issue:`1225`)
Bug Fixes
^^^^^^^^^
- Fix webui URLs in debusine client output. (:issue:`1222`)
Tasks
~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Drop support for Debian 8 (jessie) and Ubuntu 14.04 (trusty). (:issue:`985`)
Bug Fixes
^^^^^^^^^
- Run :task:`Piuparts` with the standard ``/etc/piuparts/scripts`` scripts.
(:issue:`1268`)
- :task:`APTMirror`: Only look for the target suite in the task's workspace.
Worker
~~~~~~
Features
^^^^^^^^
- Add ``debusine-worker --version``. (:issue:`465`)
- Cloud Workers: Pin debusine sources so that an older version wouldn't
accidentally be installed from ``stable`` (or similar), due to
network/repository issues. (:issue:`1286`)
Bug Fixes
^^^^^^^^^
- Worker Pool: Ignore tasks that completed before the current instance was
created, in idle time calculations. (:issue:`1203`)
Signing
~~~~~~~
Features
^^^^^^^^
- Improve database error handling for ``debusine-signing check`` and
``debusine-signing migrate``. (:issue:`226`)
General
~~~~~~~
Features
^^^^^^^^
- Port to Pydantic v2. (:issue:`1261`)
Bug Fixes
^^^^^^^^^
- Add support for Python 3.14. (:issue:`1277`)
.. _release-0.14.2:
debusine 0.14.2 (2026-01-06)
----------------------------
Server
~~~~~~
Features
^^^^^^^^
- Add a mechanism to allow Celery workers to emit metrics. (:issue:`1195`)
- Configure ``Acquire-By-Hash: yes`` in suites by default. (:issue:`1232`)
- :task:`CopyCollectionItems`: Log details of copies to an output file.
(:issue:`1236`)
Bug Fixes
^^^^^^^^^
- Repositories: Serve ``by-hash`` responses when multiple artifacts match the
hash. (:issue:`1239`)
- Adjust constraints so the ``delete_expired`` task isn't broken by cloud
workers. (:issue:`1240`)
Web UI
~~~~~~
Features
^^^^^^^^
- Add QA tab for :workflow:`debian_pipeline`. (:issue:`1214`)
Bug Fixes
^^^^^^^^^
- Further optimize filtering for workflows with failed work requests.
(:issue:`656`)
- Activate ``ManifestStaticFilesStorage`` to avoid UI glitches after upgrades.
(:issue:`881`)
- Return HTTP 403 in the case of an OpenID Connect validation error, rather
than logging an uncaught exception. (:issue:`1033`)
- Create our own dark-mode-aware theme for select2.
This should align select2-derived widgets to the rest of the site theme.
(:issue:`1202`)
- Text files: fix text layout.
Text and log files: selecting file contents no longer selects line numbers.
Log files: clicking an entry in the table of contents opens the section
and highlights its name. (:issue:`1227`)
Client
~~~~~~
Features
^^^^^^^^
- dput-ng configuration for debusine.debian.net: Automatically map any unknown
distribution to a workflow template named ``upload-to-{distribution}``. This
indirectly enables support for bookworm-backports and trixie-backports.
(:issue:`883`)
- dput-ng plugin: Support a ``@DISTRIBUTION@`` special value in
``workflow_data`` that gets replaced by the name of the target distribution.
Bug Fixes
^^^^^^^^^
- Allow the client to upload artifacts to a non-default scope. (:issue:`1244`)
Workflows
~~~~~~~~~
Bug Fixes
^^^^^^^^^
- :workflow:`qa`: Pass arch-indep ``binary_artifact`` to all children, even
when ``all`` isn't one of the tested architectures. (:issue:`1157`)
- Support mixed :artifact:`debian:upload` artifacts as input to workflows.
(:issue:`1175`)
Tasks
~~~~~
Bug Fixes
^^^^^^^^^
- Reduce level of log message reporting that a task raised an exception to
``INFO``; the details are also logged in the task's output data, so this
doesn't need to be considered an error at the service level. (:issue:`1236`)
- :task:`GenerateSuiteIndexes`: Generate the correct pool paths for binary
packages named ``lib*`` in source packages without a ``lib`` prefix.
Worker
~~~~~~
Features
^^^^^^^^
- Support non-amd64 worker pools. (:issue:`1203`)
Bug Fixes
^^^^^^^^^
- Avoid aborting+retrying worker tasks when the worker dies, this causes a lot
of damage to parent workflows. (:issue:`1081`)
- Reassign running work requests when we clean up missing worker pool workers.
Deassign any pending work requests when we clean up / terminate worker pool
workers.
Fix the worker pool provisioner's idle-time query (that was constantly
crashing).
Fix a couple of completely incorrect queries in the provisioner.
(:issue:`1203`)
- Allow task input artifacts to be inherited from a workspace in another scope.
(:issue:`1246`)
General
~~~~~~~
Bug Fixes
^^^^^^^^^
- Accept pytest 9 instead of pytest-subtests.
Miscellaneous
^^^^^^^^^^^^^
- :issue:`501`, :issue:`673`
.. _release-0.14.1:
debusine 0.14.1 (2025-12-15)
----------------------------
Server
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Rename ``CreateExperimentWorkspace`` to :task:`CreateChildWorkspace`, and
make it slightly more configurable. (:issue:`964`)
Features
^^^^^^^^
- :task:`CreateChildWorkspace`: Allow ``-`` in experiment names. (:issue:`964`)
- Exclude internal workflow collections from collection lists in server API by
default.
This removes clutter from the output of ``debusine collection list`` and
makes
it significantly faster. (:issue:`1132`)
- Increment ``debusine_signon_oidc_callbacks`` counter on OpenID authentication
callbacks. (:issue:`1194`)
- Add ``debusine-admin worker_pool edit`` to adjust worker pool configuration
interactively.
Bug Fixes
^^^^^^^^^
- Optimize filtering for workflows with failed work requests. (:issue:`656`)
- :collection:`debian:suite`: Forbid versions of source or binary package from
going backwards by default. (:issue:`1137`)
- Treat archives as suites' parents without needing an explicit collection item
relationship.
Web UI
~~~~~~
Features
^^^^^^^^
- Add view to create a collection. (:issue:`787`)
- Add views to configure and delete collections. (:issue:`788`)
- Added a tab with regression analysis summaries to QA workflow UI.
(:issue:`912`)
- Wrap long lines in log files.
Improve rendering of line numbers in log files. (:issue:`1147`)
Bug Fixes
^^^^^^^^^
- Fix missing breadcrumbs for workflow templates.
- Fix scrolling to an anchor: add padding on the top so the anchor is visible.
Client
~~~~~~
Features
^^^^^^^^
- CLI: allow specifying a collection as name@category. (:issue:`1169`)
- Add ``debusine archive suite create`` command. (:issue:`1184`)
- Use server-provided links in CLI; requires servers to run at least Debusine
0.13.0.
Workflows
~~~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Rename ``create_experiment_workspace`` to :workflow:`create_child_workspace`,
and make it slightly more configurable.
Only allow scope owners to create or update
:workflow:`create_child_workspace` workflows. (:issue:`964`)
Features
^^^^^^^^
- :workflow:`debian_pipeline`, :workflow:`lintian`, :workflow:`qa`,
:workflow:`sbuild`: Show input artifacts in web UI. (:issue:`885`)
- :workflow:`create_child_workspace`: Allow ``-`` in experiment names.
(:issue:`964`)
- :workflow:`qa`: Add top-level summary information to regression analysis.
(:issue:`1164`)
Worker
~~~~~~
Features
^^^^^^^^
- Worker Pools: Periodically check that all workers are still running, and
clean up after any that have died. (:issue:`731`)
Bug Fixes
^^^^^^^^^
- Fix IPv6 on AWS EC2 Worker pool workers.
Enable IMDSv2 (token-authenticated metadata endpoints) AWS EC2 Worker pool
workers.
Cloud Workers: Remove the default ``incusbr0``.
Cloud Workers: Permit Incus containers to access DHCP and DNS from the host.
Cloud Workers: Defer starting ``debusine-worker`` until everything is
configured. (:issue:`1203`)
- Amazon EC2 Worker Pools: Ignore ``InsufficientInstanceCapacity``, which seems
to be non-fatal.
- Worker Pool: Configure a hostname for workers via ``cloud-init``.
- Worker Pools: Update the debusine ``daily-builds`` source to the ``trixie``
suite.
General
~~~~~~~
Bug Fixes
^^^^^^^^^
- Respect the ``enabled`` flag in the worker pool provisioner.
.. _release-0.14.0:
debusine 0.14.0 (2025-12-03)
----------------------------
The 0.14.x series requires Python >= 3.13 (available in Debian 13 "Trixie").
The database migration to 0.14.0 will update many work requests'
configuration, potentially breaking in-progress workflows.
We recommend letting all currently executing workflows complete before
upgrading to 0.14.0.
Server
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Remove the old workflow template creation endpoint (used by debusine-client <
0.13). (:issue:`869`)
Features
^^^^^^^^
- Port to Psycopg 3.
- Record websocket metrics.
Bug Fixes
^^^^^^^^^
- Fix django-prometheus metrics following our switch to gunicorn.
(:issue:`1098`)
Web UI
~~~~~~
Features
^^^^^^^^
- Introduced breadcrumbs in the UI design. (:issue:`444`)
* Added breadcrumbs bar below the navbar
* Breadcrumbs remain visible while scrolling
* Scope has been moved from the navbar to the breadcrumbs
* Moved "Work requests" link from the navbar to the plumbing menu
- Add a button to copy ``debusine provide-signature`` commands to the
clipboard. (:issue:`1018`)
Bug Fixes
^^^^^^^^^
- Ignore content negotiation for archive views that return files.
(:issue:`1173`)
- Return an error message instead of a 500 when displaying artifact details for
incomplete artifacts. (:issue:`1189`)
Client
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Removed the deprecated ``create-workflow-template`` command. Use
``workflow-template create`` instead.
Workflow Template creation now accept ``static_parameters`` and
``runtime_parameters`` during creation and editing. These are passed as a
single YAML data block. (:issue:`869`)
- Stop generating :artifact:`debian:binary-packages` artifacts in ``debusine
artifact import-debian``. (:issue:`1172`)
Features
^^^^^^^^
- Implemented ``debusine workflow-template edit``. (:issue:`767`)
- Add ``debusine collection delete`` command.
The command will return an error if the collection is not empty, including if
it only contains removed items: use ``--force`` to remove non-empty
collections.
``debusine collection show`` will now show statistics about items in the
collection.
Workflows
~~~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Workflows templates now allow the creator to specify which parameters may be
specified when starting a workflow, through the new ``runtime_parameters``
field. This replaces the previous model, where workflow template data
overrode any provided workflow data. (:issue:`869`)
* The ``task_data`` field of Workflow Templates is renamed to
``static_parameters``.
* Existing workflow templates have been migrated to retain the same
restrictions as before. They will need manual maintenance in future,
as new fields are added.
- Rename ``arch_all_host_architecture`` to ``arch_all_build_architecture`` in
several workflows. (:issue:`995`)
- :workflow:`debian_pipeline`: Rename ``publish_target`` parameter to
``suite``.
:workflow:`debian_pipeline`: If ``suite`` is set, automatically use it during
builds and tests. (:issue:`1122`)
Tasks
~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Rename ``host_architecture`` to ``build_architecture`` in several tasks.
(:issue:`995`)
- Stop generating :artifact:`debian:binary-packages` artifacts in
:task:`Sbuild`.
Stop accepting :artifact:`debian:binary-packages` artifacts in all tasks and
workflows. (:issue:`1172`)
Features
^^^^^^^^
- Add ``resolve_alternatives`` parameter to the ``PackageBuild`` generic task
(and therefore ``sbuild``). (:issue:`627`)
- ``extra_repositories`` has an additional format for referring to Debusine
repositories. (:issue:`1122`)
Bug Fixes
^^^^^^^^^
- Fix ``piuparts`` when working with pre-usr-merge environments.
(:issue:`1084`)
Worker
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Rename ``system:host_architecture`` to ``system:native_architecture`` in
worker metadata. (:issue:`995`)
Bug Fixes
^^^^^^^^^
- Avoid ``debsums`` errors causing ``piuparts`` failures when there is a
``dpkg`` security update in a suite.
General
~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Drop compatibility with Debian bookworm; Debusine now requires Python >=
3.13.
.. _release-0.13.1:
0.13.1 (2025-11-17)
-------------------
* Minor update to resolve autopkgtest failures in Debian:
* Fix the debian-pipeline workflow autopkgtest on non-amd64.
* Fix an artifact sorting bug in the server workflow.
* Fix a regression in dark-mode.
* Depend on iproute2 for integration-tests-task-signing.
.. _release-0.13.0:
0.13.0 (2025-11-16)
-------------------
The 0.13.x series will be the final release that supports Debian 12
(Bookworm). Future versions will target Debian 13 (Trixie) and later.
Server
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Remove ``debian:suite-lintian`` collection and
``UpdateSuiteLintianCollection`` server task. (:issue:`911`)
Features
^^^^^^^^
- Report ``task_data`` validation failures back to the client. (:issue:`182`)
- Add ``completed_by`` field to work requests, used for ``WAIT`` tasks that
were explicitly completed by a user action. (:issue:`573`)
- Add :task:`Confirm` task. (:issue:`573`)
- Log warnings on invalid work request state transitions, in preparation for
raising exceptions instead. (:issue:`1094`)
- Add HTTP request/response metrics using `django-prometheus
`__. (:issue:`1098`)
- Improve error logging and messages for orchestrator failures. (:issue:`1127`)
- Add ``allow_dependency_failures`` workflow data parameter. (:issue:`1133`)
- Add a ``links`` section to API response records.
A ``links`` section, mapping link names to URLs or a dict with link details,
has been added to serialized responses for work requests, artifacts, workflow
templates and collections. Links records include both API links and links to
the web UI (link names prefixed with ``webui_``)
This allows the Debusine client to show convenience links to the web UI,
without reimplementing link construction client-side. This also makes the
debusine client resilient should web UI URLs change.
Old clients ignore the extra field while parsing responses from the server.
This is an attempt to move towards the `HATEOAS
`_ pattern. (:issue:`1134`)
- Switch to ``uvicorn`` (via ``gunicorn``) as our ASGI runner. (:issue:`1148`)
Bug Fixes
^^^^^^^^^
- Lock entire workflows when updating any work request in them, to avoid
deadlocks. (:issue:`1050`)
- :task:`CreateExperimentWorkspace ` now creates the
usual :ref:`singleton collections ` in the new
workspace. (:issue:`1114`)
- Fix possible deadlock when updating expensive properties of workflows.
(:issue:`1131`)
- Only consider workers as connected if they have sent their dynamic metadata
recently. (:issue:`1152`)
- Stop marking workers as disconnected on server startup. (:issue:`1152`)
- :task:`GenerateSuiteIndexes`: Set correct ``Content-Type`` for ``Release``
files.
Web UI
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Changed the base template structures, moving the title into its own block.
(:issue:`444`)
- Change footer template structure, reorganizing content and adding ``id``\ s.
Features
^^^^^^^^
- Work request view detail: hide "Output" tab for workflows. (:issue:`929`)
- Export :collection:`debian:suite` collections in archive access views even if
they are not in a :collection:`debian:archive`, unless they have ``exported``
set to False. (:issue:`1101`)
- Add archive access views to show some useful information for archives and
suites. (:issue:`1115`)
- Web UI now has a dark mode.
By default, light/dark mode is selected based on browser preferences, and
there
are buttons in the footer to pick between light, dark, and autodetect.
The footer had to be refactored to fit the new buttons, which should also
improve flexibility of customization. Please see the new structure of
``footer.html`` if you are customizing the footer in your instance.
(:issue:`1158`)
- Show output data from workflows if available.
Bug Fixes
^^^^^^^^^
- DebDiff artifacts: fix server errors if missing relations, binary changes in
source artifacts, link correctly to the lines. (:issue:`1083`)
- Task configuration inspector: show the matching workspace for the collections
shown. (:issue:`1141`)
- Significantly improve the performance of some views, including the homepage.
(:issue:`1150`)
- Serve ``Release``, ``Release.gpg`` and ``InRelease`` files as text.
Client
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- CLI: uniform behaviour of ``--workspace``.
Arguments that require a workspace now take a ``--workspace`` argument,
defaulting to:
* ``Playground`` for ``localhost``
* ``developers`` for ``debusine.debian.net``
* ``sandbox`` for ``debusine.freexian.com``
* ``System`` for all other cases
``debusine setup`` can now be used to configure a different default workspace
for each server.
This introduces a uniform handling, but adds some subtle differences in
behaviour:
* ``debusine asset create``: ``--workspace`` changes from mandatory to optional.
* ``debusine workspace inheritance`` now takes a ``--workspace`` argument,
deprecating its positional version, which becomes optional.
The positional argument for a workspace, if given, overrides the
``--workspace`` one (or its default).
* ``debusine task-config pull`` does not require ``--workspace`` to be
set for a first checkout, as it uses the configured default server.
However, if a checkout exists and ``--workspace`` is provided, it
raises an error if the argument provided does not match the
workspace in the checkout metadata.
* In all other cases when ``--workspace`` was optional, the server assigned a
default value taken from the settings on the remote site. Now the client
assigns a default value, as described above.
Features
^^^^^^^^
- CLI: added ``debusine collection create``. (:issue:`787`)
- Implemented ``debusine collection show`` and ``debusine collection manage``.
(:issue:`788`)
- Implemented ``debusine workflow-template list``, ``show`` and ``manage``.
(:issue:`871`)
- Refactored command line interface to use a ``debusine object verb`` syntax.
Previous commands are hidden from command line help but still work: see for
example ``debusine show-artifact --help``.
This is the full list of deprecation and changes:
.. table:: Command line redesign
:widths: auto
============================= =============================
Deprecated syntax New syntax
============================= =============================
``create-artifact`` ``artifact create``
``show-artifact`` ``artifact show``
``show-artifact-relations`` ``artifact show-relations``
``import-debian-artifact`` ``artifact import-debian``
``download-artifact`` ``artifact download``
``create-asset`` ``asset create``
``list-assets`` ``asset list``
``task-config-pull`` ``task-config pull``
``task-config-push`` ``task-config push``
``list-work-requests`` ``work-request list``
``show-work-request`` ``work-request show``
``create-work-request`` ``work-request create``
``manage-work-request`` ``work-request manage``
``retry-work-request`` ``work-request retry``
``abort-work-request`` ``work-request abort``
``provide-signature`` ``work-request sign``
``on-work-request-completed`` ``work-request on-completed``
``create-workflow-template`` ``workflow-template create``
``create-workflow`` ``workflow start``
``workspace-inheritance`` ``workspace inheritance``
============================= =============================
Note that, to have a consistent ordering across all commands, ``debusine
create-workflow-template`` changed from ``debusine create-workflow-template
template_name task_name`` to ``debusine workflow-template create task_name
template_name`` (inverting ``task_name`` and ``template_name``).
(:issue:`1064`)
- Allow using ``DEBUSINE_SERVER_NAME`` instead of ``--server``.
For convenience in scripts, ``debusine`` now supports the
``DEBUSINE_SERVER_NAME`` environment variable as an alternative to specifying
``--server``. When both are used, ``--server`` has priority. (:issue:`1119`)
- CLI: cleanup behaviour of ``--data``.
The following commands read from stdin when ``--data`` is not specified:
* ``work-request create``
* ``workflow start``
* ``collection create`` (it used to assume ``{}`` instead)
* ``workflow-template create`` (it used to assume ``{}`` instead)
* ``asset create`` (it used to require the ``--data`` argument, now it
defaults to ``--data=-`` when not specified)
The following commands assume ``{}`` when ``--data`` is not specified:
* ``artifact create``
* ``collection manage``
* ``workflow-template manage``
When reading data from stdin, and both stdin and stdout are a TTY, to avoid
giving the impression that the command has halted ``debusine`` now prints a
colorful prompt explaining that it's waiting for YAML on stdin.
(:issue:`1129`)
- CLI: Added ``--yaml`` option to get machine readable YAML output.
Without ``--yaml``, ``debusine`` will, at least in the commands that
have been ported to it, show colorful output formatted for humans,
whether the output is a tty or not (so that piping to pagers still
work).
Well known error types now are also shown formatted and colored.
(:issue:`1138`)
- Implemented ``debusine collection list``, with tabular output and clickable
links when not run on a pipe.
Bug Fixes
^^^^^^^^^
- ``workspace-inheritance``: if the inheritance chain is not valid (e.g.
workspace does not exist): user can edit the chain again. (:issue:`1060`)
Workflows
~~~~~~~~~
Features
^^^^^^^^
- :workflow:`debian_pipeline`: Implement ``enable_confirmation`` parameter.
(:issue:`573`)
- :workflow:`piuparts`: When preparing reference QA results, store the new
:artifact:`debian:piuparts` artifact rather than bare data items.
(:issue:`907`)
- :workflow:`piuparts`, :workflow:`qa`,
:workflow:`reverse_dependencies_autopkgtest`: Implement
``enable_regression_tracking`` parameter to perform regression analysis
against reference results. (:issue:`908`)
- :workflow:`qa`: Implement ``fail_on`` parameter. (:issue:`909`)
- :workflow:`debian_pipeline`: Implement ``qa_failure_policy``,
``regression_tracking_qa_results``, and ``enable_regression_tracking``
parameters. (:issue:`910`)
- Generate indexes for :collection:`debian:suite` collections even if they are
not in a :collection:`debian:archive`, unless they have ``exported`` set to
False. (:issue:`1101`)
Bug Fixes
^^^^^^^^^
- Don't propagate workflow orchestrator errors to their parent workflow; just
log them (in the system log and in the work request's output data) and carry
on. (:issue:`1126`)
- Don't prematurely complete workflows during orchestration if one of their
sub-workflows is empty. (:issue:`1130`)
- Don't abort ``regression-analysis`` callbacks due to failures.
(:issue:`1133`)
Tasks
~~~~~
Features
^^^^^^^^
- Unify task labels using subject/parameter_summary. (:issue:`687`)
Worker
~~~~~~
Bug Fixes
^^^^^^^^^
- Cleanly shut down both the signing and external workers. (:issue:`1082`)
- Sanitize the environment of command execution under ``unshare``.
Set ``PATH`` under ``unshare`` to support pre-usr-merge environments.
(:issue:`1084`)
- Recommend ``iproute2`` in the ``debusine-worker`` package and require it for
the ``unshare`` backend, as ``sbuild`` needs it. (:issue:`1092`)
Signing
~~~~~~~
Bug Fixes
^^^^^^^^^
- :task:`SignRepositoryIndex`: Set correct ``Content-Type`` for ``Release.gpg``
and ``InRelease`` files.
General
~~~~~~~
Documentation
^^^^^^^^^^^^^
- Clarify terminology around workflows in explanations and tutorials.
(:issue:`868`)
Miscellaneous
^^^^^^^^^^^^^
- :issue:`502`
.. _release-0.12.2:
0.12.2 (2025-09-22)
-------------------
Server
~~~~~~
Features
^^^^^^^^
- :task:`APTMirror`: Reuse source and binary packages from other suites in the
same archive. (:issue:`392`)
- Add a new ``REPOSITORY_SIGNER`` role on signing keys, which is currently
implied by the ``OWNER`` role on workspaces using the key. (:issue:`756`)
- Added an API to change the name or configuration of a collection.
(:issue:`788`)
Bug Fixes
^^^^^^^^^
- ``debusine-admin vacuum_storage`` does not report missing files added during
the vacuum process. (:issue:`933`)
- Filter out more null labels in the open-metrics endpoint, fixing a 500.
(:issue:`1022`)
- Do not fail task configuration when deleted entries exist. (:issue:`1054`)
- Enable console-based logging for daphne to have better diagnosis information
in systemd's journal for debusine-server.service.
Documentation
^^^^^^^^^^^^^
- Improved OIDC documentation, fixing some mistakes.
- Provide basic documentation for configuration with alternative webservers.
Web UI
~~~~~~
Features
^^^^^^^^
- Integrate the new logo. (:issue:`593`)
- Wrap work request errors for readability. (:issue:`821`)
- Added web UI to edit a workspace inheritance chain. (:issue:`978`)
- Improve layout of toasts for error messages.
Bug Fixes
^^^^^^^^^
- Improve messages when configured or dynamic task data are missing.
(:issue:`1012`)
- Fix server error (HTTP 500) when browsing server tasks. (:issue:`1029`)
- Only show statistics of bare data in a collection view. (:issue:`1038`)
- Render empty files as text. (:issue:`1069`)
Client
~~~~~~
Features
^^^^^^^^
- Parse the scope in work request responses, when available (server >= 0.12).
(:issue:`1080`)
- Support uploading to ``trixie`` and ``trixie-security`` in the ``dput-ng``
profile.
Bug Fixes
^^^^^^^^^
- Improve error handling in ``debusine workspace-inheritance``. (:issue:`1057`)
Workflows
~~~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :workflow:`blhc`: Require ``vendor`` and ``codename`` parameters, used to
build the ``environment`` lookup for :task:`Blhc`. (:issue:`1052`)
Features
^^^^^^^^
- :workflow:`debian_pipeline`: Support publishing to a Debusine-managed
:collection:`debian:suite` collection. (:issue:`577`)
- :workflow:`package_publish`: Default component/section/priority to the values
in the packages being published. (:issue:`577`)
- Improve workflow labels. (:issue:`687`)
- :workflow:`update_suites`: Implement signing of repository indexes, using a
new :workflow:`update_suite` sub-workflow. (:issue:`756`)
- :workflow:`package_publish`: Update repository indexes after the items have
been copied. (:issue:`758`)
- :workflow:`blhc`, :workflow:`lintian`: Implement
``enable_regression_tracking`` parameter to perform regression analysis
against reference results. (:issue:`908`)
- :workflow:`blhc`: Support updating a :collection:`debian:qa-results`
collection with reference QA results. (:issue:`1047`)
- :workflow:`autopkgtest`, :workflow:`blhc`, :workflow:`debdiff`,
:workflow:`debian_pipeline`, :workflow:`lintian`,
:workflow:`make_signed_source`: Sort child work requests by architecture when
populating them, where possible. (:issue:`1072`)
Bug Fixes
^^^^^^^^^
- :workflow:`debdiff`: Include new architecture ``all`` artifacts in the
parameters to :task:`DebDiff`. (:issue:`1053`)
Tasks
~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :task:`Blhc`: Require ``environment`` and ``host_architecture`` parameters.
(:issue:`1052`)
Features
^^^^^^^^
- :task:`Piuparts`: Generate :artifact:`debian:piuparts` artifacts.
(:issue:`805`)
Bug Fixes
^^^^^^^^^
- :task:`MakeSourcePackageUpload`: Ensure that ``dpkg-dev`` is installed in the
environment. (:issue:`1036`)
- :task:`Blhc`: Only use the ``--debian`` option if we have a new enough
``blhc`` version. (:issue:`1067`)
Miscellaneous
^^^^^^^^^^^^^
- :issue:`1055`
Worker
~~~~~~
Features
^^^^^^^^
- Add a mechanism for sysadmins to execute scripts after worker task
completion. (:issue:`1070`)
Bug Fixes
^^^^^^^^^
- Retry requests for new work from the server, if they fail. (:issue:`1030`)
- Workaround an `sbuild bug `__ with its
autopkgtest backend. (:issue:`1056`)
- Allow executing tasks in a non-default scope (requires server >= 0.12).
(:issue:`1080`)
Signing
~~~~~~~
Features
^^^^^^^^
- Restrict the ``openpgp`` key purpose to signing Debian upload ``.changes``
files.
Add a new key purpose ``openpgp-repository`` for signing Debian repository
indexes using OpenPGP.
General
~~~~~~~
Documentation
^^^^^^^^^^^^^
- Update installation tutorial to be based on Debian 13 trixie.
.. _release-0.12.1:
0.12.1 (2025-08-21)
-------------------
Server
~~~~~~
Bug Fixes
^^^^^^^^^
- Don't allow multiple instances of the same root workflow's orchestrator to
run concurrently for different sub-workflows. (:issue:`1000`)
- Ignore SSO identities without an attached user in open-metrics endpoint,
fixing a 500. (:issue:`1022`)
Web UI
~~~~~~
Features
^^^^^^^^
- :workflow:`debian_pipeline` workflow: display input artifacts (source
package) and display source package in title. (:issue:`1005`)
Bug Fixes
^^^^^^^^^
- Display dynamic task data in the "Internals" tab of work requests if
available. (:issue:`1013`)
Client
~~~~~~
Features
^^^^^^^^
- Add ``debusine workspace-inheritance`` to configure a workspace's
inheritance. (:issue:`978`)
- Add shell completion via ``argcomplete``. (:issue:`1020`)
Bug Fixes
^^^^^^^^^
- Return more user-friendly errors if an incorrect file is specified to
``debusine provide-signature --local-file``. (:issue:`986`)
Workflows
~~~~~~~~~
Features
^^^^^^^^
- Add :workflow:`blhc` workflow and use it from :workflow:`debian_pipeline` and
:workflow:`qa` workflows. (:issue:`802`)
Tasks
~~~~~
Bug Fixes
^^^^^^^^^
- ``task_configuration`` in task data is now inherited from the parent
workflow. (:issue:`1012`)
- Default task_configuration to ``default@debusine:task-configuration``.
(:issue:`1012`)
Worker
~~~~~~
Bug Fixes
^^^^^^^^^
- Go back to exiting the worker if it fails to send a task result to the
server, so that systemd can restart it and allow it to reconnect.
(:issue:`937`)
General
~~~~~~~
Bug Fixes
^^^^^^^^^
- Weaken tests for invalid HTML, since lxml (via libxml2) no longer provides as
much HTML error checking. (:issue:`953`)
.. _release-0.12.0:
0.12.0 (2025-08-15)
-------------------
Server
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Remove ``debusine-admin create_workspace``, ``delete_workspace``,
``list_workspaces``, and ``manage_workspace`` commands, deprecated in favor
of ``debusine-admin workspace `` in 0.8.0.
Remove ``debusine-admin create_file_store``, deprecated in favor of
``debusine-admin file_store create`` in 0.9.0. (:issue:`886`)
- Moved OIDC validation to code. ``Provider.restrict`` is still supported, but
deprecated: use ``settings.SIGNON_CLASS`` instead, see the ``DebusineSignon``
class.
The ``add_to_group`` option of ``Provider`` now requires a dict mapping
GitLab
groups to Debusine groups, instead of a string, and a string value is
ignored.
Site-specific code is provided to replicate existing setups for
``debusine.debian.net`` and ``debusine.freexian.com``, and can be removed
once
both sites are migrated to using dict values for ``add_to_group``.
(:issue:`898`)
- Refactor server/signon to remove compatibility code.
This drops the previous ``debusine.DebusineSignon`` class for
``SIGNON_CLASS``
in favour of ``sites.DebianSignon``, only needed for ``debusine.debian.net``.
The default ``signon.Signon`` class is now sufficient for basic deployments,
including ``debusine.freexian.com``.
``restrict`` has been un-deprecated and is now honored, so that deployments
like ``debusine.freexian.com`` can restrict logins to given GitLab groups
without a ``SIGNON_CLASS``.
No migration strategy is provided: this requires a flag day for
``debusine.debian.net`` and ``debusine.freexian.com``, as they used the
``DebusineSignon`` class. There should be no breaking changes for other
deployments introduced with this change. (:issue:`898`)
- Changed the location for local templates in the packaged defaults.
Additional local templates were loaded from
``/var/lib/debusine/server/templates``. This is now changed to
``/etc/debusine/server/templates``, which is the correct place for local
customizations. (:issue:`947`)
- Squashed database migrations from before 0.11.0. People with older Debusine
server installations must upgrade to 0.11.* before upgrading to this version.
(:issue:`975`)
- Rename ``debusine-admin manage_worker`` command to ``debusine-admin worker``.
The ``--worker-type`` option, if given, must now come after the subcommand
name (``enable`` or ``disable``). The old name is still present, but is
deprecated.
Rename ``debusine-admin edit_worker_metadata`` command to ``debusine-admin
worker edit_metadata``. The old name is still present, but is deprecated.
Rename ``debusine-admin list_workers`` command to ``debusine-admin worker
list``. The old name is still present, but is deprecated.
Features
^^^^^^^^
- Store content-type of files as sent by the client. (:issue:`324`)
- Implement :collection:`debian:archive` collection. (:issue:`329`)
- Add an API endpoint to abort a work request or a workflow. (:issue:`384`)
- Add :artifact:`debian:repository-index` artifacts, and allow adding them to
:collection:`debian:suite` collections.
Add a :task:`GenerateSuiteIndexes` task to generate ``Packages``,
``Sources``, and ``Release`` files for a suite. (:issue:`755`)
- Add ``url`` and ``scope`` fields to responses from several API views.
(:issue:`766`)
- Add ``/api/1.0/open-metrics/`` that provides instance usage statistics.
(:issue:`888`)
- Allow ``Provider.options['add_to_group']`` to match ``nm.debian.org`` user
statuses when using an ``nm:`` prefix. (:issue:`898`)
- Add ``on_assignment`` :ref:`event `.
Add :ref:`action-skip-if-lookup-result-changed` action, and a new "skipped"
work request result. (:issue:`907`)
- Ensure that only one workflow callback can run at once for a given workflow.
(:issue:`908`)
- :task:`APTMirror`: Mirror repository indexes as well as packages.
(:issue:`945`)
- Add ``debusine-admin worker create`` to create a worker with an activation
token, as an alternative to letting it register itself and then enabling the
token separately.
- Extend ``binary`` and ``binary-version`` lookups on
:collection:`debian:archive` and :collection:`debian:suite` collections to
include ``Architecture: all`` packages for concrete architecture names.
- Improve reconstruction of lookups by preserving the original spelling of the
parent collection.
Bug Fixes
^^^^^^^^^
- ``debusine-admin delete_expired``: Optimize calculation of which artifacts
must be kept. (:issue:`473`)
- Record errors from assigning work requests to workers in
``WorkRequest.output_data``. (:issue:`589`)
- Optimize ``Workspace.get_collection``, used by most lookups. (:issue:`786`)
- Fix crashes in ``debusine-admin delete_expired`` and ``debusine-admin
vacuum_storage`` when trying to clean up expired or old incomplete artifacts
respectively.
Make ``debusine-admin delete_expired`` delete files from stores that aren't
present in any artifact, even if the artifacts they used to be in weren't
deleted in this ``delete_expired`` run. (:issue:`891`)
- Fix a race when telling the client which of a new artifact's files it needs
to upload; previously this sometimes resulted in incomplete artifacts when
two artifacts with overlapping files were created at nearly the same time.
Forbid creating relations with incomplete artifacts. (:issue:`930`)
- Fix crash in ``debusine-admin delete_expired`` when trying to clean up
expired workspaces. (:issue:`936`)
- When creating worker, server, or sub-workflow work requests in workflows,
make them inherit the effective priority of their parent as their base
priority. (:issue:`973`)
- Work around S3 incompatibility between Hetzner and boto3 >= 1.36.0.
Web UI
~~~~~~
Features
^^^^^^^^
- Display files based on the content-type sent by the client, restricted to a
set of safe content-types. (:issue:`324`)
- Add web UI to abort a work request or a workflow. (:issue:`384`)
- Add a separate virtual host with archive access views. (:issue:`757`)
- Make it easier for local admins to customize the homepage and footer.
(:issue:`850`)
- Allow Debian Maintainers to log in via Salsa OIDC authentication.
(:issue:`898`)
- Add view to test and debug how task configuration is applied. (:issue:`989`)
- Add links to workflow documentation from the web UI.
Bug Fixes
^^^^^^^^^
- Exclude Celery worker from list of workers. (:issue:`559`)
- Add ``--server FQDN/SCOPE`` option to suggested ``debusine
provide-signature`` command (requires the client to be at least version
0.11.3). (:issue:`749`)
- Make "workspace not found" errors slightly more generic, since they can also
cover authorization failures. (:issue:`778`)
- Optimize detail view for large workflows. (:issue:`786`)
- Return 404 when trying to view a nonexistent workflow template, rather than
logging a noisy traceback. (:issue:`875`)
- Fix display of collection retention periods. (:issue:`890`)
- Support byte-range requests that specify only one of the first and last byte
positions in the range. (:issue:`956`)
Client
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Print web URLs to objects where possible. This requires a server with at
least commit `30dd738393e46f2f2bc0d09aacdfd53297dbba95
`__.
(:issue:`766`)
Features
^^^^^^^^
- Guess content-type of files when uploading them to the server. (:issue:`324`)
- Add ``debusine abort-work-request`` command. (:issue:`384`)
- Allow selecting a server using ``--server FQDN/SCOPE``, as an alternative to
needing to know the ``[server:...]`` section name in the configuration file.
(:issue:`749`)
- Added ``debusine task-config-pull`` and ``task-config-push``, to manage
:collection:`debusine:task-configuration` collections. (:issue:`789`)
- A local copy of the ``.changes`` file can be passed to ``provide-signature``
for signing and uploading. (:issue:`816`)
- Accept extra command-line arguments to ``debusine
on-work-request-completed``. (:issue:`966`)
Workflows
~~~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :workflow:`lintian`, :workflow:`qa`, :workflow:`debian_pipeline`: Change
default value of ``fail_on_severity``/``lintian_fail_on_severity`` to
``error``. (:issue:`804`)
- Rename the ``suite_collection`` key of the
:workflow:`reverse_dependencies_autopkgtest` workflow and the
``reverse_dependencies_autopkgtest_suite`` key of the :workflow:`qa` and
:workflow:`debian_pipeline` workflows to ``qa_suite``.
:workflow:`piuparts`: Add ``source_artifact`` as a required task data key.
(:issue:`907`)
Features
^^^^^^^^
- Add :workflow:`debdiff` workflow and integrate it into
:workflow:`debian_pipeline`. (:issue:`607`)
- Add :workflow:`update_suites` workflow. (:issue:`755`)
- In the :workflow:`sbuild` workflow, configure the same ASPCUD criteria as
Debian's buildd would use, when targeting ``experimental``. (:issue:`829`)
- :workflow:`update_environments`: Accept ``null`` as an element in a
``targets.variants`` list; this may be useful to indicate that an environment
may be used as a generic environment for any task while also being the most
suitable environment for particular variants. (:issue:`899`)
- :workflow:`reverse_dependencies_autopkgtest`: Document support for passing
:artifact:`debian:binary-package` artifacts in ``binary_artifacts`` and
``context_artifacts``.
:workflow:`qa`: Document support for passing
:artifact:`debian:binary-package` artifacts in ``binary_artifacts``.
(:issue:`906`)
- :workflow:`autopkgtest`, :workflow:`lintian`, :workflow:`piuparts`,
:workflow:`qa`, :workflow:`reverse_dependencies_autopkgtest`: Support
updating a :collection:`debian:qa-results` collection with reference QA
results. (:issue:`907`)
- :workflow:`autopkgtest`: Implement ``enable_regression_tracking`` parameter
to perform regression analysis against reference results. (:issue:`908`)
- Add split source/binary upload signing, where the developer signs the source
package and Debusine signs the binaries. (:issue:`944`)
Bug Fixes
^^^^^^^^^
- Make the :workflow:`package_upload` workflow idempotent. (:issue:`800`)
- :workflow:`lintian`: Constrain child work requests to run on an architecture
matching the binaries. (:issue:`866`)
- :workflow:`lintian`: Only produce source and binary-all analysis artifacts
once.
:workflow:`lintian`: If ``binary_artifacts`` is empty, create a single work
request to run ``lintian`` on the source package. (:issue:`908`)
- :workflow:`package_upload`: Avoid confusion between the output of different
:task:`MergeUploads` tasks. (:issue:`914`)
- :workflow:`reverse_dependencies_autopkgtest`: Give child workflows a
hardcoded priority of -5 relative to their parent workflow, for now.
(:issue:`973`)
- :workflow:`package_upload`: Constrain :task:`MakeSourcePackageUpload` to run
on a particular architecture. (:issue:`990`)
Tasks
~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :task:`Lintian`: Change default value of ``fail_on_severity`` to ``error``.
(:issue:`804`)
- If tasks are given an ``environment`` without a ``variant`` filter,
automatically try ``variant={task_name}`` followed by ``variant=``. This may
require changes to your ``update_environments`` workflows to ensure that a
generic environment with no variant is always available. (:issue:`899`)
Features
^^^^^^^^
- Display input artifacts for tasks :task:`AssembleSignedSource`,
:task:`Autopkgtest`, :task:`Blhc`, :task:`CopyCollectionItems`,
:task:`ExtractForSigning`, :task:`Lintian`, :task:`MakeSourcePackageUpload`,
:task:`MergeUploads`, Noop, :task:`PackageUpload`, :task:`Piuparts`,
:task:`SystemBootstrap`, and :task:`SystemImageBuild`. (:issue:`549`)
- :task:`Sbuild`: Add ``build_dep_resolver`` and ``aspcud_criteria`` options.
(:issue:`829`)
- Require a compatible piuparts version to be available in the environment for
the :task:`Piuparts` task, when running in a container. (:issue:`867`)
- :task:`Autopkgtest`: Document support for passing
:artifact:`debian:binary-package` artifacts in ``input.binary_artifacts`` and
``input.context_artifacts``.
:task:`Piuparts`: Support passing :artifact:`debian:binary-package` artifacts
in ``input.binary_artifacts``. (:issue:`906`)
- :task:`Lintian`: Add ``architecture`` field to :artifact:`debian:lintian`
artifact. (:issue:`908`)
- :task:`DebDiff`: Speed up this task significantly by avoiding installing most
of the ``Recommends`` of the ``devscripts`` package.
Bug Fixes
^^^^^^^^^
- Fix DNS resolution during ``customization_script`` execution in
:task:`SimpleSystemImageBuild` image builds. (:issue:`664`)
- :task:`Piuparts`: Process base tarball in Python rather than using
``mmtarfilter``, which wasn't available until Debian 10 (buster).
(:issue:`867`)
- Ensure that a ``/var/lib/dpkg/available`` file exists when running the
:task:`Piuparts` task. (:issue:`874`)
- :task:`Lintian`: Fix incorrect parsing of tag explanations for Debian
bullseye. (:issue:`921`)
- :task:`MergeUploads`: Fix ineffective overlapping-files check when multiple
input uploads share the same ``.changes`` file name. (:issue:`954`)
- Fix an ``AssertionError`` in the :task:`Piuparts` task, when using
:artifact:`debian:binary-packages` as input.
- Install ``passwd`` if we need ``useradd`` to create a non-root user inside
task executors.
Signing
~~~~~~~
Features
^^^^^^^^
- Add :task:`SignRepositoryIndex` task. (:issue:`756`)
General
~~~~~~~
Features
^^^^^^^^
- Add ``components`` attribute to :artifact:`debian:system-tarball` and
:artifact:`debian:system-image` artifacts. (:issue:`829`)
- Run test suite under ``pytest``.
.. _release-0.11.3:
0.11.3 (2025-07-08)
-------------------
Client
~~~~~~
Features
^^^^^^^^
- A local copy of the ``.changes`` file can be passed to ``provide-signature``
for signing and uploading. (:issue:`816`)
.. _release-0.11.2:
0.11.2 (2025-07-03)
-------------------
Client
~~~~~~
Features
^^^^^^^^
- Allow selecting a server using ``--server FQDN/SCOPE``, as an alternative to
needing to know the ``[server:...]`` section name in the configuration file.
(:issue:`749`)
.. _release-0.11.1:
0.11.1 (2025-05-04)
-------------------
Server
~~~~~~
Bug Fixes
^^^^^^^^^
- Set ``Vary: Cookie, Token`` on all HTTP responses. (:issue:`761`)
- Return multiple lookup results in a predictable order, to make it easier for
workflows to be idempotent. (:issue:`796`)
- Fix regression in ``update_workflows`` Celery task.
Web UI
~~~~~~
Features
^^^^^^^^
- Add a :artifact:`debdiff ` artifact view. (:issue:`714`)
- Added list and detail views for WorkerPool. (:issue:`733`)
- Add number of files in the "Files" tab of the artifact view.
- Redesigned table sorting and header rendering.
Bug Fixes
^^^^^^^^^
- Redesigned table filtering. (:issue:`475`)
- Search collection page: fix "str failed to render" error in table headers.
(:issue:`799`)
- :task:`Autopkgtest`: Render extra repositories as deb822 sources.
(:issue:`828`)
- Change the default tab in the artifact view to "Files". (:issue:`848`)
- :task:`Autopkgtest`: Fix the "Distribution" field.
Miscellaneous
^^^^^^^^^^^^^
- :issue:`420`, :issue:`814`
Client
~~~~~~
Features
^^^^^^^^
- ``debusine setup``: Manage the default server setting. (:issue:`780`)
Bug Fixes
^^^^^^^^^
- Wrap Debusine errors so that they're shown cleanly by ``dput-ng``.
(:issue:`827`)
- Improve logging while uploading individual files to artifacts.
(:issue:`839`)
- Fix handling of responses without ``Content-Type``.
Workflows
~~~~~~~~~
Features
^^^^^^^^
- Allow overriding the ``environment`` in the :workflow:`piuparts` workflow.
Allow overriding the ``piuparts_environment`` in the :workflow:`qa` and
:workflow:`debian_pipeline` workflows. (:issue:`638`)
Bug Fixes
^^^^^^^^^
- In the :workflow:`autopkgtest`, :workflow:`piuparts` and
:workflow:`sbuild` workflows, extend children's ``extra_repositories``
with overlay repositories (e.g. ``experimental``) if ``codename`` is a
known overlay. (:issue:`780`)
- :workflow:`make_signed_source`: Disambiguate handling of multiple signing
templates for a single architecture.
:workflow:`make_signed_source`: Provide :artifact:`debian:upload`
artifacts as ``signed-source-*`` outputs, not
:artifact:`debian:source-package`.
:workflow:`debian_pipeline`: Upload signed source packages and their
binaries if necessary. (:issue:`796`)
- :workflow:`sbuild`: Improve workflow orchestration error when no
environments were found. (:issue:`830`)
Tasks
~~~~~
Bug Fixes
^^^^^^^^^
- :task:`Lintian`: Use ``lintian --print-version`` to extract the version.
(:issue:`609`)
- Fix a variety of bugs in :task:`SimpleSystemImageBuild` image builds, that
broke use with the ``incus-vm`` and ``qemu`` executors.
Only require the ``python3-minimal`` package to be installed for the ``qemu``
executor. (:issue:`664`)
- :task:`DebDiff`: Install ``diffstat`` package, to make the ``--diffstat``
flag work. (:issue:`748`)
- :task:`DebDiff`: Create ``relates-to`` relations to binary artifacts.
Worker
~~~~~~
Bug Fixes
^^^^^^^^^
- Incus LXC instances now wait for ``systemd-networkd`` to declare the network
online, before running autopkgtests. (:issue:`812`)
General
~~~~~~~
Documentation
^^^^^^^^^^^^^
- Add new project management practices page. (:issue:`784`)
- Update playground setup advice. (:issue:`797`)
- Update the introduction with more recent content.
.. _release-0.11.0:
0.11.0 (2025-04-15)
-------------------
Server
~~~~~~
Features
^^^^^^^^
- Delete artifacts that were created more than a day ago and are still
incomplete. (:issue:`667`)
Bug Fixes
^^^^^^^^^
- Don't create a workflow if its input validation fails. (:issue:`432`)
- Only retry work requests up to three times in a row due to worker failures.
(:issue:`477`)
- Rename ``debusine-server-artifacts-cleanup.{service,timer}`` to
``debusine-server-delete-expired.{service,timer}``, to better reflect the
function of those units. (:issue:`636`)
- :task:`APTMirror`: Ensure that only one mirroring task for a given
collection runs at once. (:issue:`694`)
- Don't set the Celery worker's concurrency to 1 in the database when starting
the scheduler or provisioner service. (:issue:`751`)
- Record errors from server tasks in ``WorkRequest.output_data``.
(:issue:`785`)
- Optimize computing the runtime status of large workflows.
Batch expensive workflow updates and defer them to a Celery task.
(:issue:`786`)
Documentation
^^^^^^^^^^^^^
- Update :ref:`configure-gitlab-sso` to account for a renamed module.
Web UI
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Remove FileInArtifact IDs from file links.
``//artifact//raw//``
becomes ``…//raw/``.
``//artifact//file//``
becomes ``…//file/``. (:issue:`621`)
Features
^^^^^^^^
- Better usability for the token generation UI: copy token to clipboard, show a
config snippet with the token. (:issue:`421`)
- Downloading an artifact without the archive= query parameter autodetects the
file type.
This means that a download will by default produce a tarball only if the
artifact contains more than one file. One can explicitly add
``?archive=tar.gz`` to force always returning a tarball. (:issue:`621`)
- Add view raw and download buttons to all file display widgets.
(:issue:`621`)
- Add an indication to ``/-/status/workers/`` showing each worker's pool.
Exclude inactive pool workers from ``/-/status/workers/``.
Add worker details page. (:issue:`733`)
Bug Fixes
^^^^^^^^^
- Work requests now show validation/configuration errors. (:issue:`651`)
Client
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Move Debusine-specific entries in ``dput-ng`` profiles from keys in a nested
``debusine`` object to top-level ``debusine_*`` keys, to make them easier to
override in local profiles.
Features
^^^^^^^^
- Add ``bullseye-security``, ``bookworm``, and ``bookworm-security`` entries to
the ``dput-ng`` profile for ``debusine.debian.net``.
- Show more useful information for 404 responses.
Bug Fixes
^^^^^^^^^
- Fix file uploads if ``api-url`` is configured with a trailing slash.
(:issue:`793`)
Workflows
~~~~~~~~~
Features
^^^^^^^^
- Restrict starting workflows to workspace contributors. (:issue:`625`)
Bug Fixes
^^^^^^^^^
- Record errors from ``Workflow.ensure_dynamic_data``. (:issue:`589`)
- Record orchestrator errors in ``WorkRequest.output_data``.
:workflow:`reverse_dependencies_autopkgtest`: Validate
``suite_collection`` parameter. (:issue:`651`)
- Use ``|`` instead of ``/`` as a collection item prefix separator in
workflows, since ``/`` is used to separate lookup string segments.
:workflow:`reverse_dependencies_autopkgtest`: Fix orchestration failure
for source package versions containing a colon.
Tasks
~~~~~
Features
^^^^^^^^
- :task:`MergeUploads`: Reimplement ``mergechanges`` in Python, for
efficiency and to avoid problems with buggy versions of ``mawk`` in some
old Debian releases. (:issue:`512`)
Bug Fixes
^^^^^^^^^
- :task:`ExtractForSigning`: Tolerate overlap between template and binary
artifacts. (:issue:`763`)
Signing
~~~~~~~
Documentation
^^^^^^^^^^^^^
- Document how to find generated signing keys. (:issue:`771`)
General
~~~~~~~
Documentation
^^^^^^^^^^^^^
- Rework :ref:`tutorial-getting-started` to create a workflow. (:issue:`764`)
Miscellaneous
^^^^^^^^^^^^^
- :issue:`743`
.. _release-0.10.0:
0.10.0 (2025-04-02)
-------------------
Server
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :task:`CreateExperimentWorkspace `: Redefine
``expiration_delay`` as a number of days rather than a duration.
- Use Debusine permissions for managing workflow templates. If you previously
granted yourself the ``add_workflowtemplate`` permission, see the
:ref:`updated tutorial ` for how to grant yourself
owner access to a workspace.
Features
^^^^^^^^
- Store worker pool statistics on task completion and worker shutdown.
Implement provisioning of pool workers. (:issue:`721`)
Bug Fixes
^^^^^^^^^
- Retry any running work requests when terminating pool workers.
(:issue:`731`)
- Limit status views of running external tasks (``/api/1.0/service-status/``
and ``/-/status/queue/``) to worker tasks. (:issue:`750`)
Documentation
^^^^^^^^^^^^^
- Document cloud worker pools and storage. (:issue:`735`)
Web UI
~~~~~~
Features
^^^^^^^^
- Add an audit log for group-related changes. (:issue:`734`)
Bug Fixes
^^^^^^^^^
- Fix link to workflows that need input.
Client
~~~~~~
Features
^^^^^^^^
- Add ``debusine setup`` for editing server configuration interactively.
(:issue:`711`)
- Add ``dput-ng`` integration. (:issue:`713`)
Bug Fixes
^^^^^^^^^
- ``debusine provide-signature``: Always pass ``--re-sign`` to ``debsign``.
(:issue:`713`)
Workflows
~~~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :workflow:`create_experiment_workspace `: Redefine
``expiration_delay`` as a number of days rather than a duration.
Bug Fixes
^^^^^^^^^
- :workflow:`make_signed_source`: Pass unsigned binary artifacts to
:workflow:`sbuild` sub-workflow via ``input.extra_binary_artifacts``.
(:issue:`727`)
- :workflow:`autopkgtest`, :workflow:`lintian`: Handle
:artifact:`debian:upload` source artifacts without original upstream
source. (:issue:`744`)
Documentation
^^^^^^^^^^^^^
- :workflow:`make_signed_source`: No longer document
:artifact:`debian:binary-packages` artifacts as being accepted in
``binary_artifacts``; they never worked. (:issue:`747`)
Tasks
~~~~~
Features
^^^^^^^^
- :task:`Sbuild`: Accept :artifact:`debian:upload` artifacts in
``input.extra_binary_artifacts``. (:issue:`727`)
Bug Fixes
^^^^^^^^^
- :task:`ExtractForSigning`: If given :artifact:`debian:upload` artifacts in
``binary_artifacts``, follow ``extends`` relationships to find the
underlying :artifact:`debian:binary-package` artifacts. (:issue:`747`)
- Handle errors while fetching task input more gracefully. (:issue:`763`)
.. _release-0.9.1:
0.9.1 (2025-03-24)
------------------
Server
~~~~~~
Features
^^^^^^^^
- Automatically add task runs to the appropriate
:collection:`debusine:task-history` collection. (:issue:`510`)
- Support Hetzner Object Storage.
Support worker pools on Hetzner Cloud. (:issue:`543`)
- Accept scope prefixes in ``debusine-admin create_collection --workspace`` and
``debusine-admin create_work_request --workspace``. (:issue:`608`)
- Implement ``populate`` and ``drain`` storage policies in ``debusine-admin
vacuum_storage``.
Implement store-level ``soft_max_size`` and ``max_size`` limits in
``debusine-admin vacuum_storage``. (:issue:`684`)
- :asset:`debusine:cloud-provider-account` asset: Add optional
``configuration.s3_endpoint_url`` for the ``aws`` provider type.
(:issue:`685`)
- Add roles to group memberships. (:issue:`697`)
- Add ``debusine-admin worker_pool`` command.
Add internal per-provider API for launching and terminating dynamic workers.
(:issue:`720`)
- Support worker pools on AWS EC2. (:issue:`722`)
Bug Fixes
^^^^^^^^^
- Add a ``DEBUSINE_DEFAULT_WORKSPACE`` Django setting, for use if the default
workspace has been renamed to something other than "System". (:issue:`571`)
- Only upload to write-only stores when applying the ``populate`` storage
policy in ``debusine-admin vacuum_storage``, not elsewhere. (:issue:`684`)
Documentation
^^^^^^^^^^^^^
- Document file stores. (:issue:`541`)
- Document :task:`CreateExperimentWorkspace ` task.
(:issue:`542`)
Web UI
~~~~~~
Features
^^^^^^^^
- Add web UI for group management: list groups, add/remove users, change user
roles. (:issue:`542`)
Bug Fixes
^^^^^^^^^
- Do not show "Plumbing" in the navigation bar if the view is not
workspace-aware. (:issue:`675`)
Workflows
~~~~~~~~~
Features
^^^^^^^^
- :workflow:`package_publish`: Copy :collection:`debusine:task-history`
items from the same workflow. (:issue:`510`)
Documentation
^^^^^^^^^^^^^
- Document :workflow:`create_experiment_workspace `.
(:issue:`542`)
- Document how to implement a new workflow. (:issue:`693`)
Tasks
~~~~~
Features
^^^^^^^^
- :task:`MmDebstrap`, :task:`SimpleSystemImageBuild`: Support reading
keyrings from ``/usr/local/share/keyrings/``. (:issue:`739`)
Worker
~~~~~~
Features
^^^^^^^^
- Add worker activation tokens, which can be used to auto-enable pool workers
when they start without needing to expose worker tokens in ``cloud-init``
user-data. (:issue:`732`)
General
~~~~~~~
Miscellaneous
^^^^^^^^^^^^^
- :issue:`729`
.. _release-0.9.0:
0.9.0 (2025-02-25)
------------------
Server
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- File stores are now linked to scopes rather than to workspaces. They can be
configured using ``debusine-admin scope``.
``debusine-admin workspace define`` and ``debusine-admin workspace list`` (as
well as the deprecated ``debusine-admin create_workspace``, ``debusine-admin
manage_workspace``, and ``debusine-admin list_workspaces`` commands) no
longer handle file stores. (:issue:`682`)
- Rename ``debusine-admin create_file_store`` command to ``debusine-admin
file_store create``. (The old name is still present, but is deprecated.)
(:issue:`683`)
- Rename ``debusine-admin monthly_cleanup`` to ``debusine-admin
vacuum_storage``, and run it daily. Rename the associated ``systemd`` units
similarly. (:issue:`684`)
Features
^^^^^^^^
- Implement :ref:`task configuration mechanism `.
(:issue:`508`)
- Implement :collection:`debusine:task-history` collection. (:issue:`510`)
- Add API: ``1.0/asset/`` to create and list :ref:`assets`.
Add API:
``1.0/asset///`` to
check permissions on :ref:`assets`.
Add ``debusine-admin asset`` management command to manage asset permissions.
(:issue:`576`)
- Add ``debusine-admin scope add_file_store``, ``debusine-admin scope
edit_file_store``, and ``debusine-admin scope remove_file_store`` commands.
Add an ``instance_wide`` field to file stores, defaulting to True, which can
be configured using the ``--instance-wide``/``--no-instance-wide`` options to
``debusine-admin file_store create``. Non-instance-wide file stores may only
be used by a single scope.
Add ``soft_max_size`` and ``max_size`` fields to file stores, which can be
configured using the ``--soft-max-size`` and ``--max-size`` options to
``debusine-admin file_store create``. (:issue:`682`)
- Add ``debusine-admin scope show`` command.
Add ``debusine-admin file_store delete`` command.
Make ``debusine-admin file_store create`` idempotent. (:issue:`683`)
- Generalize sweeps by ``debusine-admin vacuum_storage`` over files in local
storage to be able to handle other backends. (:issue:`684`)
- Add ``debusine-admin asset create`` command.
Add an :file-backend:`S3` file backend.
Add ``--provider-account`` option to ``debusine-admin file_store create``, to
allow linking file stores to cloud provider accounts. (:issue:`685`)
- Add :asset:`debusine:cloud-provider-account` asset. (:issue:`696`)
- Implement ephemeral groups. (:issue:`697`)
- Add a plugin for the Munin monitoring server.
If run on the server, it should be able to automatically configure itself.
It provides three graphs.
The workrequest queue length is graphed by type and by worker architecture.
The third graph shows the number of registered, connected and busy workers.
Bug Fixes
^^^^^^^^^
- Deal with expired work requests without an internal collection that are
referenced by build logs.
Fix deleting expired work requests with child work requests referenced by
build logs. (:issue:`635`)
- Explicitly depend on ``libjs-select2.js`` in the ``debusine-server`` package.
- Set current context when running server tasks.
Documentation
^^^^^^^^^^^^^
- Add blueprint for dynamic cloud compute scaling. (:issue:`538`)
- Add blueprint for dynamic cloud storage scaling. (:issue:`539`)
- Split artifacts documentation by category. (:issue:`541`)
- Add blueprint for cloning workspaces for experiments.
Add blueprint for granting ``ADMIN`` roles on groups to users. (:issue:`542`)
Miscellaneous
^^^^^^^^^^^^^
- :issue:`666`, :issue:`704`
Web UI
~~~~~~
Features
^^^^^^^^
- Workspaces can now be set to expire. Owners can configure this and other
attributes in the web UI. (:issue:`698`)
- Display configured task data (see :ref:`task-configuration`) in views that
display work requests. (:issue:`707`)
- ``/{scope}/{workspace}/workflow/``: Add ``label`` tag to "With failed work
requests", to allow enabling/disabling the checkbox by clicking on the text.
Bug Fixes
^^^^^^^^^
- Fix collection item detail URLs to allow slashes in names. (:issue:`676`)
- Handle empty Lintian artifacts. (:issue:`677`)
- Filter workflow template detail view to the current workspace. (:issue:`680`)
- Preserve redirect URL on login. (:issue:`717`)
- Fix title of homepage and scope pages.
Client
~~~~~~
Features
^^^^^^^^
- Add ``asset_create`` and ``asset_list`` methods to create and list
:ref:`assets`.
Add ``create-asset`` and ``list-assets`` commands to create and list assets.
Add ``asset_permission_check`` method to check permissions on :ref:`assets`.
(:issue:`576`)
Workflows
~~~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :workflow:`debian_pipeline`, :workflow:`make_signed_source`,
:workflow:`package_upload`: Signing keys are now specified by fingerprint,
rather than a lookup for an asset.
Remove the ``debian:suite-signing-keys`` collection. (:issue:`576`)
Features
^^^^^^^^
- Add ``subject`` to dynamic data for all workflows. (:issue:`679`)
- Add workflow to create an experiment workspace. (:issue:`699`)
Bug Fixes
^^^^^^^^^
- :workflow:`make_signed_source`: Fix passing of
:artifact:`debusine:signing-input` artifacts between workflow steps.
(:issue:`689`)
- Fix handling of dependencies between workflows. In most cases workflows
themselves shouldn't have dependencies, but the :workflow:`sbuild`
sub-workflow created by :workflow:`make_signed_source` is an exception.
(:issue:`690`)
- :workflow:`make_signed_source`: Pass all outputs from the :task:`Sign`
task through to the :task:`AssembleSignedSource` task, not just one of
them. (:issue:`692`)
- :workflow:`make_signed_source`: Fix orchestration of :workflow:`sbuild`
sub-workflow. (:issue:`695`)
Tasks
~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :task:`Sbuild`: Remove ``schroot`` support. (:issue:`660`)
Features
^^^^^^^^
- Add ``subject``, ``configuration_context``, and ``runtime_context`` to
dynamic data for all worker tasks. (:issue:`679`)
Bug Fixes
^^^^^^^^^
- Fix accidental leakage of keyring and customization script names between
:task:`MmDebstrap` task instances on the same worker, leading to task
failure. (:issue:`686`)
Worker
~~~~~~
Features
^^^^^^^^
- Record runtime statistics for tasks. (:issue:`510`)
- Log task stages to a work request debug log as well.
Bug Fixes
^^^^^^^^^
- Fix various worker asyncio issues.
Signing
~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :task:`GenerateKey`: The result is now a :asset:`debusine:signing-key`
:ref:`asset ` rather than an :ref:`artifact `.
:task:`Debsign`, :task:`Sign`: The ``key`` parameter is now the key's
fingerprint, rather than an asset lookup.
:task:`Sign`, :task:`Debsign`: The ``signer`` role is required on signing
key assets, by the work request creator. (:issue:`576`)
Features
^^^^^^^^
- Allow recording username and resource data in the signing service audit log.
Record the username and resource description in the audit log, in the
:task:`Sign` and :task:`Debsign` tasks. (:issue:`576`)
General
~~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Add a new primitive, :ref:`assets`, to represent objects that need
permissions, like :asset:`debusine:signing-key`.
Existing work requests and workflows are migrated to refer to signing keys by
fingerprint.
Existing ``debusine:signing-key`` artifacts are migrated to assets.
We recommend that Debusine admins audit their database for any remaining
artifacts with category ``debusine:signing-key``, and remove them after
confirming that they have been migrated to assets. This will require removing
any related artifact relations first. Audit query: ``SELECT * FROM
db_artifact WHERE category='debusine:signing-key';`` (:issue:`576`)
.. _release-0.8.1:
0.8.1 (2025-01-13)
------------------
Server
~~~~~~
Features
^^^^^^^^
- New view with list of workflows (``///workflow/``). List
workflow templates with stats in the workspace view
(``//``), new view with specific template information
(``///workflow-template//``).
(:issue:`400`)
Bug Fixes
^^^^^^^^^
- Use an in-memory channel layer for tests, rather than Redis. (:issue:`617`)
- Fix cleanup of expired work requests referenced by internal collections.
(:issue:`644`)
- Retry any work requests that a worker is currently running when it asks for a
new work request. (:issue:`667`)
- Fix tests with python-debian >= 0.1.50. (:issue:`672`)
Documentation
^^^^^^^^^^^^^
- Split collections documentation by category. (:issue:`541`)
Web UI
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Reorganize ``/-/user/`` URLs to contain the user name, and move the logout
view to ``/-/logout/``. (:issue:`649`)
- Remove ``/view/`` from workspace view path (``///view/``).
Features
^^^^^^^^
- Add workflows split-button pulldown to base template. (:issue:`620`)
- For workflows that need input, link to the first work request that needs
input. (:issue:`674`)
- Add a user detail view.
- Extend workspace detail view to show figures about workflows.
- Use `select2 `__ for the multiple choice fields on the
workflow list form.
Bug Fixes
^^^^^^^^^
- Hide collections with the category ``workflow-internal`` from the navbar
collections dropdown. (:issue:`639`)
- Return 404 when trying to view incomplete files, rather than logging a noisy
traceback.
Don't link to incomplete files, and mark them as "(incomplete)".
Mark artifacts as incomplete in artifact lists if any of their files are
incomplete. (:issue:`667`)
- Fix ordering of workers list by "Last seen". (:issue:`669`)
Workflows
~~~~~~~~~
Features
^^^^^^^^
- :workflow:`debian_pipeline`, :workflow:`qa`,
:workflow:`reverse_dependencies_autopkgtest`, :workflow:`sbuild`: Support
:artifact:`debian:upload` artifacts as input. (:issue:`590`)
- :workflow:`autopkgtest`, :workflow:`piuparts`,
:workflow:`reverse_dependencies_autopkgtest`, :workflow:`qa`,
:workflow:`debian_pipeline`: Add support for ``extra_repositories``.
(:issue:`622`)
Bug Fixes
^^^^^^^^^
- Fix looking up the architecture from a lookup that returns an artifact from a
collection. (:issue:`661`)
Tasks
~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :task:`Autopkgtest`: Replace the ``extra_apt_sources`` property with
``extra_repositories``, following the same syntax as :task:`Sbuild`.
(:issue:`622`)
Features
^^^^^^^^
- Gather runtime statistics from executors. (:issue:`510`)
- :task:`Piuparts`: Add support for ``extra_repositories``. (:issue:`622`)
- :task:`SimpleSystemImageBuild`: Switch from debos to debefivm-create for
VM image creation. This also drops support for the Debian Jessie release.
Bug Fixes
^^^^^^^^^
- :task:`Piuparts`: Compress processed base tarball for pre-1.3
compatibility. (:issue:`638`)
General
~~~~~~~
Miscellaneous
^^^^^^^^^^^^^
- :issue:`648`, :issue:`670`
.. _release-0.8.0:
0.8.0 (2024-12-26)
------------------
Server
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Refactor tabular output to also allow machine-readable YAML. (:issue:`247`)
- Add permission checks to all API views that accept user authentication.
(:issue:`568`)
- Enforce permissions when creating artifacts. (:issue:`614`)
- Deprecate ``debusine-admin create_workspace``, ``delete_workspace``,
``list_workspace`` and ``manage_workspace`` in favor of
``debusine-admin workspace ``.
``debusine-admin workspace create`` creates workspaces with a default
30-days expiration delay (instead of no expiration by default for
``create_workspace``), and requires an existing owner group to be
specified. (:issue:`640`)
- Enforce permissions when retrying work requests.
Features
^^^^^^^^
- ``debusine-admin create_workspace``: Assign an owners group, controlled by
the ``--with-owners-group`` option. (:issue:`527`)
- Add infrastructure to help enforcing permissions in views. (:issue:`598`)
- Record information about any originating workflow template in work requests,
and add a cached human-readable summary of their most important parameters.
(:issue:`618`)
- Implement ``debusine-admin group list`` and ``debusine-admin group members``.
(:issue:`623`)
- Add a contributor role for workspaces; contributors can display the workspace
and create artifacts in it. (:issue:`625`)
- Introduce new ``debusine-admin workspace`` subcommand, regrouping and
expanding the existing ``*_workspace``. See :ref:`debusine-admin
workspace `. (:issue:`640`)
- Allow bare artifact IDs in workflow input.
Bug Fixes
^^^^^^^^^
- Validate new scope, user, collection, and notification channel names.
(:issue:`551`)
- Allow creating workflows using scoped workspace names. (:issue:`570`)
- Report workflow validation errors directly to the client on creation, rather
than leaving unvalidated workflows lying around in error states.
(:issue:`633`)
- Set up permissions context when running server tasks. (:issue:`642`)
- Port to Django 5.1. (:issue:`646`)
- Check work request status when running Celery tasks, to guard against
mistakes elsewhere.
- Enable Django's ``ATOMIC_REQUESTS`` setting, avoiding a class of mistakes
where views forget to wrap their changes in a transaction.
- Implement ``add_to_group`` option in signon providers.
- Link externally-signed artifacts to the :task:`ExternalDebsign` work
request.
Miscellaneous
^^^^^^^^^^^^^
- :issue:`626`, :issue:`643`
Web UI
~~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- Drop workspaces from homepage; they are now visible on scope pages instead.
(:issue:`554`)
- Move ``/api-auth/`` views to ``/api/auth/``. (:issue:`581`)
- Move ``admin``, ``task-status``, ``user``, and ``workers`` views to unscoped
URLs. (:issue:`582`)
- Move account-related views to unscoped URLs. (:issue:`583`)
- Move work request URLs under workspaces. (:issue:`584`)
- Move artifact URLs under workspaces. (:issue:`585`)
Features
^^^^^^^^
- Set the current workspace in views that use it. (:issue:`395`)
- Move "Workers" and "Task status" from the navigation bar to the footer.
Add a per-scope landing page.
Add a "Collections" menu in workspaces.
Add view to list and filter workflows. (:issue:`557`)
- Show current and other workspaces in base template. (:issue:`624`)
- Merge workspace list into scope detail view. (:issue:`629`)
- Show the current scope as the "brand", with an optional label and icon.
(:issue:`630`)
- Display git-based version information in footer. (:issue:`631`)
- Show results in workflow views.
- Show workflow details open by default.
Bug Fixes
^^^^^^^^^
- Silence unnecessary logging when viewing invalid work requests.
(:issue:`588`)
- Log out via ``POST`` rather than ``GET``. (:issue:`646`)
- :task:`ExternalDebsign`: Fix "Waiting for signature" card.
- Consider task type when selecting work request view plugins.
- Fix "Last Seen" and "Status" for Celery workers.
- List workflow templates in workspace detail view.
Documentation
^^^^^^^^^^^^^
- Document scope as required in client configuration, and simplify example if
there is only one. (:issue:`613`)
Miscellaneous
^^^^^^^^^^^^^
- :issue:`645`
Client
~~~~~~
Documentation
^^^^^^^^^^^^^
- Add documentation for the client configuration file. (:issue:`613`)
Workflows
~~~~~~~~~
Features
^^^^^^^^
- Add :workflow:`package_publish` workflow. (:issue:`396`)
- Add :workflow:`reverse_dependencies_autopkgtest` workflow. (:issue:`397`)
- :workflow:`autopkgtest`, :workflow:`sbuild`: Implement
``arch_all_host_architecture``. (:issue:`574`)
- :workflow:`sbuild`: Implement ``extra_repositories``. (:issue:`622`)
- :workflow:`package_upload`: Support uploading to delayed queues.
Bug Fixes
^^^^^^^^^
- :workflow:`debian_pipeline`: Handle some ``build-*`` promises being
missing.
- :workflow:`make_signed_source`, :workflow:`package_upload`: Fix invalid
creation of some child work requests. Add validation to catch such
problems in future.
- :workflow:`package_upload`: Set correct task type for ``ExternalDebsign``.
- Fix work request statuses in several workflows.
- Mark empty workflows as completed.
Documentation
^^^^^^^^^^^^^
- Point to the workflow template list.
Tasks
~~~~~
Incompatible Changes
^^^^^^^^^^^^^^^^^^^^
- :task:`Sbuild`: Stop running ``lintian``; it's now straightforward to run
both ``sbuild`` and ``lintian`` in sequence using the
:workflow:`debian_pipeline` workflow. (:issue:`260`)
Features
^^^^^^^^
- :task:`Sbuild`: Implement ``extra_repositories``. (:issue:`622`)
- :task:`Lintian`, :task:`Piuparts`: Capture ``apt-get`` output.
Bug Fixes
^^^^^^^^^
- :task:`Sbuild`: Don't count it as a success if the host architecture is
not supported by the source package. (:issue:`592`)
- :task:`Sbuild`: Drop the redundant ``--no-clean`` argument. (:issue:`603`)
- :task:`Piuparts`: Handle ``piuparts`` being in either ``/usr/sbin`` or
``/usr/bin``.
- Wait for Incus instances to boot systemd.
Documentation
^^^^^^^^^^^^^
- Split task documentation by task types.
Miscellaneous
^^^^^^^^^^^^^
- :issue:`652`
Signing
~~~~~~~
Documentation
^^^^^^^^^^^^^
- Add blueprint for restricting use of signing keys. (:issue:`576`)
General
~~~~~~~
Features
^^^^^^^^
- Enforce ``mypy``'s strict mode across the whole codebase.
Bug Fixes
^^^^^^^^^
- Ensure consistent ``LANG`` settings in systemd services. (:issue:`494`)
- Reset failed ``*-migrate`` services in integration tests.
.. _release-0.7.2:
0.7.2 (2024-11-13)
------------------
Quality
~~~~~~~
* Use ``hello`` from bookworm in piuparts integration test.
.. _release-0.7.1:
0.7.1 (2024-11-12)
------------------
Quality
~~~~~~~
* Fetch packages from matching suites in integration tests.
.. _release-0.7.0:
0.7.0 (2024-11-12)
------------------
Server
~~~~~~
* Unblock reverse-dependencies when aborting a work request.
* Upgrade to Django 4.2.
* Implement an admin role for scopes.
* Validate group names.
* Add ``debusine-admin group`` management command.
* Add :workflow:`make_signed_source` workflow.
* Add API for monitoring worker status.
* Add roles for workspaces.
* Handle scopes in workspace management commands.
* Add an initial set of permission predicates.
* Add scope visibility permission check.
* Use workspace permissions in collection lookup.
* Force evaluation of lazy ``request.user`` in ``AuthorizationMiddleware``.
* Don't ignore failed elements of multiple lookups.
* Make the default workspace public.
* Improve command-line handling of constraint violations.
* Add :ref:`singleton collections `.
* Add permission for creating workspaces.
* Add :workflow:`lintian` workflow.
* Fix ``debusine-admin create_workspace --default-expiration-delay``
command-line parsing.
* Support lookups that match items of multiple types.
* Add :workflow:`piuparts` workflow.
* Add :workflow:`qa` workflow.
* Implement ``signing_template_names`` in :workflow:`sbuild` workflow.
* Add ``same_work_request`` lookup filter to
:collection:`debian:package-build-logs` collection.
* Add :workflow:`debian_pipeline` workflow.
* Add :task:`CopyCollectionItems` task.
Web UI
~~~~~~
* Disallow public access to work requests in private workspaces.
* Prototype implementation of scopes in URLs.
* Handle workspaces with the same name in different scopes.
* Remove ``workspace/`` segment from URLs.
Client
~~~~~~
* Implement scope support.
* Correctly download artifacts with directories in file paths.
Worker
~~~~~~
* :task:`SystemBootstrap`:
* Allow keyring URLs starting with ``file:///usr/share/keyrings/``.
* Write non-ASCII-armored keyrings to ``.gpg`` rather than ``.asc``.
* :task:`Sbuild`:
* Relax ``binnmu_maintainer`` validation in dynamic data to avoid failures
if ``DEBUSINE_FQDN`` is under a non-email-suitable domain.
* Drop unnecessary ``sbuild:host_architecture`` from dynamic metadata.
* Add :task:`DebDiff` task.
Signing
~~~~~~~
* :task:`Sign`:
* Fail if signing failed.
* Use detached signatures when signing UEFI files.
* Take multiple unsigned artifacts and sign them all with the same key.
* Register :task:`Debsign` task, which previously existed but was unusable.
Documentation
~~~~~~~~~~~~~
* Indicate that kmod keys aren't (yet?) supported.
* Split signing service documentation into :ref:`explanation
` and :ref:`reference
`.
* Add an :ref:`explanation of lookups `.
* Document the :ref:`debusine-worker CLI `.
* Move :ref:`artifact relationships ` documentation
to reference.
* Point to bookworm-backports instead of deb.freexian.com.
* Update :ref:`add-new-worker` to explain how to enable a signing worker.
* Add :ref:`how-to for configuring a YubiHSM `.
* Install a signing worker in the :ref:`installation tutorial
`.
* Document the :ref:`debusine-signing CLI `.
* Add blueprint for changing the UI to be more workflow-centered.
* Restructure the hierarchy of reference documentation pages.
* Document how to generate signing keys.
* Add blueprint for copying artifacts between workspaces.
* Add blueprint for a URL redesign.
Quality
~~~~~~~
* Add more type annotations for tasks.
* Fix test failures in non-English locales.
* Skip simplesystemimagebuild test with UML >= 6.11um1 for now.
.. _release-0.6.0:
0.6.0 (2024-10-10)
------------------
Server
~~~~~~
* Tighten up handling of creating artifacts with files that already exist.
* Add ``Wait`` task type.
* Add :task:`Delay` task.
* Add :task:`ExternalDebsign` task and a corresponding API view to allow a
client to provide a signature to it.
* Add a system for coordinating multiple sub-workflows within a higher-level
workflow.
* Introduce :ref:`scopes `.
* Introduce a basic application context.
* Run workflow orchestrators via Celery.
* Add :workflow:`autopkgtest` workflow.
* Add ``debusine-admin scope`` command.
* Add :ref:`action-retry-with-delays` action for use in ``on_failure`` event
reactions.
* :workflow:`sbuild` workflow:
* Support build profiles.
* Add ``retry_delays``, which can be used for simplistic retries of
dependency-wait failures.
* Let ``nginx`` gzip-compress text responses.
* Add :task:`PackageUpload` task.
* Add :workflow:`package_upload` workflow.
Web UI
~~~~~~
* Improve label for :artifact:`debian:binary-package` artifacts.
* Show "Waiting for signature" card on blocked :task:`ExternalDebsign`
requests.
* Show forward and reverse-extends artifact relations.
Client
~~~~~~
* Add ``debusine provide-signature`` command.
* Allow ``debusine import-debian-artifact`` to upload individual ``.deb``
packages.
* Correct imported package relations.
* Don't download large artifacts as tarballs.
Worker
~~~~~~
* Add :task:`MakeSourcePackageUpload` task.
* Add :task:`MergeUploads` task.
* :task:`Sbuild`:
* Support ``build_profiles``.
* Don't permit architecture-independent binary-only NMUs.
* Fix ``architecture`` field of created :artifact:`debian:binary-packages`
artifacts.
* Export ``DEB_BUILD_OPTIONS`` for ``nocheck`` and ``nodoc`` profiles.
* Set a default maintainer for binary-only NMUs.
* Apply some environment constraints to the :task:`Piuparts` task's
``base_tgz`` lookup.
* Register :task:`ExtractForSigning` task, which previously existed but was
unusable.
* Fix ``unshare`` executor compatibility with Debian environments from
before the start of the ``/usr`` merge.
* Fall back to the worker's host architecture for the purpose of environment
lookups if the task doesn't specify one.
* Log progress through the main steps of each task.
Signing
~~~~~~~
* Add :task:`Debsign` task.
Documentation
~~~~~~~~~~~~~
* Document signing workers and tasks.
* Add design for permission management.
* Add design for reverse-dependencies-autopkgtest workflow.
* Add design for task configuration, work request statistics, and other
build-related features.
* Add short introduction to :ref:`debusine-concepts` tying everything
together.
* Move explanation of expiration logic to a separate
:ref:`expiration-of-data` page.
* Simplify :ref:`explanation of artifacts `.
* Move information about :ref:`reference-task-types` to a separate page.
* Move information about :ref:`collection data models
` to a separate page.
Quality
~~~~~~~
* Use `vulture `__ to find dead
code.
* Sort imports automatically using `isort
`__.
* Make coverage reports briefer.
.. _release-0.5.0:
0.5.0 (2024-09-03)
------------------
Server
~~~~~~
* Avoid N+1 queries when resolving :ref:`multiple lookups
`.
* Automatically drop privileges when running ``debusine-admin`` or
``debusine-signing`` as root.
* Mark retried work requests as blocked if necessary.
* Add an API endpoint to review manual unblocks.
* Unassign pending or running work requests when disabling a worker.
* Fix ineffective :collection:`debian:environments` uniqueness constraint.
* Adjust the :workflow:`sbuild` workflow to allow storing build logs in a
new :collection:`debian:package-build-logs` collection.
* Default to a five-second timeout when sending email, to avoid hangs if the
local mail transport agent is broken.
* Don't buffer output to log files.
* Validate new work requests when creating them.
Web UI
~~~~~~
* Link to work request and build log in artifact list.
* Add a framework of UI shortcuts and sidebar information, allowing a more
attractive and consistent presentation of resources such as artifacts and
work requests.
* Redirect user to original URL after login.
* If an artifact has only one file, download that file by default instead of
a tarball.
* Show input artifacts in work request views.
* Add a user-friendly view of files in artifacts.
* Fix error when viewing an artifact with multiple related build logs.
* Use `pygments `__ to render text content.
* Redesign work request detail view.
* Use work request labels in the UI.
* Add UI to review work requests blocked on manual approval.
* Add a view of registered workers and their running work requests.
* Fix collection search paging.
* Add a view of the task queue.
Client
~~~~~~
* Only accept valid artifact categories in ``debusine create-artifact``.
* Don't process downloads one byte at a time.
* Retry some HTTP requests.
Worker
~~~~~~
* Make ``arch-test`` a dependency rather than an optional feature.
* Add :task:`ExtractForSigning` task.
* Add :task:`AssembleSignedSource` task.
* :task:`Sbuild`:
* Create a :artifact:`debusine:signing-input` artifact.
* Ignore ``dose-debcheck`` decoding errors.
* Support building binary-only NMUs.
* Skip ``dose-debcheck`` extraction on success.
Signing
~~~~~~~
* Add support for static (not extracted under wrap) PKCS#11 keys.
* Add OpenPGP key generation and signing support.
Documentation
~~~~~~~~~~~~~
* Document that workers need ``sbin`` directories in their ``PATH``.
* Clarify data model details for the workflow hierarchy.
* Improve documentation for ``debusine-admin manage_worker disable``.
* Fix documentation of creating a collection in :ref:`set-up-apt-mirroring`.
* Add design for coordinating sub-workflows.
* Add design for package upload task and workflow.
Quality
~~~~~~~
* Support building Debusine itself with ``nocheck`` and ``nodoc`` build
profiles.
* Add `pre-commit `__ configuration.
* Fix various :py:exc:`ResourceWarning`\ s.
* Convert Python packaging to `hatchling
`__.
* Add many more type annotations.
* Use `dbconfig-pgsql
`__ for database
configuration, avoiding services restarting indefinitely after initial
installation.
* Ensure that Debusine starts after and stops before a PostgreSQL service
running on the same machine.
* Make task-killing tests more reliable.
.. _release-0.4.1:
0.4.1 (2024-06-28)
------------------
Server
~~~~~~
* Make ``debusine:test`` artifact instantiable.
Web UI
~~~~~~
* Introduce a common base layout with a right sidebar.
* Implement labels for artifacts.
* Add specialized view for showing build log artifacts.
Worker
~~~~~~
* Run ``sbuild`` with ``--bd-uninstallable-explainer=dose3`` and parse its
output.
Quality
~~~~~~~
* Fix license classifier in ``setup.cfg``.
.. _release-0.4.0:
0.4.0 (2024-06-24)
------------------
Server
~~~~~~
* Add API endpoint to retry work requests.
* Implement retrying workflows.
* Give the scheduler Celery worker a different node name.
* Switch to ``RedisPubSubChannelLayer``.
Web UI
~~~~~~
* Add UI to retry work requests.
Worker
~~~~~~
* Add binary-only NMU support to ``sbuild`` task.
* Use ``arch-test`` to provide better defaults for ``system:architectures``.
Signing
~~~~~~~
* Add a new signing service. This currently supports generating keys
(though currently only in software, as opposed to an HSM) and signing UEFI
Secure Boot images with them. A few more pieces still need to be
assembled before this is useful.
Documentation
~~~~~~~~~~~~~
* Document HTTPS setup.
* Document signing worker.
Quality
~~~~~~~
* Remove now-unnecessary autopkgtest schroot creation from integration
tests.
* Add a "playground" system to manage test object creation and to allow
discussion of UI prototypes.
* Use HTTPS in integration tests.
* Bump timeout for ``mmdebstrap`` integration tests.
* Reorganize test cases for improved type-safety.
* Fix cleanup order in an integration test which caused failures on slow
architectures.
.. _release-0.3.2:
0.3.2 (2024-06-03)
------------------
Server
~~~~~~
* Rename some leftovers of "internal" naming for server tasks.
* Added method to check if a work request can be retried.
* Fix ``Architecture: all`` matching in ``sbuild`` workflow.
Web UI
~~~~~~
* Second iteration on collection UI design.
* Add base template support for ``django.contrib.messages``.
Quality
~~~~~~~
* Fix several race conditions and timeouts that caused autopkgtest failures
on slow architectures.
.. _release-0.3.1:
0.3.1 (2024-05-28)
------------------
Server
~~~~~~
* Namespace collections under workspaces.
* Refresh worker from database before marking it disconnected, so that we
don't lose changes made using ``debusine-admin edit_worker_metadata``.
* Add backend capability to retry aborted or failed work requests.
* ``sbuild`` workflow:
* Fix task data for ``Architecture: all`` work requests.
* Specify the backend in environment lookups.
* Defer environment resolution.
Web UI
~~~~~~
* Fix typo resulting in HTTP 500 error in collection detail view.
Worker
~~~~~~
* Handle systemd 256 in ``incus-lxc`` executor.
* Handle dangling ``/etc/resolv.conf`` symlinks in environments in the
``unshare`` executor.
* Fix ``mmdebstrap`` task to specify the architecture of the chroot.
Documentation
~~~~~~~~~~~~~
* Fix several errors in the "Getting started with Debusine" tutorial.
* Adjust "The debusine command" reference to refer to self-documenting
``--help`` output.
Quality
~~~~~~~
* Skip some integration tests for architectures that weren't in bookworm.
* Add enums for artifact and collection categories, to guard against typos.
.. _release-0.3.0:
0.3.0 (2024-05-23)
------------------
Highlights:
* The focus of this milestone is on automatic orchestration of building
blocks, to allow tasks to be scheduled for all items of a collection. For
example, Debusine can now automatically schedule Lintian tasks for all
packages in a suite.
* Added collections and workflows.
* Added a new lookup syntax, taking advantage of collections.
Server
~~~~~~
* Add infrastructure for collections.
* Implement :collection:`debian:environments` collection.
* Implement ``debian:suite-lintian`` collection.
* Add ``debusine-admin create_collection`` command.
* Store tokens only in a hashed form.
* Implement :collection:`debian:suite` collection.
* Move the scheduler to a dedicated Celery worker.
* Generalize work request notifications into event reactions.
* Implement basic building blocks of workflows.
* Implement synchronization points.
* Implement workflow orchestrators.
* Implement workflow callbacks.
* Add ``--default-file-store`` options to ``debusine-admin
create_workspace`` and ``debusine-admin manage_workspace``.
* Restrict creation of non-worker tasks via the API.
* Add ``debusine-admin create_file_store`` command.
* Implement scheduling priorities.
* Implement ``update-collection-with-artifacts`` event reaction.
* Implement collection item lookup syntax and semantics.
* Implement ``aptmirror`` server task.
* Implement ``updatesuitelintiancollection`` task to update a
``debian:suite-lintian`` collection from :collection:`debian:suite`.
* Implement :collection:`debusine:workflow-internal` collection.
* Add ``debusine-admin create_work_request`` command.
* Implement ``sbuild`` and ``update_environments`` workflows.
* Add a ``_system`` user for use by scripts.
* Implement expiry of collection items.
* Add APIs to create workflow templates and workflows.
* Add ``debusine-admin create_workflow`` command.
* Add ``debusine-admin delete_workspace`` command.
* Implement expiry of work requests.
Web UI
~~~~~~
* Fix ordering of work requests by task name.
* Improve rendering of multi-line strings in task data.
* Show workflow information for work requests that are part of workflows.
* Show task type in work request lists.
* Improve handling of expired artifacts in ``autopkgtest``/``lintian``
views.
* Order a work request's artifacts by ID within each category.
* Show the user who created a work request in the work request detail view.
* Show a notice when a work request's artifacts have expired.
* Add workspace detail and collection views.
Client
~~~~~~
* Separate YAML input and output more clearly when running ``debusine
create-artifact`` or ``debusine create-work-request``.
* Add ``debusine manage-work-request`` command to adjust work request
priorities.
* Add ``debusine create-workflow-template`` and ``debusine create-workflow``
commands.
Worker
~~~~~~
* Add support for passing extra packages to the ``sbuild`` task.
* Exit cleanly on failure to report a completed work request to the server.
* Restrict ``mmdebstrap`` and ``simplesystemimagebuild`` tasks to workers
that support the requested architecture, as was done for other tasks in
0.2.1.
* Only consider the ``autopkgtest`` task to have succeeded on exit codes 0,
2, and 8.
* Remove network-related files that ``mmdebstrap`` copies from the host.
* Allow ``sbuild`` to produce no ``.changes`` file, so that users can
examine the log files of failed builds.
* Improve "Unexpected artifact type" error from the image cache.
* Rename ``autopkgtest`` task's ``environment`` key to
``extra_environment``.
* Rename ``environment_id`` to ``environment`` in all tasks, and support the
new lookup syntax.
* Drop insecure ``sbuild_options`` from ``sbuild`` task.
* Rename task data fields in ``autopkgtest``, ``blhc``, ``lintian``,
``piuparts``, ``sbuild``, and ``updatesuitelintiancollection`` tasks to
support the new lookup syntax, removing ``_id`` from key names and
accepting single or multiple lookups as appropriate.
* Correctly tag ``sid`` tarballs and images as ``codename=sid``.
* Don't purge build-dependencies after build in the ``sbuild`` task.
Documentation
~~~~~~~~~~~~~
* Move unimplemented features to a new "Development blueprints" section.
* Add design practices.
* Rework "Where to start" section in "Contribute to Debusine".
* Clarify parameters to ``piuparts`` task.
* Clarify the role of Incus when installing a Debusine instance.
* Add design for tasks that update collections.
* Document work request scheduling and associated worker metadata.
* Add design for workflows.
* Document image caching and cleanup.
* Add design for scheduling priorities.
* Add design for collection item lookups.
* Add design for ``sbuild`` workflow.
* Add design for ``update_environments`` workflow.
* Add how-to for setting up APT mirroring.
* Add example script to automate Incus configuration for workers.
* Document packages required for Incus VMs.
* Add example script to populate a Debusine instance with example data.
* Document environment requirements for executor backends.
* Update "Getting started with Debusine" tutorial to use workflows and
collections.
* Add more documentation of worker behaviour.
Quality
~~~~~~~
* Validate the summary in :artifact:`debian:lintian` artifacts.
* Drop compatibility with Debian bullseye; Debusine now requires Python >=
3.11.
* Enforce pydantic models for ``WorkRequest.workflow_data`` and
``WorkRequest.event_reactions``.
* Use pydantic models for ``autopkgtest`` and ``lintian`` views.
* Fix some tests on non-amd64 architectures.
* Auto-format HTML templates using djlint.
* Add infrastructure for more semantic testing of HTML output.
.. _release-0.2.1:
0.2.1 (2024-03-07)
------------------
Server
~~~~~~
* Add a Celery worker for server-side tasks.
Client
~~~~~~
* Trim down dependencies slightly.
Worker
~~~~~~
* Require KVM access for ``simplesystemimagebuild`` task.
* Change ``container`` to ``instance`` in Incus templates.
* Log task completion.
* Restrict tasks to workers that support the requested architecture.
Documentation
~~~~~~~~~~~~~
* Improve home page slightly.
Quality
~~~~~~~
* Enforce mypy project-wide, including all Django components.
.. _release-0.2.0:
0.2.0 (2024-02-29)
------------------
Highlights:
* Added artifact file storage system.
* Debian developers can use Debusine to run various QA tasks against
packages they are preparing. Those tasks can be scheduled through the API
or through the web UI.
Note that it is not possible to directly migrate a database installed using
0.1.0. Migrations from this release to future releases will be possible.
Server
~~~~~~
* Implement file storage.
* Implement artifact handling.
* Implement expiration of artifacts and their files.
* Run database migrations on ``debusine-server`` package upgrade.
* Add ``debusine-admin monthly_cleanup`` command, run from a systemd timer.
* Link work requests to workspaces.
* Add ``debusine-admin create_user``, ``debusine-admin list_users``, and
``debusine-admin manage_user`` commands.
* Link tokens to users.
* Allow email notifications if a work request fails.
* Depend on ``python3-daphne``.
* Ensure all local artifacts are JSON-serializable.
* Add ``debusine-admin create_workspace``, ``debusine-admin
list_workspaces``, and ``debusine-admin manage_workspace`` commands.
* Use WorkRequest workspace in artifacts.
* Add default expiration delay to workspaces.
* Add API to list work requests.
* Make sure the Django app's secret key is never publicly readable.
* Mark workers as disconnected on ``debusine-server`` startup.
* Use ``Restart=on-failure`` rather than ``Restart=always`` in
``debusine-server.service``.
* Add ``debusine-admin info`` command to help with setting up deployments.
* Add daily artifact cleanup timer.
* Use pydantic models for artifact data.
* Add remote, read-only file storage backend for :file-backend:`external
Debian archives `.
Web UI
~~~~~~
* Add web UI for work requests and workspaces.
* Add login/logout support to web UI, allowing access to non-public
workspaces.
* Allow registering/removing user API keys using the web UI.
* Allow uploading artifacts using the web UI.
* Refinements to web UI for work requests.
* Make Django aware of HTTP/HTTPS state of requests.
* Fix download error with empty artifact file and document mmap usage.
* Implement integration with Salsa Single Sign-On.
* Add ``lintian`` view.
* Polish various aspects of the web UI.
* Add ``autopkgtest`` view.
* Fetch images for tasks directly, not via a tarball.
Client
~~~~~~
* Rename client's configuration key from ``debusine`` to ``api-url``.
* Add ``--data`` option to ``debusine create-work-request``.
* Rename ``debusine work-request-status`` to ``debusine show-work-request``.
* Add ``debusine on-work-request-completed`` to allow running a command when
a work request completes.
* ``debusine.client``: Drop obsolete ``silent`` keyword, and stricter
prototype tests.
* Add ``debusine --debug`` option to debug HTTP traffic.
* Implement a package downloader (``dget``).
* Implement a paginated listing API client.
* Add API client method for listing all work requests.
* Add ``debusine list-work-requests`` command.
* Add ``debusine import-debian-artifact`` command.
Worker
~~~~~~
* Modify ``sbuild`` task to use artifacts.
* Add pre-upload consistency checks on sbuild results.
* Rename worker's configuration key from ``debusine-url`` to ``api-url``.
* Upload ``sbuild`` log files even if the .dsc file did not exist.
* Add ``piuparts`` task.
* Add ``lintian`` task.
* Add ``autopkgtest`` task.
* Add ``mmdebstrap`` task.
* Avoid trying to add ``debusine-worker`` user in postinst if it already
exists.
* Add image caching for executor backends.
* Add ``unshare`` executor.
* Port the ``autopkgtest`` and ``piuparts`` tasks to ``unshare``.
* Use ``Restart=on-failure`` rather than ``Restart=always`` in
``debusine-worker.service``.
* Make tasks check whether their tools are installed.
* Use a lock to protect execution of the work request.
* Add ``blhc`` task.
* Add ``simplesystemimagebuild`` task.
* Use pydantic models for task data.
* Log exceptions in task preparation and clean-up.
* Add Incus executor (for both containers and VMs).
* Add a ``qemu`` executor, currently only for ``autopkgtest`` and ``sbuild``
tasks.
Documentation
~~~~~~~~~~~~~
* Drop the "slug" field and the "repository" type.
* Document :artifact:`debian:package-build-log` artifact in ontology.
* Document using ``local.py`` to change settings.
* Create an overview document with an elevator-pitch-style introduction.
* Add initial design for ``autopkgtest`` and ``lintian`` tasks.
* Add initial design for system tarball artifacts and debootstrap-like
tasks.
* Add initial design for tasks building system disk images.
* Update the description of the ``sbuild`` task.
* Restructure the documentation following the Diátaxis principles.
* Clarify copyright notice, contributor status and list of contributors.
* Enable the Sphinx copybutton plugin.
* Add some documentation for the Python client API.
* Improve the "Getting started with Debusine" tutorial.
* Add documentation for ``debusine-admin`` commands.
* Add "Install your first Debusine instance" tutorial.
* Add initial design for collections.
* Refine design for workflows.
Quality
~~~~~~~
* Harmonize license to be GPL-3+ everywhere.
* Support pydantic 1 and 2.
* Apply mypy, pyupgrade, and shellcheck consistently.
* Sync ``(Build-)Depends`` with ``setup.cfg``.
.. _release-0.1.0:
0.1.0 (2022-09-09)
------------------
Initial release. Includes a server that can drive many workers over a
worker-initiated websocket connection, where the workers use the server's
API to get work requests and provide results. There is an ``sbuild`` task
that workers can run.