Making the tests CI workflow.
Signed-off-by: Cliff Hill <xlorep@darkhelm.org>
This commit is contained in:
@@ -1,177 +0,0 @@
|
||||
name: Working CI v4 - Skip Checkout
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop, feature/* ]
|
||||
pull_request:
|
||||
branches: [ main, develop ]
|
||||
|
||||
jobs:
|
||||
backend-tests:
|
||||
name: Backend Tests (Python)
|
||||
runs-on: ubuntu-latest
|
||||
container: python:3.13-slim
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
env:
|
||||
POSTGRES_PASSWORD: test_password
|
||||
POSTGRES_USER: test_user
|
||||
POSTGRES_DB: test_db
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
|
||||
steps:
|
||||
- name: Install git and basic tools
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y git curl
|
||||
|
||||
- name: Check workspace contents
|
||||
run: |
|
||||
echo "=== Checking Workspace Contents ==="
|
||||
echo "Current working directory: $(pwd)"
|
||||
echo "Current user: $(whoami)"
|
||||
echo "Environment variables:"
|
||||
env | grep GITHUB || echo "No GITHUB vars"
|
||||
echo "Directory contents:"
|
||||
ls -la
|
||||
echo "Backend directory exists: $(test -d backend && echo 'yes' || echo 'no')"
|
||||
if [ -d backend ]; then
|
||||
echo "Backend contents:"
|
||||
ls -la backend/
|
||||
echo "pyproject.toml exists: $(test -f backend/pyproject.toml && echo 'yes' || echo 'no')"
|
||||
else
|
||||
echo "Creating minimal backend structure for testing..."
|
||||
mkdir -p backend/src/backend backend/tests
|
||||
|
||||
# Create pyproject.toml using printf to avoid heredoc issues
|
||||
printf '[build-system]\nrequires = ["setuptools>=45", "wheel", "setuptools_scm[toml]>=6.2"]\nbuild-backend = "setuptools.build_meta"\n\n[project]\nname = "backend"\nversion = "0.1.0"\ndescription = "Backend API"\nrequires-python = ">=3.12"\ndependencies = [\n "fastapi",\n "uvicorn",\n]\n\n[project.optional-dependencies]\ndev = [\n "pytest",\n "pytest-cov",\n "typeguard",\n "ruff",\n "pyright",\n]\n\n[tool.setuptools.packages.find]\nwhere = ["src"]\n\n[tool.setuptools.package-dir]\n"" = "src"\n' > backend/pyproject.toml
|
||||
|
||||
# Create __init__.py files
|
||||
printf '"""Backend package."""\n__version__ = "0.1.0"\n' > backend/src/backend/__init__.py
|
||||
|
||||
# Create main.py
|
||||
printf '"""Main FastAPI application."""\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n@app.get("/")\ndef read_root():\n return {"Hello": "World"}\n' > backend/src/backend/main.py
|
||||
|
||||
# Create test files
|
||||
printf '"""Tests package."""\n' > backend/tests/__init__.py
|
||||
printf '"""Example tests."""\nimport pytest\n\ndef test_example():\n assert 1 + 1 == 2\n\ndef test_import():\n import backend\n assert backend.__version__ == "0.1.0"\n' > backend/tests/test_example.py
|
||||
|
||||
echo "Minimal backend structure created"
|
||||
fi
|
||||
|
||||
- name: Install uv
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
uv --version
|
||||
|
||||
- name: Setup backend environment
|
||||
run: |
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
cd backend
|
||||
echo "=== Setting up Python environment ==="
|
||||
uv venv
|
||||
source .venv/bin/activate
|
||||
echo "Virtual environment activated"
|
||||
echo "Installing dependencies..."
|
||||
uv pip install -e .[dev]
|
||||
echo "Dependencies installed"
|
||||
echo "Verifying installation:"
|
||||
python -c "import backend; print('Backend module imported successfully')"
|
||||
|
||||
- name: Run backend tests with coverage and typeguard
|
||||
run: |
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
cd backend
|
||||
source .venv/bin/activate
|
||||
echo "=== Running backend tests ==="
|
||||
python -m pytest tests/ -v \
|
||||
--cov=src \
|
||||
--cov-report=html \
|
||||
--cov-report=term \
|
||||
--typeguard-packages=backend,src
|
||||
env:
|
||||
DATABASE_URL: postgresql://test_user:test_password@postgres:5432/test_db
|
||||
|
||||
frontend-tests:
|
||||
name: Frontend Tests (TypeScript/Vue)
|
||||
runs-on: ubuntu-latest
|
||||
container: node:20-slim
|
||||
|
||||
steps:
|
||||
- name: Install git and basic tools
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y git curl
|
||||
|
||||
- name: Check workspace contents
|
||||
run: |
|
||||
echo "=== Checking Workspace Contents ==="
|
||||
echo "Current working directory: $(pwd)"
|
||||
echo "Current user: $(whoami)"
|
||||
echo "Environment variables:"
|
||||
env | grep GITHUB || echo "No GITHUB vars"
|
||||
echo "Directory contents:"
|
||||
ls -la
|
||||
echo "Frontend directory exists: $(test -d frontend && echo 'yes' || echo 'no')"
|
||||
if [ -d frontend ]; then
|
||||
echo "Frontend contents:"
|
||||
ls -la frontend/
|
||||
echo "package.json exists: $(test -f frontend/package.json && echo 'yes' || echo 'no')"
|
||||
else
|
||||
echo "Creating minimal frontend structure for testing..."
|
||||
mkdir -p frontend/src frontend/tests/unit
|
||||
|
||||
# Create package.json using printf to avoid heredoc issues
|
||||
printf '{\n "name": "frontend",\n "version": "0.1.0",\n "description": "Frontend Vue app",\n "scripts": {\n "dev": "vite",\n "build": "vue-tsc && vite build",\n "type-check": "vue-tsc --noEmit",\n "test:unit": "vitest",\n "lint": "eslint ."\n },\n "dependencies": {\n "vue": "^3.3.0"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^4.3.0",\n "@vue/test-utils": "^2.4.0",\n "eslint": "^8.46.0",\n "typescript": "^5.1.0",\n "vite": "^4.4.0",\n "vitest": "^0.34.0",\n "vue-tsc": "^1.8.0"\n }\n}\n' > frontend/package.json
|
||||
|
||||
# Create App.vue
|
||||
printf '<template>\n <div>\n <h1>Hello World</h1>\n </div>\n</template>\n\n<script setup lang="ts">\n// Vue 3 Composition API\n</script>\n' > frontend/src/App.vue
|
||||
|
||||
# Create test file
|
||||
printf 'import { describe, it, expect } from "vitest"\nimport { mount } from "@vue/test-utils"\n\ndescribe("Basic Test", () => {\n it("should work", () => {\n expect(1 + 1).toBe(2)\n })\n})\n' > frontend/tests/unit/App.test.ts
|
||||
|
||||
# Create tsconfig.json
|
||||
printf '{\n "compilerOptions": {\n "target": "ES2020",\n "useDefineForClassFields": true,\n "lib": ["ES2020", "DOM", "DOM.Iterable"],\n "module": "ESNext",\n "skipLibCheck": true,\n "moduleResolution": "bundler",\n "allowImportingTsExtensions": true,\n "resolveJsonModule": true,\n "isolatedModules": true,\n "noEmit": true,\n "jsx": "preserve",\n "strict": true,\n "noUnusedLocals": true,\n "noUnusedParameters": true,\n "noFallthroughCasesInSwitch": true\n },\n "include": ["src/**/*.ts", "src/**/*.vue", "tests/**/*.ts"],\n "references": [{ "path": "./tsconfig.node.json" }]\n}\n' > frontend/tsconfig.json
|
||||
|
||||
# Create tsconfig.node.json
|
||||
printf '{\n "compilerOptions": {\n "composite": true,\n "skipLibCheck": true,\n "module": "ESNext",\n "moduleResolution": "bundler",\n "allowSyntheticDefaultImports": true\n },\n "include": ["vite.config.ts"]\n}\n' > frontend/tsconfig.node.json
|
||||
|
||||
# Create vite.config.ts
|
||||
printf 'import { defineConfig } from "vite"\nimport vue from "@vitejs/plugin-vue"\n\nexport default defineConfig({\n plugins: [vue()],\n})\n' > frontend/vite.config.ts
|
||||
|
||||
# Create vitest.config.ts
|
||||
printf 'import { defineConfig } from "vite"\nimport vue from "@vitejs/plugin-vue"\n\nexport default defineConfig({\n plugins: [vue()],\n test: {\n environment: "jsdom",\n },\n})\n' > frontend/vitest.config.ts
|
||||
|
||||
echo "Minimal frontend structure created"
|
||||
fi
|
||||
|
||||
- name: Install yarn
|
||||
run: |
|
||||
npm install -g yarn
|
||||
yarn --version
|
||||
|
||||
- name: Setup frontend environment
|
||||
run: |
|
||||
cd frontend
|
||||
echo "=== Installing frontend dependencies ==="
|
||||
yarn install
|
||||
echo "Dependencies installed"
|
||||
|
||||
- name: Run frontend type checking
|
||||
run: |
|
||||
cd frontend
|
||||
echo "=== Running type checking ==="
|
||||
yarn type-check
|
||||
|
||||
- name: Run frontend tests with coverage
|
||||
run: |
|
||||
cd frontend
|
||||
echo "=== Running frontend tests ==="
|
||||
yarn test:unit
|
||||
113
.gitea/workflows/tests.yml
Normal file
113
.gitea/workflows/tests.yml
Normal file
@@ -0,0 +1,113 @@
|
||||
name: Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop, feature/* ]
|
||||
pull_request:
|
||||
branches: [ main, develop ]
|
||||
|
||||
jobs:
|
||||
backend-tests:
|
||||
name: Backend Tests (Python 3.13 + uv)
|
||||
runs-on: ubuntu-latest
|
||||
container: python:3.13-slim
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y curl git
|
||||
|
||||
- name: Install uv
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Verify uv installation
|
||||
run: |
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
uv --version
|
||||
|
||||
- name: Setup Python environment with uv
|
||||
working-directory: ./backend
|
||||
run: |
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
# Create virtual environment
|
||||
uv venv .venv --python 3.13
|
||||
|
||||
# Activate environment and install dependencies
|
||||
. .venv/bin/activate
|
||||
uv pip install -e ".[dev]"
|
||||
|
||||
# Verify installation
|
||||
python --version
|
||||
python -c "import backend; print(f'Backend version: {backend.__version__}')"
|
||||
|
||||
# Show installed packages
|
||||
uv pip list
|
||||
|
||||
- name: Run tests with pytest
|
||||
working-directory: ./backend
|
||||
run: |
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
. .venv/bin/activate
|
||||
|
||||
# Run tests with coverage and typeguard
|
||||
python -m pytest tests/ -v --cov=backend --cov-report=term-missing
|
||||
|
||||
frontend-tests:
|
||||
name: Frontend Tests (TypeScript + Vue + Yarn Berry)
|
||||
runs-on: ubuntu-latest
|
||||
container: node:20-slim
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y curl git
|
||||
|
||||
- name: Setup Yarn Berry
|
||||
run: |
|
||||
corepack enable
|
||||
corepack prepare yarn@stable --activate
|
||||
|
||||
- name: Verify Node and Yarn
|
||||
run: |
|
||||
node --version
|
||||
yarn --version
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: ./frontend
|
||||
run: |
|
||||
# Initialize yarn berry if not already done
|
||||
yarn set version stable
|
||||
|
||||
# Install dependencies
|
||||
yarn install
|
||||
|
||||
- name: Verify TypeScript and Vue installation
|
||||
working-directory: ./frontend
|
||||
run: |
|
||||
# Check that key packages are available
|
||||
yarn list typescript
|
||||
yarn list vue
|
||||
yarn list @vitejs/plugin-vue
|
||||
|
||||
# Verify TypeScript compilation works
|
||||
yarn type-check
|
||||
|
||||
- name: Build frontend
|
||||
working-directory: ./frontend
|
||||
run: |
|
||||
yarn build
|
||||
|
||||
- name: Run frontend tests
|
||||
working-directory: ./frontend
|
||||
run: |
|
||||
yarn test:unit
|
||||
Reference in New Issue
Block a user