Skip to content

Merge pull request #187 from matematikk-mooc/KURSP-1111-unittests-his… #336

Merge pull request #187 from matematikk-mooc/KURSP-1111-unittests-his…

Merge pull request #187 from matematikk-mooc/KURSP-1111-unittests-his… #336

Workflow file for this run

name: Test, build and deploy
# Controls when the action will run. Triggers the workflow on manual trigger or push
on:
workflow_dispatch:
push:
branches:
- staging
- master
- test
paths-ignore:
- '**.md'
- '.github/workflows/health-test.yml'
- '.github/health_test_src/**'
- '**.dev.yml'
jobs:
test-build-deploy:
name: Runs unit tests, builds docker image and deploys image
runs-on: ubuntu-latest
env:
DB_HOST: 127.0.0.1
KPAS_DOMAIN: kpas-lti-staging-kpas.azurewebsites.net #NB! must match certificate in .github/kpas_ssl_certs
CANVAS_DOMAIN: bibsys.instructure.com
CANVAS_ACCOUNT_ID: 99
KPAS_LTI_GIT_COMMIT: 7274efb45554b025d3b9800ab4e915003fe81fb0 #Exactly which state in the KPAS-LTI git repository should be used as dependency during our tests
DJANGO_SECRET_KEY: not_secret_key
#CA_FILE_NAME: ca.crt
AZURE_CONTAINER_REGISTRY: udirkpas.azurecr.io
AZURE_RESOURCE_GROUP: laravel
AZURE_APP_NAME: statistics-api
WEBSITES_PORT: 8000
steps:
# GitHub repository checkout
- name: GitHub repository checkout
uses: actions/checkout@v1
- name: Log in to Azure
run: |
az login --service-principal --username 50d27170-f4e0-4185-ac88-27d0348a5dc5 --password ${{ secrets.AZURE_CLIENT_SECRET }} --tenant 8cd185d3-3aa6-4594-833d-a058dabb5b6d
- name: Log in to Docker
run: |
az acr login --username 50d27170-f4e0-4185-ac88-27d0348a5dc5 --password ${{ secrets.AZURE_CLIENT_SECRET }} --name udirkpas.azurecr.io
- name: Start MySQL service
run: |
sudo bash -c 'echo "[mysqld]" >> /etc/mysql/my.cnf'
sudo bash -c 'echo "port = 3307" >> /etc/mysql/my.cnf'
sudo bash -c 'echo "bind-address = 0.0.0.0" >> /etc/mysql/my.cnf'
sudo systemctl start mysql.service
# - name: Pull code from KPAS-LTI GitHub repository
# run: |
# git clone https://github.com/matematikk-mooc/kpas-api
#
# - name: Copy self-signed certificates and keys to KPAS-LTI nginx directory
# run: |
# sed -i 's/server_name\ localhost;/server_name\ \_;/g' kpas-api/docker/nginx/sites/default.conf
# cp $GITHUB_WORKSPACE/.github/kpas_ssl_certs/* kpas-api/docker/nginx/ssl/
#
# - name: Add KPAS domain name to /etc/hosts
# run: |
# sudo bash -c "echo '127.0.0.1 kpas-dev.local' >> /etc/hosts"
#
# - name: Build and start KPAS-LTI service
# run: |
# cd kpas-api
# rm composer.lock
# sed -i '20 a "doctrine/dbal": "^2.0",' composer.json
# sed -i '20 a "doctrine/dbal": "^2.0",' composer.json.prod
# sed -i '20 a "doctrine/dbal": "^2.0",' composer.json.dev
# git checkout $KPAS_LTI_GIT_COMMIT
# echo "bind-address 0.0.0.0" >> docker/mysql/my.cnf
# sed -i "s/BUGSNAG_API_KEY=.*/BUGSNAG_API_KEY=/g" environments/production/.env
# sed -i 's/DB_HOST=.*/DB_HOST=mysql/g' environments/production/.env
# sed -i 's/DB_USERNAME=.*/DB_USERNAME=root/g' environments/production/.env
# sed -i 's/DB_PASSWORD=.*/DB_PASSWORD=root/g' environments/production/.env
# cd docker
# sed '32d' php-fpm/Dockerfile.dev > php-fpm/Dockerfile
# sed -i '20 a \ \ \ \ \ \ \ \ \ \ - NODE_VERSION=16' docker-compose.yml
# cp .env.example .env
# sudo chown $(whoami):$(whoami) -R * && sudo chmod 777 -R *
# docker-compose up --build -d
# COMPOSE_INTERACTIVE_NO_CLI=1 docker-compose exec --user root -T workspace ./startup.sh
# cd ./../..
#
# - name: Import NSR to KPAS MySQL
# run: |
# mysql_container_id=`docker ps | grep mysql | awk '{print$1}'`
# docker cp ${GITHUB_WORKSPACE}/.github/kpas_nsr_data/nsr_data.sql $mysql_container_id:/nsr_data.sql
# cd kpas-api/docker
# COMPOSE_INTERACTIVE_NO_CLI=1 docker-compose exec --user root -T mysql /bin/bash -c "mysql -proot -uroot default < /nsr_data.sql"
# cd ./../..
# curl https://kpas-dev.local:4430/api/nsr/counties/15 --verbose || true
- name: Install python depedencies
run: |
sudo apt-get install python3-setuptools
python3 -m pip install -r requirements.txt
- name: Run Django migrations
run: |
mysql --port=3307 --protocol=tcp --host=127.0.0.1 -uroot -proot -e 'CREATE DATABASE `canvas-api`;'
DB_DATABASE=canvas-api DB_USERNAME=root DB_PASSWORD=root DB_PORT=3307 PYTHONPATH="${GITHUB_WORKSPACE}" python3 manage.py makemigrations
DB_DATABASE=canvas-api DB_USERNAME=root DB_PASSWORD=root DB_PORT=3307 PYTHONPATH="${GITHUB_WORKSPACE}" python3 manage.py migrate
# mysql --port=3307 --protocol=tcp --host=127.0.0.1 -uroot -proot -e 'CREATE DATABASE `test_canvas-api`;'
# DB_DATABASE=test_canvas-api DB_USERNAME=root DB_PASSWORD=root DB_PORT=3307 PYTHONPATH="${GITHUB_WORKSPACE}" python3 manage.py makemigrations
# DB_DATABASE=test_canvas-api DB_USERNAME=root DB_PASSWORD=root DB_PORT=3307 PYTHONPATH="${GITHUB_WORKSPACE}" python3 manage.py migrate
# - name: Seed statistics_api test database
# run: |
# git lfs fetch --all
# git lfs pull
# unzip $GITHUB_WORKSPACE/statistics_api/tests/data/test_canvas-api.zip -d /tmp/
# mysql --port=3307 --protocol=tcp --host=127.0.0.1 -uroot -proot test_canvas-api < /tmp/test_canvas-api.sql
- name: Run Django unit tests
run: |
DJANGO_DEBUG=True CANVAS_ACCESS_KEY=${{ secrets.CANVAS_ACCESS_KEY }} DJANGO_SETTINGS_MODULE=statistics_api.tests.test_settings DB_DATABASE=canvas-api DB_USERNAME=root DB_PASSWORD=root DB_PORT=3307 PYTHONPATH="${GITHUB_WORKSPACE}" python3 manage.py test --settings statistics_api.tests.test_settings --verbosity=3
# Checking that only the issue is the SECURE_HSTS_SECONDS warning
- name: Run manage.py check --deploy
run: |
DB_DATABASE=canvas-api DB_USERNAME=root DB_PASSWORD=root DB_PORT=3307 DJANGO_SECRET_KEY=notasecretkeyExfvXUyFFA9iAH7BYwsL1nN3XIbBcX7djoBSque6bOLXmnf7GD PYTHONPATH="${GITHUB_WORKSPACE}" python3 manage.py check --deploy
if [ `DB_DATABASE=canvas-api DB_USERNAME=root DB_PASSWORD=root DB_PORT=3307 DJANGO_SECRET_KEY=notasecretkeyExfvXUyFFA9iAH7BYwsL1nN3XIbBcX7djoBSque6bOLXmnf7GD PYTHONPATH="${GITHUB_WORKSPACE}" python3 manage.py check --deploy 2>&1 | grep -E "System check identified [0-9]+ issue" | grep -E -o [0-9]+ | head -1` -lt 2 ]
then
exit 0
else
exit 1
fi
# - name: Log in to Azure Docker container registry
# uses: docker/login-action@v1
# with:
# registry: ${{ env.AZURE_CONTAINER_REGISTRY }}
# username: ${{ secrets.AZURE_CLIENT_ID }}
# password: ${{ secrets.AZURE_CLIENT_SECRET }}
- name: Build and push Docker image to registry, triggering new deployment
run: |
if [ "$GITHUB_REF" = "refs/heads/staging" ]
then
docker build --build-arg WEBSITES_PORT=$WEBSITES_PORT . -f Dockerfile -t $AZURE_CONTAINER_REGISTRY/statistics-api-staging
az webapp config appsettings set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} -g $AZURE_RESOURCE_GROUP -n $AZURE_APP_NAME --slot staging --settings \
"CANVAS_ACCESS_KEY=${{ secrets.CANVAS_ACCESS_KEY }}" \
"DB_PASSWORD=${{ secrets.STAGING_DB_PASSWORD }}" \
"DB_USERNAME=${{ secrets.STAGING_DB_USERNAME }}" \
"DJANGO_SECRET_KEY=${{ secrets.STAGING_DJANGO_SECRET_KEY }}" \
"DOCKER_REGISTRY_SERVER_PASSWORD=${{ secrets.DOCKER_REGISTRY_SERVER_PASSWORD }}" \
"KPAS_API_ACCESS_TOKEN=${{ secrets.STAGING_KPAS_API_ACCESS_TOKEN }}" \
"WEBSITES_PORT=$WEBSITES_PORT" \
"DOCKER_REGISTRY_SERVER_URL=https://$AZURE_CONTAINER_REGISTRY" \
"GIT_COMMIT=${GITHUB_SHA}" \
@"${GITHUB_WORKSPACE}/.github/app_service_config/staging_app_service_config.json"
docker push $AZURE_CONTAINER_REGISTRY/statistics-api-staging
elif [ "$GITHUB_REF" = "refs/heads/master" ]
then
docker build --build-arg WEBSITES_PORT=$WEBSITES_PORT . -f Dockerfile -t $AZURE_CONTAINER_REGISTRY/statistics-api
az webapp config appsettings set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} -g $AZURE_RESOURCE_GROUP -n $AZURE_APP_NAME --settings \
"CANVAS_ACCESS_KEY=${{ secrets.CANVAS_ACCESS_KEY }}" \
"DB_PASSWORD=${{ secrets.DB_PASSWORD }}" \
"DB_USERNAME=${{ secrets.DB_USERNAME }}" \
"DJANGO_SECRET_KEY=${{ secrets.DJANGO_SECRET_KEY }}" \
"DOCKER_REGISTRY_SERVER_PASSWORD=${{ secrets.DOCKER_REGISTRY_SERVER_PASSWORD }}" \
"KPAS_API_ACCESS_TOKEN=${{ secrets.KPAS_API_ACCESS_TOKEN }}" \
"WEBSITES_PORT=$WEBSITES_PORT" \
"DOCKER_REGISTRY_SERVER_URL=https://$AZURE_CONTAINER_REGISTRY" \
"GIT_COMMIT=${GITHUB_SHA}" \
@"${GITHUB_WORKSPACE}/.github/app_service_config/app_service_config.json"
docker push $AZURE_CONTAINER_REGISTRY/statistics-api
fi