Feature: Use Gitea Actions to build automation_rs
Builds automation_rs and the corresponding docker image. The binary is uploaded as an artifact and the image is uploaded to the registry.
This commit is contained in:
parent
73a2b077ed
commit
5ead3c1e7b
|
@ -1,2 +1,3 @@
|
||||||
/target
|
|
||||||
.env
|
.env
|
||||||
|
/target
|
||||||
|
!/target/x86_64-unknown-linux-gnu/release/automation
|
||||||
|
|
49
.drone.yml
49
.drone.yml
|
@ -1,49 +0,0 @@
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: default
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: build
|
|
||||||
image: docker
|
|
||||||
volumes:
|
|
||||||
- name: socket
|
|
||||||
path: /var/run/docker.sock
|
|
||||||
commands:
|
|
||||||
- DOCKER_BUILDKIT=1 docker build -t automation_rs .
|
|
||||||
|
|
||||||
- name: deploy
|
|
||||||
image: docker
|
|
||||||
volumes:
|
|
||||||
- name: socket
|
|
||||||
path: /var/run/docker.sock
|
|
||||||
environment:
|
|
||||||
MQTT_PASSWORD:
|
|
||||||
from_secret: MQTT_PASSWORD
|
|
||||||
HUE_TOKEN:
|
|
||||||
from_secret: HUE_TOKEN
|
|
||||||
NTFY_TOPIC:
|
|
||||||
from_secret: NTFY_TOPIC
|
|
||||||
RUST_LOG:
|
|
||||||
from_secret: RUST_LOG
|
|
||||||
commands:
|
|
||||||
- docker stop automation_rs || true
|
|
||||||
|
|
||||||
- docker rm automation_rs || true
|
|
||||||
|
|
||||||
# Networks need to be setup to to allow broadcasts: https://www.devwithimagination.com/2020/06/15/homebridge-docker-and-wake-on-lan/ https://github.com/dhutchison/container-images/blob/0c2d7d96bab751fb0a008cc91ba2990724bbd11f/homebridge/configure_docker_networks_for_wol.sh
|
|
||||||
# Needs to be done for ALL networks, because we can't seem to control which interface gets used to send the broadcast
|
|
||||||
- docker create -e RUST_LOG=$RUST_LOG -e MQTT_PASSWORD=$MQTT_PASSWORD -e HUE_TOKEN=$HUE_TOKEN -e NTFY_TOPIC=$NTFY_TOPIC --network mqtt --restart unless-stopped --name automation_rs automation_rs
|
|
||||||
- docker network connect web automation_rs
|
|
||||||
- docker start automation_rs
|
|
||||||
|
|
||||||
when:
|
|
||||||
branch:
|
|
||||||
- master
|
|
||||||
event:
|
|
||||||
exclude:
|
|
||||||
- pull_request
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
- name: socket
|
|
||||||
host:
|
|
||||||
path: /var/run/docker.sock
|
|
62
.gitea/workflows/build.yml
Normal file
62
.gitea/workflows/build.yml
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
# Based on: https://pastebin.com/99Fq2b2w
|
||||||
|
name: Build and deploy automation_rs
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- feature/actions
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
- 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: automation
|
||||||
|
path: target/x86_64-unknown-linux-gnu/release/automation
|
||||||
|
|
||||||
|
create-docker-container:
|
||||||
|
name: Create Docker 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: automation
|
||||||
|
|
||||||
|
- 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: true
|
||||||
|
tags: git.huizinga.dev/dreaded_x/automation_rs:latest
|
62
Dockerfile
62
Dockerfile
|
@ -1,64 +1,10 @@
|
||||||
FROM rust:bookworm AS build
|
FROM gcr.io/distroless/cc-debian12:nonroot
|
||||||
|
|
||||||
# Create user
|
|
||||||
ENV USER=automation
|
|
||||||
ENV UID=10001
|
|
||||||
RUN adduser \
|
|
||||||
--disabled-password \
|
|
||||||
--gecos "" \
|
|
||||||
--home "/nonexistent" \
|
|
||||||
--shell "/sbin/nologin" \
|
|
||||||
--no-create-home \
|
|
||||||
--uid "${UID}" \
|
|
||||||
"${USER}"
|
|
||||||
|
|
||||||
# Create basic project structure
|
|
||||||
RUN cargo new --bin /app
|
|
||||||
RUN cargo new --lib /app/impl_cast && truncate -s 0 /app/impl_cast/src/lib.rs
|
|
||||||
RUN cargo new --lib /app/google-home
|
|
||||||
|
|
||||||
# Get the correct version of the compiler
|
|
||||||
RUN rustup default nightly
|
|
||||||
|
|
||||||
# Copy cargo config
|
|
||||||
COPY .cargo/config.toml /app/.cargo/config.toml
|
|
||||||
|
|
||||||
# Copy the Cargo.toml files
|
|
||||||
COPY impl_cast/Cargo.toml /app/impl_cast
|
|
||||||
COPY google-home/Cargo.toml /app/google-home
|
|
||||||
COPY Cargo.toml Cargo.lock /app/
|
|
||||||
|
|
||||||
# Download and build all the dependencies
|
|
||||||
WORKDIR /app
|
|
||||||
RUN --mount=type=cache,target=/usr/local/cargo/registry cargo build --release
|
|
||||||
|
|
||||||
# Build impl_cast
|
|
||||||
COPY impl_cast/src/ /app/impl_cast/src/
|
|
||||||
RUN --mount=type=cache,target=/usr/local/cargo/registry set -e; touch /app/impl_cast/src/lib.rs; cargo build --release --package impl_cast
|
|
||||||
|
|
||||||
# Build google-home
|
|
||||||
COPY google-home/src/ /app/google-home/src/
|
|
||||||
RUN --mount=type=cache,target=/usr/local/cargo/registry set -e; touch /app/google-home/src/lib.rs; cargo build --release --package google-home
|
|
||||||
|
|
||||||
# Build automation
|
|
||||||
COPY src/ /app/src/
|
|
||||||
RUN --mount=type=cache,target=/usr/local/cargo/registry set -e; touch /app/src/main.rs /app/src/lib.rs /app/google-home/src/lib.rs /app/impl_cast/src/lib.rs; cargo build --release
|
|
||||||
|
|
||||||
CMD ["/app/target/release/automation"]
|
|
||||||
|
|
||||||
|
|
||||||
# FINAL IMAGE
|
|
||||||
FROM gcr.io/distroless/cc-debian12:latest
|
|
||||||
|
|
||||||
COPY --from=build /etc/passwd /etc/passwd
|
|
||||||
COPY --from=build /etc/group /etc/group
|
|
||||||
|
|
||||||
ENV AUTOMATION_CONFIG=/app/config.yml
|
ENV AUTOMATION_CONFIG=/app/config.yml
|
||||||
COPY config/config.yml /app/config.yml
|
COPY ./config/config.yml /app/config.yml
|
||||||
|
|
||||||
WORKDIR /app
|
COPY ./automation /app/automation
|
||||||
COPY --from=build /app/target/x86_64-unknown-linux-gnu/release/automation ./
|
|
||||||
|
|
||||||
USER automation:automation
|
RUN chmod +x /app/automation
|
||||||
|
|
||||||
CMD ["/app/automation"]
|
CMD ["/app/automation"]
|
||||||
|
|
4
rust-toolchain.toml
Normal file
4
rust-toolchain.toml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[toolchain]
|
||||||
|
channel = "nightly-2023-11-15"
|
||||||
|
components = ["rustfmt", "clippy"]
|
||||||
|
profile = "minimal"
|
Loading…
Reference in New Issue
Block a user