Merge branch 'main' into subprocess-exception #845
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: docker build and test | |
on: | |
push: | |
branches: | |
- "**" | |
pull_request: | |
branches: | |
- "main" | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out CourtListener | |
uses: actions/checkout@v4 | |
with: | |
path: courtlistener | |
# Build docker image | |
- name: Set up docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build docker image | |
uses: docker/build-push-action@v6 | |
with: | |
context: ./courtlistener | |
file: ./courtlistener/docker/django/Dockerfile | |
push: false # This image is for testing only | |
tags: courtlistener:latest | |
outputs: type=docker,dest=/tmp/courtlistener.tar | |
build-args: | | |
BUILD_ENV=dev | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: courtlistener | |
path: /tmp/courtlistener.tar | |
compression-level: 0 | |
retention-days: 1 | |
test: | |
runs-on: ubuntu-latest | |
needs: build | |
strategy: | |
fail-fast: false | |
matrix: | |
tag_flags: ["--exclude-tag selenium", "--tag selenium"] | |
steps: | |
- name: Check out solr | |
uses: actions/checkout@v4 | |
with: | |
repository: freelawproject/courtlistener-solr-server | |
ref: main | |
path: courtlistener-solr-server | |
- name: Set up solr permissions | |
run: | | |
cd courtlistener-solr-server | |
sudo chown -R :1024 data | |
sudo chown -R :1024 solr | |
sudo find data -type d -exec chmod g+s {} \; | |
sudo find solr -type d -exec chmod g+s {} \; | |
sudo find data -type d -exec chmod 775 {} \; | |
sudo find solr -type d -exec chmod 775 {} \; | |
sudo find data -type f -exec chmod 664 {} \; | |
sudo find solr -type f -exec chmod 664 {} \; | |
- name: Check out CourtListener | |
uses: actions/checkout@v4 | |
with: | |
path: courtlistener | |
- name: Create the .env settings file | |
working-directory: courtlistener/ | |
run: cp .env.example .env.dev | |
- name: Update .env.dev file | |
working-directory: courtlistener/ | |
run: | | |
echo 'SECRET_KEY=Verbal-Kint-is-Keyser-Soze' >> .env.dev | |
echo 'ALLOWED_HOSTS=*' >> .env.dev | |
- name: Echo github actor name for debugging | |
run: echo ${{ github.actor }} | |
- name: Set up docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
driver-opts: network=host | |
# Prepare Docker images | |
- name: Pull docker images | |
working-directory: courtlistener/docker/courtlistener | |
run: docker compose pull --quiet --ignore-buildable | |
- name: Download courtlistener image | |
uses: actions/download-artifact@v4 | |
with: | |
name: courtlistener | |
path: /tmp | |
- name: Load courtlistener image | |
run: docker load --input /tmp/courtlistener.tar | |
- name: Build cl-postgresql images # TODO: replace with an off-the-shelf image. Until then, build now for later steps. | |
working-directory: courtlistener/docker/courtlistener | |
run: docker compose build cl-postgresql | |
- name: List docker images | |
run: docker image ls -a --no-trunc | |
# Docker images are ready. Start them up. | |
- name: Create docker network | |
run: docker network create -d bridge --attachable cl_net_overlay | |
- name: Start docker containers | |
working-directory: courtlistener/docker/courtlistener | |
run: > # don't build, rather use loaded image from build step, specified by merging overriding config | |
docker compose -f docker-compose.yml -f docker-compose.tmpfs.yml -f <(echo 'services: { cl-django: { image: "courtlistener" }, cl-celery: { image: "courtlistener" } }') up -d --no-build --pull=never | |
- name: List docker containers | |
run: docker ps -a --no-trunc | |
- name: Show the docker startup logs | |
working-directory: courtlistener/docker/courtlistener | |
run: docker compose logs | |
# Run the checks and tests | |
- name: Check if migrations are missing | |
run: docker exec cl-django python /opt/courtlistener/manage.py makemigrations --check --dry-run | |
- name: Run the tests! | |
run: > | |
docker exec -e SELENIUM_DEBUG=1 -e SELENIUM_TIMEOUT=30 cl-django | |
python /opt/courtlistener/manage.py test | |
cl --verbosity=2 ${{ matrix.tag_flags }} --parallel | |
- name: Export selenium results from docker to host | |
if: failure() | |
run: | | |
# This is annoying b/c docker cp doesn't support globs. See: | |
# https://stackoverflow.com/q/35806102/ | |
# https://github.com/moby/moby/issues/7710 | |
mkdir selenium-screenshots | |
docker exec cl-django bash -c "mkdir /extract && mv /tmp/*-selenium.png /extract ||:" | |
docker cp 'cl-django:/extract' selenium-screenshots/ | |
- name: Save selenium screenshot as Github artifacts | |
uses: actions/upload-artifact@master | |
if: failure() | |
with: | |
name: selenium-screenshots | |
path: selenium-screenshots/extract | |
if-no-files-found: ignore | |
# Cancel the current workflow (tests) for pull requests (head_ref) only. See: | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-using-a-fallback-value | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true |