Multi-platform docker image build

This commit is contained in:
Igor Katson 2024-08-26 15:42:38 +01:00
parent df4e6bbd0f
commit 3a8ef207ad
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
3 changed files with 45 additions and 63 deletions

View file

@ -78,51 +78,24 @@ jobs:
files: |
target/artifacts/rqbit-osx-universal
- name: install linux cross compiler
- name: install linux cross compiler toolchains
run: brew tap messense/macos-cross-toolchains &&
brew install x86_64-unknown-linux-musl aarch64-unknown-linux-gnu arm-unknown-linux-gnueabihf armv7-unknown-linux-gnueabihf armv7-unknown-linux-musleabihf
brew install x86_64-unknown-linux-musl aarch64-unknown-linux-musl armv7-unknown-linux-musleabihf
- name: Build release linux x86_64 binary
run: rustup target install x86_64-unknown-linux-musl &&
make release-linux-x86_64 &&
mv target/x86_64-unknown-linux-musl/release-github/rqbit target/artifacts/rqbit-linux-static-x86_64
cp -l target/x86_64-unknown-linux-musl/release-github/rqbit target/artifacts/rqbit-linux-static-x86_64-musl
- uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
files: |
target/artifacts/rqbit-linux-static-x86_64
- name: Archive target/artifacts/rqbit-linux-static-x86_64
uses: actions/upload-artifact@v4
with:
name: rqbit-linux-static-x86_64
path: target/artifacts/rqbit-linux-static-x86_64
- name: Build release linux armv6 binary
run: rustup target install arm-unknown-linux-gnueabihf &&
make release-linux-armv6 &&
mv target/arm-unknown-linux-gnueabihf/release-github/rqbit target/artifacts/rqbit-linux-static-armv6
- uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
files: |
target/artifacts/rqbit-linux-static-armv6
target/artifacts/rqbit-linux-static-x86_64-musl
- name: Build release linux armv7 binary
run: rustup target install armv7-unknown-linux-gnueabihf &&
make release-linux-armv7 &&
mv target/armv7-unknown-linux-gnueabihf/release-github/rqbit target/artifacts/rqbit-linux-static-armv7
- uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
files: |
target/artifacts/rqbit-linux-static-armv7
- name: Build release linux armv7 musl binary
run: rustup target install armv7-unknown-linux-musleabihf &&
make release-linux-armv7-musl &&
mv target/armv7-unknown-linux-musleabihf/release-github/rqbit target/artifacts/rqbit-linux-static-armv7-musl
cp -l target/armv7-unknown-linux-musleabihf/release-github/rqbit target/artifacts/rqbit-linux-static-armv7-musl
- uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
@ -130,27 +103,33 @@ jobs:
target/artifacts/rqbit-linux-static-armv7-musl
- name: Build release linux aarch64 binary
run: rustup target install aarch64-unknown-linux-gnu &&
run: rustup target install aarch64-unknown-linux-musl &&
make release-linux-aarch64 &&
mv target/aarch64-unknown-linux-gnu/release-github/rqbit target/artifacts/rqbit-linux-static-aarch64
cp -l target/aarch64-unknown-linux-musl/release-github/rqbit target/artifacts/rqbit-linux-static-aarch64-musl
- uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
files: |
target/artifacts/rqbit-linux-static-aarch64
target/artifacts/rqbit-linux-static-aarch64-musl
- name: Create target/docker
run: make create-target-docker
- name: Archive target/docker/
uses: actions/upload-artifact@v4
with:
name: target-docker
path: target/docker/
build-push-docker:
runs-on: ubuntu-latest
needs: cross-compile-on-macos
steps:
- uses: actions/checkout@v4
- name: Download a single artifact
uses: actions/download-artifact@v4
with:
name: rqbit-linux-static-x86_64
- name: Move the binary to a different place
run: mkdir -p target/x86_64/ && mv rqbit-linux-static-x86_64 target/x86_64/rqbit
name: target-docker
path: target/docker
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
@ -166,6 +145,6 @@ jobs:
with:
push: true
tags: ikatson/rqbit:${{ github.ref_name }}
context: target/x86_64/
platforms: linux/amd64
file: docker/Dockerfile
context: target/docker/
platforms: linux/amd64,linux/arm64,linux/arm/v7
file: target/docker/Dockerfile

