mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-06 14:59:11 +08:00
158 lines
5.7 KiB
YAML
158 lines
5.7 KiB
YAML
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.test_pypi_token }}
|
|
run: |
|
|
twine upload --repository testpypi --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
|