PR perm test #718
Workflow file for this run
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: Web Tests/Analysis | |
on: | |
workflow_dispatch: | |
push: | |
paths: | |
- 'python/web/**' | |
- 'python/common/**' | |
- '.github/workflows/web.yml' | |
- 'easyinstall.sh' | |
pull_request: | |
paths: | |
- 'python/web/**' | |
- 'python/common/**' | |
- '.github/workflows/web.yml' | |
- 'easyinstall.sh' | |
branches: | |
- 'develop' | |
- 'main' | |
jobs: | |
backend_checks: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: python | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.7.15 | |
cache: 'pip' | |
- run: pip install -r web/requirements-dev.txt | |
id: pip | |
- run: black --check . | |
- run: flake8 . | |
if: success() || failure() && steps.pip.outcome == 'success' | |
backend_tests: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: docker | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Check DockerHub for existing backend image | |
run: | | |
export DOCKER_BACKEND_IMAGE="piscsi/backend-standalone:`git ls-files -s python .github/workflows/web.yml | git hash-object --stdin`" | |
echo "DOCKER_BACKEND_IMAGE=${DOCKER_BACKEND_IMAGE}" >> $GITHUB_ENV | |
docker pull --quiet ${DOCKER_BACKEND_IMAGE} || echo "DOCKER_BACKEND_NEEDS_PUSH=1" >> $GITHUB_ENV | |
- name: Build and launch containers | |
run: docker compose -f docker-compose.ci.yml up -d | |
- name: Run test suite | |
run: docker compose -f docker-compose.ci.yml run pytest -v | |
- name: Check if DockerHub secrets defined | |
run: if [[ $DOCKERHUB_USERNAME && $DOCKERHUB_TOKEN ]]; then echo "DOCKERHUB_SECRETS_DEFINED=1" >> $GITHUB_ENV; fi | |
env: | |
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} | |
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Login to DockerHub | |
uses: docker/login-action@v2 | |
if: env.DOCKERHUB_SECRETS_DEFINED && env.DOCKER_BACKEND_NEEDS_PUSH | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Push backend image to DockerHub | |
if: (success() || failure()) && env.DOCKERHUB_SECRETS_DEFINED && env.DOCKER_BACKEND_NEEDS_PUSH | |
run: docker compose -f docker-compose.ci.yml push backend | |
- name: Upload test artifacts | |
if: success() || failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pytest-output.zip | |
path: | | |
docker/volumes/pytest/report.xml | |
docker/volumes/pytest/pytest.log | |
- name: Output container logs | |
if: success() || failure() | |
run: | | |
docker compose -f docker-compose.ci.yml logs backend > backend.log | |
docker compose -f docker-compose.ci.yml logs web > web.log | |
docker compose -f docker-compose.ci.yml logs -t | sort -u -k 3 > combined.log | |
- name: Upload backend log | |
if: success() || failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: backend.log | |
path: docker/backend.log | |
- name: Upload web log | |
if: success() || failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: web.log | |
path: docker/web.log | |
- name: Upload combined log | |
if: success() || failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: combined.log | |
path: docker/combined.log | |
frontend_checks: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: python/web | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
cache: 'npm' | |
cache-dependency-path: python/web/package-lock.json | |
- run: npm ci | |
id: npm | |
- name: Stylelint | |
run: | | |
npx stylelint src/static/themes/modern/style.css | |
npx stylelint src/static/themes/classic/style.css | |
- name: Prettier | |
run: | | |
npx prettier --check src/static/themes/modern/style.css | |
npx prettier --check src/static/themes/classic/style.css | |
if: success() || failure() && steps.npm.outcome == 'success' |