name: Container build on: push: branches: - 'main' - 'stable' - 'beta' - 'release/**' tags: - 'v*' pull_request: branches: - '*' jobs: build: name: Build and Push Container runs-on: [runs-on,"runner=8cpu-linux-x64","image=ubuntu24-full-x64","run-id=${{ github.run_id }}",spot=false,extras=s3-cache] steps: - uses: runs-on/action@v1 - uses: actions/checkout@v4 with: fetch-tags: true submodules: false fetch-depth: 0 - name: Set PX4 Tag Version id: px4_version run: | echo "px4_version=$(git describe --tags --match 'v[0-9]*')" >> $GITHUB_OUTPUT - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@v5 with: images: | ghcr.io/PX4/px4-dev px4io/px4-dev tags: | type=raw,enable=true,value=${{ steps.px4_version.outputs.px4_version }},priority=1000 - name: Cache Apt Registry uses: actions/cache@v3 id: cache with: path: | var-cache-apt var-lib-apt key: cache-${{ hashFiles('Tools/setup/Dockerfile') }} - name: Inject Cache into Docker uses: reproducible-containers/buildkit-cache-dance@v3.1.0 with: cache-map: | { "var-cache-apt": "/var/cache/apt", "var-lib-apt": "/var/lib/apt" } skip-extraction: ${{ steps.cache.outputs.cache-hit }} - name: Login to Docker Hub uses: docker/login-action@v3 if: ${{ startsWith(github.ref, 'refs/tags/') }} with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 if: ${{ startsWith(github.ref, 'refs/tags/') }} with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: platforms: linux/amd64,linux/arm64 - name: Build and Load Container Image uses: docker/build-push-action@v6 id: docker with: context: Tools/setup tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 load: false push: false cache-from: type=gha cache-to: type=gha,mode=max # - name: Get Container Image Tag Name # id: image_name # run: | # echo "image_name=$(echo '${{ fromJSON(steps.docker.outputs.metadata)['image.name'] }}' | sed 's/,.*$//')" >> $GITHUB_OUTPUT # - name: Test Build of PX4 with Container # uses: addnab/docker-run-action@v3 # with: # image: ${{ steps.image_name.outputs.image_name }} # options: -v ${{ github.workspace }}:/workspace # run: | # cd /workspace # git config --global --add safe.directory /workspace # make px4_sitl_default # make px4_fmu-v6x_default - name: Push Images to Registry uses: docker/build-push-action@v6 if: ${{ startsWith(github.ref, 'refs/tags/') }} with: context: Tools/setup tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 load: false push: true cache-from: type=gha cache-to: type=gha,mode=max