[V5] [BugFix] Fix for Breaking Changes in FastAPI 0.137+ #6
Workflow file for this run
This file contains hidden or 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: 📦 publish openbb-bls | |
| # Triggers exclusively on the merge of a ``release/openbb-bls-v*`` branch into ``develop``. | |
| on: | |
| pull_request: | |
| types: [closed] | |
| branches: [develop, v5] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| version-check: | |
| name: Verify version bump | |
| if: ${{ (github.event_name == 'pull_request' && github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/openbb-bls-v')) || github.event_name == 'workflow_dispatch' }} | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version: ${{ steps.parse.outputs.version }} | |
| defaults: | |
| run: | |
| shell: bash | |
| working-directory: openbb_platform/providers/bls | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| ref: develop | |
| - name: Parse [project].version from pyproject.toml | |
| id: parse | |
| run: | | |
| VERSION=$(grep -m1 -E '^version[[:space:]]*=' pyproject.toml | sed -E 's/^version[[:space:]]*=[[:space:]]*"([^"]+)".*/\1/') | |
| if [ -z "$VERSION" ]; then | |
| echo "::error::Could not parse [project].version from pyproject.toml." | |
| exit 1 | |
| fi | |
| echo "Local version: $VERSION" | |
| echo "version=$VERSION" >> "$GITHUB_OUTPUT" | |
| - name: Fail if version already exists on PyPI | |
| env: | |
| VERSION: ${{ steps.parse.outputs.version }} | |
| run: | | |
| STATUS=$(curl -sS -o /dev/null -w "%{http_code}" "https://pypi.org/pypi/openbb-bls/${VERSION}/json") | |
| case "$STATUS" in | |
| 200) | |
| echo "::error::openbb-bls ${VERSION} is already published on PyPI." | |
| echo "Bump openbb_platform/providers/bls/pyproject.toml [project].version and re-merge a fresh release branch." | |
| exit 1 | |
| ;; | |
| 404) | |
| echo "openbb-bls ${VERSION} is not yet on PyPI — proceeding." | |
| ;; | |
| *) | |
| echo "::error::Unexpected status $STATUS from PyPI JSON API. Aborting to avoid a silent skip." | |
| exit 1 | |
| ;; | |
| esac | |
| - name: Verify release branch name matches pyproject version | |
| if: github.event_name == 'pull_request' | |
| env: | |
| VERSION: ${{ steps.parse.outputs.version }} | |
| BRANCH: ${{ github.event.pull_request.head.ref }} | |
| run: | | |
| EXPECTED="release/openbb-bls-v${VERSION}" | |
| if [ "$BRANCH" != "$EXPECTED" ]; then | |
| echo "::error::Release branch '${BRANCH}' does not match pyproject version '${VERSION}'." | |
| echo "Expected branch name: '${EXPECTED}'." | |
| echo "Either rename the release branch or update [project].version in pyproject.toml so they agree." | |
| exit 1 | |
| fi | |
| echo "Branch '${BRANCH}' matches pyproject version '${VERSION}'." | |
| build: | |
| name: Build sdist + wheel | |
| needs: version-check | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| shell: bash | |
| working-directory: openbb_platform/providers/bls | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| ref: develop | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.11" | |
| - run: python -m pip install --upgrade pip uv | |
| - name: Restore BLS series cache (warming pool for PR workflow) | |
| uses: actions/cache@v4 | |
| with: | |
| path: openbb_platform/providers/bls/openbb_bls/assets/bls_cache.zip | |
| key: bls-cache-${{ hashFiles('openbb_platform/providers/bls/openbb_bls/utils/generate_cache.py') }} | |
| - name: Build sdist + wheel (fresh BLS cache) | |
| # ``OPENBB_BLS_FORCE_CACHE_REBUILD=1`` makes the build hook | |
| # bypass its idempotent skip and regenerate against live | |
| # download.bls.gov so the published artifact is always current. | |
| env: | |
| OPENBB_BLS_FORCE_CACHE_REBUILD: "1" | |
| run: uv build --no-sources | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: openbb-bls-dist | |
| path: openbb_platform/providers/bls/dist/ | |
| if-no-files-found: error | |
| retention-days: 7 | |
| test: | |
| name: Test (${{ matrix.os }} / Python ${{ matrix.python_version }}) | |
| needs: build | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # Linux: full sweep across every released Python. | |
| - { os: ubuntu-latest, python_version: "3.10" } | |
| - { os: ubuntu-latest, python_version: "3.11" } | |
| - { os: ubuntu-latest, python_version: "3.12" } | |
| - { os: ubuntu-latest, python_version: "3.13" } | |
| - { os: ubuntu-latest, python_version: "3.14" } | |
| # macOS + Windows: min and max supported. | |
| - { os: macos-latest, python_version: "3.10" } | |
| - { os: macos-latest, python_version: "3.14" } | |
| - { os: windows-latest, python_version: "3.10" } | |
| - { os: windows-latest, python_version: "3.14" } | |
| runs-on: ${{ matrix.os }} | |
| defaults: | |
| run: | |
| shell: bash | |
| working-directory: openbb_platform/providers/bls | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| ref: develop | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python_version }} | |
| allow-prereleases: true | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: openbb-bls-dist | |
| path: openbb_platform/providers/bls/dist | |
| - run: python -m pip install --upgrade pip uv | |
| - name: Seed the cache asset from the built wheel | |
| run: | | |
| WHEEL=$(ls dist/openbb_bls-*.whl | head -1) | |
| mkdir -p openbb_bls/assets | |
| python -c " | |
| import sys, zipfile, shutil | |
| wheel = sys.argv[1] | |
| dest = sys.argv[2] | |
| with zipfile.ZipFile(wheel) as z: | |
| with z.open('openbb_bls/assets/bls_cache.zip') as src, open(dest, 'wb') as out: | |
| shutil.copyfileobj(src, out) | |
| " "$WHEEL" openbb_bls/assets/bls_cache.zip | |
| - name: Install openbb-bls from source (+ dev group) | |
| run: | | |
| uv pip install --system -e . | |
| uv pip install --system --group dev | |
| - name: Run unit tests | |
| run: pytest tests --cov=openbb_bls --cov-report=term-missing | |
| publish: | |
| name: Publish to PyPI | |
| needs: test | |
| runs-on: ubuntu-latest | |
| permissions: | |
| id-token: write # required for PyPI OIDC trusted publishing | |
| steps: | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: openbb-bls-dist | |
| path: dist | |
| - uses: pypa/gh-action-pypi-publish@release/v1 | |
| with: | |
| packages-dir: dist |