Merge pull request #2923 from johannaengland/fix-towncrier-link #638
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: Build NAV and run full test suite | |
on: [push, pull_request] | |
jobs: | |
build-and-test: | |
name: "Test on Python ${{ matrix.python-version}}" | |
runs-on: ubuntu-latest | |
strategy: | |
max-parallel: 4 | |
matrix: | |
python-version: ["3.7", "3.9", "3.10"] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: "Cache pip packages" | |
uses: actions/cache@v3 | |
id: pip-cache | |
with: | |
path: ~/.cache/pip | |
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', '**/requirements/*.txt') }} | |
restore-keys: | | |
${{ runner.os }}-pip- | |
- name: "Cache tox environments" | |
uses: actions/cache@v3 | |
id: tox-cache | |
with: | |
path: .tox | |
key: ${{ runner.os }}-tox-${{ matrix.python-version }}-${{ hashFiles('**/requirements.txt', '**/requirements/*.txt', 'tox.ini') }} | |
- name: "Set up Python ${{ matrix.python-version }}" | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: "Set environment variables" | |
run: | | |
echo "WORKSPACE=$GITHUB_WORKSPACE" >> $GITHUB_ENV | |
echo "PGHOST=localhost" >> $GITHUB_ENV | |
echo "PGUSER=nav" >> $GITHUB_ENV | |
echo "PGPASSWORD=password" >> $GITHUB_ENV | |
- name: "Update APT package lists" | |
run: | | |
sudo apt-get update -y | |
- name: "Install test runner dependencies" | |
run: | | |
set -xe | |
python3 -m pip install --upgrade 'pip==23.1.0' setuptools wheel 'tox<4' tox-gh-actions coverage virtualenv snmpsim 'pyasn1<0.5.0' | |
sudo apt-get install -y nbtscan | |
# virtualenv seems to currently be embedding a broken version of | |
# setuptools (2022-03-31). this ensures these embedded wheels are always | |
# up to date, but can potentially be removed again down the road. | |
- name: "Upgrade embedded virtualenv wheels" | |
run: | | |
virtualenv --upgrade-embed-wheel | |
- name: "Install libraries needed to build external dependencies" | |
run: | | |
set -xe | |
sudo apt-get install -y libldap2-dev libsasl2-dev libtidy5deb1 libsnmp40 | |
- uses: browser-actions/setup-chrome@latest | |
- run: chrome --version | |
- uses: nanasess/setup-chromedriver@v2 | |
- name: "Set up PostgreSQL" | |
uses: harmon758/postgresql-action@v1 | |
with: | |
postgresql version: '11' # minimum NAV requirement | |
postgresql user: $PGUSER | |
postgresql password: $PGPASSWORD | |
- name: "Run tests" | |
run: | | |
export DISPLAY=:99 | |
ulimit -c unlimited | |
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t | |
python3 -m tox | |
- name: Upload Selenium driver logs (${{ matrix.python-version }}) | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pytest-logs | |
path: | | |
/tmp/pytest-of-runner | |
- name: "Upload coverage to Codecov" | |
if: github.repository_owner == 'Uninett' | |
uses: codecov/codecov-action@v4 | |
with: | |
fail_ci_if_error: true | |
token: ${{ secrets.CODECOV_TOKEN }} # not required for forks of public repos | |
- name: Upload test reports (${{ matrix.python-version }}) | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-reports | |
path: | | |
reports/**/* | |
- name: Upload core dumps (${{ matrix.python-version }}) | |
if: failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: core-dumps | |
path: | | |
/tmp/core-* | |
- name: Print stack traces of core dumps (${{ matrix.python-version }}) | |
if: failure() | |
run: | | |
sudo apt-get install -y gdb | |
set -x | |
for core in /tmp/core-*; do | |
echo "===== CORE: $core =====" | |
file "$core" | |
program=$(gdb -ex quit -c "$core" | grep -o "generated by.*" | awk '{print $3}' | tr -d '`') | |
gdb -ex bt "$program" "$core" | |
echo | |
done | |
javascript: | |
name: "Test Javascript code" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: browser-actions/setup-chrome@latest | |
- uses: browser-actions/setup-firefox@latest | |
- run: chrome --version | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
- name: npm install | |
run: | | |
cd python/nav/web/static/js | |
npm ci | |
- name: npm test | |
run: xvfb-run -a npm test | |
working-directory: ./python/nav/web/static/js | |
- name: Upload JavaScript test reports | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: javascript-test-reports | |
path: | | |
reports/**/* |