diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 000000000..068469986 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,53 @@ +name: build + +on: + workflow_dispatch: + push: + branches: + - main + pull_request: + branches: + - "**" + paths-ignore: + - "docs/**" + +concurrency: + group: build-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build: + name: "Build and Install" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python + id: setup_python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Cache virtual environment + uses: actions/cache@v3 + with: + # We are hashing requirements-dev.txt and requirements-extra.txt which + # contain all dependencies needed to run the tests and examples. + key: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version}}-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-dev.txt') }} + path: .venv + - name: Install system packages + run: sudo apt-get install -y portaudio19-dev + - name: Setup virtual environment + run: | + python -m venv .venv + - name: Install basic Python dependencies + run: | + source .venv/bin/activate + python -m pip install --upgrade pip + pip install -r requirements.txt -r requirements-dev.txt + - name: Build project + run: | + source .venv/bin/activate + python -m build + - name: Install project and other Python dependencies + run: | + source .venv/bin/activate + pip install --editable . diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 4222e1e8f..fc90bfaaf 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -29,9 +29,9 @@ jobs: - name: Cache virtual environment uses: actions/cache@v3 with: - # TODO: we are hashing requirements.txt but that doesn't contain all - # our dependencies pinned. - key: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version}}-${{ hashFiles('requirements.txt') }} + # We are hashing requirements-dev.txt and requirements-extra.txt which + # contain all dependencies needed to run the tests and examples. + key: venv-${{ runner.os }}-${{ steps.setup_python.outputs.python-version}}-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-dev.txt') }} path: .venv - name: Install system packages run: sudo apt-get install -y portaudio19-dev @@ -42,17 +42,8 @@ jobs: run: | source .venv/bin/activate python -m pip install --upgrade pip - pip install -r requirements.txt - - name: Build project - run: | - source .venv/bin/activate - python -m build - - name: Install project and other Python dependencies - run: | - source .venv/bin/activate - pip install --editable . + pip install -r requirements.txt -r requirements-dev.txt - name: Test with pytest run: | source .venv/bin/activate - pip install pytest pytest --doctest-modules --ignore-glob="*to_be_updated*" src tests