Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Create a [DISCUSS] thread on dev@daffodil.apache.org to make a decision as a community if the timing is correct for a release and what open issues should be resolved for a release. Ensure there is at leas 72 hours for discussion before moving forward.
      
  2. Upon agreement, someone should volunteer to be the "Release Manager" to take the responsibility to prepare the release candidate.
      
  3. Prior to creating the release candidate, the version setting in  build.sbt should contain the  -SNAPSHOT keyword. Create and merge a pull request to remove this -SNAPSHOT keyword in preparation for a non-snapshot release.

(warning)  Until DAFFODIL-2592 is merged, there are also 2 files in daffodil-runtime2 which contain the "-SNAPSHOT" version information which must be updated also. 

Creating a Release Candidate

...

  1. Build the Daffodil release candidate image:

    Code Block
    languagebash
    $ podman build -t daffodil-release-candidate /path/to/daffodil.git/containers/release-candidate/

    This may take 10-15 minutes the first time, but should be significantly faster in subsequent runs unless something changes in the image where a full rebuild is needed.

    (info) This requires substantial free disk space.  If you need to control where podman puts this storage, you can specify the --tmpdir, --root, and --runroot directories as ABSOLUTE paths. (Relative paths are known to cause issues.). Note that if you specify these additional flags on this podman build command you must also specify them for the podman run command below.
      
  2. Run the daffodil release candidate container. The command is here, but before running it, prepare the necessary inputs (below) that you will need to provide it when prompted. There are timeouts, and if you wait to dig these things up when prompted they will time out and you'll need to start over.  Also, you must run this command in a standard terminal window that supports cursor-positioning via ANSI escape sequences, which it uses heavily.

    Code Block
    languagebash
    $ podman run -it --rm --privileged \
        -v ~/.gitconfig:/root/.gitconfig \
        -v ~/.gnupg/:/root/.gnupg/ \
        -v ~/.ssh/:/root/.ssh/ \
        --hostname daffodil.build \
        daffodil-release-candidate
    Note that the -v option is used to bind mount files/directories from the host system in the container so the container has access to git configurations and gpg/ssh keys.
    (info)  The


    (warning)  Note: This must be run from an ordinary xterm/terminal window, as it uses escape sequences to position the cursor and text. It will not work in an Emacs shell buffer.

       



    (info) Note that the -v option is used to bind mount files/directories from the host system in the container so the container has access to git configurations and gpg/ssh keys.

    (info) The

    --dry-run  option can be provided to the very end of the above podman command (e.g. ... daffodil-release-candidate --dry-run ) to perform a test without publishing any artifacts. An optional parameter can also be provided to do a dry run with a different GitHub reposotory and branch (e.g. ... daffodil-release-candidate --dry-run user/repo@branch)

    (info)

     

    The --entrypoint /bin/bash option can be provided before the last argument in the above podman command (e.g. ... --entrypoint /bin/bash daffodil-release-candidate ) to interactively view the configuration settings and manually run the daffodil-release-candidate script. This can be useful for debugging the container or testing changes.
       

  3. The container will periodically ask for user input (e.g. usernames, passwords) to sign and publish release files. (Dig out all these before you run the script above so you are ready to provide them when prompted. ) This includes:
      
    1. Release candidate label. For example: rc1 if this is the first release candidate. Note that this should not include the release version number (e.g. 2.0.0-rc1 )–it should only contain the rcX  part. Note that neither this nor any other prompted input has any default value. You must type in the "rc1" (or other) string.
        
    2. Long format of your signing key ID. Available keys will be displayed before the script asks for the keys, but can also be found by running gpg --list-secret-keys --keyid-format long . The key ID should be the 40 character one to minimize chance of collisions. Ensure this is the key ID for your apache.org email for your signing key, not some other identity.
       
    3. Git name and email (e.g. "John Doe" and "john.doe@company.com"). This is the name (first name and surname) and email you want to show up as the "Committer" when the release script creates a git tag or commit, which could potentially be different than what is the the bind mounted .gitconfig  file. This is not your GitHub or Apache credentials--simply the name and email address you use for Daffodil commits.

      (info)  If you have Github's Email Privacy setting on, be sure to use the private email provided in your Github Settings, otherwise the complete-release script will fail.
       
    4. Apache username and password. This is the username and password credentials used to log in at https://id.apache.org.
       
    5. GitHub SSH key password. The Daffodil repository will be cloned using SSH authentication. If your SSH key is password protected, you may be prompted for that password.
        
    6. Private GPG password (also called the 'pass phrase'). The release process will sign artifacts with your private GPG key–you will be prompted for a password to enable it to use your private key to sign these artifacts.
        
  4. After entering the necessary information the script will run. It will output a few error messages that are not true errors about gpg using your private key as the default key for signing, and a few others also.  The script will perform the actions listed below. 
      

    1. Create a zip of the source

    2. Create tgz, zip, msi, and rpm of the helper binary

    3. Create sha512 checksum and GPG signatures (".asc" files - ASCII armored detached signatures) of the above files

    4. Place the above files to the Apache dist dev directory. This svn files are not comitted until further action is taken.

    5. Create javadoc and scaladoc and move to the daffodil site repository docs directory for this release, and create a commit. This commit is not pushed until further action is taken.

    6. Create a signed git tag. This tag is not pushed until further action is taken.

    7. Stage jars/poms to https://repository.apache.org along with their GPG signatures (".asc"), MD5 checksums (".md5"), and SHA1 checksums (".sha1").
       

    (info)  Once the script completes, at that point the terminal window has a shell prompt where commands you type are being given to the running container.

    (warning)  You must complete the remaining steps without exiting this shell.

     
  5. You should verify the existence of the generated files. Note The script will list the files and locations to verify. This includes:

    1. Verify the checksums and signatures are created in the Apache dist directories and are read for commit, for example:

      Code Block
      $ cd /root/daffodil-dist/
      $ ls -R
      $ svn status

      (info)  A script that can be adapted to verify the signatures and checksums is in the comments of this page. 
       

    2. Verify the git tag is attached to the correct commit in the Daffodil repo, for example:

      Code Block
      languagebash
      $ git -C /root/daffodil/ log -n 1

          

    3. Verify the javadoc and scala docs for the version to be released exist in the daffodil site repository.

      This can be done with git log:

      Code Block
      languagebash
      $ git -C /root/daffodil-site/ log -n 1 -p

      or via the file system:

      Code Block
      $ cd /root/daffodil-site/
      $ ls -R


    4. Verify the all the expected jars/poms at https://repository.apache.org/ exist.
       
      (info)  A specific release of Daffodil may or may not be cross-compiled for more than one version of Scala. (As of Daffodil 3.2.0, only Scala 2.12 is supported, but future releases may support more than one version of Scala.)
      For all modules, verify the proper scala version(s) exists, and for each scala version, there exists a jar, javadoc jar, sources jar, and pom, and for each of those files there exists the GPG signature (".asc" armored ASCII file), and the associated md5 and sha1 checksums of all of these. To do so, visit https://repository.apache.org/, login in the top right using id.apache.org credentials, select "Staging Repositories" on the left, and find the orgapachedaffodil-XXXX repository. Inspect the "Content" tab to make sure the appropriate jars are uploaded and appear valid.
       
      (info)  A script which can be adapted to download and verify the signatures and checksums for the contents of repository.apache.org is in a comment on this page. 
       
    5. If any of the above do not look correct, perform the following steps:
        
      1. "Drop" the stages files at https://repository.apache.org--log into that URL with id.apache.org credentials, check the box for the Daffodil staging repository, and click "Drop" at the top.
         
      2. Type exit  to close the container. All files/commits created in the container will be deleted.
         
      3. Fix the issue and repeat the "Create Release Candidate" process from the beginning.
          
  6. After verifying all is correct, follow the instructions to complete the release candidate. These steps include:
       
    1. Run the command:

      Code Block
      languagebash
      $ /root/complete-release

      All the previous commands have prepared commits and tags in the three repositories (Apache Dist, Daffodil, and Site). Running this command will push those commits and tag to the remote repositories.
        

    2. "Close" the staged files at https://repository.apache.org--log into that URL with id.apache.org credentials, check the box for the Daffodil staging repository, and click "Close" at the top.
          
    3. Type exit  to close the container.

