|
name: AutoGPT Server CI |
|
|
|
on: |
|
push: |
|
branches: [master, development, ci-test*] |
|
paths: |
|
- ".github/workflows/autogpt-server-ci.yml" |
|
- "rnd/autogpt_server/**" |
|
pull_request: |
|
branches: [master, development, release-*] |
|
paths: |
|
- ".github/workflows/autogpt-server-ci.yml" |
|
- "rnd/autogpt_server/**" |
|
|
|
concurrency: |
|
group: ${{ format('autogpt-server-ci-{0}', github.head_ref && format('{0}-{1}', github.event_name, github.event.pull_request.number) || github.sha) }} |
|
cancel-in-progress: ${{ startsWith(github.event_name, 'pull_request') }} |
|
|
|
defaults: |
|
run: |
|
shell: bash |
|
working-directory: rnd/autogpt_server |
|
|
|
jobs: |
|
test: |
|
permissions: |
|
contents: read |
|
timeout-minutes: 30 |
|
strategy: |
|
fail-fast: false |
|
matrix: |
|
python-version: ["3.10"] |
|
platform-os: [ubuntu, macos, macos-arm64, windows] |
|
db-platform: [postgres, sqlite] |
|
runs-on: ${{ matrix.platform-os != 'macos-arm64' && format('{0}-latest', matrix.platform-os) || 'macos-14' }} |
|
|
|
steps: |
|
- name: Setup PostgreSQL |
|
if: matrix.db-platform == 'postgres' |
|
uses: ikalnytskyi/action-setup-postgres@v6 |
|
with: |
|
username: ${{ secrets.DB_USER || 'postgres' }} |
|
password: ${{ secrets.DB_PASS || 'postgres' }} |
|
database: postgres |
|
port: 5432 |
|
id: postgres |
|
|
|
|
|
|
|
|
|
|
|
|
|
- name: Start MinIO service (Linux) |
|
if: runner.os == 'Linux' |
|
working-directory: "." |
|
run: | |
|
docker pull minio/minio:edge-cicd |
|
docker run -d -p 9000:9000 minio/minio:edge-cicd |
|
|
|
- name: Start MinIO service (macOS) |
|
if: runner.os == 'macOS' |
|
working-directory: ${{ runner.temp }} |
|
run: | |
|
brew install minio/stable/minio |
|
mkdir data |
|
minio server ./data & |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- name: Checkout repository |
|
uses: actions/checkout@v4 |
|
with: |
|
fetch-depth: 0 |
|
submodules: true |
|
|
|
- name: Set up Python ${{ matrix.python-version }} |
|
uses: actions/setup-python@v5 |
|
with: |
|
python-version: ${{ matrix.python-version }} |
|
|
|
- id: get_date |
|
name: Get date |
|
run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT |
|
|
|
- name: Set up Python dependency cache |
|
|
|
if: runner.os != 'Windows' |
|
uses: actions/cache@v4 |
|
with: |
|
path: ${{ runner.os == 'macOS' && '~/Library/Caches/pypoetry' || '~/.cache/pypoetry' }} |
|
key: poetry-${{ runner.os }}-${{ hashFiles('rnd/autogpt_server/poetry.lock') }} |
|
|
|
- name: Install Poetry (Unix) |
|
if: runner.os != 'Windows' |
|
run: | |
|
curl -sSL https://install.python-poetry.org | python3 - |
|
|
|
if [ "${{ runner.os }}" = "macOS" ]; then |
|
PATH="$HOME/.local/bin:$PATH" |
|
echo "$HOME/.local/bin" >> $GITHUB_PATH |
|
fi |
|
|
|
- name: Install Poetry (Windows) |
|
if: runner.os == 'Windows' |
|
shell: pwsh |
|
run: | |
|
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python - |
|
|
|
$env:PATH += ";$env:APPDATA\Python\Scripts" |
|
echo "$env:APPDATA\Python\Scripts" >> $env:GITHUB_PATH |
|
|
|
- name: Install Python dependencies |
|
run: poetry install |
|
|
|
- name: Generate Prisma Client (Postgres) |
|
if: matrix.db-platform == 'postgres' |
|
run: poetry run prisma generate --schema postgres/schema.prisma |
|
|
|
- name: Run Database Migrations (Postgres) |
|
if: matrix.db-platform == 'postgres' |
|
run: poetry run prisma migrate dev --schema postgres/schema.prisma --name updates |
|
env: |
|
CONNECTION_STR: ${{ steps.postgres.outputs.connection-uri }} |
|
|
|
- name: Generate Prisma Client (SQLite) |
|
if: matrix.db-platform == 'sqlite' |
|
run: poetry run prisma generate |
|
|
|
- name: Run Database Migrations (SQLite) |
|
if: matrix.db-platform == 'sqlite' |
|
run: poetry run prisma migrate dev --name updates |
|
|
|
- name: Run Linter |
|
run: poetry run lint |
|
|
|
- name: Run pytest with coverage |
|
run: | |
|
poetry run pytest -vv \ |
|
test |
|
env: |
|
CI: true |
|
PLAIN_OUTPUT: True |
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} |
|
DB_USER: ${{ secrets.DB_USER || 'postgres' }} |
|
DB_PASS: ${{ secrets.DB_PASS || 'postgres' }} |
|
DB_NAME: postgres |
|
DB_PORT: 5432 |
|
RUN_ENV: local |
|
PORT: 8080 |
|
DATABASE_URL: postgresql://${{ secrets.DB_USER || 'postgres' }}:${{ secrets.DB_PASS || 'postgres' }}@localhost:5432/${{ secrets.DB_NAME || 'postgres'}} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|