The release artifacts for TF SEAL are built entirely through Circle CI
(our continuous integration tool). It detects when a new tag is pushed to
GitHub and then runs the build. If it passes, then the deploy
job will run
which will trigger the make push
rule in our Makefile which will subsequently
build and push all release artifacts.
Today, the following artifacts are produced from this repository:
- a python package registered on pypi as tf-seal
If a release candidate tag (e.g. X.Y.Z-rc#
) is pushed then Circle CI will
build these artifacts and push them to the their respective repositories. A
release candidate will not update the latest
tag on docker hub.
If a release tag (e.g. X.Y.Z
) is pushed then Circle CI will build and push
all artifacts along with updating the latest
tag on docker hub.
Anyone with write access can trigger a release candidate or release to be created by pushing a tag to GitHub! We've documented the flow for releasing TF SEAL below:
- Create a release candidate branch based off master (e.g.
release-0.1.0-rc0
) and update thesetup.py
,CHANGELOG.md
andmeta.yaml
, and attempt to merge it into master. If this is the first release candidate in the series for this version the number should begin at 0 (e.g.0.1.0-rc0
). - Create a tag off of the commit that merges the release candidate branch into
master for the given version in setup.py (e.g.
git tag 0.1.0-rc0
) and push to GitHub (e.g.git push origin 0.1.0-rc0
). This will trigger a deploy on Circle CI which will push the artifacts to PyPI and Docker Hub. - Once the build on Circle CI has passed, pull down the library from pypi and ensure the different examples in our library and documentation work as expected. If at any point a bug is found repeat steps 1-3 until the release works as expected.
- Once the release candidate work as expected, create a new branch based off
master (e.g.
release-0.1.0
), update the files above with the true release version, and merge it into the master branch on GitHub. Once you have verified that the CircleCI jobs have finished as we did for the release candidate, create a tag (e.g.git tag 0.1.0
) off of the merge commit and push it to GitHub (e.g.git push origin 0.1.0
). - Once the build on Circle CI has passed for our full release it should be available to the world to start using! Don't forget to tweet about it :)
NOTE: You must update and commit to master a new version of setup.py
everytime you want to tag a new version. Make sure you push the changes to
master
on GitHub.
Have a question about the process or have a suggestion on how to improve it? Don't hesitate to open an issue with your thoughts!
This project follows the PEP 440
versioning specification. If the major has changed (e.g. the X in X.Y.Z
) then
a breaking API change has occurred requiring any dependent users to make
changes to their code. If the minor (e.g. the Y in X.Y.Z
) has changed then
one or more new features have been added. While if the patch has changed (e.g.
the Z in X.Y.Z
) then only a fix has been implemented.
This makes it easy for developers of TF SEAL and users alike to communicate about the risk involved in uptaking a new version.
Any time we make a change that could impact a consumer of TF SEAL whether
it be a bug fix, API improvement, performance enhancement, or resolve a
security issue a note is added to the CHANGELOG.md under the [Unreleased]
section as a part of the pull request changing the code. This makes it easy for
any consumers of the project to understand exactly what has changed in any
given version.
When a release is created the [Unreleased]
block is updated to the release
version and a new [Unreleased]
block is put at the top of the file.