RoadMap
=======

2.0
---

Overall state: 'Test && polish period'.

Milestones
~~~~~~~~~~

* New deb package layout: mini-buildd (the service), mini-buildd-utils (for users), python3-mini-buildd, mini-buildd-doc
* Code migration to ``python 3``.
* Update to ``django 2.2`` (minimal version).
* Switch to ``twisted`` as http backend.
* Support secure data channels (HTTPS && SFTP).
* API upgrade to json.
* Event message queue.
* Periodic task scheduler (cron, internal use).
* Automated repository snasphots (weekly, monthly, yearly).
* WEB UI rewrite.

2.0 will

* be 'upgrade-compatible' with 1.0 (especially, there is no SQL scheme change).
* **not** be run-time compatible with 1.0.

Open Issues
~~~~~~~~~~~

.. attention:: **2.0**: Test and document new ``setup`` feature
.. attention:: **2.0**: Test and document new stop/start behaviour on ongoing builds/packaging
.. attention:: **2.0**: Last steps && QA

	* Re-check python37_systemcert_workaround() (see stash [sic])
	* Check all warnings/errors in daemon.log after bootstrap.
	* Test mini-buildd-ssh-\*-command setup.
	* General GAU tests.
	* Test upgrading from 1.0.x.
	* roadmap.rst: Add hr news for 2.0
	* debconf update (as late as possible, merge local branch).
		* debconf, auto SSL?

.. attention:: **2.0**: Bugs (irrelevant for release)

	* SSL: Sporadic errors reading event queue
		* It seems occurrence is reduced when running with debug logs
		* Locking ``render_GET()`` does not seem to help

		Reproduce::

			./devel profile _ssl updatetestall
			(...)
			"ValueError: invalid literal for int() with base 16: b''"
	* Web: While setup is running, web 'mbd-off' display does not work (daemon.is_alive() remains true somehow?)

Upgrading from 1.x
~~~~~~~~~~~~~~~~~~

.. attention:: WIP, quite raw for now

buster
......

Please rather use bullseye.

Extra APT sources: ``Debian Backports`` (buster-backports) and ``Hellfield Archive`` (buster-ab-stable).

``aptitude`` is imho the easiest way. Select the suggestion that de-installs py2 variants, and upgrades all the rest::

	aptitude install mini-buildd/buster-ab-stable

generic post
............

* Update Daemon.Gnupg keyserver: keyserver.ubuntu.com
* Re-check all repositories
	- will regenrate repositories with new Content support (else you need to wait for internal cron)

2.2 Brainstorm
--------------

.. attention:: **2.2**: new features

	* Dependency check on package migration
	* API call: 'debdiff'
	* watcher support: Autoport and/or alarm on Debian Package Updates
	* Automatic SSH upload support, either by scripting the setup or integrating SSH w/ twisted
	* Make piuparts actually work (non-EXPERIMENTAL)
	* cron: ccache expire

.. attention:: **2.2**: django

	* External user management (ldap, sso?) - python3-django-casclient?
		* Extended User Role Concept, with advanced right management workflows?
	* SQL schema migration (with django >= 1.7)

.. attention:: **2.2**: refactoring

	* gnupg: Switch completely to 'python3-gpg' (*NOT* 'python3-gpgme')
	* Archive: Rethink Archive::mbd_ping (see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=740576)

.. attention:: **2.2**: repository

	* Release: Alternatives for NotAutomatic, ButAutomo...)?? Can we use more finegrained PRIOS on archives?
	* sid-test-wildwest: Add extra suite for arbitrary package (deb+src) installs?

.. attention:: **2.2**: setup

	* admin/model objects: Show "used by count" (so we can see what objects may be obsolete)?
	* sync config between instances?

Bummers
-------
.. important:: http://tools.ietf.org/html/rfc5147: This, in theory, could be some way to create a TOC for text/plain (buildlogs and such). However

	* RFC only describes line/char based links, not text matching based (so scanning the text file would be needed still)
	* As it seems, main browsers simply don't support it
		* https://bugzilla.mozilla.org/show_bug.cgi?id=660583
		* https://bugs.chromium.org/p/chromium/issues/detail?id=77024

.. important:: twisted:

	* 'apt-get update'@squeeze HTTPS broken; HTTP triggers twisted exception on apt-get update:
		RuntimeError: Cannot register producer <twisted.web.static.NoRangeStaticProducer object at 0x7f56a856b8b0>, because producer <twisted.internet._producer_helpers._PullToPush object at 0x7f56a8574040> was never unregistered.
