name: "Python: Publish Package" on: release: types: - published jobs: call-test-lint: if: startsWith(github.event.release.tag_name, 'python/v') uses: ./.github/workflows/python-test-lint.yml permissions: contents: read with: ref: ${{ github.event.release.target_commitish }} secrets: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} build: name: Build distribution if: startsWith(github.event.release.tag_name, 'python/v') permissions: contents: read needs: - call-test-lint runs-on: ubuntu-latest defaults: run: working-directory: strands-py steps: - uses: actions/checkout@v6 with: persist-credentials: false fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v6 with: python-version: '3.10' - name: Install dependencies run: | python -m pip install --upgrade pip pip install hatch twine 'virtualenv<21' - name: Validate version run: | version=$(hatch version) if [[ $version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "Valid version format" exit 0 else echo "Invalid version format" exit 1 fi - name: Copy root LICENSE and NOTICE run: | cp ../LICENSE.APACHE LICENSE cp ../NOTICE . - name: Build run: | hatch build - name: Store the distribution packages uses: actions/upload-artifact@v7 with: name: python-package-distributions path: strands-py/dist/ deploy: name: Upload release to PyPI needs: - build runs-on: ubuntu-latest environment: name: pypi url: https://pypi.org/p/strands-agents permissions: id-token: write steps: - name: Download all the dists uses: actions/download-artifact@v8 with: name: python-package-distributions path: dist/ - name: Publish distribution to PyPI uses: pypa/gh-action-pypi-publish@release/v1