Versions Compared

Key

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

This document is intended to be used and kept up to date by the Fedora Release Manager.  It details the steps necessary to perform an official release of Fedora.

 


Table of Contents

Before Release Day

...

Code Block
<settings>
  ...
  <servers>
    ...
    <server>
      <id>sonatype-nexus-snapshots</id>
      <username>your-jirasonatype-id</username>
      <password>your-jirasonatype-pwd</password>
    </server>
    <server>
      <id>sonatype-nexus-staging</id>
      <username>your-jirasonatype-id</username>
      <password>your-jirasonatyp-pwd</password>
    </server>
    <server>
      <id>github</id>
      <username>your-github-id</username>
      <password>your-github-pwd</password>
    </server>
  </servers>
  ...
</settings>

...

NOTE: The value of RC_VERSION will vary for each release. 


Code Block
git checkout <master<main -or- maintenance-branch>
git pull
git push origin <master<main -or- maintenance-branch>:${RC_VERSION}-RC

Release candidate branches CANNOT have the same version property as the branch you are branching from (ie master or main or n.x-maintenance branch, depending on whether this is a major, minor, or patch release)  in the pom.xml file. The versions on the original branch will need to be incremented at the same time you create the release branches. You will need to pull in another community member to create a pull request with the version change, or another committer if you are going to create the pull requests yourself.

...

Then we must merge the pull requests to increment the version numbers to the master main branch. 

Example: During the 4.5.1 release our branches should have the version 4.5.1-SNAPSHOT, this will be incremented on the master main branch to 4.5.2-SNAPSHOT

Optional - Deploy Snapshot Artifacts

If the release candidate is coming off of a "maintenance" branch instead of mastermain, it is possible that snapshot artifacts have not been deployed to the Sonatype snapshot repository. If this is the case, Travis will fail to build.

...

Once a release has been created, it should be uploaded to GitHub as a Pre-Release.   A Pre-Release should be created for fcrepo4fcrepo-webapp-plus, and fcrepo4-vagrant.  The name should be  "Release Candidate 1 - RC_VERSION"

Notes

The vagrant release cannot be tested until after the fcrepo-webapps-plus RC files have been uploaded to GitHub, as the vagrant file relies on them being there first. 

Update online resources

Update online resources

If any online resources have been modified or added to during the release, these must be updatedIf any online resources have been modified or added to during the release, these must be updated.

Release Day

Determine which modules will be released.

...

  1. Follow the release order of the spreadsheet plan
  2. Some projects need pom.xml dependency version properties to be updated prior to release (e.g. fcrepo-camel-toolbox). This should be documented starting with 4.4.1.
  3. fcrepo4-vagrant must have its 'install_scripts/fedora_camel_toolbox.sh' and 'install_scripts/config' scripts updated with non-SNAPSHOT non-LATEST version.

Variables Used

  1.  

Variables Used

These variables will be used These variables will be used in the examples that follow.  The exact values of $ORG, $REPO, $CURR and $NEXT will vary depending on which module and version  is being released.

Code Block
ORG=fcrepo4fcrepo
REPO=fcrepo4fcrepo
CURR=56.0.0-alpha-2
NEXT=56.10.0-SNAPSHOT

Github Release - part 1

Perform a clean checkout of the code from Github and prepare the release.

...

If release:clean fails, you may need to revert the RC commit with git revert HEAD.  If the parent snapshot is not available, build an old version of fcrepo4 fcrepo to populate it locally.

Resolve dependencies and set main versions to $CURR and dev versions to $NEXT

...

Note

Your GPG passphrase may not be masked in terminal.

Expand
titleHave more than one GPG key. Click here to expand...

 If you have more than one personal key on your GPG keyring, you can specify the correct key by adding

Code Block
-Darguments=-Dgpg.keyname=<Your Key ID>

to the above mvn command.

...



Inspect/Verify local updates:

...

Code Block
rm -rf ~/.m2/repository/org/fcrepo
git checkout $REPO-$CURR # detached head state i.e. > git checkout fcrepo-6.4.0
mvn clean install


Warning

Up until this point, all of the changes made are strictly in your local repository and working directory.  From this point on, the changes you make will be visible to the world and in some cases difficult to back-out of.  


Push the changes to Github.

