Files
plex-playlist/.gitea/workflows/tests.yml
Cliff Hill 013629d838
Some checks failed
Tests / Setup and Checkout (push) Has been cancelled
Tests / Backend Setup (Python 3.13 + uv + Environment) (push) Has been cancelled
Tests / Frontend Setup (Node.js 24 + Yarn Berry + Build) (push) Has been cancelled
Tests / Backend Tests (Python 3.13 + uv) (push) Has been cancelled
Tests / Frontend Tests (TypeScript + Vue + Yarn Berry) (push) Has been cancelled
Hoping it goes faster now.
Signed-off-by: Cliff Hill <xlorep@darkhelm.org>
2025-10-24 20:17:00 -04:00

316 lines
11 KiB
YAML

name: Tests
on:
push:
branches: [ main, develop, feature/* ]
pull_request:
branches: [ main, develop ]
jobs:
setup:
name: Setup and Checkout
runs-on: ubuntu-latest:docker://ubuntu:22.04
steps:
- name: Runner Info
run: |
echo "=== Setup Job - $(date) ==="
echo "Runner: ${{ gitea.runner_name || env.GITEA_RUNNER_NAME || github.runner_name || 'unknown' }}"
- name: Checkout code
uses: actions/checkout@v4
with:
repository: DarkHelm.org/plex-playlist
ref: main
fetch-depth: 1
env:
# Help with SSL issues
GIT_SSL_NO_VERIFY: "false"
- name: Fallback checkout (if needed)
if: failure()
run: |
echo "=== Fallback Repository Checkout ==="
cd ${{ github.workspace }}
# Debug SSL connectivity
echo "Testing SSL connectivity to dogar.darkhelm.org..."
openssl s_client -connect dogar.darkhelm.org:443 -servername dogar.darkhelm.org < /dev/null 2>&1 | grep -E "(CONNECTED|Verify return code)" || echo "SSL test completed"
# Try SSH internal, SSH external, HTTP internal, then HTTPS/HTTP external
if git clone --depth 1 --branch main git@gitea:3000/DarkHelm.org/plex-playlist.git . 2>/dev/null; then
echo "✓ Internal SSH clone successful (kankali-runner only)"
elif git clone --depth 1 --branch main ssh://git@dogar.darkhelm.org:2222/DarkHelm.org/plex-playlist.git . 2>/dev/null; then
echo "✓ External SSH clone successful"
elif git clone --depth 1 --branch main http://gitea:3000/DarkHelm.org/plex-playlist.git . 2>/dev/null; then
echo "✓ Internal HTTP clone successful (kankali-runner only)"
elif git -c http.sslVerify=false clone --depth 1 --branch main https://dogar.darkhelm.org/DarkHelm.org/plex-playlist.git . 2>/dev/null; then
echo "✓ External HTTPS clone successful (SSL verification disabled)"
elif git clone --depth 1 --branch main http://dogar.darkhelm.org/DarkHelm.org/plex-playlist.git . 2>/dev/null; then
echo "✓ External HTTP clone successful"
else
echo "❌ All clone methods failed"
echo "Attempting one more time with verbose output..."
git clone --depth 1 --branch main https://dogar.darkhelm.org/DarkHelm.org/plex-playlist.git . || exit 1
fi
# Checkout the specific commit if available, otherwise use main
if [ -n "${{ github.sha }}" ]; then
git checkout ${{ github.sha }} 2>/dev/null || echo "Using main branch HEAD"
else
echo "Using main branch HEAD"
fi
- name: Upload source code
uses: actions/upload-artifact@v4
with:
name: source-code
path: |
.
!.git
retention-days: 1
backend-setup:
name: Backend Setup (Python 3.13 + uv + Environment)
runs-on: python-latest:docker://python:3.13-slim
needs: setup
steps:
- name: Runner Info
run: |
echo "=== Backend Setup - $(date) ==="
echo "Runner: ${GITEA_RUNNER_NAME:-$(hostname)} | User: $(whoami) | OS: $(uname -s)"
- name: Download source code
uses: actions/download-artifact@v4
with:
name: source-code
path: .
- name: Install Python 3.13
run: |
echo "=== Installing Python 3.13 ==="
sudo apt-get update -qq
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt-get update -qq
sudo apt-get install -y python3.13 python3.13-venv python3.13-dev curl git
- name: Install uv
run: |
echo "=== Installing uv Package Manager ==="
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
- name: Verify installations
run: |
echo "=== Verifying Python and uv Installations ==="
export PATH="$HOME/.cargo/bin:$PATH"
python3.13 --version
uv --version
echo "✓ Python 3.13 and uv successfully installed"
- name: Setup Python environment with uv
working-directory: ./backend
run: |
export PATH="$HOME/.cargo/bin:$PATH"
echo "=== Setting up Python environment ==="
# Validate pyproject.toml exists
[ -f pyproject.toml ] || { echo "❌ pyproject.toml not found"; exit 1; }
# Create virtual environment and install dependencies
uv venv .venv --python python3.13
. .venv/bin/activate
uv pip install -e ".[dev]"
# Verify installation
python --version
python -c "import backend; print(f'Backend version: {backend.__version__}')"
echo "✓ Backend environment setup complete"
- name: Upload backend environment
uses: actions/upload-artifact@v4
with:
name: backend-environment
path: |
.
!.git
retention-days: 1
frontend-setup:
name: Frontend Setup (Node.js 24 + Yarn Berry + Build)
runs-on: node-latest:docker://node:20-bookworm-slim
needs: setup
steps:
- name: Runner Info
run: |
echo "=== Frontend Setup - $(date) ==="
echo "Runner: ${GITEA_RUNNER_NAME:-$(hostname)} | User: $(whoami) | OS: $(uname -s)"
- name: Download source code
uses: actions/download-artifact@v4
with:
name: source-code
path: .
- name: Install Node.js 24
run: |
echo "=== Installing Node.js 24 ==="
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
- name: Setup Yarn Berry
run: |
echo "=== Setting up Yarn Berry ==="
corepack enable
corepack prepare yarn@stable --activate
- name: Verify Node and Yarn
run: |
echo "=== Verifying Node.js and Yarn Installations ==="
node --version
yarn --version
echo "✓ Node.js 24 and Yarn Berry successfully installed"
- name: Install dependencies
working-directory: ./frontend
timeout-minutes: 10
run: |
echo "=== Frontend Dependency Installation ==="
# Setup Yarn Berry with lockfile creation allowed
yarn set version stable
cat > .yarnrc.yml << EOF
enableImmutableInstalls: false
nodeLinker: pnp
compressionLevel: 0
httpTimeout: 60000
EOF
# Add packageManager field if missing
if ! grep -q '"packageManager"' package.json; then
sed -i '$ s/}/ "packageManager": "yarn@4.10.3",\n}/' package.json
fi
# Install dependencies
yarn install
echo "✓ Frontend dependencies installed"
- name: Verify and build frontend
working-directory: ./frontend
run: |
echo "=== TypeScript Check & Build ==="
# Check TypeScript compilation
yarn run tsc --noEmit || echo "TypeScript check completed with warnings"
# Build the frontend
yarn run build
# Verify build output
[ -d "dist" ] || { echo "❌ Build failed - no dist directory"; exit 1; }
echo "✓ Build successful ($(du -sh dist/ | cut -f1))"
- name: Upload frontend environment
uses: actions/upload-artifact@v4
with:
name: frontend-environment
path: |
.
!.git
retention-days: 1
backend-tests:
name: Backend Tests (Python 3.13 + uv)
runs-on: python-latest:docker://python:3.13-slim
needs: backend-setup
steps:
- name: Runner Info
run: |
echo "=== Backend Tests - $(date) ==="
echo "Runner: ${GITEA_RUNNER_NAME:-$(hostname)} | User: $(whoami)"
- name: Download backend environment
uses: actions/download-artifact@v4
with:
name: backend-environment
path: .
- name: Restore Python environment
run: |
echo "=== Restoring Python Environment ==="
export PATH="$HOME/.cargo/bin:$PATH"
cd backend
[ -d ".venv" ] || { echo "❌ Virtual environment not found"; exit 1; }
. .venv/bin/activate
echo "✓ Python $(python --version | cut -d' ' -f2) environment restored"
- name: Run tests with pytest
working-directory: ./backend
run: |
export PATH="$HOME/.cargo/bin:$PATH"
. .venv/bin/activate
echo "=== Running Backend Tests ==="
# Run pytest with automatic typeguard hooks and coverage
python -m pytest tests/ -v \
--cov=backend \
--cov-report=term-missing \
--cov-report=xml \
--cov-fail-under=95
echo "✓ Backend tests completed with automatic typeguard hooks and 95% coverage!"
frontend-tests:
name: Frontend Tests (TypeScript + Vue + Yarn Berry)
runs-on: node-latest:docker://node:20-bookworm-slim
needs: frontend-setup
steps:
- name: Runner Info
run: |
echo "=== Frontend Tests - $(date) ==="
echo "Runner: ${GITEA_RUNNER_NAME:-$(hostname)} | User: $(whoami)"
- name: Download frontend environment
uses: actions/download-artifact@v4
with:
name: frontend-environment
path: .
- name: Restore Node environment
run: |
echo "=== Restoring Node.js Environment ==="
# Install Node.js and corepack if not available
if ! command -v node &> /dev/null; then
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
fi
if ! command -v corepack &> /dev/null; then
sudo npm install -g corepack
corepack enable
fi
# Verify environment and build artifacts
cd frontend
echo "✓ Node $(node --version) | Yarn $(yarn --version)"
[ -d "dist" ] || { echo "❌ Frontend build not found"; exit 1; }
echo "✓ Build artifacts found ($(du -sh dist/ | cut -f1))"
- name: Run frontend tests
working-directory: ./frontend
run: |
echo "=== Running Frontend Tests ==="
# Run Vitest with automatic Zod validation hooks and coverage
yarn run test --coverage --coverage.enabled=true --coverage.thresholds.lines=85 --coverage.thresholds.functions=85 --coverage.thresholds.branches=85 --coverage.thresholds.statements=85
echo "✓ Frontend tests completed with automatic Zod validation hooks and 85% coverage!"