Skip to content

Curo code refactoring #5

Curo code refactoring

Curo code refactoring #5

Workflow file for this run

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