Skip to main content

add-sdk-example

Guide for adding a runnable example to the Deployer SDK, covering file creation in packages/sdk/examples/, the [[example]] entry in Cargo.toml, public-API-only imports, the sdk_ naming prefix, and CI verification. Triggers on "add sdk example", "sdk example", "new sdk example", "demonstrate sdk usage", "sdk usage example", "add example to sdk", or "show sdk in action".

Informações da origem

Repositório
torrust/torrust-tracker-deployer
Última atividade na origem
25 de fevereiro de 2026 às 19:30
Idioma detectado do SKILL.md
inglês
Estrelas
4
Forks
2

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
add-sdk-example
description
Guide for adding a runnable example to the Deployer SDK, covering file creation in packages/sdk/examples/, the [[example]] entry in Cargo.toml, public-API-only imports, the sdk_ naming prefix, and CI verification. Triggers on "add sdk example", "sdk example", "new sdk example", "demonstrate sdk usage", "sdk usage example", "add example to sdk", or "show sdk in action".
metadata
{"author":"torrust","version":"1.0"}
# Add an SDK Example SDK examples are self-contained, runnable Rust programs that show SDK consumers how to use the public API for a specific scenario. They serve as living documentation: every example must compile cleanly, must use only public SDK imports, and must be registered in `Cargo.toml`. --- ## Quick Decision Tree - Demonstrating something **already possible** with the current SDK? → Follow this guide. - Demonstrating a **not-yet-implemented** feature? → Implement the feature first (see `.github/skills/dev/sdk/add-sdk-method/skill.md`), then return here. --- ## Existing Examples (for reference) | Cargo name | File | Scenario | | --------------------------- | ----------------------------------- | -------------------------- | | `sdk_basic_usage` | `examples/basic_usage.rs` | Create, list, show, purge | | `sdk_full_deployment` | `examples/full_deployment.rs` | Full provisioning workflow | | `sdk_error_handling` | `examples/error_handling.rs` | Typed error matching | | `sdk_create_from_json_file` | `examples/create_from_json_file.rs` | Load env from JSON file | | `sdk_validate_config` | `examples/validate_config.rs` | Config file validation | Read at least one of these before writing a new example. --- ## Phase 1: Create the Example File Create `packages/sdk/examples/{scenario_name}.rs`. ### Required structure ````rust //! Short one-line description of the example. //! //! Longer explanation: what this example demonstrates, what the user will //! learn, whether infrastructure is required, etc. //! //! # Running //! //! ```bash //! cargo run --example sdk_{scenario_name} //! ``` use torrust_tracker_deployer_sdk::{Deployer, EnvironmentCreationConfig}; fn main() -> Result<(), Box<dyn std::error::Error>> { println!("=== SDK Example: {Title} ===\n"); // Step 1: Initialize the deployer let deployer = Deployer::builder() .working_dir(std::env::current_dir()?) .build()?; // Step 2: … demonstrate the scenario … println!("[DONE]\n"); Ok(()) } ```` ### Mandatory rules 1. **Public API only** — import exclusively from `torrust_tracker_deployer_sdk`. Never import from `torrust_tracker_deployer_lib` or any internal crate. 2. **`sdk_` prefix** — the Cargo example `name` must start with `sdk_` (e.g., `sdk_my_scenario`). This keeps all SDK examples grouped in `cargo run --example` completions and avoids collisions with binary targets. 3. **Print progress** — every meaningful step should print a status line so that running the example in a terminal gives clear feedback. 4. **Documented cleanup** — if the example creates environments or files that are not removed by the end of `main`, add a comment explaining why (e.g., "intentionally left for the user to inspect"). 5. **`no_run` doc tests inside `//!` comments** — if you show a code block in the module doc comment that cannot be run in isolation (e.g., requires a workspace path), mark it ` ```rust,no_run `. --- ## Phase 2: Register the Example in `Cargo.toml` Open `packages/sdk/Cargo.toml` and add an `[[example]]` entry at the end of the existing block, maintaining alphabetical or logical order: ```toml [[example]] name = "sdk_my_scenario" path = "examples/my_scenario.rs" ``` The `name` field determines the `--example` argument. It **must** match the `sdk_` prefix convention. --- ## Phase 3: Verify the Example Compiles and Runs ```bash # Compile only cargo build --example sdk_my_scenario -p torrust-tracker-deployer-sdk # Run cargo run --example sdk_my_scenario -p torrust-tracker-deployer-sdk ``` Expected: the example compiles and produces readable output with no panics. --- ## Phase 4: Verify CI Coverage Run the CI verification command to confirm the example is picked up: ```bash cargo run --examples -p torrust-tracker-deployer-sdk ``` This builds every `[[example]]` in the package. No new workflow changes are needed — the existing `.github/workflows/test-sdk-examples.yml` already builds and tests all registered SDK examples on every push. --- ## Phase 5: Run All Checks ```bash cargo run --bin linter all ``` Fix any linting issues (markdownlint in example doc comments, clippy warnings, missing `///` on public items) before committing. --- ## Commit Follow the commit conventions in `.github/skills/dev/git-workflow/commit-changes/skill.md`. Typical subject line: ```text docs(sdk): add sdk_my_scenario example ``` Group in a single commit: - `packages/sdk/examples/my_scenario.rs` (new file) - `packages/sdk/Cargo.toml` (`[[example]]` entry)
Ver no GitHub