name: docker on: push: branches: - unstable - stable env: DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} IMAGE_NAME: sigp/lighthouse jobs: extract-branch-name: runs-on: ubuntu-latest steps: - name: Extract branch name run: echo "::set-output name=BRANCH_NAME::$(echo ${GITHUB_REF#refs/heads/})" id: extract_branch outputs: BRANCH_NAME: ${{ steps.extract_branch.outputs.BRANCH_NAME }} build-docker-arm64: runs-on: ubuntu-latest needs: [extract-branch-name] steps: - uses: actions/checkout@v2 - name: Dockerhub login run: | echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin - uses: actions-rs/toolchain@v1 with: toolchain: stable - name: Cross build lighthouse binary uses: actions-rs/cargo@v1 with: use-cross: true command: build args: --release --manifest-path lighthouse/Cargo.toml --target aarch64-unknown-linux-gnu --features portable - name: Move cross-built ARM binary into Docker scope run: | mkdir ./bin; mv ./target/aarch64-unknown-linux-gnu/release/lighthouse ./bin; - name: Build Docker Buildx run: | export DOCKER_BUILDKIT=1; docker build --platform=local -o . git://github.com/docker/buildx; mkdir -p ~/.docker/cli-plugins; mv buildx ~/.docker/cli-plugins/docker-buildx; - name: Create Docker Builder run: | docker run --rm --privileged multiarch/qemu-user-static --reset -p yes; docker context create builder; docker buildx create --use --name lighthouse builder; - name: Set Env if: needs.extract-branch-name.outputs.BRANCH_NAME == 'unstable' run: | echo "TAG_SUFFIX=-unstable" >> $GITHUB_ENV; - name: Build ARM64 dockerfile (with push) run: | docker buildx build \ --platform=linux/arm64 \ --output "type=image,push=true" \ --file ./Dockerfile.cross . \ --tag ${IMAGE_NAME}:latest-arm64${TAG_SUFFIX} build-docker-amd64: runs-on: ubuntu-latest needs: [extract-branch-name] steps: - uses: actions/checkout@v2 - name: Dockerhub login run: | echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin - name: Set Env if: needs.extract-branch-name.outputs.BRANCH_NAME == 'unstable' run: | echo "TAG_SUFFIX=-unstable" >> $GITHUB_ENV; - name: Build AMD64 dockerfile (with push) run: | docker build \ --build-arg PORTABLE=true \ --tag ${IMAGE_NAME}:latest-amd64${TAG_SUFFIX} \ --file ./Dockerfile . docker push ${IMAGE_NAME}:latest-amd64${TAG_SUFFIX} build-docker-multiarch: runs-on: ubuntu-latest needs: [build-docker-arm64, build-docker-amd64, extract-branch-name] steps: - name: Dockerhub login run: | echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin - name: Set Env if: needs.extract-branch-name.outputs.BRANCH_NAME == 'unstable' run: | echo "TAG_SUFFIX=-unstable" >> $GITHUB_ENV; - name: Create and push multiarch manifest # We need to enable experimental docker features in order to use `docker manifest` run: | export DOCKER_CLI_EXPERIMENTAL=enabled; docker manifest create ${IMAGE_NAME}:latest${TAG_SUFFIX} \ --amend ${IMAGE_NAME}:latest-arm64${TAG_SUFFIX} \ --amend ${IMAGE_NAME}:latest-amd64${TAG_SUFFIX}; docker manifest push ${IMAGE_NAME}:latest${TAG_SUFFIX}