Skip to content

Library releases

Patrick Fallberg edited this page Jun 24, 2018 · 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: Do not use GitHub web interface to do this merge

git push upstream HEAD:master --ff-only

  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).

    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.

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

  3. 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