Code refactoring #12
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: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| python-version: ["3.11"] | |
| deps: ["minimum", "latest"] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| version: "0.9.18" # Match local uv version | |
| enable-cache: true | |
| # Cache uv dependencies to speed up runs | |
| - name: Restore uv cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/uv | |
| key: uv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('uv.lock') }} | |
| restore-keys: | | |
| uv-${{ runner.os }}-${{ matrix.python-version }}- | |
| uv-${{ runner.os }}- | |
| # Debug: Verify working directory and script existence | |
| - name: Debug working directory and files | |
| if: matrix.deps == 'minimum' | |
| run: | | |
| pwd | |
| ls -la | |
| find . -type f | |
| ls -la scripts/ || echo "scripts/ directory not found" | |
| # Install toml for version extraction | |
| - name: Install toml | |
| if: matrix.deps == 'minimum' | |
| run: pip install toml | |
| # Extract versions from pyproject.toml | |
| - name: Extract versions from pyproject.toml | |
| if: matrix.deps == 'minimum' | |
| id: extract-versions | |
| run: | | |
| echo "numpy=$(python ${{ github.workspace }}/scripts/extract_version.py numpy)" >> $GITHUB_OUTPUT | |
| echo "pandas=$(python ${{ github.workspace }}/scripts/extract_version.py pandas)" >> $GITHUB_OUTPUT | |
| echo "scipy=$(python ${{ github.workspace }}/scripts/extract_version.py scipy)" >> $GITHUB_OUTPUT | |
| echo "python-dateutil=$(python ${{ github.workspace }}/scripts/extract_version.py python-dateutil)" >> $GITHUB_OUTPUT | |
| - name: Create virtual environment | |
| run: uv venv --python ${{ matrix.python-version }} .venv-${{ matrix.deps }} | |
| - name: Install dependencies (latest) | |
| if: matrix.deps == 'latest' | |
| run: | | |
| . .venv-${{ matrix.deps }}/bin/activate && \ | |
| uv pip install ".[dev]" -e . | |
| - name: Install dependencies (minimum) | |
| if: matrix.deps == 'minimum' | |
| run: | | |
| . .venv-${{ matrix.deps }}/bin/activate && \ | |
| uv pip install \ | |
| "numpy==${{ steps.extract-versions.outputs.numpy }}" \ | |
| "pandas==${{ steps.extract-versions.outputs.pandas }}" \ | |
| "scipy==${{ steps.extract-versions.outputs.scipy }}" \ | |
| "python-dateutil==${{ steps.extract-versions.outputs.python-dateutil }}" \ | |
| .[dev] \ | |
| -e . | |
| - name: Run pytest | |
| run: | | |
| . .venv-${{ matrix.deps }}/bin/activate && \ | |
| uv run pytest tests/ -v -s | |
| - name: Run doctests | |
| run: | | |
| . .venv-${{ matrix.deps }}/bin/activate && \ | |
| uv run python -m doctest curo/daycount/*.py curo/calculator.py -v | |
| - name: Run coverage | |
| if: matrix.deps == 'latest' | |
| run: | | |
| . .venv-${{ matrix.deps }}/bin/activate && \ | |
| uv run pytest --cov=curo --cov-report=xml tests/ -v | |
| # - name: Upload coverage report | |
| # if: matrix.deps == 'latest' | |
| # uses: codecov/codecov-action@v4 | |
| # with: | |
| # files: ./coverage.xml | |
| # token: ${{ secrets.CODECOV_TOKEN }} | |
| - name: Minimize uv cache | |
| if: matrix.deps == 'latest' | |
| run: uv cache prune --ci | |
| build: | |
| runs-on: ubuntu-latest | |
| needs: test | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.11" | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| version: "0.9.18" | |
| enable-cache: true | |
| # Cache uv dependencies | |
| - name: Restore uv cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/uv | |
| key: uv-${{ runner.os }}-3.11-${{ hashFiles('uv.lock') }} | |
| restore-keys: | | |
| uv-${{ runner.os }}-3.11- | |
| uv-${{ runner.os }}- | |
| - name: Create virtual environment | |
| run: uv venv --python 3.11 .venv-build | |
| - name: Install build dependencies | |
| run: | | |
| . .venv-build/bin/activate && \ | |
| uv pip install build | |
| - name: Build package | |
| run: | | |
| . .venv-build/bin/activate && \ | |
| uv build | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist | |
| path: dist/ | |
| - name: Minimize uv cache | |
| run: uv cache prune --ci |