Multi-platform docker image build
This commit is contained in:
parent
df4e6bbd0f
commit
3a8ef207ad
3 changed files with 45 additions and 63 deletions
65
.github/workflows/release.yml
vendored
65
.github/workflows/release.yml
vendored
|
|
@ -78,51 +78,24 @@ jobs:
|
||||||
files: |
|
files: |
|
||||||
target/artifacts/rqbit-osx-universal
|
target/artifacts/rqbit-osx-universal
|
||||||
|
|
||||||
- name: install linux cross compiler
|
- name: install linux cross compiler toolchains
|
||||||
run: brew tap messense/macos-cross-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
|
- name: Build release linux x86_64 binary
|
||||||
run: rustup target install x86_64-unknown-linux-musl &&
|
run: rustup target install x86_64-unknown-linux-musl &&
|
||||||
make release-linux-x86_64 &&
|
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
|
- uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
generate_release_notes: true
|
generate_release_notes: true
|
||||||
files: |
|
files: |
|
||||||
target/artifacts/rqbit-linux-static-x86_64
|
target/artifacts/rqbit-linux-static-x86_64-musl
|
||||||
|
|
||||||
- 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
|
|
||||||
|
|
||||||
- name: Build release linux armv7 binary
|
- 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 &&
|
run: rustup target install armv7-unknown-linux-musleabihf &&
|
||||||
make release-linux-armv7-musl &&
|
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
|
- uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
generate_release_notes: true
|
generate_release_notes: true
|
||||||
|
|
@ -130,27 +103,33 @@ jobs:
|
||||||
target/artifacts/rqbit-linux-static-armv7-musl
|
target/artifacts/rqbit-linux-static-armv7-musl
|
||||||
|
|
||||||
- name: Build release linux aarch64 binary
|
- 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 &&
|
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
|
- uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
generate_release_notes: true
|
generate_release_notes: true
|
||||||
files: |
|
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:
|
build-push-docker:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: cross-compile-on-macos
|
needs: cross-compile-on-macos
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Download a single artifact
|
- name: Download a single artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: rqbit-linux-static-x86_64
|
name: target-docker
|
||||||
|
path: target/docker
|
||||||
- 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: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
@ -166,6 +145,6 @@ jobs:
|
||||||
with:
|
with:
|
||||||
push: true
|
push: true
|
||||||
tags: ikatson/rqbit:${{ github.ref_name }}
|
tags: ikatson/rqbit:${{ github.ref_name }}
|
||||||
context: target/x86_64/
|
context: target/docker/
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
file: docker/Dockerfile
|
file: target/docker/Dockerfile
|
||||||
|
|
|
||||||
38
Makefile
38
Makefile
|
|
@ -103,22 +103,31 @@ release-linux-x86_64:
|
||||||
CROSS_COMPILE_PREFIX=x86_64-unknown-linux-musl \
|
CROSS_COMPILE_PREFIX=x86_64-unknown-linux-musl \
|
||||||
$(MAKE) release-linux-current-target
|
$(MAKE) release-linux-current-target
|
||||||
|
|
||||||
@PHONY: docker-x86_64
|
@PHONY: create-target-docker
|
||||||
docker-x86_64:
|
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 \
|
docker build \
|
||||||
-f docker/Dockerfile \
|
-f target/docker/Dockerfile \
|
||||||
-t ikatson/rqbit:$(shell git describe --tags) \
|
-t ikatson/rqbit:$(shell git describe --tags) \
|
||||||
--platform linux/amd64 \
|
--platform linux/amd64,linux/arm64,linux/arm/v7 \
|
||||||
target/x86_64-unknown-linux-musl/release-github/
|
target/docker/
|
||||||
|
|
||||||
@PHONY: release-linux-aarch64
|
@PHONY: release-linux-aarch64
|
||||||
release-linux-aarch64:
|
release-linux-aarch64:
|
||||||
TARGET=aarch64-unknown-linux-gnu \
|
TARGET=aarch64-unknown-linux-musl \
|
||||||
TARGET_SNAKE_CASE=aarch64_unknown_linux_gnu \
|
TARGET_SNAKE_CASE=aarch64_unknown_linux_musl \
|
||||||
TARGET_SNAKE_UPPER_CASE=AARCH64_UNKNOWN_LINUX_GNU \
|
TARGET_SNAKE_UPPER_CASE=AARCH64_UNKNOWN_LINUX_MUSL \
|
||||||
CROSS_COMPILE_PREFIX=aarch64-unknown-linux-gnu \
|
CROSS_COMPILE_PREFIX=aarch64-unknown-linux-musl \
|
||||||
$(MAKE) release-linux-current-target
|
$(MAKE) release-linux-current-target
|
||||||
|
|
||||||
|
# TODO: couldn't figure out how to compile this one with musl
|
||||||
@PHONY: release-linux-armv6
|
@PHONY: release-linux-armv6
|
||||||
release-linux-armv6:
|
release-linux-armv6:
|
||||||
TARGET=arm-unknown-linux-gnueabihf \
|
TARGET=arm-unknown-linux-gnueabihf \
|
||||||
|
|
@ -128,17 +137,8 @@ release-linux-armv6:
|
||||||
LDFLAGS=-latomic \
|
LDFLAGS=-latomic \
|
||||||
$(MAKE) release-linux-current-target
|
$(MAKE) release-linux-current-target
|
||||||
|
|
||||||
# armv7-unknown-linux-gnueabihf
|
|
||||||
@PHONY: release-linux-armv7
|
@PHONY: release-linux-armv7
|
||||||
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=armv7-unknown-linux-musleabihf \
|
||||||
TARGET_SNAKE_CASE=armv7_unknown_linux_musleabihf \
|
TARGET_SNAKE_CASE=armv7_unknown_linux_musleabihf \
|
||||||
TARGET_SNAKE_UPPER_CASE=ARMV7_UNKNOWN_LINUX_MUSLEABIHF \
|
TARGET_SNAKE_UPPER_CASE=ARMV7_UNKNOWN_LINUX_MUSLEABIHF \
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
FROM scratch
|
FROM scratch
|
||||||
|
|
||||||
|
ARG TARGETPLATFORM
|
||||||
|
|
||||||
## Assumes you are running this from respective context folder.
|
## 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
|
WORKDIR /home/rqbit
|
||||||
|
|
||||||
|
|
@ -18,4 +20,5 @@ VOLUME /home/rqbit/output
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
EXPOSE 4240
|
EXPOSE 4240
|
||||||
|
CMD ["server", "start", "/home/rqbit/output"]
|
||||||
ENTRYPOINT ["/bin/rqbit"]
|
ENTRYPOINT ["/bin/rqbit"]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue