<pre style='margin:0'>
Lawrence Velázquez (larryv) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/a7a13f77caf65e6f4977818c8d6a46a7f7ff2896">https://github.com/macports/macports-base/commit/a7a13f77caf65e6f4977818c8d6a46a7f7ff2896</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit a7a13f77caf65e6f4977818c8d6a46a7f7ff2896
</span>Author: Lawrence Velázquez <larryv@macports.org>
AuthorDate: Thu Nov 17 21:22:47 2016 -0500

<span style='display:block; white-space:pre;color:#404040;'>    ReleaseProcess: Wrap text at 78 characters
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Leave some wiggle room for the diff gutter.
</span>---
 portmgr/ReleaseProcess.md | 139 +++++++++++++++++++++++-----------------------
 1 file changed, 71 insertions(+), 68 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/portmgr/ReleaseProcess.md b/portmgr/ReleaseProcess.md
</span><span style='display:block; white-space:pre;color:#808080;'>index 3217258..5b03747 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/portmgr/ReleaseProcess.md
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/portmgr/ReleaseProcess.md
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -10,7 +10,8 @@ There are several goals in the release process:
</span>  * Make a specific version of MacPorts available to users.
  * Archive the materials (code, documentation, etc) that compose the release.
  * Replicatability: enable the release to be regenerated.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * Consistency: codify naming, network locations, etc, for released components.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Consistency: codify naming, network locations, etc, for released
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   components.
</span>  * Ensure that the user base and public is notified of the release.
 
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -34,8 +35,8 @@ created with a consistent name. To do this, two things are required:
</span> 
  * Choose the git revision from which to create the branch, most likely based
    off master.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * Create the branch (e.g. release-2.0) with git. The following commands assume
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   the remote "origin" points to macports/macports-base on GitHub.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Create the branch (e.g. release-2.0) with git. The following commands
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   assume the remote "origin" points to macports/macports-base on GitHub.
</span> 
     git branch release-2.0 origin/master
     git push origin release-2.0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -57,18 +58,18 @@ setting the patch-level version to 99, e.g. 2.0.99 in config/macports_version.
</span> In preparation for a release, several things should be completed within the
 code:
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * Update the file ChangeLog in both master and the release branch to reflect the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   appropriate changes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Update the file ChangeLog in both master and the release branch to reflect
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   the appropriate changes.
</span>  * Update the file config/macports_version with the target release number. The
    content of this file is recorded as the MacPorts version at MacPorts build
