Skip to content

Build and Test

Build and Test #175

name: Build and Test
on:
workflow_dispatch:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
python:
name: Setup python
runs-on: "ubuntu-latest"
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Cache dependencies
uses: actions/cache@v4
with:
path: ${{ env.pythonLocation }}
key: ${{ env.pythonLocation }}-${{ hashFiles('requirements.txt') }}
id: cache
- name: Install requirements
run: pip install --upgrade --upgrade-strategy eager -r requirements.txt
if: steps.cache.outputs.cache-hit != 'true'
node:
name: Install npm dependencies
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Cache node_modules
id: cache-node-modules
uses: actions/cache@v4
with:
path: ./frontend/node_modules
key: node-modules-${{ hashFiles('./frontend/package-lock.json') }}
- name: Install dependencies
working-directory: ./frontend
run: npm install
frontend:
name: Build Frontend
runs-on: ubuntu-latest
needs: [ python, node ]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Get python packages from cache
uses: actions/cache@v4
with:
path: ${{ env.pythonLocation }}
key: ${{ env.pythonLocation }}-${{ hashFiles('requirements.txt') }}
id: cache
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Get node from cache
id: cache-node-modules
uses: actions/cache@v4
with:
path: ./frontend/node_modules
key: node-modules-${{ hashFiles('./frontend/package-lock.json') }}
- name: Building react
working-directory: ./frontend
run: npm run build
- name: Building dash component
working-directory: ./frontend
run: python -m build --sdist --wheel --outdir dist/;
- name: Test usage.py
working-directory: ./frontend
run: |
python usage.py &
PID=$!
echo $PID
sleep 5s
kill -9 $PID
- name: Upload frontend to GitHub
uses: actions/upload-artifact@v4
with:
retention-days: 7
name: frontend-${{ github.sha }}
path: frontend/dist
build-backend:
name: Build backend
runs-on: ubuntu-latest
needs: python
steps:
- name: Checking out repository
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Get python packages from cache
uses: actions/cache@v4
with:
path: ${{ env.pythonLocation }}
key: ${{ env.pythonLocation }}-${{ hashFiles('requirements.txt') }}
id: cache
- name: Build package
working-directory: backend
run: python -m build --sdist --wheel --outdir dist/;
- name: Upload backend to GitHub
uses: actions/upload-artifact@v4
with:
retention-days: 7
name: backend-${{ github.sha }}
path: backend/dist
test-backend:
name: Test backend
runs-on: ubuntu-latest
needs: [build-backend, frontend]
steps:
- name: Checking out repository
uses: actions/checkout@v4
- name: Get artifact
uses: actions/download-artifact@v4
with:
name: backend-${{ github.sha }}
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Get python packages from cache
uses: actions/cache@v4
with:
path: ${{ env.pythonLocation }}
key: ${{ env.pythonLocation }}-${{ hashFiles('requirements.txt') }}
id: cache
- name: Install dev dependencies and the backend
shell: bash -l {0}
run: |
pip install --upgrade --upgrade-strategy eager -r requirements.txt
pip install "viasp_backend-$(sh .github/backend-version.sh)-py3-none-any.whl"
if: steps.cache.outputs.cache-hit != 'true'
- name: Setup Graphviz
uses: ts-graphviz/setup-graphviz@v2
- name: Get frontend artifact
uses: actions/download-artifact@v4
with:
name: frontend-${{ github.sha }}
- name: Setup ViaspDash
shell: bash -l {0}
run: |
pip install "viasp_dash-$(sh .github/backend-version.sh)-py3-none-any.whl"
- name: Run Tests
working-directory: backend
run: PYTHONPATH=src pytest test
test-integration:
name: Integration testing
runs-on: ubuntu-latest
needs: [ build-backend, frontend ]
steps:
- name: Checking out repository
uses: actions/checkout@v4
- name: Get backend artifact
uses: actions/download-artifact@v4
with:
name: backend-${{ github.sha }}
- name: Get frontend artifact
uses: actions/download-artifact@v4
with:
name: frontend-${{ github.sha }}
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Get python packages from cache
uses: actions/cache@v4
with:
path: ${{ env.pythonLocation }}
key: ${{ env.pythonLocation }}-${{ hashFiles('requirements.txt') }}
id: cache
- name: Install dev dependencies, backend and frontend
shell: bash -l {0}
run: |
pip install --upgrade --upgrade-strategy eager -r requirements.txt
pip install "viasp_backend-$(sh .github/backend-version.sh)-py3-none-any.whl"
pip install "viasp_dash-$(sh .github/frontend-version.sh)-py3-none-any.whl"
#if: steps.cache.outputs.cache-hit != 'true'
- name: Run Tests
working-directory: examples
run: |
viasp_server &
BACKENDPID=$!
echo Giving backend time to startup..
sleep 15s
echo "foo. {bar} :- foo." | python quickstart.py &
PID=$!
sleep 15s
echo Killing processes..
kill -9 $PID
kill -9 $BACKENDPID