kopia lustrzana https://github.com/OpenDroneMap/ODM
98 wiersze
3.6 KiB
YAML
98 wiersze
3.6 KiB
YAML
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"}' |