name: Publish to TestPyPI
on:
workflow_dispatch:
inputs:
ref:
description: "Branch, tag, or SHA to publish"
required: true
default: "feature/semantic-model-tools"
run_integration_tests:
description: "Run integration tests"
required: false
type: boolean
default: false
jobs:
tests:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.11", "3.12", "3.13"]
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Set up uv
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
cache-dependency-glob: "**/uv.lock"
- name: Install dependencies
run: uv sync --extra dev
- name: Run tests
run: uv run pytest
integration:
runs-on: ubuntu-latest
needs: tests
if: ${{ inputs.run_integration_tests }}
timeout-minutes: 60
environment: Integration
env:
FABRIC_INTEGRATION_TESTS: "1"
FABRIC_TEST_WORKSPACE_NAME: ${{ secrets.FABRIC_TEST_WORKSPACE_NAME }}
FABRIC_TEST_LAKEHOUSE_NAME: ${{ secrets.FABRIC_TEST_LAKEHOUSE_NAME }}
FABRIC_TEST_SQL_DATABASE: ${{ secrets.FABRIC_TEST_SQL_DATABASE }}
FABRIC_TEST_SOURCE_CONNECTION_ID: ${{ secrets.FABRIC_TEST_SOURCE_CONNECTION_ID }}
FABRIC_TEST_SOURCE_TYPE: ${{ secrets.FABRIC_TEST_SOURCE_TYPE }}
FABRIC_TEST_SOURCE_SCHEMA: ${{ secrets.FABRIC_TEST_SOURCE_SCHEMA }}
FABRIC_TEST_SOURCE_TABLE: ${{ secrets.FABRIC_TEST_SOURCE_TABLE }}
FABRIC_TEST_DEST_CONNECTION_ID: ${{ secrets.FABRIC_TEST_DEST_CONNECTION_ID }}
FABRIC_TEST_DEST_TABLE_NAME: ${{ secrets.FABRIC_TEST_DEST_TABLE_NAME }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install ODBC driver
run: |
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev,sql,telemetry]"
- name: Run integration tests
run: |
pytest -m integration
publish:
needs: [tests, integration]
if: >-
${{
always() &&
needs.tests.result == 'success' &&
(needs.integration.result == 'success' || needs.integration.result == 'skipped')
}}
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Set up uv
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
cache-dependency-glob: "**/uv.lock"
- name: Build package
run: |
uv venv
uv pip install --upgrade build
uv run python -m build
- name: Publish to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.TEST_PYPI_API_KEY }}
repository-url: https://test.pypi.org/legacy/