name: Publish Docker and WSL Images on: push: branches: - master tags: - v* jobs: build: runs-on: self-hosted timeout-minutes: 2880 steps: - name: Checkout uses: actions/checkout@v2 - name: Set Swap Space uses: pierotofy/set-swap-space@master with: swap-size-gb: 12 - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 with: config-inline: | [worker.oci] max-parallelism = 1 - name: Login to DockerHub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} # Use the repository information of the checked-out code to format docker tags - name: Docker meta id: docker_meta uses: crazy-max/ghaction-docker-meta@v1 with: images: opendronemap/odm tag-semver: | {{version}} - name: Build and push Docker image id: docker_build uses: docker/build-push-action@v2 with: file: ./portable.Dockerfile platforms: linux/amd64,linux/arm64 push: true no-cache: true tags: | ${{ steps.docker_meta.outputs.tags }} opendronemap/odm:latest - name: Export WSL image id: wsl_export run: | docker pull opendronemap/odm docker export $(docker create opendronemap/odm) --output odm-wsl-rootfs-amd64.tar.gz gzip odm-wsl-rootfs-amd64.tar.gz echo ::set-output name=amd64-rootfs::"odm-wsl-rootfs-amd64.tar.gz" # Convert tag into a GitHub Release if we're building a tag - name: Create Release if: github.event_name == 'tag' id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: Release ${{ github.ref }} draft: false prerelease: false # Upload the WSL image to the new Release if we're building a tag - name: Upload amd64 Release Asset if: github.event_name == 'tag' id: upload-amd64-wsl-rootfs uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps asset_path: ./${{ steps.wsl_export.outputs.amd64-rootfs }} asset_name: ${{ steps.wsl_export.outputs.amd64-rootfs }} asset_content_type: application/gzip # Always archive the WSL rootfs - name: Upload amd64 Artifact uses: actions/upload-artifact@v2 with: name: wsl-rootfs path: ${{ steps.wsl_export.outputs.amd64-rootfs }} - name: Docker image digest and WSL rootfs download URL run: | echo "Docker image digest: ${{ steps.docker_build.outputs.digest }}" echo "WSL AMD64 rootfs URL: ${{ steps.upload-amd64-wsl-rootfs.browser_download_url }}" # Trigger NodeODM build - name: Dispatch NodeODM Build Event id: nodeodm_dispatch run: | curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.everest-preview+json" -H "Content-Type: application/json" https://api.github.com/repos/OpenDroneMap/NodeODM/actions/workflows/publish-docker.yaml/dispatches --data '{"ref": "master"}'