Building an RC
The Release Candidate artifacts we vote upon should be the exact ones we vote against, without any modification than renaming – i.e. the contents of the files must be the same between voted release canidate and final release. Because of this the version in the built artifacts that will become the official Apache releases must not include the
Set environment variables
- set your version to 1.10.2 in
airflow/version.py(without the RC tag)
- Commit the version change.
Tag your release
Clean the checkout: the sdist step below will
Tarball the repo
NOTE: Make sure your checkout is clean at this stage - any untracked or changed files will otherwise be included in the file produced.
Rename the sdist
Generate SHA512/ASC (If you have not generated a key yet, generate it by following instructions on http://www.apache.org/dev/openpgp.html#key-gen-generate-key)
Push the artifacts to ASF dev dist repo
PyPI Snapshots (Optional)
At this point we have the artefact that we vote on, but as a convenience to developers we also want to publish "snapshots" of the RC builds to pypi for installing via
pip. To do this we need to
- Edit the
airflow/version.pyto include the RC suffix.
python setup.py compile_assets sdist bdist_wheel
- Follow the steps in
It is important to stress that this snapshot is not intended for users.
Make sure your public key is on id.apache.org and in KEYS
You will need to sign the release artifacts with your pgp key. After you have created a key, make sure you
- Add your GPG pub key to https://dist.apache.org/repos/dist/release/airflow/KEYS , follow the instructions at the top of that file. Upload your GPG public key to https://pgp.mit.edu
- Add your key fingerprint to https://id.apache.org/ (login with your apache credentials, paste your fingerprint into the pgp fingerprint field and hit save).
See this for more detail on creating keys and what is required for signing releases.
Voting on an RC
Once the RC is built (both source and binary), put them in the dev SVN repository:
Use the dev/airflow-jira script to generate a list of Airflow JIRAs that were closed in the release.
Send out a vote to the firstname.lastname@example.org mailing list:
Once the vote has been passed, you will need to send a result vote to email@example.com:
After both votes pass (see above), you need to migrate the RC artifacts that passed to this repository:
(The migration should including renaming the files so that they no longer have the RC number in their filenames.)
The best way of doing this is to
svn cpbetween the two repos (this avoids having to upload the binaries again, and gives a clearer history in the svn commit logs):
Publishing to PyPi
Create a ~/.pypirc file:
(more details here.)
Set proper permissions for the pypirc file:
- Confirm that airflow/version.py is set properly.
Install twine if you do not have it already.
Build the package:
Verify the artifacts that would be uploaded:
Upload the package to PyPi's test environment:
- Verify that the test package looks good by downloading it and installing it into a virtual environment. The package download link is available at:
Upload the package to PyPi's production environment:
Again, confirm that the package is available here:
Get a diff between the last version and the current version:
- Update CHANGELOG.md with the details, and commit it.
Notifying developers of release
Notify firstname.lastname@example.org that the artifacts have been published:
Update the Announce page on the wiki
- Follow instructions on Building and deploying the docs
Bulk migrate JIRAs
- Create a release in Jira, and mark as released:
If it gives you the option to move un-resolved issues then move them to the next unreleased version of Airflow
- Otherwise go to the Apache JIRA, and filter for all open/in progress JIRAs for the version that you just released:
- Do a bulk edit to migrate the fix version to the next unreleased version of Airflow.
Old stuff that doesn't apply anymore
Committers should use the following commands and steps to create an Apache Airflow release: Run dev/airflow-jira on the test branch dev/airflow-jira compare 1.8.1 Commit RCs here svn co https://dist.apache.org/repos/dist/dev/airflow Make sure CHANGELOG and UPDATING.md have been updated. Remove previous versions from https://dist.apache.org/repos/dist/dev/airflow (`svn rm` -> `svn commit`) Run a travis build, confirm it passes (duh.) Build airflow python setup.py sdist Generate MD5 gpg --print-md MD5 apache-airflow-1.8.1rc0+apache.incubating.tar.gz > apache-airflow-1.8.1rc0+apache.incubating.tar.gz.md5 Generate the SHA512 gpg --print-md SHA512 apache-airflow-1.8.1rc0+apache.incubating.tar.gz > apache-airflow-1.8.1rc0+apache.incubating.tar.gz.sha Upload your GPG public key to https://pgp.mit.edu Add your GPG pub key to https://dist.apache.org/repos/dist/release/airflow/KEYS , follow the instructions at the top of the file Sign Airflow tar.gz gpg --armor --output apache-airflow-1.8.1rc0+apache.incubating.tar.gz.asc --detach-sig apache-airflow-1.8.1rc0+apache.incubating.tar.gz Do votes in email@example.com and firstname.lastname@example.org https://mail-archives.apache.org/mod_mbox/incubator-airflow-dev/201705.mbox/%3CCABYbY7eZk2SYHs3ni31h94uwwRdcn4dkJwumYtUMsfFLq-gwjg%40mail.gmail.com%3E https://mail-archives.apache.org/mod_mbox/incubator-general/201705.mbox/%3CCABYbY7cnACrrsrFtdwtq_-4AokMAe8CBOcWSvNz%2BhgB9DfVEvQ%40mail.gmail.com%3E Commit final release here svn co https://dist.apache.org/repos/dist/release/airflow Merge the test branch into the stable branch git pull apache v1-8-test git pull apache v1-8-stable git co v1-8-stable git merge v1-8-test git tag 1.8.1 git push apache v1-8-stable git push apache 1.8.1 Follow these instructions to publish to PyPi Note: You must remove the +incubating from the airflow/version.py file.
Generate MD5s gpg --print-md MD5 apache-airflow-1.8.1rc0+apache.incubating.tar.gz > apache-airflow-1.8.1rc0+apache.incubating.tar.gz.md5 Generate the SHA512 gpg --print-md SHA512 apache-airflow-1.8.1rc0+apache.incubating.tar.gz > apache-airflow-1.8.1rc0+apache.incubating.tar.gz.sha Upload your GPG public key to https://pgp.mit.edu Add your GPG pub key to https://dist.apache.org/repos/dist/release/airflow/KEYS , follow the instructions at the top of the file Sign Airflow tar.gz gpg --armor --output apache-airflow-1.8.1rc0+apache.incubating.tar.gz.asc --detach-sig apache-airflow-1.8.1rc0+apache.incubating.tar.gz