name: Build and push Docker image on: push: branches: - master concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-22.04 env: RUNNER_TOOL_CACHE: /toolcache steps: - name: Set up Docker Buildx uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 - name: Checkout uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Install zstd run: sudo apt-get update && sudo apt-get install -y zstd - name: Generate cache key id: cargo-cache-key run: | find ./Cargo.lock -type f -exec sha256sum {} + | sha256sum > hash.txt cat hash.txt - name: Cache uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 id: cache with: save-always: true path: | $HOME/.cargo/bin/ $HOME/.cargo/git/ $HOME/.cargo/registry/index/ $HOME/.cargo/registry/cache/ target/ key: ${{ runner.os }}-cache-${{ steps.cargo-cache-key.outputs.hash }} - name: Login to Gitea uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 with: registry: git.toast-server.net username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Set up Rust toolchain uses: actions-rust-lang/setup-rust-toolchain@1fbea72663f6d4c03efaab13560c8a24cfd2a7cc # v1.9.0 with: toolchain: stable rustflags: -C target-feature=-crt-static - name: Install zigbuild run: | pip3 install ziglang cargo install --locked cargo-zigbuild - name: Compile run: | rustup target add x86_64-unknown-linux-musl export GIT_COMMIT_HASH=${{ github.sha }} && \ export GIT_COMMIT_BRANCH=${{ github.ref_name }} && \ cargo zigbuild --target x86_64-unknown-linux-musl --locked -rF production - name: Build and push image uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v6.7.0 with: context: . platforms: linux/amd64 push: true tags: git.toast-server.net/toast/kon:master cache-from: type=registry,ref=git.toast-server.net/toast/kon:cache cache-to: type=registry,ref=git.toast-server.net/toast/kon:cache,mode=max,image-manifest=true,oci-mediatypes=true deploy: runs-on: host needs: build steps: - name: Deploy update uses: appleboy/ssh-action@d732991ab09097d8c8f390d91385b0386e619598 # v1.0.3 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} passphrase: ${{ secrets.SSH_PASSPHRASE }} key: ${{ secrets.SSH_KEY }} port: ${{ secrets.SSH_PORT }} script: | cd kon && docker compose pull bot && \ docker compose up -d bot --force-recreate && \ docker system prune -f