From c89d5f3301ba7eb54a5f7b11c33a99bccbf597e0 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Tue, 30 Apr 2024 02:25:30 +0200 Subject: [PATCH] Make sure the generated lua definitions are up to date --- .gitea/workflows/build.yml | 46 +++++++++--------- .pre-commit-config.yaml | 10 ++++ definitions/generated.lua | 1 + src/bin/generate_definitions.rs | 82 ++++++++++++++++++++------------- 4 files changed, 84 insertions(+), 55 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index e1539c9..91f1679 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -7,9 +7,33 @@ on: - feature/** jobs: + 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 --all-targets + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: build + path: target/x86_64-unknown-linux-gnu/release/automation + check: name: Run pre-commit checks runs-on: ubuntu-latest + # The lua definition check require that generate_definitions is build first + needs: [build] container: catthehacker/ubuntu:act-latest steps: - name: Checkout @@ -48,28 +72,6 @@ jobs: 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 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dc58741..8220bf4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -30,3 +30,13 @@ repos: rev: v0.1.0 hooks: - id: dockerfilelint + + - repo: local + hooks: + - id: lua-definitions + name: Generate lua definitions + description: This hook generates up to date lua definitions. + entry: cargo run --release --bin generate_definitions + language: system + types: [rust] + pass_filenames: false diff --git a/definitions/generated.lua b/definitions/generated.lua index aea344e..7f5a037 100644 --- a/definitions/generated.lua +++ b/definitions/generated.lua @@ -181,3 +181,4 @@ function Washer.new(config) end --- @field event_channel EventChannel --- @field client WrappedAsyncClient +-- End of generated file diff --git a/src/bin/generate_definitions.rs b/src/bin/generate_definitions.rs index 8ea743b..8f0afab 100644 --- a/src/bin/generate_definitions.rs +++ b/src/bin/generate_definitions.rs @@ -1,3 +1,6 @@ +use std::fs::File; +use std::io::{Result, Write}; + use automation::config::MqttDeviceConfig; use automation::devices::{ AirFilter, AirFilterConfig, AudioSetup, AudioSetupConfig, ContactSensor, ContactSensorConfig, @@ -7,51 +10,64 @@ use automation::devices::{ WakeOnLANConfig, Washer, WasherConfig, }; -fn main() { - println!("-- WARN: This file is automatically generated, do not manually edit\n"); - println!("---@meta"); +fn main() -> Result<()> { + let mut d = File::create("./definitions/generated.lua")?; - println!("{}", MqttDeviceConfig::generate_lua_definition()); + writeln!( + &mut d, + "-- WARN: This file is automatically generated, do not manually edit\n" + )?; + writeln!(&mut d, "---@meta")?; - println!("{}", AirFilter::generate_lua_definition()); - println!("{}", AirFilterConfig::generate_lua_definition()); + writeln!(&mut d, "{}", MqttDeviceConfig::generate_lua_definition())?; - println!("{}", AudioSetup::generate_lua_definition()); - println!("{}", AudioSetupConfig::generate_lua_definition()); + writeln!(&mut d, "{}", AirFilter::generate_lua_definition())?; + writeln!(&mut d, "{}", AirFilterConfig::generate_lua_definition())?; - println!("{}", ContactSensor::generate_lua_definition()); - println!("{}", ContactSensorConfig::generate_lua_definition()); - println!("{}", PresenceDeviceConfig::generate_lua_definition()); - println!("{}", TriggerConfig::generate_lua_definition()); + writeln!(&mut d, "{}", AudioSetup::generate_lua_definition())?; + writeln!(&mut d, "{}", AudioSetupConfig::generate_lua_definition())?; - println!("{}", DebugBridge::generate_lua_definition()); - println!("{}", DebugBridgeConfig::generate_lua_definition()); + writeln!(&mut d, "{}", ContactSensor::generate_lua_definition())?; + writeln!(&mut d, "{}", ContactSensorConfig::generate_lua_definition())?; + writeln!( + &mut d, + "{}", + PresenceDeviceConfig::generate_lua_definition() + )?; + writeln!(&mut d, "{}", TriggerConfig::generate_lua_definition())?; - println!("{}", HueBridge::generate_lua_definition()); - println!("{}", HueBridgeConfig::generate_lua_definition()); - println!("{}", FlagIDs::generate_lua_definition()); + writeln!(&mut d, "{}", DebugBridge::generate_lua_definition())?; + writeln!(&mut d, "{}", DebugBridgeConfig::generate_lua_definition())?; - println!("{}", HueGroup::generate_lua_definition()); - println!("{}", HueGroupConfig::generate_lua_definition()); + writeln!(&mut d, "{}", HueBridge::generate_lua_definition())?; + writeln!(&mut d, "{}", HueBridgeConfig::generate_lua_definition())?; + writeln!(&mut d, "{}", FlagIDs::generate_lua_definition())?; - println!("{}", IkeaOutlet::generate_lua_definition()); - println!("{}", IkeaOutletConfig::generate_lua_definition()); + writeln!(&mut d, "{}", HueGroup::generate_lua_definition())?; + writeln!(&mut d, "{}", HueGroupConfig::generate_lua_definition())?; - println!("{}", KasaOutlet::generate_lua_definition()); - println!("{}", KasaOutletConfig::generate_lua_definition()); + writeln!(&mut d, "{}", IkeaOutlet::generate_lua_definition())?; + writeln!(&mut d, "{}", IkeaOutletConfig::generate_lua_definition())?; - println!("{}", LightSensor::generate_lua_definition()); - println!("{}", LightSensorConfig::generate_lua_definition()); + writeln!(&mut d, "{}", KasaOutlet::generate_lua_definition())?; + writeln!(&mut d, "{}", KasaOutletConfig::generate_lua_definition())?; - println!("{}", Ntfy::generate_lua_definition()); - println!("{}", NtfyConfig::generate_lua_definition()); + writeln!(&mut d, "{}", LightSensor::generate_lua_definition())?; + writeln!(&mut d, "{}", LightSensorConfig::generate_lua_definition())?; - println!("{}", Presence::generate_lua_definition()); - println!("{}", PresenceConfig::generate_lua_definition()); + writeln!(&mut d, "{}", Ntfy::generate_lua_definition())?; + writeln!(&mut d, "{}", NtfyConfig::generate_lua_definition())?; - println!("{}", WakeOnLAN::generate_lua_definition()); - println!("{}", WakeOnLANConfig::generate_lua_definition()); + writeln!(&mut d, "{}", Presence::generate_lua_definition())?; + writeln!(&mut d, "{}", PresenceConfig::generate_lua_definition())?; - println!("{}", Washer::generate_lua_definition()); - println!("{}", WasherConfig::generate_lua_definition()); + writeln!(&mut d, "{}", WakeOnLAN::generate_lua_definition())?; + writeln!(&mut d, "{}", WakeOnLANConfig::generate_lua_definition())?; + + writeln!(&mut d, "{}", Washer::generate_lua_definition())?; + writeln!(&mut d, "{}", WasherConfig::generate_lua_definition())?; + + writeln!(&mut d, "-- End of generated file")?; + + Ok(()) }