# Based on: https://pastebin.com/99Fq2b2w name: Build and deploy automation_rs on: push: branches: - master - feature/** jobs: check: name: Run pre-commit checks runs-on: ubuntu-latest container: catthehacker/ubuntu:act-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup go uses: actions/setup-go@v3 with: go-version: ">=1.20.1" - name: Calculate cache hash uses: https://gitea.com/actions/go-hashfiles@v0.0.1 id: hash-go with: patterns: | .pre-commit-config.yaml - name: Setup cache uses: actions/cache@v4 with: path: ~/.cache/pre-commit key: pre-commit-3|${{ steps.hash-go.outputs.hash }} - name: Install pre-commit run: python -m pip install pre-commit shell: bash - name: Setup Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: rustflags: "" - name: Set rustup default run: rustup default stable shell: bash - name: Run pre-commit run: pre-commit run --show-diff-on-failure --color=always --all-files shell: bash build: name: Build automation_rs runs-on: ubuntu-latest container: catthehacker/ubuntu:act-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: rustflags: "" - name: Build run: cargo build --release - name: Upload artifact uses: actions/upload-artifact@v3 with: name: build path: target/x86_64-unknown-linux-gnu/release/automation container: name: Build Docker image runs-on: ubuntu-latest needs: [build, checks] container: catthehacker/ubuntu:act-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Download artifact uses: actions/download-artifact@v3 with: name: build - name: Set permissions run: | chown 65532:65532 ./build/* chmod 0755 ./build/* - name: Login to registry uses: https://github.com/docker/login-action@v3 with: registry: git.huizinga.dev username: ${{ gitea.actor }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Build and push Docker image uses: https://github.com/docker/build-push-action@v5 with: context: . push: ${{ gitea.ref == 'refs/heads/master' }} # TODO: Automatically add the correct tags here tags: git.huizinga.dev/dreaded_x/automation_rs:latest deploy: name: Deploy Docker container runs-on: ubuntu-latest container: catthehacker/ubuntu:act-latest needs: [container] if: gitea.ref == 'refs/heads/master' steps: - name: Stop and remove current container run: | docker stop automation_rs || true docker rm automation_rs || true - name: Create container run: | docker create \ --pull always \ --restart unless-stopped \ --name automation_rs \ --network mqtt \ -e RUST_LOG=automation=debug \ -e MQTT_PASSWORD=${{ secrets.MQTT_PASSWORD }} \ -e HUE_TOKEN=${{ secrets.HUE_TOKEN }} \ -e NTFY_TOPIC=${{ secrets.NTFY_TOPIC }} \ git.huizinga.dev/dreaded_x/automation_rs:latest docker network connect web automation_rs - name: Start container run: docker start automation_rs # TODO: Perform a healthcheck