Skip to content

feat: 8 framework adapters + CI/CD + Demo + Docker #3

feat: 8 framework adapters + CI/CD + Demo + Docker

feat: 8 framework adapters + CI/CD + Demo + Docker #3

Workflow file for this run

name: Adapters CI
on:
push:
branches: [main, feat/*]
paths:
- 'adapters/**'
- '.github/workflows/adapters-ci.yml'
pull_request:
branches: [main]
paths:
- 'adapters/**'
- '.github/workflows/adapters-ci.yml'
jobs:
test-adapters:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Cache pip packages
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('adapters/**/requirements*.txt') }}
- name: Install dependencies
run: |
cd adapters
pip install -e .
pip install pytest pytest-asyncio black isort flake8
- name: Lint with black
run: |
cd adapters
black --check a3m_adapter/ --exclude='/(\.git|\.venv|__pycache__)/'
- name: Lint with isort
run: |
cd adapters
isort --check-only a3m_adapter/ --exclude='/(\.git|\.venv|__pycache__)/'
- name: Lint with flake8
run: |
cd adapters
flake8 a3m_adapter/ --max-line-length=100 --exclude='/(\.git|\.venv|__pycache__)/'
- name: Run tests
run: |
cd adapters
pytest a3m_adapter/tests/ -v --tb=short
test-integration:
runs-on: ubuntu-latest
needs: test-adapters
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Start A3M Router
run: |
npx a3m-router serve &
sleep 5
curl -f http://localhost:8787/health || exit 1
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install adapter and test deps
run: |
cd adapters
pip install -e .
pip install requests pytest pytest-asyncio
- name: Run integration tests
run: |
cd adapters
pytest a3m_adapter/tests/ -v --tb=short -k "integration"
publish-adapters:
runs-on: ubuntu-latest
needs: test-integration
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Publish to PyPI
env:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
run: |
cd adapters
pip install build twine
python -m build
twine upload --token $PYPI_TOKEN dist/*
docker-build:
runs-on: ubuntu-latest
needs: test-integration
if: github.event_name == 'push'
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: |
docker build -t ghcr.io/das-rebel/a3m-router:latest .
- name: Run container health check
run: |
docker run -d --name a3m-test -p 8787:8787 ghcr.io/das-rebel/a3m-router:latest
sleep 5
curl -f http://localhost:8787/health
docker stop a3m-test
- name: Push to GHCR
if: github.event_name == 'push'
run: |
echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
docker push ghcr.io/das-rebel/a3m-router:latest