[Package] Release #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "[Package] Release" | |
on: | |
workflow_dispatch: | |
inputs: | |
package: | |
type: choice | |
options: | |
- opentelemetry-propagator-aws-xray | |
- opentelemetry-resource-detector-azure | |
- opentelemetry-sdk-extension-aws | |
- opentelemetry-instrumentation-openai-v2 | |
description: 'Package to be released' | |
required: true | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
steps: | |
- run: | | |
if [[ $GITHUB_REF_NAME != package-release/${{ inputs.package }}* ]]; then | |
echo this workflow should only be run against package-release/${{ inputs.package }}* branches | |
exit 1 | |
fi | |
- uses: actions/checkout@v4 | |
- name: Set environment variables | |
run: | | |
version=$(./scripts/eachdist.py version --package ${{ inputs.package }}) | |
if [[ $version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then | |
major="${BASH_REMATCH[1]}" | |
minor="${BASH_REMATCH[2]}" | |
patch="${BASH_REMATCH[3]}" | |
if [[ $patch != 0 ]]; then | |
prior_version_when_patch="${major}.${minor}.$((patch - 1))" | |
fi | |
elif [[ $version =~ ^([0-9]+)\.([0-9]+)b([0-9]+)$ ]]; then | |
major="${BASH_REMATCH[1]}" | |
minor="${BASH_REMATCH[2]}" | |
patch="${BASH_REMATCH[3]}" | |
if [[ $patch != 0 ]]; then | |
prior_version_when_patch="${major}.${minor}b$((patch - 1))" | |
fi | |
else | |
echo "unexpected version: $version" | |
exit 1 | |
fi | |
path=$(./scripts/eachdist.py find-package --package ${{ inputs.package }}) | |
echo "CHANGELOG=./$path/CHANGELOG.md" >> $GITHUB_ENV | |
echo "PACKAGE_NAME=${{ inputs.package }}" >> $GITHUB_ENV | |
echo "VERSION=$version" >> $GITHUB_ENV | |
echo "RELEASE_TAG=${{ inputs.package }}==$version" >> $GITHUB_ENV | |
echo "PRIOR_VERSION_WHEN_PATCH=$prior_version_when_patch" >> $GITHUB_ENV | |
# check out main branch to verify there won't be problems with merging the change log | |
# at the end of this workflow | |
- uses: actions/checkout@v4 | |
with: | |
ref: main | |
- name: Check that change log update was merged to main | |
run: | | |
if [[ -z $PRIOR_VERSION_WHEN_PATCH ]]; then | |
# not making a patch release | |
if ! grep --quiet "^## Version ${VERSION}" ${CHANGELOG}; then | |
echo the pull request generated by prepare-release-branch.yml needs to be merged first | |
exit 1 | |
fi | |
fi | |
# back to the release branch | |
- uses: actions/checkout@v4 | |
# next few steps publish to pypi | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.8' | |
- name: Build wheels | |
run: ./scripts/build_a_package.sh | |
- name: Install twine | |
run: | | |
pip install twine | |
# The step below publishes to testpypi in order to catch any issues | |
# with the package configuration that would cause a failure to upload | |
# to pypi. One example of such a failure is if a classifier is | |
# rejected by pypi (e.g "3 - Beta"). This would cause a failure during the | |
# middle of the package upload causing the action to fail, and certain packages | |
# might have already been updated, this would be bad. | |
# EDIT: 5/31/2024 - TestPypi now requires a verified email. Commenting out as a temporary measure | |
# until we found TestPypi credentials. | |
# - name: Publish to TestPyPI | |
# env: | |
# TWINE_USERNAME: '__token__' | |
# TWINE_PASSWORD: ${{ secrets.test_pypi_token }} | |
# run: | | |
# twine upload --repository testpypi --skip-existing --verbose dist/* | |
- name: Publish to PyPI | |
env: | |
TWINE_USERNAME: '__token__' | |
TWINE_PASSWORD: ${{ secrets.pypi_password }} | |
run: | | |
twine upload --skip-existing --verbose dist/* | |
- name: Generate release notes | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: ./scripts/generate_release_notes.sh | |
- name: Create GitHub release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
gh release create --target $GITHUB_REF_NAME \ | |
--title "${PACKAGE_NAME} ${VERSION}" \ | |
--notes-file /tmp/release-notes.txt \ | |
--discussion-category announcements \ | |
$RELEASE_TAG | |
- uses: actions/checkout@v4 | |
with: | |
ref: main | |
- name: Copy change log updates to main | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: ./scripts/merge_changelog_to_main.sh | |
- name: Use CLA approved github bot | |
run: .github/scripts/use-cla-approved-github-bot.sh | |
- name: Create pull request against main | |
env: | |
# not using secrets.GITHUB_TOKEN since pull requests from that token do not run workflows | |
GITHUB_TOKEN: ${{ secrets.OPENTELEMETRYBOT_GITHUB_TOKEN }} | |
run: | | |
message="Copy changelog updates from $GITHUB_REF_NAME" | |
body="Copy changelog updates from \`$GITHUB_REF_NAME\`." | |
branch="opentelemetrybot/changelog-${GITHUB_REF_NAME//\//-}" | |
if [[ -z $PRIOR_VERSION_WHEN_PATCH ]]; then | |
if git diff --quiet; then | |
echo there are no updates needed to the change log on main, not creating pull request | |
exit 0 # success | |
fi | |
fi | |
git commit -a -m "$message" | |
git push origin HEAD:$branch | |
gh pr create --title "$message" \ | |
--body "$body" \ | |
--head $branch \ | |
--base main |