diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 879c795..15eb7ad 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -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 diff --git a/Makefile b/Makefile index daf8cb1..c87a1ed 100644 --- a/Makefile +++ b/Makefile @@ -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 \ diff --git a/docker/Dockerfile b/docker/Dockerfile index a4d8c2f..4a4770a 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -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"]