guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: doc: Document the release process.


From: Ludovic Courtès
Subject: 01/01: doc: Document the release process.
Date: Wed, 19 Nov 2014 20:13:47 +0000

civodul pushed a commit to branch master
in repository maintenance.

commit 65678bb7c3df616b57397cf785c064dc8769b724
Author: Ludovic Courtès <address@hidden>
Date:   Wed Nov 19 21:13:34 2014 +0100

    doc: Document the release process.
    
    * doc/release.org: New file.
---
 doc/release.org |  219 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 219 insertions(+), 0 deletions(-)

diff --git a/doc/release.org b/doc/release.org
new file mode 100644
index 0000000..418b8d9
--- /dev/null
+++ b/doc/release.org
@@ -0,0 +1,219 @@
+#+TITLE: Release Process for GNU Guix
+#+AUTHOR: Ludovic Courtès
+#+STARTUP: content hidestars
+#+EMAIL: address@hidden
+
+This document describes the typical release process for Guix.
+
+* Update NEWS
+
+** Update the list fixed bugs, with bugs.gnu.org URL
+
+Run "git log" and search for "^Fixes".
+
+** Update the list of new packages
+
+Typically, you already have a list of package/version pairs from the
+previous version.  And then you build one for the new version:
+
+#+BEGIN_SRC scheme
+  (use-modules (gnu) (guix)
+               (srfi srfi-1))
+
+  (define old
+    ;; Get the list of packages of the previous release.
+    (call-with-input-file "/home/ludo/src/guix/packages-0.7.txt"
+      read))
+
+  ;; Don't browse things listed in the user's $GUIX_PACKAGE_PATH.  Here we
+  ;; assume that the last item in (%package-module-path) is the distro
+  ;; directory.
+  (%package-module-path (list (last (%package-module-path))))
+
+  (define new
+    ;; List of package/version pairs for the new Guix version.
+    (fold-packages (lambda (p r)
+                     (alist-cons (package-name p) (package-version p)
+                                 r))
+                   '()))
+
+#+END_SRC
+
+From there, compute the list of packages that were added:
+
+#+BEGIN_SRC scheme
+  (define added
+    ;; List of packages present in NEW and not in OLD.
+    (lset-difference string=? (map car new) (map car old)))
+
+#+END_SRC
+
+Make that list "camera-ready":
+
+#+BEGIN_SRC scheme
+  (string-join (sort added string<?) ", ")
+#+END_SRC
+
+... and paste it into 'NEWS'.
+
+** Update the list of upgraded packages
+
+Same idea: identify what's been updated:
+
+#+BEGIN_SRC scheme
+  (use-modules (ice-9 match))
+
+  (define upgraded
+    ;; List of package/version pairs for packages that were upgraded.
+    (filter-map (match-lambda
+                 ((package . new-version)
+                  (match (assoc package old)
+                    ((_ . old-version)
+                     (and (version>? new-version old-version)
+                          (cons package new-version)))
+                    (_ #f))))
+                new))
+#+END_SRC
+
+Make that list "camera-ready":
+
+#+BEGIN_SRC scheme
+  (string-join (sort (map (match-lambda
+                           ((package . version)
+                            (string-append package "-" version)))
+                          upgraded)
+                     string<?)
+               ", ")
+#+END_SRC
+
+... and paste it into NEWS.
+
+* Prepare & upload tarball
+
+** Add a Git tag
+
+Create a signed Git tag, like this:
+
+  $ git tag -s -u MY-KEY -m "GNU Guix X.Y." vX.Y
+
+The tag must be `vX.Y'.  For the sake of consistency, always use
+"GNU Guix X.Y." as the tag comment.
+
+** Push the tag and changes
+
+  $ git push && git push --tags
+
+Normally nobody committed in the meantime.  ;-)
+
+** Run "make distcheck"
+
+After "make distcheck", double-check that `./configure --version'
+reports the new version number.
+
+** Upload
+
+  $ ./build-aux/gnupload --to alpha.gnu.org:guix guix-X.Y.tar.gz
+
+You'll get an email soon after when the upload is complete.
+
+Your GPG public key must be registered for this to work (info
+"(maintain) Automated Upload Registration").
+
+Make sure to publish your public key on public OpenPGP servers
+(keys.gnupg.net, pgp.mit.edu, etc.), so that people can actually use it
+to check the authenticity and integrity of the tarball.
+
+** Download
+
+Make sure the file was uploaded and is available for download as
+expected:
+
+  $ mkdir t && cd t && \
+    wget alpha.gnu.org/gnu/guile/guix-X.Y.tar.gz
+  $ diff guix-X.Y.tar.gz ../guix-X.Y.tar.gz
+
+* Prepare & upload bootable USB image
+
+** Update (gnu packages package-management)
+
+  1. Change the stable Guix to refer to the just-uploaded tarball, and
+     change the 'guix' binding to refer to 'guix-X.Y'.  Push that
+     commit.
+  2. Change the 'guix-devel' package to refer to the above
+     commit---i.e., the commit right after version X.Y.
+
+You're now all set to build the bootable images.
+
+That way, the bootable image will run Guix X.Y + 1 commit, and running
+'guix system init' in the bootable image will install exactly Guix X.Y.
+
+** Build for all the supported architectures
+
+  $ ./pre-inst-env guix system disk-image \
+       --image-size=800MiB gnu/system/install.scm
+  $ xz < /gnu/store/...-disk-image > gnu-usb-install-X.Y.x86_64.xz
+
+  $ ./pre-inst-env guix system disk-image -s i686-linux \
+       --image-size=800MiB gnu/system/install.scm
+  $ xz < /gnu/store/...-disk-image > gnu-usb-install-X.Y.i686.xz
+
+** Upload
+
+  $ ./build-aux/gnupload --to alpha.gnu.org:guix gnu-usb-install-X.Y.*.xz
+
+* Announcements
+
+First, re-read the GNU Maintainers Guide 
[[info:maintain.info#Announcements][on this topic]].
+
+** Update web pages
+
+  - Replace any references to the previous version number and replace it
+    with the new one.
+
+** Update the on-line copy of the manual
+
+Use Gnulib's `gendocs' script, add to the manual/ directory of the web site.
+
+  $ cd doc
+  $ ~/src/gnulib/build-aux/gendocs.sh guix "GNU Guix X.Y Reference Manual"
+
+** Prepare the email announcement
+
+  $ build-aux/announce-gen --release-type=alpha --package-name=guix \
+      --previous-version=A.B --current-version=X.Y \
+      --gpg-key-id=MY-KEY --url-directory=ftp://alpha.gnu.org/gnu/guix \
+      --bootstrap-tools=autoconf,automake,makeinfo
+
+The subject must be "GNU Guix X.Y released".  The text should remain
+formal and impersonal (it is sent on behalf of the Guix and GNU
+projects.)  It must include a description of what Guix is (not everyone
+reading info-gnu may know about it.)  Use the text of previous
+announcements as a template.
+
+Below the initial boilerplate that describes Guile should come the
+output of `announce-gen', and then the `NEWS' file excerpt in its
+entirety (don't call it a change log since that's not what it is.)
+
+** Send the email announcement
+
+Send to these places, preferably in the morning on a working day (UTC):
+
+  - address@hidden, address@hidden, address@hidden
+  - address@hidden, address@hidden
+  - comp.lang.scheme
+  - comp.lang.functional
+
+** Post a news item on [[http://sv.gnu.org/p/guile/][Savannah]]
+
+The news will end up on planet.gnu.org and [[http://scheme.dk/planet/][Planet 
Scheme]].  The text can
+be shorter and more informal, with a link to the email announcement for
+details.
+
+
+
+Copyright © 2014 Ludovic Courtès <address@hidden>
+Copyright © 2011, 2012, 2013 Free Software Foundation, Inc.
+
+  Copying and distribution of this file, with or without modification,
+  are permitted in any medium without royalty provided the copyright
+  notice and this notice are preserved.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]