From 1962647b1ae94f001cd77eeff6f5816f556fbaa2 Mon Sep 17 00:00:00 2001 From: Paolo Asperti Date: Tue, 21 Jun 2022 16:15:31 +0200 Subject: [PATCH] added build workflow --- .github/workflows/build.yaml | 192 +++++++++++++++++++++++++++ README.md | 2 + docker/Dockerfile | 11 -- docker/rootfs/usr/bin/healthcheck.sh | 4 + 4 files changed, 198 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/build.yaml create mode 100755 docker/rootfs/usr/bin/healthcheck.sh diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..f14f2c0 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,192 @@ +name: build + +# ------------- NOTE +# please setup some secrets before running this workflow: +# DOCKER_IMAGE should be the target image name on docker hub (e.g. "rustdesk/rustdesk-server" ) +# DOCKER_USERNAME is the username you normally use to login at https://hub.docker.com/ +# DOCKER_PASSWORD is a token you should create under "account settings / security" with read/write access + +on: + workflow_dispatch: + schedule: + - cron: '0 10 * * 2' + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+' + +env: + CARGO_TERM_COLOR: always + +jobs: + + build: + + name: Build - ${{ matrix.job.name }} + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + job: + - { name: "amd64", target: "x86_64-unknown-linux-musl" } + - { name: "arm64v8", target: "aarch64-unknown-linux-musl" } + - { name: "armv7", target: "armv7-unknown-linux-musleabihf" } + - { name: "i386", target: "i686-unknown-linux-musl" } + + steps: + + - name: Checkout + uses: actions/checkout@v3 + + - name: Install toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly + override: true + default: true + target: ${{ matrix.job.target }} + + - name: Build + uses: actions-rs/cargo@v1 + with: + command: build + args: --release --all-features --target=${{ matrix.job.target }} + use-cross: true + + # - name: Run tests + # run: cargo test --verbose + + - name: Publish Artifacts + uses: actions/upload-artifact@v3 + with: + name: binaries-${{ matrix.job.name }} + path: | + target/${{ matrix.job.target }}/release/hbbr + target/${{ matrix.job.target }}/release/hbbs + if-no-files-found: error + + + release: + + name: Github release + needs: build + runs-on: ubuntu-22.04 + + steps: + + - name: Download binaries (amd64) + uses: actions/download-artifact@v3 + with: + name: binaries-amd64 + path: amd64 + + - name: Download binaries (arm64v8) + uses: actions/download-artifact@v3 + with: + name: binaries-arm64v8 + path: arm64v8 + + - name: Download binaries (armv7) + uses: actions/download-artifact@v3 + with: + name: binaries-armv7 + path: armv7 + + - name: Download binaries (i386) + uses: actions/download-artifact@v3 + with: + name: binaries-i386 + path: i386 + + - name: Rename files + run: for arch in amd64 arm64v8 armv7 i386 ; do for b in hbbr hbbs ; do mv -v ${arch}/${b} ${arch}/${b}-${arch} ; done ; done + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + draft: true + files: | + amd64/* + arm64v8/* + armv7/* + i386/* + + + docker: + + name: Docker push - ${{ matrix.job.name }} + needs: build + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + job: + - { name: "amd64", docker_platform: "linux/amd64" } + - { name: "arm64v8", docker_platform: "linux/arm64" } + - { name: "armv7", docker_platform: "linux/arm/v7" } + - { name: "i386", docker_platform: "linux/386" } + + steps: + + - name: Checkout + uses: actions/checkout@v3 + + - name: Download binaries + uses: actions/download-artifact@v3 + with: + name: binaries-${{ matrix.job.name }} + path: docker/rootfs/usr/bin + + - name: Make binaries executable + run: chmod -v a+x docker/rootfs/usr/bin/* + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to Docker Hub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: registry.hub.docker.com/${{ secrets.DOCKER_IMAGE }} + + - name: Build and push Docker image + uses: docker/build-push-action@v3 + with: + context: "./docker" + platforms: ${{ matrix.job.docker_platform }} + push: true + tags: "${{ secrets.DOCKER_IMAGE }}:latest-${{ matrix.job.name }}" + labels: ${{ steps.meta.outputs.labels }} + + + docker-manifest: + + name: Docker manifest + needs: docker + runs-on: ubuntu-22.04 + + steps: + + - name: Log in to Docker Hub + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Create and push manifest + uses: Noelware/docker-manifest-action@master + with: + base-image: ${{ secrets.DOCKER_IMAGE }}:latest + extra-images: ${{ secrets.DOCKER_IMAGE }}:latest-amd64,${{ secrets.DOCKER_IMAGE }}:latest-arm64v8,${{ secrets.DOCKER_IMAGE }}:latest-armv7,${{ secrets.DOCKER_IMAGE }}:latest-i386 + push: true diff --git a/README.md b/README.md index 8ccb8d8..668f617 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![build](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml/badge.svg)](https://github.com/rustdesk/rustdesk-server/actions/workflows/build.yaml) + # RustDesk Server Program [**Download**](https://github.com/rustdesk/rustdesk-server/releases) diff --git a/docker/Dockerfile b/docker/Dockerfile index 64d11bf..0da0e34 100755 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,11 +1,3 @@ -FROM rust:alpine AS builder - -RUN \ - apk -U add musl-dev git file make && \ - git clone --depth=1 https://github.com/rustdesk/rustdesk-server.git /src && \ - cd /src && \ - cargo build -r --manifest-path /src/Cargo.toml - FROM busybox:stable ARG S6_OVERLAY_VERSION=3.1.0.1 @@ -17,9 +9,6 @@ RUN \ rm /tmp/s6-overlay*.tar.xz COPY rootfs / -COPY --from=builder /src/target/release/hbbr /usr/bin/hbbr -COPY --from=builder /src/target/release/hbbs /usr/bin/hbbs -COPY healthcheck.sh /usr/bin/healthcheck.sh ENV RELAY relay.example.com diff --git a/docker/rootfs/usr/bin/healthcheck.sh b/docker/rootfs/usr/bin/healthcheck.sh new file mode 100755 index 0000000..f7ae0d7 --- /dev/null +++ b/docker/rootfs/usr/bin/healthcheck.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +/package/admin/s6/command/s6-svstat /run/s6-rc/servicedirs/hbbr || exit 1 +/package/admin/s6/command/s6-svstat /run/s6-rc/servicedirs/hbbs || exit 1