Skip to content

Commit 9c40fc3

Browse files
committed
Use ghcr based docker image
1 parent fba1b3d commit 9c40fc3

File tree

2 files changed

+98
-29
lines changed

2 files changed

+98
-29
lines changed

.github/workflows/docker.yml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Create and publish a Docker image
2+
3+
on:
4+
push:
5+
branches:
6+
- "master"
7+
release:
8+
types: [published]
9+
workflow_dispatch:
10+
11+
env:
12+
REGISTRY: ghcr.io
13+
IMAGE_NAME: ${{ github.repository }}
14+
15+
jobs:
16+
build-and-push-image:
17+
runs-on: ubuntu-latest
18+
permissions:
19+
contents: read
20+
packages: write
21+
steps:
22+
- name: Checkout repository
23+
uses: actions/checkout@v3
24+
25+
- name: Set up QEMU
26+
uses: docker/setup-qemu-action@v2
27+
28+
- name: Set up Docker Buildx
29+
uses: docker/setup-buildx-action@v2
30+
31+
- name: Log in to the Container registry
32+
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
33+
with:
34+
registry: ${{ env.REGISTRY }}
35+
username: ${{ github.actor }}
36+
password: ${{ secrets.GITHUB_TOKEN }}
37+
38+
- name: Extract metadata (tags, labels) for Docker
39+
id: meta
40+
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
41+
with:
42+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
43+
44+
- name: Build and push Docker image
45+
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
46+
with:
47+
context: .
48+
platforms: linux/amd64,linux/arm64
49+
push: true
50+
tags: ${{ steps.meta.outputs.tags }}
51+
labels: ${{ steps.meta.outputs.labels }}

Dockerfile

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,55 @@
1-
FROM debian:stable-slim as metaeuk-builder
2-
3-
RUN apt-get update && apt-get upgrade -y && apt-get install -y \
4-
build-essential cmake xxd git zlib1g-dev libbz2-dev \
5-
&& rm -rf /var/lib/apt/lists/*
1+
ARG APP=metaeuk
2+
FROM --platform=$BUILDPLATFORM debian:stable-slim as builder
3+
ARG TARGETARCH
4+
ARG APP
5+
6+
RUN dpkg --add-architecture $TARGETARCH \
7+
&& apt-get update \
8+
&& apt-get install -y \
9+
build-essential cmake xxd git \
10+
zlib1g-dev libbz2-dev libatomic1 \
11+
crossbuild-essential-$TARGETARCH zlib1g-dev:$TARGETARCH libbz2-dev:$TARGETARCH \
12+
&& rm -rf /var/lib/apt/lists/*
613

7-
WORKDIR /opt/metaeuk
14+
WORKDIR /opt/build
815
ADD . .
916

10-
RUN mkdir -p build_sse/bin && mkdir -p build_avx/bin
11-
12-
WORKDIR /opt/metaeuk/build_sse
13-
RUN cmake -DHAVE_SSE4_1=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
14-
make -j $(nproc --all) && make install;
15-
16-
WORKDIR /opt/metaeuk/build_avx
17-
RUN cmake -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
18-
make -j $(nproc --all) && make install;
17+
RUN if [ "$TARGETARCH" = "arm64" ]; then \
18+
mkdir -p build_$TARGETARCH/src; \
19+
cd /opt/build/build_$TARGETARCH; \
20+
CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ cmake -DHAVE_ARM8=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
21+
make -j $(nproc --all); \
22+
mv src/${APP} /opt/build/${APP}_arch; \
23+
touch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2; \
24+
else \
25+
mkdir -p build_sse2/src && mkdir -p build_sse41/src && mkdir -p build_avx2/src; \
26+
cd /opt/build/build_sse2; \
27+
cmake -DHAVE_SSE2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
28+
make -j $(nproc --all); \
29+
mv src/${APP} /opt/build/${APP}_sse2; \
30+
cd /opt/build/build_sse41; \
31+
cmake -DHAVE_SSE4_1=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
32+
make -j $(nproc --all); \
33+
mv src/${APP} /opt/build/${APP}_sse41; \
34+
cd /opt/build/build_avx2; \
35+
cmake -DHAVE_AVX2=1 -DHAVE_MPI=0 -DHAVE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. ..; \
36+
make -j $(nproc --all); \
37+
mv src/${APP} /opt/build/${APP}_avx2; \
38+
touch /opt/build/${APP}_arch; \
39+
fi
1940

2041
FROM debian:stable-slim
21-
MAINTAINER Eli Levy Karin <[email protected]>
42+
MAINTAINER Milot Mirdita <[email protected]>
43+
ARG APP
2244

23-
RUN apt-get update && apt-get upgrade -y && apt-get install -y \
24-
gawk bash grep wget libstdc++6 libgomp1 zlib1g libbz2-1.0 \
45+
RUN apt-get update && apt-get install -y \
46+
gawk bash grep libstdc++6 libgomp1 libatomic1 zlib1g libbz2-1.0 wget tar \
2547
&& rm -rf /var/lib/apt/lists/*
2648

27-
COPY --from=metaeuk-builder /opt/metaeuk/build_sse/bin/metaeuk /usr/local/bin/metaeuk_sse42
28-
COPY --from=metaeuk-builder /opt/metaeuk/build_avx/bin/metaeuk /usr/local/bin/metaeuk_avx2
29-
RUN echo '#!/bin/bash\n\
30-
if $(grep -q -E "^flags.+avx2" /proc/cpuinfo); then\n\
31-
exec /usr/local/bin/metaeuk_avx2 "$@"\n\
32-
else\n\
33-
exec /usr/local/bin/metaeuk_sse42 "$@"\n\
34-
fi' > /usr/local/bin/metaeuk
35-
RUN chmod +x /usr/local/bin/metaeuk
36-
37-
ENTRYPOINT ["/usr/local/bin/metaeuk"]
49+
COPY --from=builder /opt/build/${APP}_arch /opt/build/${APP}_sse2 /opt/build/${APP}_sse41 /opt/build/${APP}_avx2 /usr/local/bin/
50+
ADD util/${APP}_wrapper.sh /usr/local/bin/${APP}
51+
RUN if [ "$TARGETARCH" = "arm64" ]; then mv -f /opt/build/${APP}_arch /usr/local/bin/${APP}; fi
52+
53+
ENV APP=$APP
54+
ENTRYPOINT /usr/local/bin/${APP}
55+

0 commit comments

Comments
 (0)