--- a +++ b/.github/workflows/build_dist.yaml @@ -0,0 +1,91 @@ +name: Build distributions + +on: + pull_request: + release: + types: + - published + +jobs: + ruff: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + - run: pip install ruff + - name: Check formatting + run: ruff format --check + - name: Check linting + run: ruff check --output-format=github . + + tests_and_coverage: + needs: [ruff] + name: Run unit tests and upload coverage report + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install test dependencies + run: pip install tox tox-gh-actions + + - name: Run tests and build coverage report + run: tox + + # upload the coverage report to coveralls.io + - name: Upload coverage reports to Coveralls + uses: coverallsapp/github-action@v2.3.4 + with: + parallel: true + if: ${{ matrix.python-version == '3.12' }} + + finish_coverage: + needs: [tests_and_coverage] + name: Notify Coveralls that the parallel build has finished + runs-on: ubuntu-latest + steps: + - name: Close parallel build + uses: coverallsapp/github-action@v2.3.4 + with: + parallel-finished: true + + build_sdist: + needs: [ruff] + name: Build source distribution + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Build source distribution + run: pipx run build --sdist + + - uses: actions/upload-artifact@v4 + with: + name: inmoose_sdist + path: dist/inmoose-*.tar.gz + + upload_pypi: + needs: [build_sdist, tests_and_coverage] + name: Publish source distribution on PyPI + runs-on: ubuntu-latest + permissions: + # IMPORTANT: this permission is mandatory for trusted publishing + id-token: write + if: github.event_name == 'release' && github.event.action == 'published' + steps: + - uses: actions/download-artifact@v4 + with: + name: inmoose_sdist + path: dist + + - uses: pypa/gh-action-pypi-publish@v1.12.3 +