summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'glep-0072.rst')
-rw-r--r--glep-0072.rst197
1 files changed, 197 insertions, 0 deletions
diff --git a/glep-0072.rst b/glep-0072.rst
new file mode 100644
index 0000000..d110b68
--- /dev/null
+++ b/glep-0072.rst
@@ -0,0 +1,197 @@
+GLEP: 72
+Title: Architecture stability status file
+Version: $Revision$
+Last-Modified: $Date$
+Author: Andreas K. Hüttel <dilfridge@gentoo.org>
+Status: Draft
+Type: Standards Track
+Content-Type: text/x-rst
+Created: 6-May-2017
+Post-History: 6-May-2017
+
+Abstract
+========
+
+This GLEP provides specifications for a new file in the profiles base
+directory, ``arches.desc``. Its intent is to allow more fine-grained repoman
+check control, and in particular to help moving architectures from stable to
+testing while keeping the testing dependency tree consistent, or moving
+architectures from testing to stable while easily preparing a consistent
+stable dependency tree.
+
+``arches.desc`` specifies whether an architecture, as opposed to a profile,
+is to be considered stable. It does not replace profiles.desc, but supplements
+it; profiles.desc still describes the profiles of each architecture.
+
+We use the term architecture here in the colloquial sense, as also used by
+the Package Manager Specification in section 4.4.1 (describing profiles.desc),
+and corresponding in the terminology of GLEP 53 to a "keyword" (which,
+however, even if more precise is not consistently used in practice).
+
+
+Motivation
+==========
+
+At the moment we have several cases where repoman finds its limits:
+
+a) An architecture loses its stable status (imagine c128), but
+ the architecture team doesn't want to drop all the stable keywords since
+ they are useful for stage building. Since the stable keywords on c128 are
+ only an arch-team-internal thing, everyone is allowed to drop the latest
+ stable version of a package, and it's the arch team's responsibility to
+ keep their "unofficial stable tree" straight. This is how at the time
+ of the writing of this GLEP s390, sh, and m68k are handled.
+
+ Right now this means that we have to set all *profiles* of this arch to
+ profile status ``exp`` in profiles.desc, otherwise repoman throws errors
+ about a broken stable dependency tree. If we do that, repoman does however
+ also not check ~c128 consistency, meaning that the ~c128 dependency tree
+ will soon be broken as well due to negligence. Given arches.conf as
+ described below, one could set the architecture c128 to "testing" status
+ and keep stable profiles. This results in stable keywords being ignored,
+ but consistency of the ~c128 dependency tree is still enforced.
+
+b) An architecture prepares for becoming a stable architecture (think arm64).
+ So, first the ~arm64 dependency tree should be fine, and then stable
+ keywords can be added. However, to avoid repoman errors as long
+ as the stable dependency tree is not complete yet, the profiles need to be
+ set to dev/exp, and again this brings the danger of the ~arm64 dependency
+ tree getting inadvertently broken. Again the combination of setting the
+ architecture to "testing" in arches.desc and profiles to stable helps.
+
+Finally, at the moment the "semi-official" algorithm to figure out if an
+architecture is stable in the colloquial sense (e.g., requires stabilization
+requests) is to check if the architecture has any stable profile. This makes
+non-stable arches which want to keep a consistent dependency tree (think mips)
+impossible. Reading the architecture status from arches.desc instead solves
+this problem.
+
+
+Specifications for profiles/arches.desc
+=======================================
+
+File and format
+---------------
+
+In the main profiles directory, a file ``arches.desc`` is added. Name
+and location are chosen in analogy to the existing ``profiles.desc`` file.
+The format of ``arches.desc`` is as follows:
+
+Every ``#`` starts a comment; the character and the rest of the line
+are ignored. Every blank line is ignored. Otherwise the file consists of two
+whitespace-separated columns:
+
+- first column: architecture name (keyword)
+- second column: one of the four values ``stable``, ``testing``, ``unstable``,
+ ``broken``
+
+Additional columns are ignored to allow for future revisions of this document.
+
+An example arches.desc file might look as follows::
+
+ # Example arches.desc file
+ amd64 stable
+ x86 stable # not for long
+
+ mips testing
+ m68k unstable outdated
+
+Initial value in the gentoo repository
+--------------------------------------
+
+On introduction, the setting will be ``stable`` for all stable architectures,
+``testing`` for all architectures where "inofficial" stable keywords are
+maintained and are present in the repository by the arch teams (sh, s390,
+...), and ``unstable`` everywhere else.
+
+Meaning of the values for repoman
+---------------------------------
+stable
+~~~~~~
+When a profile of an architecture arch is tested, then repoman checks
+consistency of the dependency tree for ``arch`` and for ``~arch`` separately.
+
+Which profiles of the architecture are tested is still controlled
+by profiles.desc (and ``-d`` / ``-e`` switches).
+
+This is the current behaviour and shall be the default if nothing is specified
+for an architecture.
+
+testing
+~~~~~~~
+When a profile of an architecture is tested, then repoman treats ``arch``
+in ebuilds as ``~arch``, and tests consistency only for ``~arch``.
+
+Which profiles of the arch are tested is still controlled by profiles.desc
+(and ``-d`` / ``-e`` switches).
+
+A new switch for repoman may be provided to temporarily upgrade
+an architecture from ``testing`` to ``stable`` status (for architecture team
+work).
+
+unstable
+~~~~~~~~
+When a profile of an architecture is tested, then repoman treats ``arch``
+as an error and aborts. Consistency is only tested for ``~arch``.
+
+Which profiles of the arch are tested is still controlled by profiles.desc
+(and ``-d`` / ``-e`` switches).
+
+broken
+~~~~~~
+Repoman is not testing any profiles of this architecture, irrespective
+of the settings in profiles.desc.
+
+Meaning of the values for other tools
+-------------------------------------
+
+All architectures with the value ``stable`` are considered as stable
+architectures, in the sense that
+
+- they require stabilization requests on bugzilla, which are handled
+ by an arch team
+- they may, e.g., be listed first by tools such as eshowkw
+- and similar, to the discretion of tool authors
+
+
+Backwards Compatibility
+=======================
+
+Essentially two cases need to be discussed. Here "old system" designates a
+Gentoo installation where package manager and/or utilities do not provide
+arches.desc support yet, "new system" an installation where they do.
+
+arches.desc present and old system
+----------------------------------
+
+Utilities ignore the unknown file.
+
+Repoman and other tools may emit surplus dependency errors when profiles are
+checked on arches that are ``testing`` (they check the consistency
+of the stable tree alone, which may fail, since ``arch`` is supposed to be
+treated like ``~arch``). This affects only development work and can be fixed
+by updating repoman.
+
+No arches.desc present and new system, or arch not listed in arches.desc
+------------------------------------------------------------------------
+
+Arches are treated as "stable" by repoman (the current behaviour), with
+profile status according to profiles.desc. Gentoolkit and other tools trying
+to determine a list of stable arches shall fall back to the current method
+of determining stable arches by scanning profiles.desc for stable profiles.
+
+
+arches.desc in overlays
+=======================
+
+If arches.desc is present in several repositories, then the strictest setting
+for an architecture wins. Using arches.desc outside the gentoo (or
+alternative) master repository however is discouraged.
+
+
+Copyright
+=========
+
+This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
+Unported License. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-sa/3.0/.