Skip to content

data(aroma): seven new heads from unique chemistry, and a count sweep… #383

data(aroma): seven new heads from unique chemistry, and a count sweep…

data(aroma): seven new heads from unique chemistry, and a count sweep… #383

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
permissions:
contents: read
jobs:
python:
name: Python — lint & test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install tooling
run: pip install ruff pytest
- name: Ruff lint
run: ruff check .
- name: Install runtime deps
run: pip install -r requirements.txt
- name: Pytest (unit)
run: |
if git ls-files '*test_*.py' '*_test.py' 'tests/**/*.py' | grep -qv '^tests/e2e/'; then
pytest -q --ignore=tests/e2e
else
echo "No Python unit tests yet — skipping."
fi
e2e:
name: E2E — smoke (headless UI)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install deps + browser
run: |
pip install -r requirements.txt
pip install pytest playwright
python -m playwright install --with-deps chromium
- name: Start the app (model-less — smoke tests don't need trained models)
working-directory: training
run: |
nohup python -m uvicorn app:app --host 127.0.0.1 --port 8010 > /tmp/flavor-app.log 2>&1 &
for i in $(seq 1 40); do
curl -sf http://127.0.0.1:8010/api/studio_terms >/dev/null && { echo "app up"; break; }
sleep 1
done
- name: Smoke e2e
env:
FLAVORMANCER_URL: http://127.0.0.1:8010
run: pytest tests/e2e -q -m smoke
- name: App log on failure
if: failure()
run: tail -50 /tmp/flavor-app.log || true
dotnet:
name: .NET — build & test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
- name: Build & test
run: |
target=$(git ls-files '*.sln' | head -1)
[ -z "$target" ] && target=$(git ls-files '*.csproj' | head -1)
if [ -n "$target" ]; then
echo "Building $target"
dotnet build "$target" --configuration Release
if git ls-files '*Test*.csproj' | grep -q .; then
dotnet test --configuration Release
else
echo "No .NET test projects yet — build only."
fi
else
echo "No .NET projects yet — skipping."
fi
dco:
name: DCO — commit sign-off
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Verify every commit carries a Signed-off-by
run: |
base='${{ github.event.pull_request.base.sha }}'
head='${{ github.event.pull_request.head.sha }}'
fail=0
for c in $(git rev-list --no-merges "$base".."$head"); do
if ! git show -s --format=%B "$c" | grep -qiE '^Signed-off-by: .+ <.+@.+>'; then
echo "::error::commit ${c:0:8} has no 'Signed-off-by' line — sign off (DCO + CLA): git commit -s --amend (or: git rebase --signoff $base)"
fail=1
fi
done
if [ "$fail" = 0 ]; then echo "All commits signed off ✓"; else exit 1; fi