Added lines for debugging #220
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Push Docker image | |
on: | |
push: | |
branches: | |
- master | |
- multi-arch-docker-build | |
tags: | |
- zeus-v* | |
paths: | |
- '.github/workflows/push_docker.yaml' | |
- 'capriccio/**' | |
- 'examples/**' | |
- 'trace/**' | |
- 'zeus/**' | |
- 'zeus_monitor/**' | |
- '.dockerignore' | |
- 'docker/Dockerfile' | |
- 'LICENSE' | |
- 'setup.py' | |
- 'pyproject.toml' | |
env: | |
REGISTRY_IMAGE: mlenergy/zeus | |
ADDITIONAL_REGISTRY_IMAGE: symbioticlab/zeus | |
jobs: | |
build_and_push: | |
if: github.repository_owner == 'ml-energy' | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
platform: | |
- linux/amd64 | |
- linux/arm64 | |
steps: | |
- name: Remove unnecessary files | |
run: | | |
sudo rm -rf /usr/share/dotnet | |
sudo rm -rf /opt/ghc | |
sudo rm -rf "/usr/local/share/boost" | |
sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
- name: Prepare | |
run: | | |
platform=${{ matrix.platform }} | |
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Docker Hub login | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
password: ${{ secrets.DOCKER_HUB_TOKEN }} | |
- name: Setup Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Generate image metadata | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
${{ env.REGISTRY_IMAGE }} | |
${{ env.ADDITIONAL_REGISTRY_IMAGE }} | |
tags: | | |
type=ref,event=branch | |
type=ref,event=tag | |
- name: Build and push by digest | |
id: build | |
uses: docker/build-push-action@v5 | |
with: | |
context: . | |
file: docker/Dockerfile | |
labels: ${{ steps.meta.outputs.labels }} | |
cache-from: type=registry,ref=mlenergy/zeus:buildcache | |
cache-to: type=registry,ref=mlenergy/zeus:buildcache,mode=max | |
platforms: ${{ matrix.platform }} | |
outputs: | | |
type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true | |
type=image,name=${{ env.ADDITIONAL_REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true | |
- name: Export digest | |
run: | | |
mkdir -p /tmp/digests | |
digest="${{ steps.build.outputs.digest }}" | |
echo "$digest" > "/tmp/digests/${digest#sha256:}.digest" | |
- name: Upload digest | |
uses: actions/upload-artifact@v4 | |
with: | |
name: digests-${{ env.PLATFORM_PAIR }} | |
path: /tmp/digests/* | |
if-no-files-found: error | |
retention-days: 1 | |
- name: List files in /tmp/digests | |
run: ls -l /tmp/digests | |
merge: | |
runs-on: ubuntu-latest | |
needs: build_and_push | |
steps: | |
- name: Create directory | |
run: | | |
mkdir -p /tmp/digests | |
- name: Download digests for linux/amd64 | |
uses: actions/download-artifact@v4 | |
with: | |
name: digests-linux-amd64 | |
path: /tmp/digests/linux-amd64 | |
- name: Download digests for linux/arm64 | |
uses: actions/download-artifact@v4 | |
with: | |
name: digests-linux-arm64 | |
path: /tmp/digests/linux-arm64 | |
- name: List files in /tmp/digests | |
run: ls -l /tmp/digests | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
${{ env.REGISTRY_IMAGE }} | |
${{ env.ADDITIONAL_REGISTRY_IMAGE }} | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
password: ${{ secrets.DOCKER_HUB_TOKEN }} | |
- name: Verify pushed digests | |
run: | | |
echo "Verifying digest for linux-amd64:" | |
cat /tmp/digests/linux-amd64/*.digest | |
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}@sha256:$(cat /tmp/digests/linux-amd64/*.digest) | |
echo "Verifying digest for linux-arm64:" | |
cat /tmp/digests/linux-arm64/*.digest | |
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}@sha256:$(cat /tmp/digests/linux-arm64/*.digest) | |
- name: Create manifest list and push | |
working-directory: /tmp/digests | |
run: | | |
tags=$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") | |
echo "Tags: $tags" | |
digests=$(find /tmp/digests -type f -name '*.digest' | xargs cat) | |
echo "Digests: $digests" | |
cmd="docker buildx imagetools create $tags" | |
for digest in $digests; do | |
cmd="$cmd $REGISTRY_IMAGE@sha256:${digest#sha256:}" | |
cmd="$cmd $ADDITIONAL_REGISTRY_IMAGE@sha256:${digest#sha256:}" | |
done | |
echo "Running command: $cmd" | |
eval $cmd | |
- name: Inspect image | |
run: | | |
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} |