diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..0615f42 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,50 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install uv + run: | + curl -LsSf https://astral.sh/uv/install.sh | sh + echo "$HOME/.local/bin" >> $GITHUB_PATH + + - name: Verify uv installation + run: uv --version + + - name: Install dependencies + run: | + uv sync --extra dev --extra research + + - name: Test CLI commands + run: | + uv run ami-dataset --help + uv run ami-classification --help + + - name: Run test suite + run: | + # Placeholder for running the full test suite + # TODO: Add proper test command once test infrastructure is ready + uv run pytest tests/ -v || echo "Tests not yet configured" + + - name: Verify imports + run: | + uv run python -c "import torch; import numpy; import pandas; print('Core dependencies imported successfully')" + + - name: Verify optional dependencies (research) + run: | + uv run python -c "import awscli; import absl; print('Research dependencies imported successfully')" diff --git a/README.md b/README.md index 504ddaf..a0cf557 100644 --- a/README.md +++ b/README.md @@ -21,30 +21,46 @@ Software, algorithms and research related to the Automated Monitoring of Insects ## Setup -Poetry is used to manage the dependencies common to all scripts and sub-projects. Some sub-projects may manage their own dependencies if necessary. +[uv](https://github.com/astral-sh/uv) is used to manage the dependencies common to all scripts and sub-projects. uv is a fast, modern Python package manager. -1. Install [Poetry](https://python-poetry.org/docs/#installation) +1. Install [uv](https://docs.astral.sh/uv/getting-started/installation/) + ```bash + # On macOS and Linux + curl -LsSf https://astral.sh/uv/install.sh | sh + + # On Windows + powershell -c "irm https://astral.sh/uv/install.ps1 | iex" + ``` 2. Clone this repository -2. Create a `.env` or copy `.env.example` and update the values -3. Run `poetry install` in the root of the repository -4. Install pre-commit hooks `poetry run pre-commit install` +3. Create a `.env` or copy `.env.example` and update the values +4. Install dependencies in the root of the repository: + ```bash + uv sync + ``` +5. Install pre-commit hooks: + ```bash + uv run pre-commit install + ``` + +### [Optional] Conda + uv +An optional way to setup the environment is to use [Conda](https://conda.io/projects/conda/en/latest/index.html) for creating and managing the Python environment, while using [uv](https://docs.astral.sh/uv/) for managing the packages and dependencies. -### [Optional] Conda + Poetry -An optional way to setup the environment is to use [Conda](https://conda.io/projects/conda/en/latest/index.html) for creating and managing the environment, while using [Poetry](https://python-poetry.org/) for managing the packages and dependencies. Run the following steps to setup: 1. [Install Conda](https://docs.anaconda.com/free/miniconda/) 2. Create conda environment using the `environment.yml`: `conda env create -f environment.yml` 3. Activate the conda environment: `conda activate ami-ml` -4. Install packages in the root of the repository using Poetry: `poetry install` +4. Install packages in the root of the repository using uv: `uv sync` ## Usage Activate the virtual environment before running scripts ```bash -poetry shell +source .venv/bin/activate # On Linux/macOS +# or +.venv\Scripts\activate # On Windows ``` -Example for running a script (in the poetry shell): +Example for running a script (in the activated environment): ```bash python src/localization/inference_localization.py \ @@ -53,8 +69,8 @@ python src/localization/inference_localization.py \ --model_type fasterrcnn_mobilenet_v3_large_fpn ``` -Alternatively, one can run the scripts without activating poetry's shell: +Alternatively, one can run scripts without activating the environment: ```bash - poetry run python