Releases of globus-compute-sdk and globus-compute-endpoint are always published
in unison and with the same version number, even when only one package has changes.
The process is partially automated with tools to help along the way.
You must have the following tools installed and available:
gitscrivtox
You will also need the following credentials:
- a configured GPG key in
gitin order to create signed tags - pypi credentials for use with
twine(e.g. a token in~/.pypirc) valid for publishingglobus-compute-sdkandglobus-compute-endpoint - Globus VPN access
-
Branch off from the
mainbranch to create a release branch (e.g.,v.1.1.0):$ git checkout -b v1.1.0 main -
Bump the version of both packages, and the endpoint's SDK dependency, to a new alpha release (e.g.,
1.0.0->1.1.0a0):$ $EDITOR compute_sdk/globus_compute_sdk/version.py compute_endpoint/setup.py compute_endpoint/globus_compute_endpoint/version.py -
Commit the changes:
$ git add compute_sdk/globus_compute_sdk/version.py compute_endpoint/setup.py compute_endpoint/globus_compute_endpoint/version.py $ git commit -m "Bump versions for alpha release v1.1.0a0" $git push -u origin v1.1.0
-
Run
./release.shfrom the repo root. This script creates a signed tag named after the current version and pushes it to GitHub, then uses thetoxrelease command to push each package to PyPi. -
Navigate to the Build with Parameters Jenkins page.
-
Enter the name of the release branch (eg,
v4.8.0) into theBRANCH_OR_TAGfield. (LeaveBUILD_FOR_STABLEunchecked.) -
Click the Build button.
-
Wait 15-30 minutes and confirm that the build is green.
-
Branch off from the release branch to create a new bugfix branch:
$ git checkout -b some-bugfix v1.1.0 -
Commit your changes and push to GitHub.
$ git add . $ git commit -m "Fixed X" $ git push -u origin some-bugfix
-
Open a PR in GitHub to merge the bugfix branch into the release branch.
-
Once the PR is approved and merged, pull the new commits from the remote release branch:
$ git checkout v1.1.0 $ git pull
-
Repeat steps 2 through 4 of the main Alpha releases procedure. Be sure to only bump the alpha version number (e.g.,
1.1.0a0->1.1.0a1).
-
Checkout the release branch.
$ git checkout v1.1.0 -
Remove the alpha version designation for both packages and the endpoint's SDK dependency (e.g.,
1.1.0a1->1.1.0):$ $EDITOR compute_sdk/globus_compute_sdk/version.py compute_endpoint/setup.py compute_endpoint/globus_compute_endpoint/version.py -
Update the changelog:
$ scriv collect --edit -
Commit the changes:
$ git add changelog.d/ docs/changelog.rst $ git add compute_sdk/globus_compute_sdk/version.py compute_endpoint/setup.py compute_endpoint/globus_compute_endpoint/version.py $ git commit -m "Bump versions and changelog for release v1.1.0" $ git push
-
Run
./release.shfrom the repo root. -
Open a PR in GitHub to merge the release branch into
main.⚠️ Important: Once approved, merge the PR using the "Merge commit" option. This will ensure that the tagged commits and bug fixes from the release branch are properly added to themainbranch. -
Create a GitHub release from the tag. See GitHub documentation for instructions.
-
Navigate to the Build with Parameters Jenkins page.
-
Enter the name of the release branch (eg,
v4.8.0) into theBRANCH_OR_TAGfield, and ensureBUILD_FOR_STABLEis checked. -
Click the Build button.
-
Wait 15-30 minutes and confirm that the build is green.
-
Depending on whether GCS is also releasing:
- If GCS deploys after Compute on release day, the new packages will be pushed to the public repos as part of their deploy, so no action is needed.
- If GCS is not doing a release the same week, or if they finish their deploy before we finish building our packages, we need to manually run the downloads sync Jenkins script:
- https://builds.globus.org/jenkins/view/all/job/Synchronize%20GCSv5%20Stable/build?delay=0sec
- Leave
SYNC_WHEELS_ONLYunchecked
- Leave
- https://builds.globus.org/jenkins/view/all/job/Synchronize%20GCSv5%20Stable/build?delay=0sec
Our alpha builds will go to the unstable repo, and production packages goes to both
the testing and stable repos.
After this build process for production, the testing and stable packages will reside in an internal globus 'holding' repo. GCS manages the infrastructure so we need to run another Jenkins build to push it to live if GCS is not doing a release the same week which also pushes our packages. See last pipeline step above.
- Example of unstable repo:
- Directory of testing images:
- Stable repo:
- The images will be in the below build directory after we finish our build process, but not public:
- After GCS push during deploy day (or if we ping them to do so), the public images will be located at: