commit
3037cdfca2
|
@ -31,14 +31,6 @@ script:
|
||||||
after_success:
|
after_success:
|
||||||
- sonar-scanner
|
- sonar-scanner
|
||||||
|
|
||||||
deploy:
|
|
||||||
provider: script
|
|
||||||
script: bash deploy.sh sartography/cr-connect-workflow
|
|
||||||
skip_cleanup: true
|
|
||||||
on:
|
|
||||||
all_branches: true
|
|
||||||
condition: $TRAVIS_BRANCH =~ ^(dev|testing|demo|training|staging|master|rrt\/.*)$
|
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
on_success: change
|
on_success: change
|
||||||
|
|
17
Dockerfile
17
Dockerfile
|
@ -1,15 +1,24 @@
|
||||||
FROM sartography/cr-connect-python-base
|
FROM python:3.8
|
||||||
|
|
||||||
|
RUN pip install pipenv
|
||||||
|
RUN useradd _gunicorn --no-create-home --user-group
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y -q \
|
||||||
|
gcc libssl-dev \
|
||||||
|
curl postgresql-client git-core \
|
||||||
|
gunicorn3 postgresql-client
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY Pipfile Pipfile.lock /app/
|
COPY Pipfile Pipfile.lock /app/
|
||||||
|
RUN cd /app && pipenv lock --keep-outdated --requirements > requirements.txt
|
||||||
|
RUN pip install -r /app/requirements.txt
|
||||||
|
|
||||||
RUN set -xe \
|
RUN set -xe \
|
||||||
&& pipenv install --dev \
|
|
||||||
&& apt-get remove -y gcc python3-dev libssl-dev \
|
&& apt-get remove -y gcc python3-dev libssl-dev \
|
||||||
&& apt-get autoremove -y \
|
&& apt-get autoremove -y \
|
||||||
&& apt-get clean -y \
|
&& apt-get clean -y \
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
&& useradd _gunicorn --no-create-home --user-group
|
|
||||||
|
|
||||||
COPY . /app/
|
COPY . /app/
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
|
@ -26,7 +26,7 @@ Example:
|
||||||
email ("My Subject", "dhf8r@virginia.edu", pi.email)
|
email ("My Subject", "dhf8r@virginia.edu", pi.email)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def do_task_validate_only(self, task, *args, **kwargs):
|
def do_task_validate_only(self, task, study_id, workflow_id, *args, **kwargs):
|
||||||
self.get_subject(args)
|
self.get_subject(args)
|
||||||
self.get_email_recipients(task, args)
|
self.get_email_recipients(task, args)
|
||||||
self.get_content(task)
|
self.get_content(task)
|
||||||
|
|
|
@ -172,6 +172,8 @@ class WorkflowService(object):
|
||||||
# If we have a default_value or value_expression, try to set the default
|
# If we have a default_value or value_expression, try to set the default
|
||||||
if field.has_property(Task.FIELD_PROP_VALUE_EXPRESSION) or (hasattr(field, 'default_value') and field.default_value):
|
if field.has_property(Task.FIELD_PROP_VALUE_EXPRESSION) or (hasattr(field, 'default_value') and field.default_value):
|
||||||
form_data[field.id] = WorkflowService.get_default_value(field, task)
|
form_data[field.id] = WorkflowService.get_default_value(field, task)
|
||||||
|
if not field.has_property(Task.FIELD_PROP_REPEAT):
|
||||||
|
continue
|
||||||
|
|
||||||
# If we are only populating required fields, and this isn't required. stop here.
|
# If we are only populating required fields, and this isn't required. stop here.
|
||||||
if required_only:
|
if required_only:
|
||||||
|
|
45
deploy.sh
45
deploy.sh
|
@ -1,45 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
# Builds the Docker image for the current git branch on Travis CI and
|
|
||||||
# publishes it to Docker Hub.
|
|
||||||
#
|
|
||||||
# Parameters:
|
|
||||||
# $1: Docker Hub repository to publish to
|
|
||||||
#
|
|
||||||
# Required environment variables (place in Settings menu on Travis CI):
|
|
||||||
# $DOCKER_USERNAME: Docker Hub username
|
|
||||||
# $DOCKER_TOKEN: Docker Hub access token
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
echo 'Building Docker image...'
|
|
||||||
DOCKER_REPO="$1"
|
|
||||||
|
|
||||||
function branch_to_tag () {
|
|
||||||
if [ "$1" == "master" ]; then echo "latest"; else echo "$1" ; fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function branch_to_deploy_group() {
|
|
||||||
if [[ $1 =~ ^(rrt\/.*)$ ]]; then echo "rrt"; else echo "crconnect" ; fi
|
|
||||||
}
|
|
||||||
|
|
||||||
DOCKER_TAG=$(branch_to_tag "$TRAVIS_BRANCH")
|
|
||||||
|
|
||||||
DEPLOY_GROUP=$(branch_to_deploy_group "$TRAVIS_BRANCH")
|
|
||||||
|
|
||||||
if [ "$DEPLOY_GROUP" == "rrt" ]; then
|
|
||||||
IFS='/' read -ra ARR <<< "$TRAVIS_BRANCH" # Split branch on '/' character
|
|
||||||
DOCKER_TAG=$(branch_to_tag "rrt_${ARR[1]}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "DOCKER_REPO = $DOCKER_REPO"
|
|
||||||
echo "DOCKER_TAG = $DOCKER_TAG"
|
|
||||||
|
|
||||||
echo "$DOCKER_TOKEN" | docker login -u "$DOCKER_USERNAME" --password-stdin || exit 1
|
|
||||||
docker build -f Dockerfile -t "$DOCKER_REPO:$DOCKER_TAG" . || exit 1
|
|
||||||
|
|
||||||
|
|
||||||
# Push Docker image to Docker Hub
|
|
||||||
echo "Publishing to Docker Hub..."
|
|
||||||
docker push "$DOCKER_REPO" || exit 1
|
|
||||||
echo "Done."
|
|
|
@ -1,9 +1,19 @@
|
||||||
from tests.base_test import BaseTest
|
from tests.base_test import BaseTest
|
||||||
from crc import mail
|
from crc import mail
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
class TestEmailScript(BaseTest):
|
class TestEmailScript(BaseTest):
|
||||||
|
|
||||||
|
def test_email_script_validation(self):
|
||||||
|
# This validates scripts.email.do_task_validate_only
|
||||||
|
# It also tests that we don't overwrite the default email_address with random text during validation
|
||||||
|
# Otherwise json would have an error about parsing the email address
|
||||||
|
self.load_example_data()
|
||||||
|
spec_model = self.load_test_spec('email_script')
|
||||||
|
rv = self.app.get('/v1.0/workflow-specification/%s/validate' % spec_model.id, headers=self.logged_in_headers())
|
||||||
|
self.assertEqual([], rv.json)
|
||||||
|
|
||||||
def test_email_script(self):
|
def test_email_script(self):
|
||||||
with mail.record_messages() as outbox:
|
with mail.record_messages() as outbox:
|
||||||
|
|
||||||
|
@ -12,6 +22,7 @@ class TestEmailScript(BaseTest):
|
||||||
first_task = self.get_workflow_api(workflow).next_task
|
first_task = self.get_workflow_api(workflow).next_task
|
||||||
|
|
||||||
workflow = self.get_workflow_api(workflow)
|
workflow = self.get_workflow_api(workflow)
|
||||||
|
self.assertEqual('dan@sartography.com', workflow.next_task.data['email_address'])
|
||||||
self.complete_form(workflow, first_task, {'email_address': 'test@example.com'})
|
self.complete_form(workflow, first_task, {'email_address': 'test@example.com'})
|
||||||
|
|
||||||
self.assertEqual(1, len(outbox))
|
self.assertEqual(1, len(outbox))
|
||||||
|
|
Loading…
Reference in New Issue