forked from freelawproject/courtlistener
-
Notifications
You must be signed in to change notification settings - Fork 0
132 lines (123 loc) · 4.93 KB
/
tests.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
name: docker build and test
on:
push:
branches:
- "**"
pull_request:
branches:
- "main"
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
tag_flags: ["--exclude-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 d -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 }}
# Build and cache docker images so tests are always run on the latest
# dependencies
- name: Set up docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: network=bridge
- name: Prebuild docker images
uses: docker/build-push-action@v6
with:
context: ./courtlistener
file: ./courtlistener/docker/django/Dockerfile
load: true
build-args: |
BUILD_ENV=dev
cache-from: type=gha
cache-to: type=gha,mode=max
# Prepare Docker images
- name: Pull docker images
working-directory: courtlistener/docker/courtlistener
run: docker compose pull --quiet --ignore-buildable
- name: Build docker images
working-directory: courtlistener/docker/courtlistener
run: docker compose build
- 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: docker compose -f docker-compose.yml -f docker-compose.tmpfs.yml up -d --no-build --pull=never
- name: List docker containers
run: docker ps -a --no-trunc
- name: CAT cl-django cert
run: docker exec cl-django cat /root/.postgresql/root.crt
- name: Start cl-postgres
working-directory: courtlistener/docker/courtlistener
run: docker compose -f docker-compose.yml -f docker-compose.tmpfs.yml up -d --no-build --pull=never cl-postgres
- name: Show the docker startup logs
working-directory: courtlistener/docker/courtlistener
run: docker compose logs
- name: CAT cl-postgres cert
run: docker exec cl-postgresql cat /etc/ssl/private/cl-postgres.crt
# Run the checks and tests
- name: List docker container statuses
run: docker container ps
- name: Check if migrations are missing
run: docker exec cl-django python /opt/courtlistener/manage.py makemigrations --check --dry-run
- name: List docker container statuses
run: docker container ps
- 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