Skip to content

Build Docker images with pathfinder #14

Build Docker images with pathfinder

Build Docker images with pathfinder #14

name: "Build Docker images with pathfinder"
on:
workflow_dispatch:
inputs:
firestarkVersion:
description: "firestark version"
required: true
pathfinderVersion:
description: "pathfinder version"
required: true
jobs:
image-info:
name: "Extract image info"
runs-on: "ubuntu-latest"
outputs:
tag: ${{ steps.derive.outputs.tag }}
env:
DOCKER_REPOSITORY: "starknet/firestark"
steps:
- id: "derive"
name: "Derive image info from workflow input"
run: |
echo "tag=${DOCKER_REPOSITORY}:${{ github.event.inputs.firestarkVersion }}-pathfinder-${{ github.event.inputs.pathfinderVersion }}" >> $GITHUB_OUTPUT
build:
name: "Build for ${{ matrix.platform }}"
runs-on: "ubuntu-latest"
needs:
- "image-info"
strategy:
matrix:
include:
- tag: "amd64"
platform: "linux/amd64"
artifact: "amd64.tar.gz"
- tag: "arm64"
platform: "linux/arm64/v8"
artifact: "arm64.tar.gz"
steps:
- name: "Checkout"
uses: "actions/checkout@v3"
- name: "Build Docker image"
run: |
docker buildx build \
-t ${{ needs.image-info.outputs.tag }}-${{ matrix.tag }} \
--build-arg FIRESTARK_VERSION=${{ github.event.inputs.firestarkVersion }} \
--build-arg PATHFINDER_VERSION=${{ github.event.inputs.pathfinderVersion }} \
--platform "${{ matrix.platform }}" \
--output=type=docker \
-f ./Dockerfile.pathfinder .
- name: "Export Docker image"
run: |
docker save ${{ needs.image-info.outputs.tag }}-${{ matrix.tag }} | gzip > /tmp/${{ matrix.artifact }}
- name: "Upload Docker image artifact"
uses: "actions/upload-artifact@v3"
with:
name: "${{ matrix.artifact }}"
path: "/tmp/${{ matrix.artifact }}"
push:
name: "Push Docker images"
runs-on: "ubuntu-latest"
needs:
- "image-info"
- "build"
steps:
- name: "Download linux/amd64 image"
uses: "actions/download-artifact@v3"
with:
name: "amd64.tar.gz"
path: "/tmp/"
- name: "Download linux/arm64/v8 image"
uses: "actions/download-artifact@v3"
with:
name: "arm64.tar.gz"
path: "/tmp/"
- name: "Load Docker images"
run: |
docker load < /tmp/amd64.tar.gz
docker load < /tmp/arm64.tar.gz
- name: "Login to Docker Hub"
uses: "docker/[email protected]"
with:
username: "${{ secrets.DOCKER_HUB_USERNAME }}"
password: "${{ secrets.DOCKER_HUB_PASSWORD }}"
- name: "Push Docker images"
run: |
docker push ${{ needs.image-info.outputs.tag }}-amd64
docker push ${{ needs.image-info.outputs.tag }}-arm64
docker manifest create ${{ needs.image-info.outputs.tag }} \
${{ needs.image-info.outputs.tag }}-amd64 \
${{ needs.image-info.outputs.tag }}-arm64
docker manifest push ${{ needs.image-info.outputs.tag }}