# [THIS DOCUMENT HAS MOVED HERE](https://github.com/cloud-custodian/cloud-custodian/discussions/7509) If you make significant changes tell Jorge so we can fix it in github discussions ### Release Checklist Notes ## Package steps ## Set up keyring with test pypi/pypi Edit `$HOME/.pypirc` to define `pypi` and `testpypi` repositories as follows: ``` [distutils] index-servers = pypi testpypi [pypi] repository = https://upload.pypi.org/legacy/ username = __token__ [testpypi] repository = https://test.pypi.org/legacy/ username = __token__ ``` The `__token__` username works in tandem with a [PyPI API token](https://pypi.org/help/#apitoken). The token can be stored in [keyring](https://pypi.org/project/keyring/) rather than hardcoded into your config file, using commands like: echo "pypi-<rest of testpypi api token>" | keyring set https://test.pypi.org/legacy/ __token__ echo "pypi-<rest of pypi api token>" | keyring set https://upload.pypi.org/legacy/ __token__ That will allow `twine` to fetch your token during the publishing step later. ## Clean checkout and clean virtualenv Do a completely fresh checkout, never use a working branch for releases: make install-poetry ## Create Changelog python tools/dev/changelog.py --since 0.9.14.0 --path . --output Changelog.md Some "bad commit" warnings here are OK - it means the changelog generation sees something off about the commit message and moves it to "other". Open the Changelog in a text editor and adjust accordingly so that it makes sense for humans. ## Generate frozen deps make pkg-freeze-setup Comment out pywin32 dep here until we fix it for real: $EDITOR tools/c7n_azure/setup.py git diff poetry install Note: be careful when publishing to pypi - you can only publish a given version of a package once. If you make a mistake, you need to bump the version number. This command will build and test wheels _but not publish them_ yet. make pkg-publish-wheel Once wheels are built, you can test installing all of them side-by-side in a new virtual environment to sort out any dependency conflicts locally before publishing: python -m venv test-custodian-release source test-custodian-release/bin/activate # or activate.fish, etc find . -maxdepth 4 -iname "*.whl" | sort | xargs pip install And run test policies across multiple providers as an additional smoke test. If everything looks good, you can continue to the publishing phase. If there are new packages check https://test.pypi.org/project/c7n/ to check your work, then add the owner usernames. Then publish packages to test PyPI (it will not prompt you if you have your token/keychain set up correctly): make pkg-publish-wheel We can derive the expected versions of all packages from the locally built wheels, and ensure that those versions install from testpypi without error into your release testing virtual environment: # translate wheel paths like ./dist/c7n-0.9.17-py3-none-any.whl to the # pip constraints like c7n==0.9.17 and install those hard dependencies # from testpypi, falling back to "real pypi" to fetch non-c7n dependencies # find . -maxdepth 4 -iname "*.whl" \ | sort | sed -E 's/.*(c7n.*)-(.*)-py3.*/\1==\2/' \ | xargs python -m pip install \ --index-url https://test.pypi.org/simple \ --extra-index-url https://pypi.org/simple Ensure these commands finish and produce the expected output: custodian version custodian schema --json > file.txt custodian schema gcp Put the changelog in your copy buffer for the next step cat Changelog.md | pbcopy # OSX-only cat Changelog.md | xsel -c # Linux/X11 only ## Create a new release on c7n repo Paste in changelog when making a release. - Create a new tag - Github [documentation on managing releases](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository) ## create a test policy to test it Grab an example policy from the examples repo or use your own: $EDITOR policies.yaml custodian run policies.yaml Ensure you test a policy for AWS, GCP, Azure, and any other cloud provider c7n supports. [link to examples repo] # update PKG_REPO in Makefile make pkg-publish-wheel ## Announce Publish announcement to the [c7n mailing list] and [gitter channel].