|
|
|
@ -8,23 +8,48 @@ on: |
|
|
|
|
branches: [main] |
|
|
|
|
workflow_dispatch: |
|
|
|
|
inputs: |
|
|
|
|
image: |
|
|
|
|
dockerfile: |
|
|
|
|
type: choice |
|
|
|
|
description: Select Docker Image |
|
|
|
|
description: Select Dockerfile |
|
|
|
|
options: |
|
|
|
|
- Arm64 |
|
|
|
|
- Jetson |
|
|
|
|
- Python |
|
|
|
|
- CPU |
|
|
|
|
- GPU |
|
|
|
|
- Dockerfile-arm64 |
|
|
|
|
- Dockerfile-jetson |
|
|
|
|
- Dockerfile-python |
|
|
|
|
- Dockerfile-cpu |
|
|
|
|
- Dockerfile |
|
|
|
|
push: |
|
|
|
|
type: boolean |
|
|
|
|
description: Push image to Docker Hub |
|
|
|
|
default: true |
|
|
|
|
|
|
|
|
|
jobs: |
|
|
|
|
docker: |
|
|
|
|
if: github.repository == 'ultralytics/ultralytics' |
|
|
|
|
name: Push Docker image to Docker Hub |
|
|
|
|
name: Push |
|
|
|
|
runs-on: ubuntu-latest |
|
|
|
|
strategy: |
|
|
|
|
fail-fast: false |
|
|
|
|
max-parallel: 5 |
|
|
|
|
matrix: |
|
|
|
|
include: |
|
|
|
|
- dockerfile: "Dockerfile-arm64" |
|
|
|
|
tags: "latest-arm64" |
|
|
|
|
platforms: "linux/arm64" |
|
|
|
|
- dockerfile: "Dockerfile-jetson" |
|
|
|
|
tags: "latest-jetson" |
|
|
|
|
platforms: "linux/arm64" |
|
|
|
|
- dockerfile: "Dockerfile-python" |
|
|
|
|
tags: "latest-python" |
|
|
|
|
platforms: "linux/amd64" |
|
|
|
|
- dockerfile: "Dockerfile-cpu" |
|
|
|
|
tags: "latest-cpu" |
|
|
|
|
platforms: "linux/amd64" |
|
|
|
|
- dockerfile: "Dockerfile" |
|
|
|
|
tags: "latest" |
|
|
|
|
platforms: "linux/amd64" |
|
|
|
|
steps: |
|
|
|
|
- name: Checkout repo |
|
|
|
|
if: github.event_name == 'push' || github.event.inputs.dockerfile == matrix.dockerfile |
|
|
|
|
uses: actions/checkout@v3 |
|
|
|
|
|
|
|
|
|
- name: Set up QEMU |
|
|
|
@ -39,54 +64,30 @@ jobs: |
|
|
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }} |
|
|
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }} |
|
|
|
|
|
|
|
|
|
- name: Build and push arm64 image |
|
|
|
|
if: github.event_name == 'push' || github.event.inputs.image == 'Arm64' |
|
|
|
|
uses: docker/build-push-action@v4 |
|
|
|
|
continue-on-error: true |
|
|
|
|
with: |
|
|
|
|
context: . |
|
|
|
|
platforms: linux/arm64 |
|
|
|
|
file: docker/Dockerfile-arm64 |
|
|
|
|
push: true |
|
|
|
|
tags: ultralytics/ultralytics:latest-arm64 |
|
|
|
|
- name: Build Image |
|
|
|
|
run: | |
|
|
|
|
docker build --platform ${{ matrix.platforms }} -f docker/${{ matrix.dockerfile }} -t ultralytics/ultralytics:${{ matrix.tags }} . |
|
|
|
|
|
|
|
|
|
- name: Build and push Jetson image |
|
|
|
|
if: github.event_name == 'push' || github.event.inputs.image == 'Jetson' |
|
|
|
|
uses: docker/build-push-action@v4 |
|
|
|
|
continue-on-error: true |
|
|
|
|
with: |
|
|
|
|
context: . |
|
|
|
|
platforms: linux/arm64 |
|
|
|
|
file: docker/Dockerfile-jetson |
|
|
|
|
push: true |
|
|
|
|
tags: ultralytics/ultralytics:latest-jetson |
|
|
|
|
- name: Run Tests |
|
|
|
|
if: matrix.platforms == 'linux/amd64' # arm64 images not supported on GitHub CI runners |
|
|
|
|
run: | |
|
|
|
|
docker run ultralytics/ultralytics:${{ matrix.tags }} /bin/bash -c "pip install pytest && pytest tests" |
|
|
|
|
|
|
|
|
|
- name: Build and push Python image |
|
|
|
|
if: github.event_name == 'push' || github.event.inputs.image == 'Python' |
|
|
|
|
uses: docker/build-push-action@v4 |
|
|
|
|
continue-on-error: true |
|
|
|
|
with: |
|
|
|
|
context: . |
|
|
|
|
file: docker/Dockerfile-python |
|
|
|
|
push: true |
|
|
|
|
tags: ultralytics/ultralytics:latest-python |
|
|
|
|
- name: Run Benchmarks |
|
|
|
|
if: matrix.platforms == 'linux/amd64' # arm64 images not supported on GitHub CI runners |
|
|
|
|
run: | |
|
|
|
|
docker run ultralytics/ultralytics:${{ matrix.tags }} yolo benchmark model=yolov8n.pt imgsz=160 |
|
|
|
|
|
|
|
|
|
- name: Build and push CPU image |
|
|
|
|
if: github.event_name == 'push' || github.event.inputs.image == 'CPU' |
|
|
|
|
uses: docker/build-push-action@v4 |
|
|
|
|
continue-on-error: true |
|
|
|
|
with: |
|
|
|
|
context: . |
|
|
|
|
file: docker/Dockerfile-cpu |
|
|
|
|
push: true |
|
|
|
|
tags: ultralytics/ultralytics:latest-cpu |
|
|
|
|
- name: Push Image |
|
|
|
|
if: github.event_name == 'push' || github.event.inputs.push == true |
|
|
|
|
run: | |
|
|
|
|
docker push ultralytics/ultralytics:${{ matrix.tags }} |
|
|
|
|
|
|
|
|
|
- name: Build and push GPU image |
|
|
|
|
if: github.event_name == 'push' || github.event.inputs.image == 'GPU' |
|
|
|
|
uses: docker/build-push-action@v4 |
|
|
|
|
continue-on-error: true |
|
|
|
|
- name: Notify on failure |
|
|
|
|
if: github.event_name == 'push' && (cancelled() || failure()) |
|
|
|
|
uses: slackapi/slack-github-action@v1.23.0 |
|
|
|
|
with: |
|
|
|
|
context: . |
|
|
|
|
file: docker/Dockerfile |
|
|
|
|
push: true |
|
|
|
|
tags: ultralytics/ultralytics:latest |
|
|
|
|
payload: | |
|
|
|
|
{"text": "<!channel> GitHub Actions error for ${{ github.workflow }} ❌\n\n\n*Repository:* https://github.com/${{ github.repository }}\n*Action:* https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n*Author:* ${{ github.actor }}\n*Event:* ${{ github.event_name }}\n"} |
|
|
|
|
env: |
|
|
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL_YOLO }} |
|
|
|
|