...

The previous steps have pushed the new scaladoc and javadoc to the daffodil-site repository. In order for your local sandbox copy of that repository to have this same content, you must fetch those updates, which is typically done via:

code
Code Block
language
bash
$ cd daffodil-site
$ git checkout main
$ git fetch --prune asf 
$ git rebase asf/main

The most recent commit should then show the addition of new scaladoc and javadoc to the site. 

...

  1. Find all tickets that have the version being released as their Fix Version, that are not resolved or closed (i.e Unresolved), and do a bulk change (Top Right: Tools > Bulk Edit) and move them to the next release (under Unreleased Versions)
       
  2. Do a search for all tickets that have the version being released as their Fix Version, and export it as a CSV (Top Right: Export > CSV (All fields)
      
  3. In Excel (or equivalent), delete the columns that aren't needed, then do some manipulation to get that list of bugs in the format for the release page(i.e \{% Jira XXXX %} Title)
      

  4. For changes that need more description (e.g. big features), create sections on the release page and add those descriptions.
      

  5. For the section on Dependency updates, the following command shows the changes or new dependencies that should be mentioned. 

    Code Block
    languagebash
    $ git diff v3.1.0 --project/Dependencies.scala

    You will of course change "v3.1.0" in that command to the tag of the prior release to the one you are preparing. 

...

With the release files published for staging and a website created, you may now start a vote on these files. To do so, send an email to dev@daffodil.apache.org based on the following example, making sure to update all links and version numbers.

(info) Make sure to update all links and use "plain text" editing for the email. HTML editing often leads to broken links or incorrect formatting.
 

Subject:
Code Block
languagetext
title
\[VOTE\]
Release
Apache
Daffodil
2.0.0-rc1

 
Hi all,

I'd like to call a vote to release Apache Daffodil 2.0.0-rc1.

All distribution packages, including signatures, digests, etc. can be
found at:

https://dist.apache.org/repos/dist/dev/daffodil/2.0.0-rc1/

Staging artifacts can be found at:

https://repository.apache.org/content/repositories/orgapachedaffodil-1000/

This release has been signed with PGP key 36F3494B033AE661, corresponding
to slawrence@apache.org, which is included in the KEYS file here:

https://downloads.apache.org/daffodil/KEYS

The release candidate has been tagged in git with v2.0.0-rc1.

For reference, here is a list of all closed JIRAs tagged with 2.0.0:

https://s.apache.org/daffodil-issues-2.0.0

For a summary of the changes in this release, see:

https://daffodil.apache.org/releases/2.0.0/

Please review and vote. The vote will be open for at least 72 hours
(Sunday, 11 February 2018, 12 Noon EST).

[ ] +1 approve
[ ] +0 no opinion
[ ] -1 disapprove (and reason why)

Thanks,
- Steve

...

If a number of issues crop up, the vote can be canceled and an rc2 created after the issues have been fixed and merged. After the message below has been sent, follow the same procedures as if the vote didn't pass.

Subject:
Code Block
languagetext
title
\[CANCELED\]\[VOTE\]
Release
Apache
Daffodil
2.0.0-rc1

 
Officially canceling the VOTE for 2.0.0-rc1. I'll create an rc2 and start a new VOTE.

VOTE thread:

https://lists.apache.org/thread.html/ra2fcf855251ed00c354abf29dfce73177fa3bf3a3705c5714f1aaabd%40%3Cdev.daffodil.apache.org%3E

Thanks,
- Steve

After at least 72 hours, if the VOTE passes (at least 3 binding +1 votes and more positive than negative votes), create a RESULT thread announcing the passage and listing the binding and non-binding vote totals (you may omit those with zero totals) and vote breakdown. For example:

Subject:
Code Block
languagetext
title
\[RESULT\]\[VOTE\]
Release
Apache
Daffodil
2.0.0-rc1

The VOTE to release Apache Daffodil 2.0.0-rc1 is now closed.

The vote passes with:

3 binding +1
1 non-binding +1

The VOTE thread:

https://lists.apache.org/thread.html/c8df54668fbcb7b8285f3e2cc524eac7cb82a721fa823ea5ae7edbe3%40%3Cdev.daffodil.apache.org%3E

The vote breakdown is:

+1 First Last (binding)
+1 First Last (binding)
+1 First Last (binding)
+1 First Last

Thanks to everyone who voted!

...

  1. Send an announcement email from your apache.org email address to announce@apache.org, dev@daffodil.apache.org, and users@daffodil.apache.org, (note: send three separate emails instead of one email with multiple TO/CC's), with the below template.

    (info)  To send to announce@apache.org, your email app needs to be configured. Settings can be found on Apache's Committer Email page. For Gmail, you can request to "Send Email as" and with Thunderbird, you can add a new Outgoing SMTP Server and create a new Identity (Manage Identities) to send from the relay.

    (info) Make sure to update links and use "plain text" editing for the email. HTML editing often leads to broken links or incorrect formatting.


    Subject:
    Code Block
    languagetext
    title
    \[ANNOUNCE\]
    Apache
    Daffodil
    2.0.0
    Released
    
    
    The Apache Daffodil community is pleased to announce the
    release of version 2.0.0.
    
    Notable changes in this release include <short summary of changes>.
    
    Detailed release notes and downloads are available at:
    
    https://daffodil.apache.org/releases/2.0.0/
    
    Apache Daffodil is an open-source implementation of the DFDL
    specification that uses DFDL data descriptions to parse fixed format
    data into an infoset. This infoset is commonly converted into XML or
    JSON to enable the use of well-established XML or JSON technologies
    and libraries to consume, inspect, and manipulate fixed format data in
    existing solutions. Daffodil is also capable of serializing or
    "unparsing" data back to the original data format. The DFDL infoset
    can also be converted directly to/from the  data structures carried by
    data processing frameworks so as to bypass any XML/JSON overheads.
    
    For more information about Daffodil visit:
    
    https://daffodil.apache.org/
    
    Regards,
    The Apache Daffodil Team


  2. The same or a similar announcement can also be posted to the DFDL Workgroup News page here: https://github.com/OpenGridForum/DFDL/wiki/DFDL-Workgroup-News  (Done by a DFDL Workgroup member, like Mike B).
      
  3. Send a tweet from the @ApacheDaffodil twitter account, mentioning the release version, highlights of changes, and a link to the release page. You will need to be invited/accept, via tweedeck,  permission to tweet from the account. At which point you may compose the below style of message from Tweetdeck.

    Code Block
    The @ApacheDaffodil team is excited to announce the release of version 3.1.0!
    
    Notable changes include <short summary of changes>.
    
    Details and downloads at https://daffodil.apache.org/releases/3.1.0/


  4. Various published DFDL schemas and examples will, most-likely, want to be updated so that they automatically reference the latest release of Daffodil from their main branch.

...