Skip to content

Library releases

Mikael Falkvidd edited this page Jan 15, 2019 · 23 revisions

How to create a library release

  1. Create a fresh clone of the repository:

    git clone -o upstream [email protected]:mysensors/MySensors.git mysensors-release

  2. Make sure to work on the most resent master version:

    cd mysensors-release

    git fetch upstream

  3. Merge everything on development to a new branch named 'release' as a merge commit:

    git checkout remotes/upstream/master

    git checkout -b release

    git merge remotes/upstream/development --no-ff

  4. Update version info:

    new_release=2.2.0 (change this)

    old_release=$(grep version library.properties | cut -f2 -d=)

    sed -i "s/$old_release/$new_release/" library.json library.properties README.md

    Validate that MAJOR/MINOR/PATCH values in core/Version.h are correctly set.

    sed -i "s/MYSENSORS_LIBRARY_VERSION_PRERELEASE_NUMBER\t0x[0-9A-FX][0-9A-FX]/MYSENSORS_LIBRARY_VERSION_PRERELEASE_NUMBER\t0xFF/" core/Version.h

  5. Validate that the version has changed in all files:

    git diff

  6. Amend the merge commit with the changes:

    git commit -am "MySensors $new_release release" --amend

  7. Push the merge commit to origin:

    git push upstream HEAD

  8. On GitHub, create a pull request from the release branch and make sure it targets master (development is the default).

  9. Wait for Jenkins to finish building. Jenkins will create a copy+paste friendly changelog when validating the pull request. You can get it by clicking the Details link next to the Toll gate (Release changelog) status checkpoint.

  10. Once Jenkins finishes validating the pull request, update the master branch:

Note: https://www.mysensors.org/apidocs/index.html does not currently get updated with the new tag. We should probably add a tag in step 10 and push the tag with the commit and adjust step 11 to use the newly created tag. A workaround could be to replay the master job, which is done at https://ci.mysensors.org/job/MySensors/job/MySensors/job/master/build?delay=0sec. You need to pick the matching build from the list (the hashes) and then you can replay that particular job.

**Note: Do not use GitHub web interface to do this merge**

git push upstream HEAD:master

  1. Draft a new release on GitHub here. Pick a tag name that matches the release and target 'master'. E.g. 2.2.0 @ master.

    Set the title to the same as the tag.

    Add some relevant release notes (highlight significant changes).

    Add information from issues labelled release-notes that were merged after the last release

    Paste the changelog provided by Jenkins.

    When satisfied, publish the release and make an announcement on the forum.

    A list of contributors can be generated with git log 2.1.1...HEAD --format="%aN" | sort | uniq -c where 2.1.1 is the tag for the last release.

Update https://www.mysensors.org/download

  1. Delete the release branch (using command line or at https://github.com/mysensors/MySensors/branches ) and close the pull request on GitHub.

  2. Fetch the updates from GitHub:

git fetch upstream

  1. Fast-forwared development to include the release

git checkout development

git merge upstream/master

git push upstream HEAD

  1. Create a commit with the next alpha release on development:

git checkout -b new-dev

new_release=2.2.1-alpha (change this)

old_release=$(grep version library.properties | cut -f2 -d=)

sed -i "s/$old_release/$new_release/" library.json library.properties README.md

Update MAJOR/MINOR/PATCH values in core/Version.h.

Change prerelease-counter to alpha state

sed -i "s/MYSENSORS_LIBRARY_VERSION_PRERELEASE_NUMBER\t0x[0-9A-FX][0-9A-FX]/MYSENSORS_LIBRARY_VERSION_PRERELEASE_NUMBER\t0x00/" core/Version.h

  1. Validate that the version has changed in all files:

git diff

  1. Create a commit with the new development version

git commit -am "Development version $new_release"

  1. Push the new version branch and create a PR on GitHub:

git push upstream HEAD

Clone this wiki locally