FIX post refreshing #391
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Anubis Main CD/CI | |
on: | |
push: | |
branches: [ main ] | |
workflow_dispatch: | |
jobs: | |
# Test Stage. | |
test-api: | |
name: Test api | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash | |
working-directory: api | |
strategy: | |
matrix: | |
python-version: [ '3.10' ] | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: actions/cache@v2 | |
id: cache-venv # name for referring later | |
with: | |
path: | | |
**/venv | |
key: ${{ runner.os }}-venv-${{ hashFiles('**/api/requirements/dev.txt') }} | |
- name: Install dependencies | |
run: | | |
set -ex | |
python -m venv venv | |
if [ -f requirements/dev.txt ]; then ./venv/bin/pip install -r requirements/dev.txt; fi | |
if: steps.cache-venv.outputs.cache-hit != 'true' | |
- name: Background API | |
run: | | |
set -ex | |
docker run -itd -p 6379:6379 redis redis-server --requirepass anubis | |
env MINDEBUG=1 MIGRATE=1 ./venv/bin/python3 dev.py & | |
- name: Wait for startup | |
run: sleep 3 | |
- name: Test with pytest | |
run: | | |
./tests/mintest.sh | |
- name: Teardown | |
run: | | |
killall -9 python3 | |
# Test Stage. | |
test-theia-shell-autograde: | |
name: Test shell autograde | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash | |
working-directory: theia/autograde/ | |
strategy: | |
matrix: | |
python-version: [ '3.7', '3.10' ] | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
# - uses: actions/cache@v2 | |
# id: cache-venv # name for referring later | |
# with: | |
# path: | | |
# **/venv | |
# key: ${{ runner.os }}-venv-${{ matrix.python-version }}-${{ hashFiles('**/theia/autograde/requirements.txt') }}-${{ hashFiles('**/theia/autograde/requirements_dev.txt') }} | |
- name: Install dependencies | |
run: | | |
set -ex | |
python -m venv venv | |
./venv/bin/pip install -r requirements.txt -r requirements_dev.txt | |
./venv/bin/pip install -e . | |
if: steps.cache-venv.outputs.cache-hit != 'true' | |
- name: Pytest | |
run: venv/bin/pytest | |
# Build Stage. | |
# Will build the docker image, and push it | |
# to the container registry. | |
build-api: | |
name: Build api | |
needs: [test-api] | |
runs-on: ubuntu-latest | |
environment: anubis | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install doctl | |
uses: digitalocean/action-doctl@v2 | |
with: | |
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} | |
- name: Log into DigitalOcean container registry | |
run: doctl registry login | |
- name: Build container image | |
run: env GIT_TAG=$(git log -1 --pretty=%h) docker compose build api | |
- name: Build container image | |
run: env GIT_TAG=latest docker compose build api | |
- name: Push image to registry | |
run: env GIT_TAG=$(git log -1 --pretty=%h) docker compose push api | |
- name: Push image to registry | |
run: env GIT_TAG=latest docker compose push api | |
build-theia-shell-autograde: | |
name: Build shell autograde | |
needs: [test-theia-shell-autograde] | |
runs-on: ubuntu-latest | |
environment: anubis | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install doctl | |
uses: digitalocean/action-doctl@v2 | |
with: | |
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} | |
- name: Log into DigitalOcean container registry | |
run: doctl registry login | |
- name: Build container image | |
run: | | |
env GIT_TAG=$(git log -1 --pretty=%h) docker compose build theia-autograde theia-autograde-docs | |
env GIT_TAG=latest docker compose build theia-autograde theia-autograde-docs | |
- name: Push image to registry | |
run: | | |
env GIT_TAG=$(git log -1 --pretty=%h) docker compose push theia-autograde theia-autograde-docs | |
env GIT_TAG=latest docker compose push theia-autograde theia-autograde-docs | |
build-web: | |
name: Build web | |
runs-on: ubuntu-latest | |
environment: anubis | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install doctl | |
uses: digitalocean/action-doctl@v2 | |
with: | |
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} | |
- name: Log into DigitalOcean container registry | |
run: doctl registry login | |
- name: Build container image | |
run: | | |
env GIT_TAG=$(git log -1 --pretty=%h) docker compose build web | |
env GIT_TAG=latest docker compose build web | |
- name: Push image to registry | |
run: | | |
env GIT_TAG=$(git log -1 --pretty=%h) docker compose push web | |
env GIT_TAG=latest docker compose push web | |
build-theia-images: | |
name: Build images | |
runs-on: ubuntu-latest | |
environment: anubis | |
strategy: | |
matrix: | |
image: | |
- theia-proxy | |
- theia-init | |
- theia-autosave | |
- theia-dockerd | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install doctl | |
uses: digitalocean/action-doctl@v2 | |
with: | |
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} | |
- name: Log into DigitalOcean container registry | |
run: doctl registry login | |
- name: Build container image | |
run: env GIT_TAG=$(git log -1 --pretty=%h) docker compose build ${{ matrix.image }} | |
- name: Build container image | |
run: env GIT_TAG=latest docker compose build ${{ matrix.image }} | |
- name: Push image to registry | |
run: env GIT_TAG=$(git log -1 --pretty=%h) docker compose push ${{ matrix.image }} | |
- name: Push image to registry | |
run: env GIT_TAG=latest docker compose push ${{ matrix.image }} | |
# Deploy step. | |
# Will push out yaml to the k8s cluster, then restart | |
# deployments. | |
deploy: | |
name: Deploy to Anubis k8s cluster | |
needs: [build-api, build-web, build-theia-shell-autograde, build-theia-images] | |
runs-on: ubuntu-latest | |
environment: anubis | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install doctl | |
uses: digitalocean/action-doctl@v2 | |
with: | |
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} | |
- name: Save DigitalOcean kubeconfig | |
run: doctl kubernetes cluster kubeconfig save anubis | |
- name: Helm upgrade | |
run: make upgrade | |
- name: Verify deployment | |
run: make status |