Build and Test #188
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: 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 |