Create separate test workflow for docker
This expands on the current testing suite a bit by introducing a new workflow for testing functionality within the docker container. It runs the same test suite as the regular "test" workflow, but also performs a health check after running the app for 10 seconds to ensure functionality. The buildx workflow now waits for the docker test script to finish successfully, rather than the regular test workflow. This will hopefully avoid situations where new images are pushed with issues that aren't detected in regular testing of the app.main
parent
6f5f3d8ca7
commit
5a27d748d1
|
@ -2,7 +2,7 @@ name: buildx
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_run:
|
workflow_run:
|
||||||
workflows: ["tests"]
|
workflows: ["docker_tests"]
|
||||||
branches: [main]
|
branches: [main]
|
||||||
types:
|
types:
|
||||||
- completed
|
- completed
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
name: docker_tests
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: build and test
|
||||||
|
run: |
|
||||||
|
docker build --tag whoogle-search:test .
|
||||||
|
TEST_CONTAINER=$(docker run --entrypoint=/bin/bash --detach whoogle-search:test)
|
||||||
|
docker cp test "$TEST_CONTAINER":/whoogle/test
|
||||||
|
docker exec "$TEST_CONTAINER" ./run test
|
||||||
|
docker exec --detach "$TEST_CONTAINER" ./run
|
||||||
|
sleep 10
|
||||||
|
docker exec "$TEST_CONTAINER" curl -f http://localhost:5000/healthz || exit 1
|
|
@ -28,7 +28,6 @@ from requests.models import PreparedRequest
|
||||||
# Load DDG bang json files only on init
|
# Load DDG bang json files only on init
|
||||||
bang_json = json.load(open(app.config['BANG_FILE']))
|
bang_json = json.load(open(app.config['BANG_FILE']))
|
||||||
|
|
||||||
|
|
||||||
# Check the newest version of WHOOGLE
|
# Check the newest version of WHOOGLE
|
||||||
update = bsoup(get(app.config['RELEASES_URL']).text, 'html.parser')
|
update = bsoup(get(app.config['RELEASES_URL']).text, 'html.parser')
|
||||||
newest_version = update.select_one('[class="Link--primary"]').string[1:]
|
newest_version = update.select_one('[class="Link--primary"]').string[1:]
|
||||||
|
@ -36,7 +35,7 @@ current_version = int(''.join(filter(str.isdigit,
|
||||||
app.config['VERSION_NUMBER'])))
|
app.config['VERSION_NUMBER'])))
|
||||||
newest_version = int(''.join(filter(str.isdigit, newest_version)))
|
newest_version = int(''.join(filter(str.isdigit, newest_version)))
|
||||||
newest_version = '' if current_version >= newest_version \
|
newest_version = '' if current_version >= newest_version \
|
||||||
else newest_version
|
else newest_version
|
||||||
|
|
||||||
|
|
||||||
def auth_required(f):
|
def auth_required(f):
|
||||||
|
@ -113,10 +112,10 @@ def before_request_func():
|
||||||
session['uuid'] = str(uuid.uuid4())
|
session['uuid'] = str(uuid.uuid4())
|
||||||
session['key'] = generate_user_key()
|
session['key'] = generate_user_key()
|
||||||
|
|
||||||
# Skip checking for session on /autocomplete searches,
|
# Skip checking for session on any searches that don't
|
||||||
# since they can be done from the browser search bar (aka
|
# require a valid session
|
||||||
# no ability to initialize a session)
|
if (not Endpoint.autocomplete.in_path(request.path) and
|
||||||
if not Endpoint.autocomplete.in_path(request.path):
|
not Endpoint.healthz.in_path(request.path)):
|
||||||
return redirect(url_for(
|
return redirect(url_for(
|
||||||
'session_check',
|
'session_check',
|
||||||
session_id=session['uuid'],
|
session_id=session['uuid'],
|
||||||
|
@ -199,9 +198,9 @@ def index():
|
||||||
'logo.html',
|
'logo.html',
|
||||||
dark=g.user_config.dark),
|
dark=g.user_config.dark),
|
||||||
config_disabled=(
|
config_disabled=(
|
||||||
app.config['CONFIG_DISABLE'] or
|
app.config['CONFIG_DISABLE'] or
|
||||||
not valid_user_session(session) or
|
not valid_user_session(session) or
|
||||||
'cookies_disabled' in request.args),
|
'cookies_disabled' in request.args),
|
||||||
config=g.user_config,
|
config=g.user_config,
|
||||||
tor_available=int(os.environ.get('TOR_AVAILABLE')),
|
tor_available=int(os.environ.get('TOR_AVAILABLE')),
|
||||||
version_number=app.config['VERSION_NUMBER'])
|
version_number=app.config['VERSION_NUMBER'])
|
||||||
|
|
Loading…
Reference in New Issue