View file

@ -103,22 +103,31 @@ release-linux-x86_64:
CROSS_COMPILE_PREFIX=x86_64-unknown-linux-musl \
$(MAKE) release-linux-current-target
@PHONY: docker-x86_64
docker-x86_64:
@PHONY: create-target-docker
create-target-docker:
mkdir -p target/docker/linux/amd64 target/docker/linux/arm64 target/docker/linux/arm/v7 && \
cp -l target/x86_64-unknown-linux-musl/release-github/rqbit target/docker/linux/amd64/rqbit && \
cp -l target/aarch64-unknown-linux-musl/release-github/rqbit target/docker/linux/arm64/rqbit && \
cp -l target/armv7-unknown-linux-musleabihf/release-github/rqbit target/docker/linux/arm/v7/rqbit && \
cp docker/Dockerfile target/Docker
@PHONY: docker-build
docker-build: create-target-docker
docker build \
-f docker/Dockerfile \
-t ikatson/rqbit:$(shell git describe --tags) \
--platform linux/amd64 \
target/x86_64-unknown-linux-musl/release-github/
-f target/docker/Dockerfile \
-t ikatson/rqbit:$(shell git describe --tags) \
--platform linux/amd64,linux/arm64,linux/arm/v7 \
target/docker/
@PHONY: release-linux-aarch64
release-linux-aarch64:
TARGET=aarch64-unknown-linux-gnu \
TARGET_SNAKE_CASE=aarch64_unknown_linux_gnu \
TARGET_SNAKE_UPPER_CASE=AARCH64_UNKNOWN_LINUX_GNU \
CROSS_COMPILE_PREFIX=aarch64-unknown-linux-gnu \
TARGET=aarch64-unknown-linux-musl \
TARGET_SNAKE_CASE=aarch64_unknown_linux_musl \
TARGET_SNAKE_UPPER_CASE=AARCH64_UNKNOWN_LINUX_MUSL \
CROSS_COMPILE_PREFIX=aarch64-unknown-linux-musl \
$(MAKE) release-linux-current-target
# TODO: couldn't figure out how to compile this one with musl
@PHONY: release-linux-armv6
release-linux-armv6:
TARGET=arm-unknown-linux-gnueabihf \
@ -128,17 +137,8 @@ release-linux-armv6:
LDFLAGS=-latomic \
$(MAKE) release-linux-current-target
# armv7-unknown-linux-gnueabihf
@PHONY: release-linux-armv7
release-linux-armv7:
TARGET=armv7-unknown-linux-gnueabihf \
TARGET_SNAKE_CASE=armv7_unknown_linux_gnueabihf \
TARGET_SNAKE_UPPER_CASE=ARMV7_UNKNOWN_LINUX_GNUEABIHF \
CROSS_COMPILE_PREFIX=armv7-linux-gnueabihf \
$(MAKE) release-linux-current-target
@PHONY: release-linux-armv7-musl
release-linux-armv7-musl:
TARGET=armv7-unknown-linux-musleabihf \
TARGET_SNAKE_CASE=armv7_unknown_linux_musleabihf \
TARGET_SNAKE_UPPER_CASE=ARMV7_UNKNOWN_LINUX_MUSLEABIHF \

View file

@ -1,7 +1,9 @@
FROM scratch
ARG TARGETPLATFORM
## Assumes you are running this from respective context folder.
COPY --chmod=755 rqbit /bin/rqbit
COPY --chmod=755 ${TARGETPLATFORM}/rqbit /bin/rqbit
WORKDIR /home/rqbit
@ -18,4 +20,5 @@ VOLUME /home/rqbit/output
EXPOSE 3000
EXPOSE 4240
CMD ["server", "start", "/home/rqbit/output"]
ENTRYPOINT ["/bin/rqbit"]