The docker container needs to be created with the network option set to one of the networks otherwise it will not work.
103 lines
3.2 KiB
YAML
103 lines
3.2 KiB
YAML
# Based on: https://pastebin.com/99Fq2b2w
|
|
name: Build and deploy automation_rs
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
- feature/**
|
|
|
|
jobs:
|
|
build:
|
|
name: Build
|
|
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: Formatting
|
|
uses: actions-rust-lang/rustfmt@v1
|
|
|
|
- name: Clippy
|
|
run: cargo clippy --all-targets --all -- -D warnings
|
|
|
|
- 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: Create container
|
|
runs-on: ubuntu-latest
|
|
needs: [build]
|
|
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 & 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
|