Below are the steps one should follow to create a new Apache Daffodil release.
- 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.
- Upon agreement, someone should volunteer to be the "Release Manager" to take the responsibility to prepare the release candidate.
Signing Keys
Release files must be signed with an OpenPGP compatible key. If you do not already have a key for signing Apache releases, follow the developer instructions in the KEYS file in the Daffodil repository to generate a key and add it to the KEYS file. Follow the contributor workflow and create a review branch and pull request to commit your changes to the KEYS file. Once merged, the KEY file should also be copied to the release/inucbator/daffodil/KEYS
file in the apache-dist repo (see below). Your key fingerprint should also be added to https://id.apache.org.
For more information on creating a signing key, visit How to OpenPGP and Signing Releases.
SBT PGP
The sbt-pgp plugin is required to publish signed releases. Add the following to the file ~/.sbt/1.0/plugins/pgp.sbt
to enable usage of the plugin:
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.1")
In most cases, no other configuration should be necessary.
Checkout the Apache Dist Repository
The Apache dist repository is where files are staged prior to release and stored once the release has been approved. Follow these steps to create a local checkout of the Daffodil dist directories:
svn checkout https://dist.apache.org/repos/dist apache-dist --depth empty cd apache-dist/ svn update --set-depth empty dev svn update --set-depth empty dev/incubator svn update --set-depth infinity dev/incubator/daffodil svn update --set-depth empty release svn update --set-depth empty release/incubator svn update --set-depth infinity release/incubator/daffodil
Staged files are created in the dev
directory and are moved to the release
directory once approved by the Incubator Project Management Committee.
Creating a Release Candidate
Prior to creating the release candidate, the
version
setting inbuild.sbt
should contain the-SNAPSHOT
keyword. Create and merge a pull request to remove this keyword in preparation for a non-snapshot release.From within the root of the Daffodil directory, execute the scripts/release-candidate.sh script, providing the release candidate label (e.g. rc1), the path to the root of apache-dist directory created above, your Apache login credentials (e.g. for https://id.apache.org), and your long format gpg key id (e.g. --keyid-format LONG), like so:
$ ./scripts/release-candidate.sh
The credentials are used to publish the jars to the Apache staging repo. You will also be asked to enter the password for your private gpg key created above to sign the published jars and the zip/tars . This script will perform the following actions:- Create a zip of the source
- Create a tgz, zip, and rpm
- Calculate sha1, sha256, sha512 checksums of the above files
- Create ASCII armored detached signatures of the above files
- Stages jars/poms to https://repository.apache.org
- Create a git tag
- Create a zip of the source
- Once the script completes, you should verify all the files. This includes verifying the checksums and signatures created in the Apache dist directories, verifying the staged jars/poms at https://repository.apache.org/, and verify the git tag is correct.
- If anything does not look correct, delete the files in Apache dist, "drop" the published jars/poms, and delete the git tag.
- If anything does not look correct, delete the files in Apache dist, "drop" the published jars/poms, and delete the git tag.
- After verifying all is correct, commit the changes:
Commit the files in Apache dist, for example:
svn add dev/incubator/daffodil/* svn ci -m "Stage Apache Daffodil (incubating) 2.0.0-rc1"
- Close the published Nexus files by visiting https://repository.apache.org, log in, find the release in "Staging Repositories" and select "Close".
Push the git tag
git push --tag asf 2.0.0-rc1
Update the Website
Create a new release file in the site/_releases/
directory in the Daffodil Site Repository, updating the page to include a summary of the changes and links/descriptions of the bugs that were fixed in this release. Parameters that must be set because this is a release candidate include:
released: false artifact-root: "https://dist.apache.org/repos/dist/dev/incubator/daffodil/2.0.0-rc1/" checksum-root: "https://dist.apache.org/repos/dist/dev/incubator/daffodil/2.0.0-rc1/"
Follow the steps in the README in that repository to publish the new release page.
Daffodil Release Vote
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 base on the following example, making sure to update all links and version numbers:
Subject: [VOTE] Release Apache Daffodil (incubating) 2.0.0-rc1 Hi all, I'd like to call a vote to release Apache Daffodil (Incubating) 2.0.0-rc1. All distribution packages, including signatures, digests, etc. can be found at: https://dist.apache.org/repos/dist/dev/incubator/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 033AE661, corresponding to slawrence@apache.org, which is included in the repository's KEYS file. This key can be found on keyservers, such as: http://pgp.mit.edu/pks/lookup?op=get&search=0x033AE661 It is also listed here: https://people.apache.org/keys/committer/slawrence.asc 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://issues.apache.org/jira/browse/DAFFODIL-1864?jql=project%20%3D%20DAFFODIL%20AND%20fixVersion%20%3D%202.1.0%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC 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 (ends on Sunday, 11 February 2018, 12 Noon EST). [ ] +1 approve [ ] +0 no opinion [ ] -1 disapprove (and reason why) My vote: +1 Thanks, - Steve
After at least 72 hours, if the VOTE passes, create a RESULT thread announcing the passage.
Incubator Release Vote
You must now create a VOTE thread on general@incubator.apache.org to get approval from the Apache Incubator for release. This email should be the same as the above, but with the following at the beginning of the email, again making sure to update the links to the vote and result thread.
Subject: [VOTE] Release Apache Daffodil (incubating) 2.0.0-rc1 The Apache Daffodil community has voted and approved the proposed release of Apache Daffodil (Incubating) 2.0.0-rc1. We now kindly request the Incubator PMC members review and vote on this incubator release. Daffodil is an open source implementation of the DFDL specification that uses DFDL schemas to parse fixed format data into an infoset, which is most commonly represented as either XML or JSON. This allows 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 the reverse by serializing or "unparsing" an XML or JSON infoset back to the original data format. Vote thread: https://lists.apache.org/thread.html/4b71db31a6a420098a18139a046c5493d5685137251b4727736a9f18@%3Cdev.daffodil.apache.org%3E Result thread: https://lists.apache.org/thread.html/f883421a96deffee80e59bd2fbbf07062dfe0ee26e4c4c4cfa194ba5@%3Cdev.daffodil.apache.org%3E
After at least 72 hours, if the VOTE passes, create a RESULT thread announcing the passage.
Promoting to Final Release
The following steps should be taken once the incubator vote passes.
In the Apache dist directory, move the release candidate files to the release directory
svn mv dev/incubator/daffodil/2.0.0-rc1/ release/incubator/daffodil/2.0.0/ svm ci -m "Release Apache Daffodil (incubating) 2.0.0"
In the Daffodil git repository, create a signed git tag based on the release candidate tag
git tag -as -m "Release v2.0.0" rel/v2.0.0 v2.0.0-rc1 git push --tag asf rel/v2.0.0
- Release the published Nexus files by visiting https://repository.apache.org, log in, find the release in "Staging Repositories" and selecting "Release".
Modify the website release page to have the following parameters:
released: true artifact-root: "http://www.apache.org/dyn/closer.lua/incubator/daffodil/2.0.0/" checksum-root: "http://www.apache.org/dist/incubator/daffodil/2.0.0/"
Give approximately 24 hours for the release files to sync to mirrors and maven central.
Send an announcement email 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 following template:
Subject: [ANNOUNCE] Apache Daffodil (incubating) 2.0.0 The Apache Daffodil (incubating) community is pleased to announce the release of version 2.0.0. Release notes and downloads are available at: https://daffodil.apache.org/releases/2.0.0/ Daffodil is an open source implementation of the DFDL (Data Format Description Language) specification that uses DFDL schemas to parse fixed format data into an infoset, which is most commonly represented as either XML or JSON. This allows 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 the reverse by serializing or "unparsing" an XML or JSON infoset back to the original data format. For more information about Daffodil visit: https://daffodil.apache.org/ Regards, The Apache Daffodil Team