Preparations
============
-After release candidate is built gpg sign artifacts using odlsign-bulk script in
-**releng/builder/scripts**.
+After release candidate is built gpg sign artifacts using the
+`lftools sign <https://lf-releng-tools.readthedocs.io/en/latest/commands/sign.html>`_
+command.
- .. code-block:: bash
+.. code-block:: bash
+
+ STAGING_REPO=autorelease-1903
+ STAGING_PROFILE_ID=abc123def456 # This Profile ID is listed in Nexus > Staging Profiles
+ lftools sign deploy-nexus https://nexus.opendaylight.org $STAGING_REPO $STAGING_PROFILE_ID
+
+Verify the distribution-karaf file with the signature.
+
+.. code-block:: bash
+
+ gpg2 --verify distribution-karaf-x.y.z-${RELEASE}.tar.gz.asc distribution-karaf-x.y.z-${RELEASE}.tar.gz
- cd scripts/
- ./odlsign-bulk <staging-repo-id> # eg. autorelease-1367
Releasing OpenDaylight
======================
-- Block submit permissions for registered users and elevate RE's committer rights on gerrit.
+- Block submit permissions for registered users and elevate RE's committer
+ rights on Gerrit.
+ **(Helpdesk)**
+
+ .. figure:: images/gerrit-update-committer-rights.png
+
+ .. note::
+
+ Enable **Exclusive** checkbox for the submit button to override any
+ existing persmissions. Code-Review and Verify permissions are only needed
+ during version bumping. DO NOT enable it during code freeze.
+
+- Nexus: click release for staging repo
+ **(Helpdesk)**
+
+- Nexus: click release for gpgsign repo (created above in Preparations)
+ **(Helpdesk)**
+
+- Pull latest autorelease repository
+ **(Release Engineering Team)**
+
+ .. note:: If you already cloned autorelease the clone line can be skipped below.
+
+ .. code-block:: bash
+
+ export RELEASE=Nitrogen-SR1
+ export STREAM=${RELEASE//-*}
+ export BRANCH=origin/stable/${STREAM,,}
+
+ git clone --recursive https://git.opendaylight.org/gerrit/releng/autorelease
+ cd autorelease
+ git fetch origin
- .. figure:: images/gerrit-update-committer-rights.png
+ # Ensure we are on the right branch. Note that we are wiping out all
+ # modifications in the repo so backup unsaved changes before doing this.
+ git checkout -f
+ git checkout ${BRANCH,,}
+ git clean -xdff
+ git submodule update --init
-- Export ${RELEASE} and ${BUILDNUM} with current release name and build number.
+ # Ensure git review is setup
+ git review -s
+ git submodule foreach 'git review -s'
- .. code-block:: bash
+- Make sure the latest lftools is installed
+ **(Release Engineering Team)**
- export RELEASE=Beryllium-SR4
- export BRANCH=${RELEASE//-*}
- export BUILDNUM=55
+ .. note:: If you already created an lftools virtualenv you can skip the mkvirtualenv step below.
-- Nexus: click release for staging repo **(Helpdesk)**
-- Nexus: click release for gpgsign repo (created above in Preparations) **(Helpdesk)**
-- Send email to Helpdesk with binary URL to update website **(Helpdesk)**
-- Send email to TSC and Release mailing lists announcing release binaries location **(Release Engineering Team)**
-- Checkout autorelease and switch to release branch eg stable/carbon **(Release Engineering Team)**
+ .. code-block:: bash
- .. code-block:: bash
+ mkvirtualenv lftools
+ workon lftools
+ pip install --upgrade lftools
- git checkout -b stable/${BRANCH,,} origin/stable/${BRANCH,,}
- git submodule update --init
- git submodule foreach git checkout stable/${BRANCH,,} origin/stable/${BRANCH,,}
+- Publish release tags
+ **(Release Engineering Team)**
-- Make sure your git repo is setup to push (use git-review)
+ .. code-block:: bash
- .. code-block:: bash
+ export BUILD_NUM=55
+ export PATCH_URL="https://logs.opendaylight.org/releng/jenkins092/autorelease-release-${STREAM,,}/${BUILD_NUM}/patches.tar.gz"
+ ./scripts/release-tags.sh "${RELEASE}" /tmp/patches "$PATCH_URL"
- git submodule foreach 'git review -s'
+- Run autorelease-version-bump-${STREAM} job
+ **(Release Engineering Team)**
-- Download patches (*.bundle files and taglist.log.gz) from log server.
+- Send email to Helpdesk with binary URL to update website
+ **(Helpdesk)**
- .. code-block:: bash
+- Send email to TSC and Release mailing lists announcing release binaries location
+ **(Release Engineering Team)**
- mkdir /tmp/patches && cd /tmp/patches
- wget https://logs.opendaylight.org/releng/jenkins092/autorelease-release-${BRANCH,,}/${BUILDNUM}/archives/all-bundles.tar.gz
- gunzip all-bundles.tar.gz
- wget https://logs.opendaylight.org/releng/jenkins092/autorelease-release-${BRANCH,,}/${BUILDNUM}/archives/patches/taglist.log.gz
- gunzip taglist.log.gz
+- Merge all patches generated by the job
+ **(Release Engineering Team)**
-- Run the following commands for every project in the release, to apply patches to each project directory.
+- Re-enable submit permissions for registered users and disable elevated RE
+ committer rights on gerrit
+ **(Helpdesk)**
- .. code-block:: bash
+- Send email to release/tsc/dev notifying tagging and version bump complete
+ **(Release Engineering Team)**
- ../scripts/patch-odl-release.sh /tmp/patches ${RELEASE}
- git review -y -t ${RELEASE}
- git push gerrit release/${RELEASE,,}
+- Run autorelease-generate-release-notes-${STREAM} job
+ **(Release Engineering Team)**
-- Merge all patches on gerrit in the order generated by merge-order.log
+ Trigger this job by leaving a Gerrit comment `generate-release-notes Carbon-SR2`
-- Tag autorelease too
+ .. important:: This job can only be used to generate service releases.
- .. code-block:: bash
+ For major releases the notes come from the projects themselves in the docs
+ repo via the `docs/releaset-notes/projects` directory.
- git checkout `cat /tmp/patches/taglist.log | grep autorelease | awk '{print $2}'`
- git submodule foreach git checkout release/${RELEASE,,}
- git commit -asSm "Release ${RELEASE}"
- git tag -asm "OpenDaylight ${RELEASE} release" release/${RELEASE,,}
- git push gerrit release/${RELEASE,,}
+ Release notes can also be manually generated with the script:
-- Re-enable submit permissions for registered users and disable elevated RE committer rights on gerrit.
+ .. code-block:: bash
-- Generate release notes (???)
+ git checkout stable/${BRANCH,,}
+ ./scripts/release-notes-generator.sh ${RELEASE}
-- Send email to release/tsc/dev notifying tagging and version bump complete **(Release Engineering Team)**
+ A `release-notes.rst` will be generated in the working directory.