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 steps: - name: Set up Docker environment run: | apt update && apt upgrade -y && apt install -y apt-transport-https ca-certificates curl zstd gnupg lsb-release curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null apt update && apt install -y docker-ce docker-ce-cli containerd.io - name: Set up Docker Buildx uses: https://github.com/docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 - name: Checkout uses: https://github.com/actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Cache uses: https://github.com/actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 id: cache with: path: | $HOME/.cargo/bin/ $HOME/.cargo/git/ $HOME/.cargo/registry/index/ $HOME/.cargo/registry/cache/ target/ key: ${{ runner.os }}-cache-${{ hashFiles('./Cargo.lock') }} - name: Login to Gitea uses: https://github.com/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: https://github.com/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: https://github.com/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=gha cache-to: type=gha,mode=max deploy: runs-on: alpine-latest needs: build steps: - name: Deploy update uses: https://github.com/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