See the getting started page for more information about downloading, building, and deploying Mesos.
See our community page for more details.
This guide describes the process of doing an official release of Mesos.
Ensure that you have a GPG key or generate a new one, e.g., using gpg --gen-key.
Add your GPG public key to the Apache Mesos dist repository in the KEYS file.
Fetch the svn repository:
$ svn co https://dist.apache.org/repos/dist/release/mesos
Append your public key using one of methods described in KEYS, e.g.:
$ (gpg --list-sigs <your name> && gpg --armor --export <your name>) >> KEYS
Push the commit:
$ svn ci
Submit your GPG public key to a keyserver, e.g., MIT PGP Public Key Server.
Add your GPG fingerprint (gpg --fingerprint <your name>) to your
Apache account.
Create a Maven settings file (~/.m2/settings.xml) for the Apache
servers where you must copy your encrypted Apache password which
you can get from running mvn --encrypt-password.
NOTE: You may need to first generate a master password.
<settings>
<servers>
<server>
<id>apache.snapshots.https</id>
<username>APACHE USERNAME</username>
<password>APACHE ENCRYPTED PASSWORD</password>
</server>
<server>
<id>apache.releases.https</id>
<username>APACHE USERNAME</username>
<password>APACHE ENCRYPTED PASSWORD</password>
</server>
</servers>
</settings>
Use gpg-agent to avoid typing your passphrase repeatedly:
$ export GPG_TTY="$(tty)" && eval $(gpg-agent --daemon)
If this is a regular release, create a new release branch (
$ git checkout origin/master -b X.Y.x
Now, update master branch to the next minor version in configure.ac:
change AC_INIT([mesos], [X.Y.Z])), as well as in CMakeLists.txt:
change set(MESOS_MAJOR_VERSION X), set(MESOS_MINOR_VERSION Y),
set(MESOS_PATCH_VERSION Z) and then commit.
If this is a patch release, use the existing release branch.
Go to Apache JIRA and make
sure that the CHANGELOG for the release version is up to date.
NOTE: For all Unresolved tickets marked with Fix Version or
Target Version as the release version, try to negotiate with the
ticket owner or shepherd if the release should wait for the ticket to
be resolved or if the Fix Version should be bumped to the next version.
PROTIP: Use a JIRA dashboard
(example)
to track the progress of targeted issues as the release date approaches. This
JIRA filter may be useful (<X.Y.Z> is the release version):
project = MESOS AND "Target Version/s" = <X.Y.Z> AND (fixVersion != <X.Y.Z> OR fixVersion = EMPTY)
Note, you may need to request permission to create shared dashboard and filters by opening
an Apache INFRA ticket.
PROTIP: Use bulk edit option in JIRA to move the tickets and make sure
to uncheck the option that emails everyone about the move to avoid
spamming.
Update and commit the CHANGELOG for the release, on both the master
and the release branch.
For regular releases:
Make sure all new API changes, deprecations, major features, and features
graduating from experimental to stable are called out at the top of the
CHANGELOG. This JIRA query may be helpful in identifying some of these
(<X.Y.Z> is the release version):
project = MESOS AND "Target Version/s" = <X.Y.Z> AND type = Epic
Ensure that the “Unresolved Critical Issues” section is populated
correctly. This JIRA query may be helpful:
project = Mesos AND type = bug AND status != Resolved AND priority IN (blocker, critical)
Prepare a full list of experimental features. The easiest way to do this
is to take the list from the previous minor release, remove features that
have been declared stable, and those, that declared experimental in the
current release. Do not forget to mention features transitioning from
experimental to stable in this release at the top of the CHANGELOG.
NOTE: You should use JIRA to generate the major portion of the
CHANGELOG for you. Click on the release version in
JIRA
and click on the Release Notes. Make sure to configure the release notes
in text format.
NOTE: The JIRA Release Notes will list only tickets with Fix Version
set to that version. You should check for any Resolved tickets that have
Target Version set but not Fix Version. Also check for any Unresolved
or Duplicate/Invalid tickets that incorrectly set the Fix Version.
Update the CHANGELOG on master branch and then cherry pick onto the release
branch to ensure both versions stay in sync.
Ensure version in configure.ac and CMakeLists.txt is correctly set for
the release. Do not forget to remove “(WIP)” suffix from the release notes'
title.
Update and commit docs/configuration.md to reflect the current state of
the master, agent, and configure flags. Update it on master branch and then
cherry pick onto the release branch.
If this is a regular release, update and commit docs/upgrades.md with
instructions about how to upgrade a live cluster from the previous release
version to this release version. Update it on master branch and then cherry
pick onto the release branch.
If this is a regular release, please ensure that user documentation has been added for any new features.
Make sure that for any updates of the API, specifically the scheduler API,
the public mesos protobuf definitions are part of both, include/mesos as
well as include/mesos/v1.
NOTE: This might actually demand code updates if any omissions were identified.
Push your changes on master branch and the new release branch if this is a regular release, push your changes on the existing release branch if this is a patch release.
Ensure that you can build and pass all the tests.
$ sudo make -j<cores> distcheck
Run the benchmarks and compare with the previous release for any performance regressions:
$ make bench -j<cores> GTEST_FILTER="*BENCHMARK*"
First tag the required SHA locally.
$ git tag -a <X.Y.Z-rcR> -m "Tagging Mesos <X.Y.X-rcR>."
NOTE: X.Y.Z is based on semantic versioning
scheme. R is release candidate version that starts with 1.
Tag the release externally and deploy the corresponding JAR to the
Apache Maven repository. It is recommended
to use the support/vote.sh script to accomplish this.
$ ./support/vote.sh X.Y.Z R
NOTE: This script assumes that you have the requisite permissions to
deploy the JAR. For instructions on how to set it up, please refer to
src/java/MESOS-MAVEN-README.
The script also spits out an email template that you could use to send the vote email.
NOTE: The date -v+3d command does not work on some platforms (e.g.
Ubuntu), so you may need to fill in the vote end date manually. The vote
should last for 3 business days instead of 3 calendar days anyway. Sometimes
we allow a longer vote, to allow more time for integration testing.
If the vote does not pass (any -1s or showstopper bugs)
When all known issues are resolved, update the CHANGELOG with the newly
fixed JIRAs.
Once all patches are committed to master, cherry-pick them on to the corresponding release branch. This is the same process used for patch releases (e.g., 1.0.2) as well.
$ git checkout X.Y.x
$ git cherry-pick abcdefgh...
Now go back up to the “Tagging and Voting the Release Candidate” section and repeat.
You should only release an official version if the vote passes with at least 3 +1 binding votes and no -1 votes. For more information, please refer to Apache release guidelines.
It is recommended to use support/release.sh script to release the candidate.
$ ./support/release.sh X.Y.Z R
The release script also spits out an email template that you could use to notify the mailing lists about the result of the vote and the release.
NOTE: Make sure you fill the email template with the names of binding and non-binding voters.
Update the version in configure.ac and CMakeLists.txt in the release
branch to the next patch version.
After a successful release, add the information associated with the release
in site/data/releases.yml. It is used to generate the release information
on the website.
Update the Building guide to use the latest release link.
See our website README for details on how to build/preview the website locally, as well as information on how Mesos-Websitebot automatically publishes the website when changes are detected.
Write a blog post announcing the new release and its features and major bug fixes. Include a link to the updated website.
This command may be helpful to gather the list of all contributors between
two tags:
git log --pretty=format:%an <tagX>..<tagY> | sort | uniq | awk '{print}' ORS=', '
Mention the blog post in site/data/releases.yml.
Post a tweet from the https://twitter.com/apachemesos account, please contact the PMC if you need the account password (or want someone to post the tweet on your behalf).
Per the guidelines when to archive, we should only keep the latest release in each version under development.
Checkout the mesos distribution folder:
$ svn co https://dist.apache.org/repos/dist/release/mesos
Remove all minor versions that are no longer under development and commit the change.
Find the released Mesos version here, and “release” it with the correct release date by clicking on “settings” → “Release”. Also, make sure to add the names of the release managers in “Description” section.
Upload the mesos.interface package to PyPi.
Create/use a PyPi account with access to the mesos.interface submit form. You may need to ask a current package owner to add you as an owner/maintainer.
Setup your ~/.pypirc
with your PyPi username and password.
After a successful Mesos make (any architecture), cd to
build/src/python/interface.
Run python setup.py register to register this package.
Run python setup.py sdist bdist_egg upload to upload the source
distribution and egg for this package.
Update the Mesos Homebrew package.
Update the Homebrew formula for Mesos and test.
Submit a PR to the Homebrew repo.
Once accepted, verify that brew install mesos works.
Update Wikipedia:
Update Reddit: (optional)
© 2012-2022 The Apache Software Foundation. Apache Mesos, the Apache feather logo, and the Apache Mesos project logo are trademarks of The Apache Software Foundation.