Multi-arch builds (#32)

* feat: enable multi-arch builds and add tor and i2p images

This commit introduces multi-architecture support (amd64 & arm64)
for Docker image builds using Docker Buildx. It also adds new
images for tor and i2p services. The release script is updated to
handle these new images and to accept a Docker Hub username as an
argument. The publish workflow is updated to use the new release
script and to set up QEMU and Docker Buildx.

* feat(publish.yaml): add workflow_dispatch trigger to publish workflow
feat(publish.yaml): allow publish workflow to run when workflow_dispatch event is triggered

* feat(dockerfiles/monero): add support for ARM64 architecture

* build(dockerfiles/monero): remove duplicate FROM instruction

release(monero)
This commit is contained in:
José Luis
2025-04-06 05:40:32 +01:00
committed by GitHub
parent 6ac1b7fbe5
commit 9f68453bda
4 changed files with 206 additions and 60 deletions

View File

@@ -1,43 +1,70 @@
#!/bin/bash
#!/usr/bin/env bash
# Build and tag container images for each service based upon passed argument; monerod, nodemapper, or exporter
# All are manually tagged since some do not update as frequently as others. Bump the script
# to bump the image stored on Dockerhub.
# Build and tag container images for each service based upon the passed argument.
# This version builds multi-arch images (linux/amd64 and linux/arm64) using Docker Buildx.
# Make sure you have set up buildx and QEMU emulation (if building on a different arch).
#
# Example usage:
# ./release.sh monero
# ./release.sh exporter
set -ex
IMAGE=${1}
DH_USER=lalanza808
DH_USER=${2:-lalanza808}
MONERO_VERSION=v0.18.3.4
MONERO_BASE=${DH_USER}/monero
EXPORTER_VERSION=1.0.0
EXPORTER_BASE=${DH_USER}/exporter
NODEMAPPER_VERSION=1.0.3
NODEMAPPER_BASE=${DH_USER}/nodemapper
TOR_VERSION=$(sed -n 's/^FROM ubuntu:\(.*\) *$/\1/p' dockerfiles/tor)
TOR_BASE=${DH_USER}/tor
I2P_VERSION=$(sed -n 's/^FROM ubuntu:\(.*\) *$/\1/p' dockerfiles/i2p)
I2P_BASE=${DH_USER}/i2p
if [[ "${IMAGE}" == "nodemapper" ]]
then
echo -e "[+] Building nodemapper"
docker build -t "${NODEMAPPER_BASE}:${NODEMAPPER_VERSION}" -f dockerfiles/nodemapper .
docker tag "${NODEMAPPER_BASE}:${NODEMAPPER_VERSION}" "${NODEMAPPER_BASE}:latest"
docker push "${NODEMAPPER_BASE}:${NODEMAPPER_VERSION}"
docker push "${NODEMAPPER_BASE}:latest"
if [[ "${IMAGE}" == "nodemapper" ]]; then
echo -e "[+] Building nodemapper multi-arch (amd64 & arm64)"
docker buildx build --platform linux/amd64,linux/arm64 \
-t "${NODEMAPPER_BASE}:${NODEMAPPER_VERSION}" \
-t "${NODEMAPPER_BASE}:latest" \
-f dockerfiles/nodemapper . \
--push
fi
if [[ "${IMAGE}" == "exporter" ]]
then
echo -e "[+] Building exporter"
docker build -t "${EXPORTER_BASE}:${EXPORTER_VERSION}" -f dockerfiles/exporter .
docker tag "${EXPORTER_BASE}:${EXPORTER_VERSION}" "${EXPORTER_BASE}:latest"
docker push "${EXPORTER_BASE}:${EXPORTER_VERSION}"
docker push "${EXPORTER_BASE}:latest"
if [[ "${IMAGE}" == "exporter" ]]; then
echo -e "[+] Building exporter multi-arch (amd64 & arm64)"
docker buildx build --platform linux/amd64,linux/arm64 \
-t "${EXPORTER_BASE}:${EXPORTER_VERSION}" \
-t "${EXPORTER_BASE}:latest" \
-f dockerfiles/exporter . \
--push
fi
if [[ "${IMAGE}" == "monero" ]]
then
echo -e "[+] Building monero"
docker build -t "${MONERO_BASE}:${MONERO_VERSION}" -f dockerfiles/monero .
docker tag "${MONERO_BASE}:${MONERO_VERSION}" "${MONERO_BASE}:latest"
docker push "${MONERO_BASE}:${MONERO_VERSION}"
docker push "${MONERO_BASE}:latest"
if [[ "${IMAGE}" == "monero" ]]; then
echo -e "[+] Building monero multi-arch (amd64 & arm64)"
docker buildx build --platform linux/amd64,linux/arm64 \
-t "${MONERO_BASE}:${MONERO_VERSION}" \
-t "${MONERO_BASE}:latest" \
-f dockerfiles/monero . \
--push
fi
if [[ "${IMAGE}" == "tor" ]]; then
echo -e "[+] Building tor multi-arch (amd64 & arm64)"
docker buildx build --platform linux/amd64,linux/arm64 \
-t "${TOR_BASE}:${TOR_VERSION}" \
-t "${TOR_BASE}:latest" \
-f dockerfiles/tor . \
--push
fi
if [[ "${IMAGE}" == "i2p" ]]; then
echo -e "[+] Building i2p multi-arch (amd64 & arm64)"
docker buildx build --platform linux/amd64,linux/arm64 \
-t "${I2P_BASE}:${I2P_VERSION}" \
-t "${I2P_BASE}:latest" \
-f dockerfiles/i2p . \
--push
fi