aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Reinier van der Leer <pwuts@agpt.co> 2024-03-21 21:15:46 +0100
committerGravatar GitHub <noreply@github.com> 2024-03-21 21:15:46 +0100
commitdde0c70a8138a9e80f0deb41fbe1fa16099b2728 (patch)
treea96af33d4deb27d48173923a07eddbf5929a2d3c
parentfeat(agent): Implement more fault tolerant `json_loads` function (#7016) (diff)
downloadAuto-GPT-dde0c70a8138a9e80f0deb41fbe1fa16099b2728.tar.gz
Auto-GPT-dde0c70a8138a9e80f0deb41fbe1fa16099b2728.tar.bz2
Auto-GPT-dde0c70a8138a9e80f0deb41fbe1fa16099b2728.zip
ci(agent): Matrix CI tests across Linux, macOS and Windows (#7029)
* Matrix the AutoGPT Python CI's `test` job across Ubuntu, macOS and Windows - Set up MinIO in a step rather than specifying it under `jobs[test].services`, because services are only supported on Linux runners - Add Windows version of step to install Poetry - Add macOS compatibility patches to 'Install Poetry (Unix)' and `setup_git_auth` steps **Caveats:** - **No Docker on macOS or Windows** * Windows comes with Docker but only supports running Windows containers, while we're mainly interested in using Linux containers for code execution and/or running auxiliary services. * [The macOS runner doesn't come with Docker](https://github.com/actions/runner-images/issues/17). Setting it up is possible but takes ~3-4 minutes, and the performance of the Colima engine is poor: a `docker pull` that takes 2 seconds on Linux takes 45 seconds on macOS. - **No S3 service available on Windows** It seems that running a background process [isn't possible on Windows](https://github.com/actions/runner/issues/598#issuecomment-2011890429), and neither is running Linux-based Docker containers. * Add `autogpt-agent` and OS-specific flags to Codecov upload step * Improve caching of Python dependencies in CI by changing the cache key - Include hash of `poetry.lock` instead of `pyproject.toml` in key - Remove date component from key; it was included to avoid getting stuck to old cached versions of packages when we were still using `requirements.txt`. With `poetry.lock` that is no longer a concern. * Fix skip check in test_s3_file_storage.py
-rw-r--r--.github/workflows/autogpt-ci.yml76
-rw-r--r--autogpts/autogpt/tests/unit/test_s3_file_storage.py2
2 files changed, 60 insertions, 18 deletions
diff --git a/.github/workflows/autogpt-ci.yml b/.github/workflows/autogpt-ci.yml
index bd32028c4..0e7ba31a0 100644
--- a/.github/workflows/autogpt-ci.yml
+++ b/.github/workflows/autogpt-ci.yml
@@ -20,6 +20,7 @@ concurrency:
defaults:
run:
+ shell: bash
working-directory: autogpts/autogpt
jobs:
@@ -77,22 +78,41 @@ jobs:
test:
permissions:
contents: read
- runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
+ fail-fast: false
matrix:
python-version: ["3.10"]
-
- services:
- minio:
- image: minio/minio:edge-cicd
- ports:
- - 9000:9000
- options: >
- --health-interval=10s --health-timeout=5s --health-retries=3
- --health-cmd="curl -f http://localhost:9000/minio/health/live"
+ platform-os: [ubuntu, macos, windows]
+ runs-on: ${{ matrix.platform-os }}-latest
steps:
+ # Quite slow on macOS (2~4 minutes to set up Docker)
+ # - name: Set up Docker (macOS)
+ # if: runner.os == 'macOS'
+ # uses: crazy-max/ghaction-setup-docker@v3
+
+ - 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 &
+
+ # No MinIO on Windows:
+ # - Windows doesn't support running Linux Docker containers
+ # - It doesn't seem possible to start background processes on Windows. They are
+ # killed after the step returns.
+ # See: https://github.com/actions/runner/issues/598#issuecomment-2011890429
+
- name: Checkout repository
uses: actions/checkout@v4
with:
@@ -147,13 +167,30 @@ jobs:
- name: Set up Python dependency cache
uses: actions/cache@v4
with:
- path: ~/.cache/pypoetry
- key: ${{ runner.os }}-poetry-${{ hashFiles('autogpts/autogpt/pyproject.toml') }}-${{ steps.get_date.outputs.date }}
+ path: ${{ runner.os == 'Windows' && 'C:\Users\runneradmin\AppData\Local\pypoetry\Cache' || '~/.cache/pypoetry' }}
+ key: poetry-${{ runner.os }}-${{ hashFiles('autogpts/autogpt/poetry.lock') }}
- - name: Install Python dependencies
+ - name: Install Poetry (Unix)
+ if: runner.os != 'Windows'
run: |
curl -sSL https://install.python-poetry.org | python3 -
- poetry install
+
+ 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: Run pytest with coverage
run: |
@@ -165,7 +202,7 @@ jobs:
CI: true
PLAIN_OUTPUT: True
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- S3_ENDPOINT_URL: http://localhost:9000
+ S3_ENDPOINT_URL: ${{ runner.os != 'Windows' && 'http://127.0.0.1:9000' || '' }}
AWS_ACCESS_KEY_ID: minioadmin
AWS_SECRET_ACCESS_KEY: minioadmin
@@ -173,6 +210,7 @@ jobs:
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
+ flags: autogpt-agent,${{ runner.os }}
- id: setup_git_auth
name: Set up git token authentication
@@ -180,7 +218,11 @@ jobs:
if: success() || failure()
run: |
config_key="http.${{ github.server_url }}/.extraheader"
- base64_pat=$(echo -n "pat:${{ secrets.PAT_REVIEW }}" | base64 -w0)
+ if [ "${{ runner.os }}" = 'macOS' ]; then
+ base64_pat=$(echo -n "pat:${{ secrets.PAT_REVIEW }}" | base64)
+ else
+ base64_pat=$(echo -n "pat:${{ secrets.PAT_REVIEW }}" | base64 -w0)
+ fi
git config "$config_key" \
"Authorization: Basic $base64_pat"
@@ -241,7 +283,7 @@ jobs:
echo "Adding label and comment..."
echo $TOKEN | gh auth login --with-token
gh issue edit $PR_NUMBER --add-label "behaviour change"
- gh issue comment $PR_NUMBER --body "You changed AutoGPT's behaviour. The cassettes have been updated and will be merged to the submodule when this Pull Request gets merged."
+ gh issue comment $PR_NUMBER --body "You changed AutoGPT's behaviour on ${{ runner.os }}. The cassettes have been updated and will be merged to the submodule when this Pull Request gets merged."
fi
- name: Upload logs to artifact
diff --git a/autogpts/autogpt/tests/unit/test_s3_file_storage.py b/autogpts/autogpt/tests/unit/test_s3_file_storage.py
index d58490d80..2544a3e9d 100644
--- a/autogpts/autogpt/tests/unit/test_s3_file_storage.py
+++ b/autogpts/autogpt/tests/unit/test_s3_file_storage.py
@@ -8,7 +8,7 @@ from botocore.exceptions import ClientError
from autogpt.file_storage.s3 import S3FileStorage, S3FileStorageConfiguration
-if not os.getenv("S3_ENDPOINT_URL") and not os.getenv("AWS_ACCESS_KEY_ID"):
+if not (os.getenv("S3_ENDPOINT_URL") and os.getenv("AWS_ACCESS_KEY_ID")):
pytest.skip("S3 environment variables are not set", allow_module_level=True)