Important remark

Note that we invest a great deal of effort into automating the release process by building a continuous delivery pipeline that runs on Jenkins. Further we have moved our codebase from SVN over to GIT and therefore large parts of this howto are no longer up do date!

Introduction

This document is a work in progress and was created in parallel to the release of Apache log4net 1.2.11 and adapted for 2.0.6.

Requirements

  • make sure you have all the required software around. For the 2.0.6 release this meant
    • you may need a couple of Windows or Linux boxes in order to be able to build all target frameworks.
    • Things you need
      • A Subversion command line client
      • NAnt 0.92 or better. Make sure to unblock the ZIP before you extract it.
      • Some recent version of a Java runtime environment (Java5 at minimum)
      • Apache Maven 3.x http://maven.apache.org/. You may want to set some environment variables like Path (to include Maven‘s and NAnt’s bin directories), M2_HOME and JAVA_HOME to make things easier.
      • .NET Framework 3.5SP1 and SDK 2.0; As of October 2011 this is available from here
      • .NET Framework and SDK 4.0; As of October 2011 this is available from here
      • .NET Core Developer Kit available from https://www.microsoft.com/net/core
      • Mono available from here. Unfortunately NAnt 0.92 has issues with Mono that is too recent, I used a Ubuntu 14.04 installation and installed NAnt and Mono via the Ubuntu Debian packages. It comes with Mono 3.2.8.
      • Sandcastle Help File Builder with its Dependencies. As of November 2015 this is available from here. Install Html Help 1 Compiler by follwoing the instructions during the SGFB installation. It may tell you there'd already be a newer version but SHFB needs this installation anyway.
  • Make sure your PGP key is in https://svn.apache.org/repos/asf/logging/log4net/trunk/KEYS and copy that file to https://dist.apache.org/repos/dist/release/logging/log4net/. You should also upload your key to the keyservers.
  • Make sure you have decrypted old-log4net.snk.gpg to old-log4net.snk

Preparing the Stage

  • Make sure the correct version number (2.0.6 right now) is in all the required places. [yes, there is a lot of duplication]

    • log4net.build: <property name="package.version" value="2.0.6"/>
    • pom.xml: <version>2.0.6</version>
    • log4net.nuspec: <version>2.0.6</version>
    • log4net.shfbproj: <HtmlHelpName>log4net-sdk-2.0.6</HtmlHelpName>
    • src/AssemblyInfo.cs: many, many AssemblyInformationalVersionAttribute
    • src/AssemblyVersionInfo.cpp as well as .cs, .vb and .js - twice in each file. These files also hold the assembly's copyright statement. Make sure it includes the current year.
    • src/Log4netAssemblyInfo.cs: public const string Version = "2.0.6"
    • src/site/xdocs/download_log4net.xml: many times
    • netstandard/log4net/project.json: “version”: “2.0.6”,
    • netstandard/log4net.tests/project.json: “version”: “2.0.6”,
  • Create the site using “nant generate-site” in order to create the RAT report as a side-effect and fix all files that don't have the proper license header.

  • Make sure NOTICE corresponds to the general format of, in particular, check that {latest} is the current year.

Apache log4net
Copyright 2004-{latest} The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

Create the Release

  • Tag the source tree that makes up the release
  $ svn cp -r 1775235 \
        https://svn.apache.org/repos/asf/logging/log4net/trunk \
        https://svn.apache.org/repos/asf/logging/log4net/tags/2.0.6RC1
  • Create a fresh working copy of the new tag on the Linux box and copy old-log4net.snk to the root directory.
  • Run nant
  • zip up the bin/mono directory and copy it to the Windows machine
  • Create a fresh working copy of the new tag on the Windows box and copy old-log4net.snk as well as nuget.exe to the root directory.
  • Extract the contents of the Mono zip to bin/mono
  • Run nant
  • Run SHFB
  • Run nant package
  • Sign the distribution files, I used:
  $ for i in log4net?2.0.6*; do \
        md5sum $i > $i.md5 \
        sha1sum $i > $i.sha1 \
        sha256sum $i > $i.sha256 \
        gpg --detach-sign --armor $i; done
  • Commit the distribution files to dest area of the svn dist repository, i.e to https://dist.apache.org/repos/dist/dev/logging/log4net
  • Also create a README.html based on the release-notes.
  • Publish the site build somewhere convenient for you; home.apache.org is a good option
  • If you've got set up a myget feed, publish the nuget package
  • call for a vote on the log4net-dev list. It may be a good idea to copy the general list of Logging Services in order to reach more PMC members. The following is based on the template used in Commons
log4net 2.0.6 RC1 is available for review here:
  https://dist.apache.org/repos/dist/dev/logging/log4net (revision 17495)

Details of changes since 1.2.15 are in the release notes:
  http://stefan.samaflost.de/staging/log4net-2.0.6/release/release-notes.html

I have tested this with Mono and several .NET frameworks using NAnt.

The tag is here:
  https://svn.apache.org/repos/asf/logging/log4net/tags/2.0.6RC1
  (revision 1775236)

Site:
  http://stefan.samaflost.de/staging/log4net-2.0.6/

RAT Report:
  http://stefan.samaflost.de/staging/log4net-2.0.6/rat-report.html
 
Nuget Package:
  https://www.myget.org/feed/log4net-test/package/nuget/log4net
 
Votes, please. This vote will close in 72 hours, 1000 GMT 24-Dec 2016
 
 [ ] +1 Release these artifacts
 [ ] +0 OK, but...
 [ ] -0 OK, but really should fix...
 [ ] -1 I oppose this release because...
 
Thanks!
  • If the vote doesn't pass, adapt trunk and start over with tagging the next release candidate
  • Once the vote passes:

Publish the Release

  $ svn cp -m "1.2.14 release has been accepted" \
        https://svn.apache.org/repos/asf/logging/log4net/tags/1.2.14RC1 \
        https://svn.apache.org/repos/asf/logging/log4net/tags/1.2.14
  • publish the nuget package
  • wait for the mirrors to catch up before proceeding, this takes several hours

Announce the Release

Post-Release Cleanup