diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml new file mode 100644 index 0000000..5740fdc --- /dev/null +++ b/.github/workflows/unit_tests.yml @@ -0,0 +1,64 @@ +name: unit tests + +on: + push: # run on every push or PR to any branch + pull_request: + +jobs: + python-unit: + name: Python unit tests + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: 3.9 + + # base the python cache on the hash of all pyproject.toml, + # which includes python requirements. + # if any change, the cache is invalidated. + - name: Cache pip + uses: actions/cache@v2 + with: + path: ~/.cache/pip + key: pip-${{ hashFiles('pyproject.toml') }} + restore-keys: | + pip-${{ hashFiles('pyproject.toml') }} + pip- + + - name: Install dependencies + run: pip install ".[dev]" + + - name: Run pytest + run: pytest --cov=./ --cov-report=xml + + - name: Upload test coverage to Codecov + uses: codecov/codecov-action@v3 + + # Set the color of the slack message used in the next step based on the + # status of the build: "danger" for failure, "good" for success, + # "warning" for error + - name: Set Slack message color based on build status + if: ${{ always() }} + env: + JOB_STATUS: ${{ job.status }} + run: echo "SLACK_COLOR=$(if [ "$JOB_STATUS" == "success" ]; then echo "good"; elif [ "$JOB_STATUS" == "failure" ]; then echo "danger"; else echo "warning"; fi)" >> $GITHUB_ENV + + # Send a message to slack to report the build status. The webhook is stored + # at the organization level and available to all repositories. Only run on + # scheduled builds & pushes, since PRs automatically report to Slack. + - name: Report status to Slack + uses: rtCamp/action-slack-notify@master + if: ${{ always() && (github.event_name == 'schedule' || github.event_name == 'push') }} + continue-on-error: true + env: + SLACK_COLOR: ${{ env.SLACK_COLOR }} + SLACK_WEBHOOK: ${{ secrets.ACTIONS_SLACK_WEBHOOK }} + SLACK_TITLE: "Workflow `${{ github.workflow }}`: ${{ job.status }}" + SLACK_MESSAGE: "Run on " + SLACK_FOOTER: "" + MSG_MINIMAL: true # use compact slack message format diff --git a/pyproject.toml b/pyproject.toml index 790a9fe..3abec88 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ dependencies = [ dynamic = ["version"] [project.optional-dependencies] -dev = ["pre-commit", "pytest"] +dev = ["pre-commit", "pytest", "pytest-cov"] [tool.black] line-length = 88