dist: bionic language: python python: - 3.6 env: global: - DB_NAME=ottertune - ADMIN_PASSWORD=changeme - ROOT=$TRAVIS_BUILD_DIR - WEB=$ROOT/server/website - CONTROLLER=$ROOT/client/controller - DRIVER=$ROOT/client/driver matrix: include: - name: Docker env: - secure: "JdRlS4MAXv1wMBdQf98r4ugit1v0Emq7S/K3CpyP2jpj0QL0VFhPr/r3GFwq2BRM2y0vXQjD29AoZdiQLv4LULgp4AavcmL3kbD7SNNWileqCLbl3rHdGY1gNW4fYOYCPGMPxntYdm18vpXzoF/A81JUX0MMsw3Wh0dBtiQZQP7O4V+bX5hyuCqlxasfTI0Tl323MWao86I2nSmExvGTcYlissPKGb0+TS+qQjOshvJHtmv0PRxJ2a45fB1h1wkAqGKu0X7fXWAhoo9uPt4T9+oCW6bCklAZPbzm4wc3jurnQ//jS44ThtP4n+xH2mwwU9n0unMKl3I+so+R7nH7pE0YGTD+p/4p8lPXYCLlqllvuhNTf+JXLJoC+lIgQXl4qhtURPokohPxJXNRQRd1SWOyep85h9svX3Z+c3dj5160bM/ArB8jKuFtL1Cq/S7Je+liF3xE25BaFQ5P2DlVM1KxLbtvtaTAcvkxq/jr4zu7ZMAjJtDmF6hsuzflGYqNcElZlhMNtKoGeAfVNmpXvFoLt0Iezbafvc6izAqn/h6A+FKnCgmlOit+TyihqnAtIhj+TBgyOw0TFqJ4QKAb3pqL+FxFrH78yR/HGafNHBfvi6ND3b9BefQ0in2RimSSZbE90pdnxhtSxKUDch3hBd4Q0RxZbA/rRyiKQexxE9M=" - secure: "MdkCbzD+Toqrnz++93EUDf7hOgkP4h8rU42lnHQ5iShnlnwYzMmI90jCFwF5DYThmaDleBn54EB8lsaFcdmjhrhPWPkDhcRZgRAdfCwq+OIV1lH3KbVwBeLnnfKeci+TNldWinoOgS3cFkz+uXm8tFcRZgGJ/IW8Tu/oD9QWZixP7Zyfp28GMzm+6Hmb1lVbpsnMwiKQQSyPQTv9NB4jG1pzvP45cID1WrmgZFYhpDWOrclcSmLSF4N0o7Fu2x6Ninz5FkHImOlbY47DVJAGxYQDDPOr63lM5T5aE++dnvNfk9wnJwTQ0wKErnLoRpMnc1O2YwajyamPTLmLafnoh4EbFl0WY0tG1Xi3B01fRbzbdi2htv+Ltk9UD2XjHmJEKgDOBXD9WzIDq20eRT1ArYZdfIrD71s9JPQ5KlOJiTYuKfRMiMs1cEDFxjiQOMFeGCROZ1w0v2syf6dBLBQqVeYnsNAGg8Nvrtcw9jfsORoA+AQffgy8s2gJGLCp0JYOTrgJ06hA63wMq11vq61WVOT6F/PSrUamaGtN+L+vZNW8mPPqHMejedB29o0CfP6q7pI8KGcaHmWxPQ4fS3E+dwuAA9EnuC9Z8miTQm/NyDJdkHOf6qvTs5L/UPesnQaCDe2eCPnEivv1NYgQN36boyHo2gBiypH8TlGljCdoJR0=" - secure: "ANIFx1GJ3+O+zND5bIEkHDM86oGP5pkFPiWzCC+pEjTSxnF11cm0dTD4l4+QhV1i2RUYGZ0naD1dlantj9PuiHN1NkG9Gpd09edlhJSdSeYSuphMYqU0DEijxZTVl1IDBEgST16JPSc5x2Nz6urUJq5zmxnEeFG7UCfuHUWHdsMOhH6wKZ+am4/k7nfeZ1rtb5PXm9Xzy/6Hb9CBaMiAa+fQrPrVsLG+gFPOCdPveJXFi7O1qpWKo0GvWG6h3/XM1WuJTSC9lPRJ+d8akpbTYNW0anbDsAwD7Z0y+XCr96YB6VgDFvlPsnnePoA052pSt4cXkZSJKKyd6Vw2sXnjIX918ahgDh4gsaZzltAYOKnl49dT3ms2gljjTPs+YxJvC1//hPmAqlDpem7S4WeNhdVoyj1+eaFUpXbLWUFz9lC04EIBKb/hVJNADrW2w2g5wsVGcTinyweVk1uLqRMhHuyn2cec6d0kcJgDrWyA4f4IkXksPco+9dVU3f+nUH3dj9R7dUEHFvEngNdR7Oq9TiNkqp9RTbnuyjubQmPcCH42NW41DHCddRkWwT8FWxXOqYG7KfbGdy4gIP7XTCLRrovPqZM3rKy8Cr6ZzrFV9QvZV/I57rciDIzIU0jCiPEPHJxywK5QDrOv4GvMOWEdm05cFtytAK2t1laRB9dCQsI=" - secure: "T5VGk+B5Go78zBygxM2jIrduh2lbHQaoxOTG0sdABOVmsYZBieIzNLe40dVW8jegGoVdTwlw0Rfp5nUs7uzut5MtUc1hbMYL5Gem0/RxZAF20zTffgDZhOYD1K7B3DsE4j68+I5GRq0JKUaOqvD+54ZIEHIKmiS9Sc2rUpp3n6hrLkKyPoW87wOVlGn10eAZ1QjnKAB7W3E4a5d22Wx2C1w1UxG+x5/LYkSGQB8WpXhBJZdWnUOyAetPutLFEvrfA5AW6rl1ebkYi6OOc/og29ZT9/y5gji0+hIBGcjI+Fs81FGiq2TT3dTqvAiK1r8x1RhMdRWLuMTb0t+LVcUhGs1J9KFGSixcDqyCbZtX4QyHGpGpJYO975iFHFfsZ/WnnD4YKFKT7UG6MRxSm5LZMhf8mIiVTYbs142X+LKpXhsiY10BrqHnWfMO97kqHu9ezCVwyFRycSQzQUju7vc5IYz7GOFnnjYfmN9h5E00BBzpLrXjlwykazZuDreZS5RP9A5xGgHioZHAEBXWDySEmGRoAzhXmteHQV0v04enqxXWuVSq0bNAf/bgFGFjtm9RwgWiQ5Iw7ZaCtF85kTrIc/34OUTqaR3xZhp0laX0J8oyHgg1ci0nzmwxd5v+xFY4qah/71cwN4vb5wqPvhFleVBuZxvyf+cShcxseBzEKmg=" - secure: "h7ImM1Zi3QQZ1rQudwLVAEaBb6yc2RFw8jzyboq48Cgix3bGbeJxPHA32HGEF6cLQcI2nstyPpMelxptnbFf71kX0h4/KGLdoD4ZUXyHaNWkrDi92UOyYyxu0/b+SmlPUJHNsHndAXNijaMWA8hW0FqoYmmvbqI2mHWwpMo1QWypxALBgp/EDJ9TCySCAh6K0RSBzFt5Z3yBi4fNYiPRETOISF1nrOJqV4xvO5Mh6cb0P+7FALw3JAyOQjqmzbJHjiqk43/pDK6nX+n8/K6Lz+j/yISdLLxe8X9QmYUYWDSGvHdMFwrHcMFIgueCno2tgepQSVjZsLARJnhZXct2fd3XtWfVn2i9QwrxBQhC0KPnouYzoE0cH5jcE/Hnnvv6JgD5LyAqh+U5Njhpw3+g+yJoPQcDWty9amyF2sby/gBDdbh59u+TwaZupLTR8HoKeSNkOLDjWaHVr5hot8OajfXd8GZ5ViUFOUhVFX5TfjWIP7Y2ttXptDhTcTD+VnKHMEWbwu18FmLGuH15AiEuYLRfOMpBZaszbBLCQbnj9VwM9SOAHbW0Lab2jcv7PlhvIZjgyIeT310bgSuhWbWHLuDXJ6aHxTBvaKf5lw9casUhKIJbwpeWVIVk9U6mcR6IGCWCkRhJ8W6oU8bsOuHD4xkpHXKOmuSFun7KfoxPgeQ=" - secure: "g3ZjRwFYcn03Lo52oXbSQfZ5N3e3sQbzLGfhJ8YYeTFFM22jMiZhsKyM8PtV7D3FmRIzRouX4G7SBNY7gOYXVEjiCfaTie60vuXhJvaEmOHYm5k4b9smcA43KGtqMwWNkBvXC7vrGRDwH1V29BwdvIxCdKwemOU2Ka2Ws0SfLMrlUTRPwUqqDzNs9wZMVAaZbolzSvl9LTKFuQssshLm4oCFZjHRKsBiD8G3JpB3tlOjzW5c4KzGiKvFwnhirVV0mSwDd3dHsp6nebXdQV6Z+zlxrouLTbOzm72cJ4SzLrzsJVCFGK//0GD6xm48kPNvjHylb99bDav6kk5swNpUSwT38SYZKX47fwDJH+TnHAB12izHN7ujSTdbBqqsh/bm8dUU13nylNydRuucPOWrdcyw5gjDcUdeP/uRrWE4syF/5TY26oyJ1CVpl8PruiY8RAKSFoBqwIv7S/T17lbvQgCzl8RiIwToYvRYqlkcROi0yPWC3MU3n4Q+9kYUFwee38SshZGHqEtemT3n4UALuan+a3Fc1yem4XJGKyJX1BJTAjcN62dBHgzI/0h9d7K8w7pEhLEeZjpTS+tQJOxXv1sgbyC7KBjRhVnFzuKr2zWJMnGnSp7UcTWrXVdT74IXrts99r/MdWjIQwWKbEEJucs5BitlTlvUXnanmCtrCts=" - BACKEND=postgresql services: - docker before_install: - docker --version - docker-compose --version - env | sort install: true before_script: - sudo service mysql stop || true - sudo service postgresql stop || true - cd $ROOT/docker - docker-compose -f docker-compose.build.yml build --build-arg GIT_COMMIT=$TRAVIS_COMMIT - dcfile_mysql=docker-compose.mysql.yml - dcfile_postgres=docker-compose.postgresql.yml - BACKEND=mysql WEB_ENTRYPOINT="''" sh create-docker-compose.sh $dcfile_mysql - BACKEND=postgresql WEB_ENTRYPOINT="''" sh create-docker-compose.sh $dcfile_postgres script: - docker-compose -f $dcfile_postgres run --workdir="/app" --no-deps --rm web bash -c "pip3 freeze" - docker-compose -f $dcfile_postgres run --workdir="/app/controller" --no-deps --rm driver gradle build - docker-compose -f $dcfile_postgres run --workdir="/app" --no-deps --rm web bash -c "python3 -m unittest discover -s analysis/tests -v" - docker-compose -f $dcfile_postgres run --rm web bash -c "./wait-for-it.sh && python3 manage.py makemigrations website && python3 manage.py test --noinput -v 2" - docker-compose -f $dcfile_postgres rm -f -s -v - docker-compose -f $dcfile_mysql run --rm web bash -c "./wait-for-it.sh && python3 manage.py makemigrations website && python3 manage.py test --noinput -v 2" - docker-compose -f $dcfile_mysql rm -f -s -v after_success: true before_deploy: - /$ROOT/.travis/before_deploy.sh deploy: provider: script script: /$ROOT/.travis/deploy.sh on: repo: cmu-db/ottertune branch: master after_deploy: - curl -LO --retry 3 https://raw.github.com/mernst/plume-lib/master/bin/trigger-travis.sh - sh trigger-travis.sh --pro --branch master "$TRIGGER_USER" "$TRIGGER_REPO" "$TRIGGER_TOKEN" - docker logout - name: Unit Tests (MySQL v5.7) env: - BACKEND=mysql services: - mysql addons: apt: update: true packages: - mysql-server - python-mysqldb - rabbitmq-server - openjdk-11-jdk - gradle - checkstyle before_install: - mysql -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME}" - sed -i '/psycopg2/d' $WEB/requirements.txt - echo "codecov" >> $WEB/requirements.txt - name: Unit Tests (PostgreSQL v9.6) env: - BACKEND=postgresql addons: postgresql: "9.6" apt: update: true packages: - rabbitmq-server - openjdk-11-jdk - gradle - checkstyle before_install: - psql -U postgres -c "CREATE DATABASE ${DB_NAME}" - sed -i '/mysqlclient/d' $WEB/requirements.txt - echo "codecov" >> $WEB/requirements.txt - name: Integration Tests (MySQL v5.7) env: - BACKEND=mysql services: - mysql addons: apt: update: true packages: - mysql-server - python-mysqldb - rabbitmq-server before_install: - mysql -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME}" - sed -i '/psycopg2/d' $WEB/requirements.txt script: - cd $WEB && python manage.py runserver 0.0.0.0:8000 & - sleep 10 && cd $DRIVER && fab integration_tests after_success: true - name: Integration Tests (PostgreSQL v9.6) env: - BACKEND=postgresql addons: postgresql: "9.6" apt: update: true packages: - rabbitmq-server before_install: - psql -U postgres -c "CREATE DATABASE ${DB_NAME}" - sed -i '/mysqlclient/d' $WEB/requirements.txt script: - cd $WEB && python manage.py runserver 0.0.0.0:8000 & - sleep 10 && cd $DRIVER && fab integration_tests after_success: true install: - pip install -r $WEB/requirements.txt - pip freeze before_script: - env | sort - cd $WEB - sed -i "s|\('celery', 'db.*$\)|'console', \1|" website/settings/common.py - cp $ROOT/docker/credentials.py website/settings - cat website/settings/credentials.py - python manage.py makemigrations - python manage.py migrate - python manage.py startcelery - python manage.py createuser admin $ADMIN_PASSWORD --superuser script: - cd $ROOT/server && coverage run --omit="*/tests/*" -m unittest discover -s analysis/tests -v - cd $WEB && coverage run manage.py test --noinput -v 2 - cd $CONTROLLER && gradle build - cd $ROOT && git reset --soft ${TRAVIS_COMMIT_RANGE%...*} && git status && git log | head -n 1 && git lint after_success: - > codecov -F analysis -f "${ROOT}/server/.coverage" || (sleep 5 && codecov -F analysis -f "${ROOT}/server/.coverage") || (sleep 5 && codecov -F analysis -f "${ROOT}/server/.coverage") && echo "Codecov did not collect coverage reports" - > codecov -F website -f "${WEB}/.coverage" || (sleep 5 && codecov -F website -f "${WEB}/.coverage") || (sleep 5 && codecov -F website -f "${WEB}/.coverage") && echo "Codecov did not collect coverage reports"