name: CI on: workflow_dispatch: push: branches: - dev - master # only run the latest commit to avoid cache overwrites concurrency: group: ${{ github.ref }} cancel-in-progress: true env: PYTHON_VERSION: 3.9 jobs: amd64_build: runs-on: ubuntu-latest name: AMD64 Build steps: - name: Check out code uses: actions/checkout@v4 - name: Set up QEMU and Buildx id: setup uses: ./.github/actions/setup with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build and push amd64 standard build uses: docker/build-push-action@v5 with: context: . file: docker/main/Dockerfile push: true platforms: linux/amd64 target: frigate tags: ${{ steps.setup.outputs.image-name }}-amd64 cache-from: type=registry,ref=${{ steps.setup.outputs.cache-name }}-amd64 arm64_build: runs-on: ubuntu-latest name: ARM Build steps: - name: Check out code uses: actions/checkout@v4 - name: Set up QEMU and Buildx id: setup uses: ./.github/actions/setup with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build and push arm64 standard build uses: docker/build-push-action@v5 with: context: . file: docker/main/Dockerfile push: true platforms: linux/arm64 target: frigate tags: | ${{ steps.setup.outputs.image-name }}-standard-arm64 cache-from: type=registry,ref=${{ steps.setup.outputs.cache-name }}-arm64 - name: Build and push RPi build uses: docker/bake-action@v4 with: push: true targets: rpi files: docker/rpi/rpi.hcl set: | rpi.tags=${{ steps.setup.outputs.image-name }}-rpi *.cache-from=type=registry,ref=${{ steps.setup.outputs.cache-name }}-arm64 *.cache-to=type=registry,ref=${{ steps.setup.outputs.cache-name }}-arm64,mode=max - name: Build and push Rockchip build uses: docker/bake-action@v3 with: push: true targets: rk files: docker/rockchip/rk.hcl set: | rk.tags=${{ steps.setup.outputs.image-name }}-rk *.cache-from=type=gha jetson_jp4_build: runs-on: ubuntu-latest name: Jetson Jetpack 4 steps: - name: Check out code uses: actions/checkout@v4 - name: Set up QEMU and Buildx id: setup uses: ./.github/actions/setup with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build and push TensorRT (Jetson, Jetpack 4) env: ARCH: arm64 BASE_IMAGE: timongentzsch/l4t-ubuntu20-opencv:latest SLIM_BASE: timongentzsch/l4t-ubuntu20-opencv:latest TRT_BASE: timongentzsch/l4t-ubuntu20-opencv:latest uses: docker/bake-action@v4 with: push: true targets: tensorrt files: docker/tensorrt/trt.hcl set: | tensorrt.tags=${{ steps.setup.outputs.image-name }}-tensorrt-jp4 *.cache-from=type=registry,ref=${{ steps.setup.outputs.cache-name }}-jp4 *.cache-to=type=registry,ref=${{ steps.setup.outputs.cache-name }}-jp4,mode=max jetson_jp5_build: runs-on: ubuntu-latest name: Jetson Jetpack 5 steps: - name: Check out code uses: actions/checkout@v4 - name: Set up QEMU and Buildx id: setup uses: ./.github/actions/setup with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build and push TensorRT (Jetson, Jetpack 5) env: ARCH: arm64 BASE_IMAGE: nvcr.io/nvidia/l4t-tensorrt:r8.5.2-runtime SLIM_BASE: nvcr.io/nvidia/l4t-tensorrt:r8.5.2-runtime TRT_BASE: nvcr.io/nvidia/l4t-tensorrt:r8.5.2-runtime uses: docker/bake-action@v4 with: push: true targets: tensorrt files: docker/tensorrt/trt.hcl set: | tensorrt.tags=${{ steps.setup.outputs.image-name }}-tensorrt-jp5 *.cache-from=type=registry,ref=${{ steps.setup.outputs.cache-name }}-jp5 *.cache-to=type=registry,ref=${{ steps.setup.outputs.cache-name }}-jp5,mode=max amd64_extra_builds: runs-on: ubuntu-latest name: AMD64 Extra Build needs: - amd64_build steps: - name: Check out code uses: actions/checkout@v4 - name: Set up QEMU and Buildx id: setup uses: ./.github/actions/setup with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build and push TensorRT (x86 GPU) env: COMPUTE_LEVEL: "50 60 70 80 90" uses: docker/bake-action@v4 with: push: true targets: tensorrt files: docker/tensorrt/trt.hcl set: | tensorrt.tags=${{ steps.setup.outputs.image-name }}-tensorrt *.cache-from=type=registry,ref=${{ steps.setup.outputs.cache-name }}-amd64 *.cache-to=type=registry,ref=${{ steps.setup.outputs.cache-name }}-amd64,mode=max combined_extra_builds: runs-on: ubuntu-latest name: Combined Extra Builds needs: - amd64_build - arm64_build steps: - name: Check out code uses: actions/checkout@v4 - name: Set up QEMU and Buildx id: setup uses: ./.github/actions/setup with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Hailo-8l build uses: docker/bake-action@v4 with: push: true targets: h8l files: docker/hailo8l/h8l.hcl set: | h8l.tags=${{ steps.setup.outputs.image-name }}-h8l *.cache-from=type=registry,ref=${{ steps.setup.outputs.cache-name }}-h8l *.cache-to=type=registry,ref=${{ steps.setup.outputs.cache-name }}-h8l,mode=max - name: AMD/ROCm general build env: AMDGPU: gfx HSA_OVERRIDE: 0 uses: docker/bake-action@v3 with: push: true targets: rocm files: docker/rocm/rocm.hcl set: | rocm.tags=${{ steps.setup.outputs.image-name }}-rocm *.cache-from=type=gha # The majority of users running arm64 are rpi users, so the rpi # build should be the primary arm64 image assemble_default_build: runs-on: ubuntu-latest name: Assemble and push default build needs: - amd64_build - arm64_build steps: - id: lowercaseRepo uses: ASzc/change-string-case-action@v6 with: string: ${{ github.repository }} - name: Log in to the Container registry uses: docker/login-action@0d4c9c5ea7693da7b068278f7b52bda2a190a446 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Create short sha run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_ENV - uses: int128/docker-manifest-create-action@v2 with: tags: ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:${{ env.SHORT_SHA }} sources: | ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:${{ env.SHORT_SHA }}-amd64 ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:${{ env.SHORT_SHA }}-rpi