aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/autogpt-docker-ci.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/autogpt-docker-ci.yml')
-rw-r--r--.github/workflows/autogpt-docker-ci.yml162
1 files changed, 162 insertions, 0 deletions
diff --git a/.github/workflows/autogpt-docker-ci.yml b/.github/workflows/autogpt-docker-ci.yml
new file mode 100644
index 000000000..dc555c381
--- /dev/null
+++ b/.github/workflows/autogpt-docker-ci.yml
@@ -0,0 +1,162 @@
+name: AutoGPT Docker CI
+
+on:
+ push:
+ branches: [ master, development ]
+ paths:
+ - '.github/workflows/autogpt-docker-ci.yml'
+ - 'autogpts/autogpt/**'
+ - '!autogpts/autogpt/tests/vcr_cassettes'
+ pull_request:
+ branches: [ master, development, release-* ]
+ paths:
+ - '.github/workflows/autogpt-docker-ci.yml'
+ - 'autogpts/autogpt/**'
+ - '!autogpts/autogpt/tests/vcr_cassettes'
+
+concurrency:
+ group: ${{ format('autogpt-docker-ci-{0}', github.head_ref && format('pr-{0}', github.event.pull_request.number) || github.sha) }}
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
+
+defaults:
+ run:
+ working-directory: autogpts/autogpt
+
+env:
+ IMAGE_NAME: auto-gpt
+ DEPLOY_IMAGE_NAME: ${{ secrets.DOCKER_USER }}/auto-gpt
+ DEV_IMAGE_TAG: latest-dev
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ build-type: [release, dev]
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ - if: runner.debug
+ run: |
+ ls -al
+ du -hs *
+
+ - id: build
+ name: Build image
+ uses: docker/build-push-action@v3
+ with:
+ context: autogpts/autogpt
+ build-args: BUILD_TYPE=${{ matrix.build-type }}
+ tags: ${{ env.IMAGE_NAME }}
+ load: true # save to docker images
+ # cache layers in GitHub Actions cache to speed up builds
+ cache-from: type=gha,scope=autogpt-docker-${{ matrix.build-type }}
+ cache-to: type=gha,scope=autogpt-docker-${{ matrix.build-type }},mode=max
+
+ - name: Generate build report
+ env:
+ event_name: ${{ github.event_name }}
+ event_ref: ${{ github.event.ref }}
+ event_ref_type: ${{ github.event.ref}}
+
+ build_type: ${{ matrix.build-type }}
+
+ prod_branch: master
+ dev_branch: development
+ repository: ${{ github.repository }}
+ base_branch: ${{ github.ref_name != 'master' && github.ref_name != 'development' && 'development' || 'master' }}
+
+ current_ref: ${{ github.ref_name }}
+ commit_hash: ${{ github.event.after }}
+ source_url: ${{ format('{0}/tree/{1}', github.event.repository.url, github.event.release && github.event.release.tag_name || github.sha) }}
+ push_forced_label: ${{ github.event.forced && '☢️ forced' || '' }}
+
+ new_commits_json: ${{ toJSON(github.event.commits) }}
+ compare_url_template: ${{ format('/{0}/compare/{{base}}...{{head}}', github.repository) }}
+
+ github_context_json: ${{ toJSON(github) }}
+ job_env_json: ${{ toJSON(env) }}
+ vars_json: ${{ toJSON(vars) }}
+
+ run: .github/workflows/scripts/docker-ci-summary.sh >> $GITHUB_STEP_SUMMARY
+ working-directory: ./
+ continue-on-error: true
+
+ test:
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+
+ services:
+ minio:
+ image: minio/minio:edge-cicd
+ options: >
+ --name=minio
+ --health-interval=10s --health-timeout=5s --health-retries=3
+ --health-cmd="curl -f http://localhost:9000/minio/health/live"
+
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v3
+ with:
+ submodules: true
+
+ - name: Log in to Docker hub
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKER_USER }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ - id: build
+ name: Build image
+ uses: docker/build-push-action@v3
+ with:
+ context: autogpts/autogpt
+ build-args: BUILD_TYPE=dev # include pytest
+ tags: >
+ ${{ env.IMAGE_NAME }},
+ ${{ env.DEPLOY_IMAGE_NAME }}:${{ env.DEV_IMAGE_TAG }}
+ load: true # save to docker images
+ # cache layers in GitHub Actions cache to speed up builds
+ cache-from: type=gha,scope=autogpt-docker-dev
+ cache-to: type=gha,scope=autogpt-docker-dev,mode=max
+
+ - id: test
+ name: Run tests
+ env:
+ CI: true
+ PLAIN_OUTPUT: True
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
+ S3_ENDPOINT_URL: http://minio:9000
+ AWS_ACCESS_KEY_ID: minioadmin
+ AWS_SECRET_ACCESS_KEY: minioadmin
+ run: |
+ set +e
+ docker run --env CI --env OPENAI_API_KEY \
+ --network container:minio \
+ --env S3_ENDPOINT_URL --env AWS_ACCESS_KEY_ID --env AWS_SECRET_ACCESS_KEY \
+ --entrypoint poetry ${{ env.IMAGE_NAME }} run \
+ pytest -v --cov=autogpt --cov-branch --cov-report term-missing \
+ --numprocesses=4 --durations=10 \
+ tests/unit tests/integration 2>&1 | tee test_output.txt
+
+ test_failure=${PIPESTATUS[0]}
+
+ cat << $EOF >> $GITHUB_STEP_SUMMARY
+ # Tests $([ $test_failure = 0 ] && echo '✅' || echo '❌')
+ \`\`\`
+ $(cat test_output.txt)
+ \`\`\`
+ $EOF
+
+ exit $test_failure
+
+ - if: github.event_name == 'push' && github.ref_name == 'master'
+ name: Push image to Docker Hub
+ run: docker push ${{ env.DEPLOY_IMAGE_NAME }}:${{ env.DEV_IMAGE_TAG }}