<span style='display:block; white-space:pre;background:#ffe0e0;'>-   time, as displayed by the port command, and it's also used by the selfupdate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   procedure to determine whether a newer version of code is available. It
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   should be different between master and the release branch, the former greater
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   to differentiate it from the latter.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Preserve config/mp_version and config/dp_version at the 1.800 or 1.710 fixed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   values, respectively, if selfupdate backwards compatibility with old MacPorts
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   installations is still desired.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (see https://trac.macports.org/changeset/43571/trunk/base or ce8a77c)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   time, as displayed by the port command, and it's also used by the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   selfupdate procedure to determine whether a newer version of code is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   available. It should be different between master and the release branch,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   the former greater to differentiate it from the latter.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Preserve config/mp_version and config/dp_version at the 1.800 or 1.710
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   fixed values, respectively, if selfupdate backwards compatibility with old
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   MacPorts installations is still desired. (see
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   https://trac.macports.org/changeset/43571/trunk/base or ce8a77c)
</span>  * Update the autoconf 'configure' script through the provided base/autogen.sh
    script once the version number in mp_version has been changed, since the
    former reads the latter.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -80,8 +81,8 @@ code:
</span> 
 === Tag the Release ===
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-Once the release is ready, it must be tagged so that the release components may
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-be fetched in the future, to ensure replicability. Generally, a release
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Once the release is ready, it must be tagged so that the release components
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+may be fetched in the future, to ensure replicability. Generally, a release
</span> candidate is first tagged and built. When and if it is approved as the actual
 release, an additional tag is created that names the same sources.
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -94,16 +95,16 @@ Tagging conventions:
</span> 
 We first create an annotated tag pointing to the release branch to make up the
 final release. Annotated tags preserve who made the tag and when. Additionally
<span style='display:block; white-space:pre;background:#ffe0e0;'>-the tag should be signed with GPG by using the `-s` flag in order to allow later
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-verification of the signature.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+the tag should be signed with GPG by using the `-s` flag in order to allow
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+later verification of the signature.
</span> 
  git tag -a -s v2.0.0 release-2.0
  git push origin v2.0.0
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-Although only base repository is branched and tagged for a given major release,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-we also create a separate tag in the ports tree at the time the final release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tag is created for a major release (x.y.0). This intends to provide a set of
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ports intended to work with that release.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Although only base repository is branched and tagged for a given major
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+release, we also create a separate tag in the ports tree at the time the final
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+release tag is created for a major release (x.y.0). This intends to provide
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+a set of ports intended to work with that release.
</span> 
  git clone macports/macports-ports macports-ports
  cd macports-ports
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -125,35 +126,36 @@ tarballs and checksums:
</span> 
 The release should be signed with a detached GPG signature in order to allow
 cryptographic verification. To do this automatically, use the additional
<span style='display:block; white-space:pre;background:#ffe0e0;'>-argument DISTGPGID= on the make command. The value specifies a key ID either in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-hexadecimal format or a email address matching exactly one key. For details, see
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-HOW TO SPECIFY A USER ID in gpg(1) for details.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+argument DISTGPGID= on the make command. The value specifies a key ID either
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+in hexadecimal format or a email address matching exactly one key. For
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+details, see HOW TO SPECIFY A USER ID in gpg(1) for details.
</span> 
  make dist DISTVER=2.0.0 DISTGPGID=<handle>@macports.org
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-These tarballs and the checksums are uploaded to the https://distfiles.macports.org/MacPorts/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-directory. At present, this must be done with the help of the infrastructure
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-team.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+These tarballs and the checksums are uploaded to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://distfiles.macports.org/MacPorts/ directory. At present, this must be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+done with the help of the infrastructure team.
</span> 
 
 === Create Release Packages and Disk Image(s) ===
 
 The dmg is a Mac OS X disk image that contains a standalone installer,
<span style='display:block; white-space:pre;background:#ffe0e0;'>-configured in the usual way, named in a consistent fashion and incorporating the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-OS version for which it was built.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configured in the usual way, named in a consistent fashion and incorporating
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+the OS version for which it was built.
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-For 10.6 and newer, we now build flat packages, so an enclosing dmg is not necessary.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+For 10.6 and newer, we now build flat packages, so an enclosing dmg is not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+necessary.
</span> 
  MacPorts-2.0.0-10.5-Leopard.dmg
  MacPorts-2.0.0-10.6-SnowLeopard.pkg
  MacPorts-2.0.0-10.7-Lion.pkg
 
 To create a pkg or dmg, use the MacPorts port. The Portfile will need to be
<span style='display:block; white-space:pre;background:#ffe0e0;'>-updated to incorporate the proper release version and checksums, and the release
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-tarballs will need to be already uploaded to the downloads section of the site
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-(wherefrom the sources are fetched by the MacPorts port to build the pkg for the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-release). Make sure the ports tree you're using to build the pkgs is fully up to
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-date.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+updated to incorporate the proper release version and checksums, and the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+release tarballs will need to be already uploaded to the downloads section of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+the site (wherefrom the sources are fetched by the MacPorts port to build the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+pkg for the release). Make sure the ports tree you're using to build the pkgs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+is fully up to date.
</span> 
  sudo port -d pkg MacPorts
  sudo port -d dmg MacPorts
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -172,27 +174,27 @@ checksums file in the downloads directory:
</span>    openssl dgst $type MacPorts-2.0.0-*.{pkg,dmg} >> MacPorts-2.0.0.chk.txt
  done
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-These new products, along with the new checksums, also have to be posted to the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-appropriate directory of the MacPorts distfiles server. Developers are required
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to validate the generated installer as thoroughly as possible through extensive
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-testing, which is mainly why this step of the release process is not automated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-through a Makefile target or similar. A good way of validating the installer is
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-to first create the destroot of the port and examine it for:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Linking: libraries and binaries should not be linked against anything that's
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   not present by default on a vanilla Mac OS X installation + developer tools,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   excluding even the MacPorts installation prefix; this can be accomplished
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   through the use of otool's -L flag. Currently the libraries and binaries in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   need of linking validation are:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+These new products, along with the new checksums, also have to be posted to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+the appropriate directory of the MacPorts distfiles server. Developers are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+required to validate the generated installer as thoroughly as possible through
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+extensive testing, which is mainly why this step of the release process is not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+automated through a Makefile target or similar. A good way of validating the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+installer is to first create the destroot of the port and examine it for:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Linking: libraries and binaries should not be linked against anything
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   that's not present by default on a vanilla Mac OS X installation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   + developer tools, excluding even the MacPorts installation prefix; this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   can be accomplished through the use of otool's -L flag. Currently the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   libraries and binaries in need of linking validation are:
</span>              ${destroot}/opt/local/bin/daemondo
              ${destroot}/opt/local/share/macports/Tcl/darwintrace1.0/darwintrace.dylib
              ${destroot}/opt/local/share/macports/Tcl/macports1.0/MacPorts.dylib
              ${destroot}/opt/local/share/macports/Tcl/pextlib1.0/Pextlib.dylib
              ${destroot}/opt/local/share/macports/Tcl/registry2.0/registry.dylib
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * Universal building: All the files that need linking confirmation in the step
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   above also need to be confirmed to be universal (i386/ppc on 10.5 and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   earlier, i386/x86_64 on 10.6 and later). A way to do this is with the file(1)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   command:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Universal building: All the files that need linking confirmation in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   step above also need to be confirmed to be universal (i386/ppc on 10.5 and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   earlier, i386/x86_64 on 10.6 and later). A way to do this is with the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   file(1) command:
</span>              file ${destroot}/opt/local/bin/daemondo:
                   ${destroot}/opt/local/bin/daemondo: Mach-O universal binary with 2 architectures
                   ${destroot}/opt/local/bin/daemondo (for architecture ppc):  Mach-O executable ppc
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -201,28 +203,29 @@ to first create the destroot of the port and examine it for:
</span>    invoke the tclsh shell through a call like:
              #!/opt/local/bin/port-tclsh
    thus ensuring that our bundled Tcl interpreter is used in our scripts.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * Miscellaneous: anything else that might seem out of the ordinary for a fully
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   default-configured MacPorts installation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Miscellaneous: anything else that might seem out of the ordinary for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   a fully default-configured MacPorts installation.
</span> 
 Once the above requirements have been positively asserted, the one remaining
<span style='display:block; white-space:pre;background:#ffe0e0;'>-test is to make sure that the dmg mounts in the Finder when double-clicked, and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-that the pkg contained therein properly starts up Installer.app when it's
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test is to make sure that the dmg mounts in the Finder when double-clicked,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and that the pkg contained therein properly starts up Installer.app when it's
</span> double-clicked.
 
 
 == Create Release on GitHub ==
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-All of our distfiles should also be available as downloads from a new
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-GitHub release. Create a new release matching the previously created tag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-on GitHub and attach all tarballs and installers to it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+All of our distfiles should also be available as downloads from a new GitHub
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+release. Create a new release matching the previously created tag on GitHub
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and attach all tarballs and installers to it.
</span> 
 
 === Make the Release Available through Self-Update ===
 
 In order to make the release version available through selfupdate, the
<span style='display:block; white-space:pre;background:#ffe0e0;'>-config/RELEASE_URL file in the base repository needs to be updated with the tag
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-of the release to distribute. This file is read by the cron job that makes the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-code available via rsync. See jobs/mprsyncup in the macports-infra repository.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+config/RELEASE_URL file in the base repository needs to be updated with the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+tag of the release to distribute. This file is read by the cron job that makes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+the code available via rsync. See jobs/mprsyncup in the macports-infra
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+repository.
</span> 
 
 === Notify the Public of the Release ===
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -232,12 +235,12 @@ sent/posted to the following places:
</span> 
  * The macports-announce@, macports-users@ and macports-dev@ mailing lists.
  * The MacPorts website, by adapting the $macports_version_major and
<span style='display:block; white-space:pre;background:#ffe0e0;'>-   $macports_version_latest variables as appropriate in the includes/common.inc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   file in the macports-www repository.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $macports_version_latest variables as appropriate in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   includes/common.inc file in the macports-www repository.
</span>  * The website's news section at https://macports.github.io/news/,
    see the macports.github.io repository 
<span style='display:block; white-space:pre;background:#ffe0e0;'>- * The &macports-version; entity in xml/installing.xml and xml/using.xml in the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   guide repository.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The &macports-version; entity in xml/installing.xml and xml/using.xml in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   the guide repository.
</span> 
 External websites:
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -256,8 +259,8 @@ External websites:
</span> 
 Using new features introduced by a release should be delayed for 14 days until
 being deployed in the ports tree. This should allow users to upgrade their
<span style='display:block; white-space:pre;background:#ffe0e0;'>-installations to the new release. This delay matches the warning about outdated
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ports tree sources.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+installations to the new release. This delay matches the warning about
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+outdated ports tree sources.
</span> 
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-<!-- vim:set fenc=utf-8 ft=markdown tw=80 et sw=4 sts=4: -->
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+<!-- vim:set fenc=utf-8 ft=markdown tw=78 et sw=4 sts=4: -->
</span></pre><pre style='margin:0'>

</pre>