feat: configurable e2e test cases #409
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: Build and Test | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - feature/* | |
| - fix/* | |
| pull_request: | |
| branches: | |
| - main | |
| release: | |
| types: [published] | |
| jobs: | |
| test: | |
| permissions: | |
| contents: read | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # Test all Python versions on Ubuntu (primary platform) | |
| - 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" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Initialize submodules | |
| env: | |
| GIT_ASKPASS: /bin/echo | |
| GH_PAT: ${{ secrets.GH_PAT }} | |
| run: | | |
| git config --global url."https://${GH_PAT}@github.com/".insteadOf "https://github.com/" | |
| git submodule update --init --recursive | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| - name: Set up Python ${{ matrix.python-version }} | |
| run: uv python install ${{ matrix.python-version }} | |
| - name: Install the project | |
| run: uv sync --locked --all-extras --dev | |
| - name: Generate protobuf code | |
| shell: bash | |
| run: | | |
| source .venv/bin/activate | |
| ./scripts/compile_proto.sh || (echo "Protobuf compilation failed. Ensure submodules are initialized and proto files exist." && exit 1) | |
| - name: Run linter | |
| run: | | |
| uv run ruff check | |
| - name: Run code formatting check | |
| run: | | |
| uv run ruff format --check | |
| - name: Run type checking | |
| run: | | |
| uv run basedpyright | |
| - name: Run tests | |
| run: | | |
| uv run pytest -m 'not functional' --tb=auto --cov-report=term-missing:skip-covered --cov=src/resolver_athena_client tests/ | |
| build: | |
| needs: test | |
| permissions: | |
| contents: read | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| # required for guessing versioning for pre-releases | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - name: Initialize submodules | |
| run: git submodule update --init --recursive | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| - name: Set up Python | |
| run: uv python install | |
| - name: Install the project | |
| run: uv sync --locked --all-extras --dev | |
| - name: Generate protobuf code | |
| run: | | |
| source .venv/bin/activate | |
| ./scripts/compile_proto.sh || (echo "Protobuf compilation failed. Ensure submodules are initialized and proto files exist." && exit 1) | |
| - name: Set version from tag | |
| run: | | |
| if [[ "$GITHUB_REF" == refs/tags/* ]]; then | |
| TAG_VERSION=${GITHUB_REF#refs/tags/} | |
| # Remove 'v' prefix if present | |
| VERSION=${TAG_VERSION#v} | |
| echo "Setting version to: $VERSION" | |
| uv version "$VERSION" | |
| else | |
| if [[ "$GITHUB_REF" == refs/heads/main ]]; then | |
| echo "On main branch, using default version" | |
| else | |
| # we want to build pre-release versioning for other branches, but only feature/* and fix/* will get published. | |
| LAST_TAG=$(git describe --abbrev=0 --tags) | |
| uv version "$LAST_TAG" | |
| uv version --bump patch --bump dev="$(date +%Y%m%d%H%M%S)" | |
| fi | |
| fi | |
| - name: Build package | |
| run: uv build | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: dist | |
| path: dist/ | |
| publish: | |
| needs: [test, build] | |
| runs-on: ubuntu-latest | |
| if: > | |
| (github.event_name == 'release' && github.event.action == 'published') || | |
| (github.event_name == 'push' && ( | |
| startsWith(github.ref, 'refs/heads/feature') || | |
| startsWith(github.ref, 'refs/heads/fix'))) | |
| environment: | |
| name: pypi | |
| url: https://pypi.org/p/resolver-athena-client | |
| permissions: | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: dist | |
| path: dist/ | |
| - name: Publish package distributions to PyPI | |
| run: uv publish --trusted-publishing always |