diff --git a/.gitea/workflows/code-quality.yaml b/.gitea/workflows/code-quality.yaml new file mode 100644 index 0000000..8c35d11 --- /dev/null +++ b/.gitea/workflows/code-quality.yaml @@ -0,0 +1,54 @@ +name: Code Quality (Auto-Format & Clippy-Fix) + +on: + push: + branches: + - dev + workflow_dispatch: + +jobs: + fix: + name: Formatierung & Clippy automatisch beheben + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v7 + with: + ref: ${{ gitea.ref_name || github.ref_name }} + token: ${{ secrets.PACKAGE_TOKEN || secrets.RELEASE_TOKEN || secrets.PUBLISH_TOKEN || secrets.API_TOKEN || secrets.PAT_TOKEN || secrets.CUSTOM_TOKEN || secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN || github.token }} + + - name: Install Rust Toolchain + uses: actions-rust-lang/setup-rust-toolchain@v2 + with: + toolchain: stable + components: clippy, rustfmt + cache: false + + - name: Cache Cargo-Abhängigkeiten & Build-Artefakte + uses: actions/cache@v6 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: cargo-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} + restore-keys: | + cargo-${{ runner.os }}- + + - name: Formatierung automatisch beheben + run: cargo fmt + + - name: Clippy-Fixes automatisch anwenden + run: cargo clippy --fix --allow-dirty --allow-staged --all-targets + + - name: Änderungen committen & pushen + run: | + if [ -n "$(git status --porcelain)" ]; then + git config user.name "Gitea-Bot" + git config user.email "no-reply@creativedragonslayer.de" + git add -A + git commit -m "Style: Automatische Formatierung & Clippy-Fixes" + git push origin HEAD:${{ gitea.ref_name || github.ref_name }} + else + echo "Keine Formatierungs- oder Clippy-Änderungen." + fi diff --git a/.gitea/workflows/main.yaml b/.gitea/workflows/main.yaml index 204f471..f201502 100644 --- a/.gitea/workflows/main.yaml +++ b/.gitea/workflows/main.yaml @@ -6,8 +6,32 @@ on: - main jobs: + detect-changes: + name: Erkenne relevante Code-Änderungen + runs-on: ubuntu-latest + outputs: + code_changed: ${{ steps.filter.outputs.code }} + steps: + - name: Checkout Repository + uses: actions/checkout@v7 + + - name: Prüfe auf Änderungen am Programmcode + uses: dorny/paths-filter@v4 + id: filter + with: + filters: | + code: + - 'src/**' + - 'Cargo.toml' + - 'Cargo.lock' + - 'scripts/**' + - '.cargo/**' + - '.gitea/workflows/main.yaml' + release-and-publish: name: Build, Publish Packages (Stable) & Create Release + needs: detect-changes + if: needs.detect-changes.outputs.code_changed == 'true' runs-on: ubuntu-latest env: CARGO_BINSTALL_VERSION: "1.23.0" diff --git a/.gitea/workflows/renovate.yaml b/.gitea/workflows/renovate.yaml index cd3e060..bc2f748 100644 --- a/.gitea/workflows/renovate.yaml +++ b/.gitea/workflows/renovate.yaml @@ -9,7 +9,7 @@ jobs: renovate: name: Dependency-Updates prüfen & Pull Requests erstellen runs-on: ubuntu-latest - container: ghcr.io/renovatebot/renovate:44.82.0 + container: ghcr.io/renovatebot/renovate:44.82.3 steps: - name: Renovate ausführen run: renovate @@ -19,6 +19,7 @@ jobs: RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }} RENOVATE_REPOSITORIES: ${{ gitea.repository || github.repository }} RENOVATE_AUTODISCOVER: "false" + RENOVATE_ALLOW_CUSTOM_CRATE_REGISTRIES: "true" RENOVATE_GIT_AUTHOR: "Renovate Bot " RENOVATE_HOST_RULES: >- [{"hostType":"cargo","matchHost":"${{ gitea.server_url || github.server_url }}","token":"${{ secrets.RENOVATE_TOKEN }}"}] diff --git a/.gitea/workflows/testing.yaml b/.gitea/workflows/testing.yaml index 00189dc..6bf6d29 100644 --- a/.gitea/workflows/testing.yaml +++ b/.gitea/workflows/testing.yaml @@ -6,8 +6,32 @@ on: - testing jobs: + detect-changes: + name: Erkenne relevante Code-Änderungen + runs-on: ubuntu-latest + outputs: + code_changed: ${{ steps.filter.outputs.code }} + steps: + - name: Checkout Repository + uses: actions/checkout@v7 + + - name: Prüfe auf Änderungen am Programmcode + uses: dorny/paths-filter@v4 + id: filter + with: + filters: | + code: + - 'src/**' + - 'Cargo.toml' + - 'Cargo.lock' + - 'scripts/**' + - '.cargo/**' + - '.gitea/workflows/testing.yaml' + build-and-publish: name: Build, Publish Packages (Testing) & Create Preview Release + needs: detect-changes + if: needs.detect-changes.outputs.code_changed == 'true' runs-on: ubuntu-latest env: CARGO_BINSTALL_VERSION: "1.23.0" diff --git a/.idea/jsonSchemas.xml b/.idea/jsonSchemas.xml index 8e80aa8..73609c5 100644 --- a/.idea/jsonSchemas.xml +++ b/.idea/jsonSchemas.xml @@ -29,6 +29,9 @@ + + diff --git a/Cargo.lock b/Cargo.lock index 3553f95..754fac7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,7 +76,7 @@ checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" [[package]] name = "docker-update" -version = "1.2.1" +version = "1.2.2" dependencies = [ "config-ctdra", "logger-ctdra", @@ -122,9 +122,9 @@ dependencies = [ [[package]] name = "granit-parser" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ccd1be9ebf2bd5520dbfcfb72b70ef492f654061299a097056f3e73410e38ec" +checksum = "48aa83cc6ac4dc610adf5501a5392b4bcc543b2c1f24eaf77469a96e31ec9abe" dependencies = [ "arraydeque", "smallvec", @@ -261,9 +261,9 @@ dependencies = [ [[package]] name = "serde-saphyr" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ec1f5cac0eb96063c64b28705255a7ed6e7d77f95c1d25e9f8b8c928006ce1" +checksum = "3afb591f9cdb6223c88ba39269aff895620c7f0716dc42b705b5733d5c7c0823" dependencies = [ "annotate-snippets", "base64", diff --git a/Cargo.toml b/Cargo.toml index e93479d..a114189 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "docker-update" -version = "1.2.1" +version = "1.2.2" edition = "2024" authors = ['DragonSlayer_14'] readme = "README.md" diff --git a/README.md b/README.md index 7708d12..2c4081d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # DockerUpdate (`docker-update`) +[![Main Release & Publish](https://gitea.creative-dragonslayer.de/Linuxapps/DockerUpdate/actions/workflows/main.yaml/badge.svg?branch=main)](https://gitea.creative-dragonslayer.de/Linuxapps/DockerUpdate/actions?workflow=main.yaml) +[![Testing Build, Publish & Preview Release](https://gitea.creative-dragonslayer.de/Linuxapps/DockerUpdate/actions/workflows/testing.yaml/badge.svg?branch=testing)](https://gitea.creative-dragonslayer.de/Linuxapps/DockerUpdate/actions?workflow=testing.yaml) + `docker-update` ist ein schlankes CLI-Werkzeug für Linux-Server, das Docker-Compose-basierte Applikationen automatisch auf neuere Versionen prüft, aktualisiert und neu startet. diff --git a/src/config.rs b/src/config.rs index 6fecfd1..b1ffbc7 100644 --- a/src/config.rs +++ b/src/config.rs @@ -7,20 +7,12 @@ use config_ctdra::get_config as get_cached_config; use serde::{Deserialize, Serialize}; /// Hauptkonfigurationsstruktur der Anwendung. -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default)] pub struct AppConfig { /// Allgemeine Einstellungen pub general: General, } -impl Default for AppConfig { - fn default() -> Self { - Self { - general: General::default(), - } - } -} - /// Allgemeine Konfigurationseinstellungen. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] pub struct General { diff --git a/src/updater.rs b/src/updater.rs index b02dfa5..f227617 100644 --- a/src/updater.rs +++ b/src/updater.rs @@ -111,14 +111,13 @@ pub fn run_compose_command(dir: &Path, args: &[&str]) -> std::io::Result || stderr.contains("unknown command \"compose\"") || stderr.contains("unknown command: compose")); - if is_unavailable { - if let Ok(fallback_out) = Command::new("docker-compose") + if is_unavailable + && let Ok(fallback_out) = Command::new("docker-compose") .current_dir(dir) .args(args) .output() - { - return Ok(fallback_out); - } + { + return Ok(fallback_out); } Ok(out) }