aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/doc/process/versioning.rst
diff options
context:
space:
mode:
Diffstat (limited to 'roms/skiboot/doc/process/versioning.rst')
-rw-r--r--roms/skiboot/doc/process/versioning.rst112
1 files changed, 112 insertions, 0 deletions
diff --git a/roms/skiboot/doc/process/versioning.rst b/roms/skiboot/doc/process/versioning.rst
new file mode 100644
index 000000000..b802e06d8
--- /dev/null
+++ b/roms/skiboot/doc/process/versioning.rst
@@ -0,0 +1,112 @@
+.. _versioning:
+
+Versioning Scheme of skiboot
+============================
+
+History
+-------
+For roughly the first six months of public life, skiboot just presented a
+git SHA1 as a version "number". This was "user visible" in two places:
+
+1. ``/sys/firmware/opal/msglog``
+ the familiar ``SkiBoot 71664fd-dirty starting...`` message
+2. device tree:
+ ``/proc/device-tree/ibm,opal/firmware/git-id``
+
+Builds were also referred to by date and by corresponding PowerKVM release.
+Clearly, this was unlikely to be good practice going forward.
+
+As of skiboot-4.0, this scheme has changed and we now present a version
+string instead. This better addresses the needs of everybody who is building
+OpenPower systems.
+
+
+Current practice
+----------------
+The version string is constructed from a few places and is designed to
+be *highly* informative about what you're running. For the most part,
+it should be automatically constructed by the skiboot build system. The
+only times you need to do something is if you are a) making an upstream
+skiboot release or b) building firmware to release for your platform(s).
+
+OPAL/skiboot has several consumers, for example:
+
+* IBM shipping POWER8 systems with an FSP (FW810.XX and future)
+* OpenPower
+* OpenPower partners manufacturing OpenPower systems
+* developers, test and support needing to understand what code a system
+ is running
+
+and there are going to be several concurrent maintained releases in the wild,
+likely build by different teams of people at different companies.
+
+tl;dr; is you're likely going to see version numbers like this (for the
+hypothetical platforms 'ketchup' and 'mustard'):
+
+* ``skiboot-4.0-ketchup-0``
+* ``skiboot-4.0-ketchup-1``
+* ``skiboot-4.1-mustard-4``
+* ``skiboot-4.1-ketchup-0``
+
+If you see *extra* things on the end of the version, then you're running
+a custom build from a developer
+(e.g. ``skiboot-4.0-1-g23f147e-stewart-dirty-f42fc40`` means something to
+us - explained below).
+
+If you see less, for example ``skiboot-4.0``, then you're running a build
+directly out of the main git tree. Those producing OPAL builds for users
+must *not* ship like this, even if the tree is identical.
+
+Here are the components of the version string from master: ::
+
+ skiboot-4.0-1-g23f147e-debug-occ-stewart-dirty-f42fc40
+ ^ ^^^ ^ ^^^^^^^ ^-------^ ^ ^ ^^^^^^^
+ | | | | | | | |
+ | | | | | \ / - 'git diff|sha1sum'
+ | | | | | \ /
+ | | | | | - built from a dirty tree of $USER
+ | | | | |
+ | | | | - $EXTRA_VERSION (optional)
+ | | | |
+ | | | - git SHA1 of commit built
+ | | |
+ | | - commits head of skiboot-4.0 tag
+ | |
+ | - skiboot version number ---\
+ | >-- from the 'skiboot-4.0' git tag
+ - product name (always skiboot) ---/
+
+
+When doing a release for a particular platform, you are expected to create
+and tag a branch from master. For the (hypothetical) ketchup platform which
+is going to do a release based on skiboot-4.0, you would create a tag
+'skiboot-4.0-ketchup-0' pointing to the same revision as the 'skiboot-4.0' tag
+and then make any additional modifications to skiboot that were not in the 4.0
+release. So, you could ship a skiboot with the following version string: ::
+
+ skiboot-4.0-ketchup-1
+ ^ ^^^ ^ ^
+ | | | |
+ | | | - revision for this platform
+ | | |
+ | | |
+ | | - Platform name/version
+ | |
+ | - skiboot version number
+ |
+ - product name (always skiboot)
+
+This version string tells your users to expect what is in skiboot-4.0 plus
+some revisions for your platform.
+
+
+Practical Considerations
+------------------------
+
+You MUST correctly tag your git tree for sensible version numbers to be
+generated. Look at the (generated) version.c file to confirm you're building
+the correct version number. You will need annotated tags (git tag -a).
+
+If your build infrastructure does *not* build skiboot from a git tree, you
+should specify SKIBOOT_VERSION as an environment variable (following this
+versioning scheme), otherwise the build will fail.