Backport CI and test modernization #97
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test | |
on: [push, pull_request] | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
grappelli: ["0", "1"] | |
python-version: ["3.11"] | |
django-version: ["4.2"] | |
exclude: | |
- python-version: "3.11" | |
grappelli: "1" | |
include: | |
- python-version: "3.9" | |
django-version: "4.2" | |
grappelli: "1" | |
- python-version: "3.9" | |
django-version: "5.0" | |
grappelli: "0" | |
- python-version: "3.10" | |
django-version: "5.0" | |
grappelli: "1" | |
- python-version: "3.12" | |
django-version: "5.1" | |
grappelli: "0" | |
runs-on: ubuntu-latest | |
name: Django ${{ matrix.django-version }} (Python ${{ matrix.python-version }})${{ matrix.grappelli == '1' && ' + grappelli' || '' }} | |
env: | |
DJANGO: ${{ matrix.django-version }} | |
GRAPPELLI: ${{ matrix.grappelli }} | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
NODE_ENV: test | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Setup chromedriver | |
# uses: nanasess/setup-chromedriver@v2.2.2 | |
uses: nanasess/setup-chromedriver@42cc2998329f041de87dc3cfa33a930eacd57eaa | |
- name: Install tox | |
run: | | |
python3 -m pip install tox tox-gh-actions | |
- name: Cache instrumented static files | |
id: cache-test-dist | |
uses: actions/cache@v3 | |
with: | |
path: nested_admin/tests/static | |
key: test-dist-${{ hashFiles('package-lock.json', '.github/workflows/test.yml', 'webpack.config.js', 'package.json', '.*rc*', 'nested_admin/static/nested_admin/src/**/*.*s') }} | |
- name: Cache node_modules | |
id: cache-node_modules | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: node_modules-${{ hashFiles('package-lock.json') }} | |
- name: Setup nodejs | |
if: steps.cache-test-dist.outputs.cache-hit != 'true' | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '16' | |
cache: 'npm' | |
- name: npm ci | |
if: steps.cache-test-dist.outputs.cache-hit != 'true' && steps.cache-node_modules.outputs.cache-hit != 'true' | |
run: | | |
npm ci || npm ci || npm ci | |
- name: Build instrumented static files | |
if: steps.cache-test-dist.outputs.cache-hit != 'true' | |
run: | | |
npm run build | |
- name: Run tests | |
run: | | |
tox -- -vvv --selenosis-driver=chrome-headless --numprocesses=4 --exitfirst || \ | |
tox -- -vvv --selenosis-driver=chrome-headless | |
env: | |
PIXELMATCH_BIN: ${{ env.GITHUB_WORKSPACE }}/node_modules/.bin/pixelmatch | |
- name: Upload junit xml | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: junit-reports | |
path: reports/*.xml | |
- name: Upload python coverage | |
run: | | |
tox -e coverage-report | |
tox -e codecov | |
env: | |
CODECOV_NAME: ${{ github.workflow }} | |
- name: Upload js coverage | |
run: npm run report && npm run codecov | |
env: | |
CODECOV_NAME: ${{ github.workflow }} | |
lint: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
tool: ["flake8", "black", "eslint", "stylelint"] | |
include: | |
- tool: flake8 | |
language: python | |
- tool: black | |
language: python | |
- tool: eslint | |
language: javascript | |
- tool: stylelint | |
language: javascript | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
if: matrix.language == 'python' | |
with: | |
python-version: 3.9 | |
- name: Cache node_modules | |
if: matrix.language == 'javascript' | |
id: cache-node_modules | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: node_modules-${{ hashFiles('package-lock.json') }}-lint | |
restore-keys: | | |
node_modules-${{ hashFiles('package-lock.json') }} | |
- name: Setup nodejs | |
if: matrix.language == 'javascript' | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '16' | |
cache: 'npm' | |
- name: npm ci | |
if: matrix.language == 'javascript' && steps.cache-node_modules.outputs.cache-hit != 'true' | |
run: | | |
npm ci || npm ci || npm ci | |
- name: Run black | |
if: matrix.tool == 'black' | |
uses: psf/black@stable | |
with: | |
src: "nested_admin docs setup.py" | |
version: "22.8.0" | |
- name: Install flake8 | |
if: matrix.tool == 'flake8' | |
run: pip install flake8 | |
- name: Run flake8 | |
if: matrix.tool == 'flake8' | |
uses: suo/flake8-github-action@releases/v1 | |
with: | |
checkName: 'lint' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run ${{ matrix.tool }} | |
if: matrix.language == 'javascript' | |
run: | | |
npm run lint:${{ matrix.tool }} | |
report: | |
if: always() | |
needs: build | |
runs-on: ubuntu-latest | |
name: "Report Test Results" | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: junit-reports | |
- name: Publish tests report | |
uses: mikepenz/action-junit-report@1a91e26932fb7ba410a31fab1f09266a96d29971 | |
with: | |
report_paths: ./*.xml | |
require_tests: true | |
fail_on_failure: true | |
check_name: Test Report | |
success: | |
needs: [lint, report] | |
runs-on: ubuntu-latest | |
name: Test Successful | |
steps: | |
- name: Success | |
run: echo Test Successful |