Code Block
git push origin --tags # mvn task relies on the tag, make sure it does not collide with a branch name

 

  • Go to https://github.com/fcrepo4/$REPO/releases/tag/fcrepo-$CURR

  • Click Edit tag, and update title to "Release $CURR"
  • If appropriate, attach binaries and checksums that have been published to Maven Central
    • e.g. http://repo1.maven.org/maven2/org/fcrepo/fcrepo-webapp/5.0.2/
    • Note: The Maven artifact for fcrepo-webapp-<version>-jetty-console needs to be renamed from war to jar.
    • Note: The checksum files should be of the format "[checksum] [filename]" (MacOSX's md5 requires the use of the -r argument to produce the correct format. I.e. md5 -r fcrepo-webapp-5.0.2.war >> fcrepo-webapp-5.0.2.war.md5).
  • Click Publish Release
Info

For fcrepo-jetty-console on fcrepo4, you need to build and attach the JAR file to the release. This can be built with the following command:

mvn clean install -Pone-click -pl fcrepo-webapp
Info

For fcrepo-webapp-plus you need to build and attach 4 WAR files to the release. These should be build with the commands:

  1. mvn clean install
  2. mvn clean install -Pwebac
  3. mvn clean install -Paudit
  4. mvn clean install -P\!webac,\!audit

After each build, upload the war file from the ./target directory to the release page, they are required for the fcrepo-vagrant product.

Sonatype Release

Release the build artifacts to the Sonatype repository.

Code Block
mvn release:perform -DperformRelease -Dgoals=deploy

...

As before, your GPG passphrase may not be masked in terminal.

Expand
titleHave more than one GPG key. Click here to expand...

 If you have more than one personal key on your GPG keyring, you can specify the correct key by adding

Code Block
-Darguments=-Dgpg.keyname=<Your Key ID>

to the above mvn command.


Sonatype Release

Release the build artifacts to the Sonatype repository.

Code Block
mvn release:perform -DperformRelease -Dgoals=deploy


Note

As before, your GPG passphrase may not be masked in terminal.

Expand
titleHave more than one GPG key. Click here to expand...

 If you have more than one personal key on your GPG keyring, you can specify the correct key by adding

Code Block
-Darguments=-Dgpg.keyname=<Your Key ID>

to the above mvn command.


Troubleshooting

Expand


Note

If you get a warning like:

Warning

[ERROR] Provider message:
[ERROR] The git-clone command failed.
[ERROR] Command output:
[ERROR] Cloning into '/working_directory/fcrepo/fcrepo-storage-ocfl/target/checkout'...
[ERROR] git@github.com: Permission denied (publickey).
[ERROR] fatal: Could not read from remote repository.
[ERROR] 
[ERROR] Please make sure you have the correct access rights
[ERROR] and the repository exists.

You may need to generate a SSH key, associate it with your Github account and with your local ssh client. More instructions are available on Github




Warning
titlePoint of no return

The following steps, once completed are final.  They cannot be undone, revoked or altered.  Only proceed if you've completed all the above steps and are absolutely certain the release is ready for publication.

  • Go to https://s01.oss.sonatype.org and log in
  • Click Staging Repositories in left navigation

  • Search for "fcrepo" in upper right search box (project will not have $REPO in title)

  • Select repository and verify that $REPO is present in the Content tab
  • Click Close, then Refresh, then Release

This will publish the artifacts to the Sonatype releases repository and start the process of syncing them with Maven Central, which may take several hours. When finished, they'll be available at https://repo1.maven.org/maven2/org/fcrepo/.

Docker Release (fcrepo only)

From the cloned fcrepo repository home run the following:

Code Block
git clone git@github.com:fcrepo-exts/fcrepo-docker.git
cd fcrepo-docker
DOCKER_PASSWORD=<password> DOCKER_USERNAME=<username> ./build-and-push-to-dockerhub.sh ../fcrepo-webapp/target/fcrepo-webapp-${CURR}.war latest ${CURR}


Github Release - part 2

Warning
titlePoint of no return

The following steps, once completed are final.  They cannot be undone, revoked or altered.  Only proceed if you've completed all the above steps and are absolutely certain the release is ready for publication.

  • Go to https://oss.sonatype.org/index.html  and log in
  • Click Staging Repositories in left navigation

  • Search for "fcrepo" in upper right search box (project will not have $REPO in title)

  • Select repository and verify that $REPO is present in the Content tab
  • Click Close, then Refresh, then Release

...

...

Github Pages

...

  • -webapp-$CURR-jetty-console.jar for the release using

    Code Block
    mvn

...

  •  clean install -Pone-click -pl fcrepo-webapp


  • Create checksums for the fcrepo-webapp-$CURR-jetty-console and attach the binary and checksums to the Github release.
    • Note: The checksum files should be of the format "[checksum] [filename]" (MacOSX's md5 requires the use of the -r argument to produce the correct format. I.e. md5 -r fcrepo-webapp-5.0.2-jetty-console.jar >> fcrepo-webapp-5.0.2-jetty-console.jar.md5).

      Code Block
      jarPath=fcrepo-webapp/target/fcrepo-webapp-$CURR-jetty-console.jar
      md5 -r ${jarPath} > ${jarPath}.md5
      shasum ${jarPath}> ${jarPath}.sha1


  • Click Publish Release

Github Pages

Update the Github Pages documentation:

Code Block
mvn site-deploy -DskipTests

fcrepo pages will be visible at http://docs.fcrepo.org/site/$CURR/$REPO/

Other module pages will be located at:  $ORG.github.io/$REPO/site/$CURR/fcrepo/$REPO

For fcrepo/fcrepo and fcrepo-exts/fcrepo-camel, manually add links to the current releases.  The easiest way to do this is to search for an old version number and copy/update for the current release.

Troubleshooting

Expand


Info
titleError creating

fcrepo4 pages will be visible at http://docs.fcrepo.org/site/$CURR/$REPO/

Other module pages will be located at:  $ORG.github.io/$REPO/site/$CURR/fcrepo/$REPO

For fcrepo4/fcrepo4 and fcrepo4-exts/fcrepo-camel, manually add links to the current releases.  The easiest way to do this is to search for an old version number and copy/update for the current release.

Troubleshooting

Expand
Info
titleError creating blob: API rate limit exceeded

Github only allows a certain number of requests per hour.  Once that number is hit you'll have to wait an hour before resuming your operation.  The site documentation may exhaust this limit several times.


Info

If you get the following error:

Error creating blob: You have triggered an abuse detection mechanism and have been temporarily 
blocked from calling the API. Please retry your request again later. (403)

You may consider using the patched version of site-maven-plugin: https://github.com/github/maven-plugins/commit/d4ccf887098b18e9a23b7316ecf96348a2c73d0a

Or a 405 error or a 502 error,:

You may consider using the patched version of site-maven-plugin: https://github.com/github/maven-plugins/commit/09b282544a1208be63bd012c2cdfd4d58e3f2d22


Info

If you use two factor authentication with Github and have a Personal Access Token setup for Maven. Ensure that this token has the repo and user:email permissions.


Info

If you get the following error:


Code Block
Failed to execute goal com.github.github:site-maven-plugin:0.12:site (github) on project fcrepo-module-auth-rbacl: Error creating commit: Invalid request.
[ERROR] 
[ERROR] For ‘properties/name’, nil is not a string.
[ERROR] For ‘properties/name’, nil is not a string. (422)

You will need to ensure that the "Name" field of your github profile is not null. Fix it by going to github.com and updating your profile. to ensure that the "Name" field of your github profile is not null. Fix it by going to github.com and updating your profile.



Info
titleError creating blob: cannot retry due to server authentication, in streaming mode

This is an authentication error, check your password or token in your Maven settings.xml file. If you use 2-factor you can create a new token with the following permissions notifications, public_repo, repo:status, repo_deployment, user:email


Push Release Branch to Maintenance

...

The release branch has changes made since code freeze. It also contains the update to the version numbers for future development.

...

Ensure that your commit history matches the release branch's commit history, except for the two additional commits.
 

  1. Changing from SNAPSHOT version to release version. Something like [maven-release-plugin] prepare release $REPO-$CURR
  2. Changing from release version to next development version. Something like [maven-release-plugin] prepare for next development iteration

 

...

  1. release

...

  1. version to next development version. Something like [maven-release-plugin] prepare for next development iteration



If this appears correct, you can push your release branch on to the maintenance branch.

...

Info

Because there are no changes to master main after code freeze and all bug fixes are on the ${CURR}-RC branch, this will operate as a fast-forward merge.

...

Lyrasis wiki documentation updates

Current, in-progress Fedora Repository Documentation wiki: https://wiki.duraspace.org/display/FEDORA5x FEDORA6x

At the very minimum, update the following:

...

Fedora Repository site (Drupal): http://www.fedorarepository.org/

  • Update Download page based on Downloads page in wiki
  • Update News on front page with release information
  • Update Documentation page with link to current release documentation

Last sanity checks : 

  1. Assuming a fcrepo4 release: Download

...

  1. and run the fcrepo-webapp-$CURR-jetty-console.jar
  2. Make sure that the checksums of the artifacts published in the github release page match those in sonatype.
  3. If we're talking about a maintenance release,  make sure that all commits that went into the maintenance release are also on main (where appropriate) 

Announce release

Let Danny Bernstein

Announce release

Let Carol Minton Morris know that the release is complete and can be announced.

...