aboutsummaryrefslogtreecommitdiffhomepage
path: root/.github
diff options
context:
space:
mode:
authorPaolo Asperti <[email protected]>2022-06-21 16:15:31 +0200
committerPaolo Asperti <[email protected]>2022-06-21 16:22:55 +0200
commit1962647b1ae94f001cd77eeff6f5816f556fbaa2 (patch)
treeec231399dcbf14d2867f2a3d2b153fd0f4cc91bc /.github
parentc87e7bc848bc2e38f0c2df8b4075d4e7e538110a (diff)
downloadrustdesk-server-1962647b1ae94f001cd77eeff6f5816f556fbaa2.tar.gz
rustdesk-server-1962647b1ae94f001cd77eeff6f5816f556fbaa2.zip
added build workflow
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/build.yaml192
1 files changed, 192 insertions, 0 deletions
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