> For the complete documentation index, see [llms.txt](https://cristiandis.gitbook.io/ntix/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cristiandis.gitbook.io/ntix/ntix-documentation/docs-it/contributing.md).

# Contribuire

## Contribuire

### Prerequisiti

* [Toolchain Rust](https://rustup.rs) (stabile) con `cargo`
* Windows 10/11 (richiesto per eseguire davvero la CLI; vedi note sotto)
* Uno o più gestori di pacchetti installati (winget, Chocolatey, Scoop)

### Compilazione

```bash
git clone https://github.com/Cristiandis/NTIX.git
cd NTIX
cargo build --release
```

Il binario viene generato in `target/x86_64-pc-windows-gnu/release/ntix.exe` (il progetto ha come target `x86_64-pc-windows-gnu` per impostazione predefinita tramite `.cargo/config.toml`).

Tutte le pull request dovrebbero avere come target il `master` ramo.

### Esegui

```bash
cargo run -- diff examples/simple/config.lua
```

Oppure esegui direttamente il binario compilato:

```bash
./target/x86_64-pc-windows-gnu/release/ntix.exe diff examples/simple/config.lua
```

### Test

```bash
cargo test
```

La suite di test include 245 test che coprono il caricamento della configurazione, il calcolo del diff, l'esecuzione, la gestione dello stato, il locking, la costruzione dei comandi, il rilevamento dei gestori di pacchetti, il parsing delle tabelle e il reale `cmd.exe` esecutore di comandi.

### Struttura del progetto

```
NTIX/
├── src/
│   ├── main.rs                 Punto di ingresso della CLI (sottocomandi clap, versione nell'help)
│   ├── commands.rs             Gestori dei comandi della CLI e rendering del diff
│   ├── lib.rs                  Radice del crate, moduli pubblici
│   ├── config/                 Caricamento della configurazione Lua (mlua), incl. file di configurazione
│   ├── diff/                   Calcolo del diff (pacchetti + file di configurazione)
│   ├── execution/              Esecuzione dei pacchetti e applicazione dei file di configurazione
│   ├── lock/                   Blocco dei file
│   ├── models/                 Modelli dati, opzioni e struct di configurazione
│   ├── package_manager/        Operazioni per gestore (winget/choco/scoop), costruzione dei comandi, parsing delle tabelle, rilevamento
│   ├── state_management/       Persistenza dello stato
│   ├── paths.rs                Percorsi predefiniti
│   ├── process_helper.rs       Controlli di appartenenza admin / token
│   └── hash.rs                 Hash del contenuto dei file
└── tests/                      Test di integrazione (un file per modulo)
```

### CI

GitHub Actions viene eseguito sulle pull request verso `master`:

1. Compila ed esegue la suite di test per `x86_64-pc-windows-gnu` (mingw)
2. Genera la copertura del codice con `cargo llvm-cov` su `x86_64-pc-windows-msvc`
3. Carica la copertura su Codecov

Le release vengono prodotte con `cargo-dist`, generando artefatti ZIP e MSI e pubblicando il manifest del bucket Scoop al momento del tag.

### Licenza

LGPLv2.1. Vedi [LICENSE](https://github.com/Cristiandis/NTIX/blob/master/LICENSE).

Le risorse di branding sono CC BY 4.0. Vedi [branding/LICENSE](https://github.com/Cristiandis/NTIX/blob/master/branding/LICENSE).

### Sostieni il progetto

Se lo trovi utile, ecco alcuni modi per dare una mano - scegli quello che fa per te:

1. **Contribuisci** - apri una PR, correggi un bug, migliora la documentazione o occupati di un [issue aperta](https://github.com/Cristiandis/NTIX/issues).
2. **Dona** - se il progetto ti fa risparmiare tempo o denaro, valuta di [sponsorizzare](https://ko-fi.com/S6S11IXK2X) per contribuire a coprire il tempo di sviluppo.
3. **Diffondi la voce** - metti una stella al repo, condividilo o parlane con qualcuno che potrebbe trovarlo utile.

Ogni piccolo contributo aiuta a mantenerlo aggiornato. Grazie per averlo usato!
