diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..601de84 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,96 @@ +name: CI + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +jobs: + lint: + runs-on: ubuntu-latest + name: lint ${{ matrix.python-version }} + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12"] + steps: + - name: Lint with Ruff + run: | + pip install ruff + ruff --output-format=github . + continue-on-error: true + + test: + name: test ${{ matrix.python-version }} on ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: [ubuntu, windows] + python-version: ["3.10", "3.11", "3.12"] + + runs-on: ${{ matrix.os }}-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install pytest + pip install -r requirements.txt + + - name: Test with pytest + run: | + pip install pytest pytest-cov + pytest --cov="rendercv" tests/ + mv .coverage .coverage.${{ matrix.python-version }}.${{ matrix.os }} + continue-on-error: true + + - name: Store coverage files + uses: actions/upload-artifact@v3 + with: + name: coverage + path: .coverage.${{ matrix.python-version }}.${{ matrix.os }} + + + combine-coverages: + needs: [test] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v4 + with: + python-version: "3.12" + + - name: Download coverage files + uses: actions/download-artifact@v3 + with: + name: coverage + path: coverage + + - name: Combine coverage files + run: | + pip install coverage + ls -la coverage + coverage combine coverage + coverage report + coverage html --show-contexts --title "RenderCV coverage for ${{ github.sha }}" + + - name: Upload coverage data to smokeshow + run: | + pip install smokeshow + smokeshow upload ./htmlcov + env: + SMOKESHOW_GITHUB_STATUS_DESCRIPTION: Coverage {coverage-percentage} + SMOKESHOW_GITHUB_COVERAGE_THRESHOLD: 50 + SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 58271d7..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,57 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a variety of Python versions -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python - -name: python tests - -on: - push: - branches: ["main"] - pull_request: - branches: ["main"] - -jobs: - build: - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-latest] - python-version: ["3.10", "3.11", "3.12"] - - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - python -m pip install flake8 pytest - pip install -r requirements.txt - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest - run: | - pip install pytest pytest-cov - pytest --cov-report html --cov="." tests/ - continue-on-error: true - # - name: Upload referebce files as artifacts - # uses: actions/upload-artifact@v3 - # with: - # name: reference_files - # path: ./tests/reference_files - - name: Upload coverage data to smokeshow - if: ${{matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12'}} # upload coverage once - run: | - pip install smokeshow - smokeshow upload ./htmlcov - env: - SMOKESHOW_GITHUB_STATUS_DESCRIPTION: Coverage {coverage-percentage} - SMOKESHOW_GITHUB_COVERAGE_THRESHOLD: 50 - SMOKESHOW_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SMOKESHOW_GITHUB_PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }}