name: $(Date:yyyyMMdd).$(Rev:r) variables: DOCKER_IMAGE_BASENAME: "jamesits/ripe-atlas" trigger: batch: true branches: include: [ "master" ] paths: include: [ "*" ] exclude: [ "README.md" ] pr: autoCancel: true branches: include: - master paths: exclude: - README.md schedules: - cron: "0 3 * * *" displayName: nightly build always: true branches: include: - master jobs: - job: build displayName: "build" pool: vmImage: "ubuntu-latest" workspace: clean: all variables: ARTIFACTS_DIR: "/tmp/ripe-atlas-artifacts" timeoutInMinutes: 60 strategy: matrix: arm64: ARCH: "arm64" DOCKER_IMAGE_TAG: "latest-arm64" armhf: ARCH: "armhf" DOCKER_IMAGE_TAG: "latest-armv7l" i386: ARCH: "i386" DOCKER_IMAGE_TAG: "latest-i386" amd64: ARCH: "amd64" DOCKER_IMAGE_TAG: "latest-amd64" maxParallel: 4 steps: - checkout: self clean: true submodules: true - bash: | set -Eeuo pipefail docker run --privileged --rm tonistiigi/binfmt --install=$(ARCH) export DOCKER_BUILDKIT=1 docker build --platform=$(ARCH) --no-cache --rm=false -t ripe-atlas . docker images --digests ripe-atlas docker build --target=artifacts --platform=$(ARCH) --output=type=local,dest=$(ARTIFACTS_DIR) . cp -r $(ARTIFACTS_DIR)/* ${BUILD_ARTIFACTSTAGINGDIRECTORY} displayName: "build image and release artifacts" - task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.ArtifactStagingDirectory)' artifactName: '$(ARCH)' parallel: true parallelCount: 20 - task: Docker@2 displayName: "docker login" condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'), ne(variables['Build.Reason'], 'PullRequest')) inputs: containerRegistry: 'Docker Hub: Jamesits' command: 'login' - bash: | set -Eeuo pipefail docker tag ripe-atlas $(DOCKER_IMAGE_BASENAME):$(DOCKER_IMAGE_TAG) docker push $(DOCKER_IMAGE_BASENAME):$(DOCKER_IMAGE_TAG) displayName: "Push image" condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'), ne(variables['Build.Reason'], 'PullRequest')) - task: Docker@2 displayName: "docker logout" condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'), ne(variables['Build.Reason'], 'PullRequest')) inputs: containerRegistry: 'Docker Hub: Jamesits' command: 'logout' - job: manifest displayName: "create docker manifest" pool: vmImage: "ubuntu-latest" workspace: clean: all variables: DOCKER_IMAGE_TAG: "latest" timeoutInMinutes: 60 dependsOn: - build condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'), ne(variables['Build.Reason'], 'PullRequest')) steps: - task: Docker@2 displayName: "Docker login" inputs: containerRegistry: 'Docker Hub: Jamesits' command: 'login' - bash: | set -Eeuo pipefail docker manifest create \ $(DOCKER_IMAGE_BASENAME):$(DOCKER_IMAGE_TAG) \ --amend $(DOCKER_IMAGE_BASENAME):latest-arm64 \ --amend $(DOCKER_IMAGE_BASENAME):latest-armv7l \ --amend $(DOCKER_IMAGE_BASENAME):latest-i386 \ --amend $(DOCKER_IMAGE_BASENAME):latest-amd64 docker manifest push $(DOCKER_IMAGE_BASENAME):$(DOCKER_IMAGE_TAG) displayName: "create and push manifest" - task: Docker@2 displayName: "docker logout" inputs: containerRegistry: 'Docker Hub: Jamesits' command: 'logout'