diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b6fdf818..0694add2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,8 +2,12 @@ name: CI on: pull_request: + paths-ignore: + - 'website/**' push: branches: [ main ] + paths-ignore: + - 'website/**' concurrency: group: ci-${{ github.ref }} diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 00000000..3b8ae77e --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,97 @@ +name: Website (Docs) - Build & Deploy + +on: + pull_request: + paths: + - "docs/**" + - "website/**" + - "tools/**" + - ".github/workflows/pages.yml" + push: + branches: [ "main" ] + paths: + - "docs/**" + - "website/**" + - "tools/**" + - ".github/workflows/pages.yml" + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages-${{ github.ref }} + cancel-in-progress: true + +jobs: + docs-consistency: + name: Docs consistency audit + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Run docs consistency audit + shell: pwsh + run: > + pwsh -NoProfile -File ./tools/Test-DocsConsistency.ps1 + -DocsPath ./docs + -WebsitePath ./website + -FailOnOrphans:$false + + - name: Upload docs audit artifact + if: always() + uses: actions/upload-artifact@v6 + with: + name: docs-audit + if-no-files-found: warn + path: | + artifacts/docs-audit.json + + build: + name: Build Docusaurus site + runs-on: ubuntu-latest + needs: [ docs-consistency ] + + steps: + - uses: actions/checkout@v6 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "npm" + cache-dependency-path: "website/package-lock.json" + + - name: Install dependencies + working-directory: website + run: npm ci + + - name: Sync docs assets + working-directory: website + run: npm run sync-assets + + - name: Build site + working-directory: website + run: npm run build + + - name: Upload Pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: website/build + + deploy: + name: Deploy to GitHub Pages + runs-on: ubuntu-latest + needs: [ build ] + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + steps: + - name: Deploy + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 5d364da5..a1bcdc1c 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ coverage.* test-results.* *.lcov testresults.xml +docs-audit.json # Packages *.7z diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6e36c8ee..60d4bc60 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -305,9 +305,8 @@ Keep docs short and linkable: Key links: -- Docs map: `docs/00-index.md` -- Architecture: `docs/advanced/architecture.md` -- Examples: `docs/02-examples.md` +- Architecture: `docs/about/architecture.md` +- Examples: `examples/README.md` - Coding & in-code documentation rules: `STYLEGUIDE.md` --- diff --git a/README.md b/README.md index 63eafe19..c4159473 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ IdLE aims to be: - **configuration-driven** (workflows as data) - **extensible** (add custom steps and providers) -For a complete overview of concepts and architecture, see **[Overview: Concept](docs/overview/concept.md)**. +For a complete overview of concepts and architecture, see **[About > Concepts](docs/about/concepts.md)**. --- @@ -57,7 +57,7 @@ Install-Module -Name IdLE -Scope CurrentUser Import-Module IdLE ``` -For detailed installation instructions, requirements, and import options, see **[Installation Guide](docs/getting-started/installation.md)**. +For detailed installation instructions, requirements, and import options, see **[Installation Guide](docs/use/installation.md)**. --- @@ -80,23 +80,18 @@ By default, the demo runs **Mock workflows** that work out-of-the-box without ex The execution result buffers all emitted events in `result.Events`. Hosts can optionally stream events live by providing `-EventSink` as an object implementing `WriteEvent(event)`. -Next steps: - -- Documentation entry point: `docs/index.md` -- Workflow samples: `examples/workflows/` (organized by category: mock, live, templates) -- Repository demo: `examples/Invoke-IdleDemo.ps1` -- Pester tests: `tests/` - --- ## Documentation +The documentation is also available at our project site: [https://blindzero.github.io/IdentityLifecycleEngine](https://blindzero.github.io/IdentityLifecycleEngine) + Start here: -- `docs/index.md` – documentation map -- `docs/getting-started/quickstart.md` – plan → execute walkthrough -- `docs/advanced/architecture.md` – architecture and principles -- `docs/usage/workflows.md` – workflow schema and validation +- [docs/index.md](docs/index.md) – Documentation map +- [docs/about/intro.md](docs/about/intro.md) – About IdLE +- [docs/use/intro.md](docs/use/intro.md) – How to use IdLE +- [docs/reference/intro.md](docs/reference/intro.md) - The authoritative IdLE reference --- diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index 82dae2b0..00000000 --- a/docs/_config.yml +++ /dev/null @@ -1,21 +0,0 @@ -title: IdentityLifecycleEngine (IdLE) -description: Generic, headless, configuration-driven Identity Lifecycle / JML orchestration engine for PowerShell -theme: jekyll-theme-slate -markdown: kramdown -kramdown: - input: GFM - hard_wrap: false -logo: "{{ site.baseurl }}/assets/idle_logo_flat_white.png" -plugins: [] -header_pages: - - overview/concept.md - - getting-started/installation.md - - getting-started/quickstart.md - - usage/workflows.md - - usage/steps.md - - usage/providers.md - - advanced/architecture.md - - advanced/provider-capabilities.md - - advanced/extensibility.md - - advanced/security.md - - advanced/testing.md \ No newline at end of file diff --git a/docs/_navbar.md b/docs/_navbar.md deleted file mode 100644 index 355c4cf4..00000000 --- a/docs/_navbar.md +++ /dev/null @@ -1,6 +0,0 @@ -- [Home](index.md) -- [Getting started](getting-started/quickstart.md) -- [Usage](usage/workflows.md) -- [Specifications](specs/plan-export.md) -- [Advanced](advanced/architecture.md) -- [Releasing](advanced/releases.md) \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index bc0afb12..00000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,52 +0,0 @@ -- [Home](index.md) - -### User Documentation - -#### Overview - -- [Concept](overview/concept.md) - -#### Getting Started - -- [Installation](getting-started/installation.md) -- [Quickstart](getting-started/quickstart.md) - -#### Usage - -- [Workflows](usage/workflows.md) -- [Steps](usage/steps.md) -- [Providers](usage/providers.md) - -#### Reference - -- [Cmdlet Reference](reference/cmdlets.md) -- [Step Catalog](reference/steps.md) -- [Configuration](reference/configuration.md) -- [Events and Observability](reference/events-and-observability.md) -- [Providers and Contracts](reference/providers-and-contracts.md) - -#### Provider Guides - -- [Active Directory Provider](reference/providers/provider-ad.md) -- [Entra ID Provider](reference/providers/provider-entraID.md) - -### Developer Documentation - -#### Contributing - -- [Contributing](../CONTRIBUTING.md) -- [Style Guide](../STYLEGUIDE.md) -- [Agents Manual](../AGENTS.md) - -#### Advanced - -- [Architecture](advanced/architecture.md) -- [Security](advanced/security.md) -- [Extensibility](advanced/extensibility.md) -- [Provider Capabilities](advanced/provider-capabilities.md) -- [Testing](advanced/testing.md) -- [Releasing](advanced/releases.md) - -#### Specifications - -- [Plan export (JSON)](specs/plan-export.md) diff --git a/docs/advanced/architecture.md b/docs/about/architecture.md similarity index 94% rename from docs/advanced/architecture.md rename to docs/about/architecture.md index 10a44749..de2d4bd3 100644 --- a/docs/advanced/architecture.md +++ b/docs/about/architecture.md @@ -1,3 +1,8 @@ +--- +title: Architecture +sidebar_labels: Architecture +--- + # Architecture This page summarizes the core architecture decisions for IdLE. @@ -41,7 +46,7 @@ advertise which capabilities they support. The engine matches both sides and fails fast if required functionality is missing. For details on the capability-based provider model and the validation flow, -see [Provider Capabilities](provider-capabilities.md). +see [Provider Capabilities](../reference/capabilities.md). ### Execute @@ -57,7 +62,7 @@ This enables previews, approvals, and repeatable audits. Hosts may persist or exchange a plan as a **machine-readable JSON artifact**. The canonical contract format is defined here: -- [Plan export specification (JSON)](../specs/plan-export.md) +- [Plan export specification (JSON)](../reference/specs/plan-export.md) The exported artifact is intended for **approvals, CI checks, and audits**. To keep exports deterministic and review-friendly, the contract intentionally omits volatile information @@ -82,7 +87,7 @@ IdLE emits **structured events** during execution. Hosts may optionally provide an external sink to stream events live: -- `Invoke-IdlePlan -EventSink ` +- `Invoke-IdlePlan -EventSink <object>` - The sink must implement `WriteEvent(event)` - ScriptBlock sinks are rejected (secure default) @@ -97,7 +102,7 @@ No deep merge: replace-at-path semantics only. - Steps implement behaviors - Providers integrate target systems -See: [Extensibility](extensibility.md). +See: [Extensibility](../extend/extensibility.md). ## Trust boundaries @@ -152,7 +157,7 @@ The following are **not contracts** and may change in minor/patch versions: **Plan export contract** (JSON): - Format: JSON from `Export-IdlePlan` - Schema and semantics are stable -- See [Plan export specification](../specs/plan-export.md) +- See [Plan export specification](../reference/specs/plan-export.md) ### Capability ID Baseline (v1.0) diff --git a/docs/about/concepts.md b/docs/about/concepts.md new file mode 100644 index 00000000..9151db3e --- /dev/null +++ b/docs/about/concepts.md @@ -0,0 +1,73 @@ +--- +title: Concepts +sidebar_label: Concepts +--- + +# IdLE Concepts + +## Request + +A **LifecycleRequest** represents the business intent (for example: Joiner, Mover, Leaver). +It is the input to planning. + +## Plan + +A **LifecyclePlan** is created deterministically from: + +- request +- workflow definition +- step catalog / step registry + +The plan is previewable and auditable. + +## Execute + +Execution runs **only the plan** (no re-planning). This supports: + +- approvals +- repeatability +- deterministic audits + +--- + +## Building Blocks + +### Steps + +**Steps** are reusable plugins that define convergence logic. They: + +- Operate idempotently (converge towards desired state) +- Are provider-agnostic (use contracts, not direct system calls) +- Emit structured events for audit and progress + +Learn more: [Steps](../use/steps.md) | [Step Catalog](../reference/steps.md) + +### Providers + +**Providers** are system-specific adapters that connect workflows to external systems. They: + +- Authenticate and manage sessions +- Translate generic operations to system APIs +- Are mockable for tests + +Learn more: [Providers](../use/providers.md) | [Providers and Contracts](../extend/providers.md) + +--- + +## Non-goals (V1) + +IdLE.Core stays headless and avoids responsibilities that belong to a host application: + +- no UI framework +- no interactive prompts +- no authentication flows inside steps +- no dynamic code execution from configuration + +--- + +## Next Steps + +- [Installation](../use/installation.md) — Install and import guide +- [Quickstart](../use/quickstart.md) — Run the demo +- [Architecture](../about/architecture.md) — Design principles and decisions +- [Workflows](../use/workflows.md) — Define lifecycle workflows diff --git a/docs/about/intro.md b/docs/about/intro.md new file mode 100644 index 00000000..16ab231a --- /dev/null +++ b/docs/about/intro.md @@ -0,0 +1,55 @@ +--- +title: About IdLE +sidebar_label: Introduction +--- + +# IdentityLifecycleEngine (IdLE) + +![IdLE Logo](/assets/idle_logo_flat_white_text_small.png) + +## Introduction + +IdLE is a **generic, headless, configuration-driven** lifecycle orchestration engine +for identity and account processes (Joiner / Mover / Leaver), built for **PowerShell 7+**. + +The key idea is to **separate intent from implementation**: + +- **What** should happen is defined in a **workflow** (data-only configuration). +- **How** it happens is implemented by **steps** and **providers** (pluggable modules). + +--- + +## Why IdLE exists + +Identity lifecycle automation often turns into long scripts that are: + +- tightly coupled to one environment +- hard to test +- hard to change safely + +IdLE aims to be: + +- **portable** run in different environments with PowerShell 7+ without a hard dependency on a specific host or UI +- **configuration-driven** workflows are defined as data, not code. +- **modular** a small core and pluggable providers and steps. +- **testable** deterministic planning, mockable providers, and strong contracts. + +--- + +## Key Features + +- **Joiner / Mover / Leaver** orchestration (and custom lifecycle events) +- **Plan → Execute** flow (preview actions before applying them) +- **Plugin step model** (`Test` / `Invoke`, optional `Rollback` later) +- **Provider/Adapter pattern** (directory, SaaS, REST, file/mock…) +- **Structured events** for audit/progress (CorrelationId, Actor, step results) +- **Idempotent execution** (steps can be written to converge state) + +--- + +## Where to go next + +- [Concepts](concepts.md): more details on the core concepts of IdLE. +- [Use](../use/intro.md): install IdLE, run workflows, export plans, troubleshoot. +- [Extend](../extend/intro.md): implement providers and steps, integrate with secrets and events. +- [Reference](../reference/intro.md): cmdlets, steps, capabilities, and specifications. diff --git a/docs/advanced/security.md b/docs/about/security.md similarity index 99% rename from docs/advanced/security.md rename to docs/about/security.md index ecc9968b..2568193a 100644 --- a/docs/advanced/security.md +++ b/docs/about/security.md @@ -1,3 +1,8 @@ +--- +title: Security +sidebar_labels: Security +--- + # Security and Trust Boundaries IdLE is designed to execute **data-driven** identity lifecycle workflows in a deterministic way. diff --git a/docs/advanced/provider-capabilities.md b/docs/advanced/provider-capabilities.md deleted file mode 100644 index e74d2594..00000000 --- a/docs/advanced/provider-capabilities.md +++ /dev/null @@ -1,234 +0,0 @@ -# Provider capabilities - -This document describes IdLE's capability-based provider model and how capability validation fits into the planning and execution flow. - -## Motivation - -IdLE is designed to run in different environments with different provider implementations. -To keep the core engine generic and portable, IdLE uses **capabilities** as the contract boundary between: - -- **Steps** (what is required) -- **Providers** (what is available) - -Capabilities enable: - -- deterministic, fail-fast validation during planning -- clear error messages when prerequisites are missing -- provider depth without hard-coding provider-specific assumptions into the engine -- re-usable contract tests for any provider module - -## Terminology - -### Capability - -A capability is a **stable string identifier** describing a feature a provider can perform. - -Naming convention: - -- dot-separated segments -- no whitespace -- starts with a letter -- examples: `IdLE.Identity.Read`, `IdLE.Identity.Disable`, `IdLE.Entitlement.List` - -### Entitlement capability set - -Providers that support entitlement assignments should advertise the minimal trio: - -- `IdLE.Entitlement.List` — list entitlements assigned to a specific identity -- `IdLE.Entitlement.Grant` — assign an entitlement to an identity -- `IdLE.Entitlement.Revoke` — remove an entitlement from an identity - -## High-level flow - -The following describes the end-to-end flow with capability validation included. - -```text -Workflow Definition (PSD1) - | - v -Plan Builder (New-IdlePlan / New-IdlePlanObject) - | - |-- loads step metadata catalog: - | - discovers loaded IdLE.Steps.* modules - | - merges their Get-IdleStepMetadataCatalog outputs - | - applies host supplements (Providers.StepMetadata) - | - |-- normalizes steps (Name/Type/With/Condition) - | - derives RequiresCapabilities from metadata catalog - | - |-- capability validation (fail fast) - | - collects required capabilities from all steps - | - discovers available capabilities from providers - | - compares and throws on missing capabilities - | - v -Plan artifact (IdLE.Plan) is created - | - v -Plan execution (Invoke-IdlePlan / Invoke-IdlePlanObject) - | - v -Steps execute (optional runtime defensive checks may be added later) -``` - -Key point: **planning is the primary enforcement point**. -If a plan cannot be executed due to missing provider functionality, the plan build fails early and deterministically. - -## Provider advertisement - -Providers advertise capabilities explicitly via a method named: - -- `GetCapabilities()` - -The method returns a string list, e.g.: - -```powershell -$provider | Add-Member -MemberType ScriptMethod -Name GetCapabilities -Value { - return @( - 'IdLE.Identity.Read' - 'IdLE.Identity.Attribute.Ensure' - 'IdLE.Identity.Disable' - ) -} -Force -``` - -### Contract requirement - -Every provider intended for use with IdLE should expose `GetCapabilities()` and return: - -- only valid capability identifiers -- no duplicates -- a deterministic set (order-insensitive) - -IdLE includes a reusable Pester contract to enforce this. - -## Step requirements - -Steps declare required capabilities via **step metadata catalogs** owned by step packs. - -### Step pack ownership - -Step packs (`IdLE.Steps.*` modules) own metadata for their step types via the `Get-IdleStepMetadataCatalog` function. - -Each step pack exports a case-insensitive hashtable mapping: -- **Key**: `StepType` (string, e.g., `IdLE.Step.DisableIdentity`) -- **Value**: metadata hashtable containing at least: - - `RequiredCapabilities`: string or string[] (normalized to string[] by Core) - -Example from `IdLE.Steps.Common`: - -```powershell -function Get-IdleStepMetadataCatalog { - $catalog = [hashtable]::new([System.StringComparer]::OrdinalIgnoreCase) - - $catalog['IdLE.Step.DisableIdentity'] = @{ - RequiredCapabilities = @('IdLE.Identity.Disable') - } - - $catalog['IdLE.Step.EnsureAttribute'] = @{ - RequiredCapabilities = @('IdLE.Identity.Attribute.Ensure') - } - - return $catalog -} -``` - -### Discovery and merge - -During plan building, `IdLE.Core`: - -1. Discovers all loaded modules matching `IdLE.Steps.*` that export `Get-IdleStepMetadataCatalog` -2. Calls each function and merges the returned catalogs deterministically (by module name ascending) -3. Fails fast with `DuplicateStepTypeMetadata` if the same step type appears in multiple step packs - -### Host supplements (custom step types only) - -Hosts may provide metadata for **new, host-defined** step types via `Providers.StepMetadata`: - -```powershell -$providers = @{ - StepMetadata = @{ - 'Custom.Step.SpecialAction' = @{ - RequiredCapabilities = @('Custom.Capability.SpecialAction') - } - } -} -``` - -**Important**: Host metadata is **supplement-only**. Hosts cannot override step pack metadata. Attempting to provide metadata for a step type already owned by a loaded step pack will result in `DuplicateStepTypeMetadata`. - -## Capability validation - -Capability validation is performed during plan build: - -1. Load step metadata catalog (from step packs and host supplements) -2. Normalize steps and derive `RequiresCapabilities` from metadata -3. Collect required capabilities from all steps (including `OnFailureSteps`) -4. Discover available capabilities from all provider instances passed via `-Providers` -5. Compare required vs. available -6. Throw a deterministic error if any required capabilities are missing - -The thrown error message includes: - -- `MissingCapabilities: ...` -- `AffectedSteps: ...` -- `AvailableCapabilities: ...` - -This is designed for good UX and for automated diagnostics in CI logs. - -### Error: MissingStepTypeMetadata - -If a workflow references a step type that has no metadata entry, plan building fails with `MissingStepTypeMetadata`. - -Remediation: -1. Import/load the step pack module (`IdLE.Steps.*`) that owns the step type, OR -2. For custom/host-defined step types only, provide `Providers.StepMetadata` - -### Error: DuplicateStepTypeMetadata - -If the same step type appears in multiple step packs, or if a host attempts to override step pack metadata, plan building fails with `DuplicateStepTypeMetadata`. - -This ensures clear ownership and prevents ambiguous behavior. - -## Provider discovery from `-Providers` - -The engine treats the `-Providers` argument as a host-controlled "bag of objects". -For capability discovery, IdLE currently extracts candidate providers from: - -- hashtable values (excluding known non-provider keys like `StepRegistry`) -- public properties on PSCustomObject provider bags (also excluding `StepRegistry`) - -This keeps the engine host-agnostic while still allowing deterministic capability validation. - -## Migration and inference - -During migration, IdLE may infer a minimal capability set for legacy providers that do not yet implement `GetCapabilities()`. - -This inference is intentionally conservative to avoid overstating what a provider can do. - -Once all providers in the ecosystem advertise capabilities explicitly, inference can be disabled to make the contract stricter. - -## Testing - -### Provider contract tests - -Providers should include contract tests that validate capability advertisement: - -- `tests/ProviderContracts/ProviderCapabilities.Contract.ps1` - -A provider test binds the contract to a provider instance via a factory function. - -### Planning tests - -Planning tests should cover: - -- fail-fast behavior when capabilities are missing -- successful plan build when capabilities are available - -## Future extensions - -Potential follow-ups (not required for the initial capability model): - -- runtime defensive checks (optional) during step execution -- richer capability metadata (versioning, parameters) if ever needed -- mapping capabilities to provider identities (which provider satisfied what), if multi-provider routing becomes necessary diff --git a/docs/assets/img/idle_feature_built-for-automation.png b/docs/assets/img/idle_feature_built-for-automation.png new file mode 100644 index 00000000..1028100e Binary files /dev/null and b/docs/assets/img/idle_feature_built-for-automation.png differ diff --git a/docs/assets/img/idle_feature_provider-agnostic.png b/docs/assets/img/idle_feature_provider-agnostic.png new file mode 100644 index 00000000..367276ae Binary files /dev/null and b/docs/assets/img/idle_feature_provider-agnostic.png differ diff --git a/docs/assets/img/idle_feature_workflow-oriented.png b/docs/assets/img/idle_feature_workflow-oriented.png new file mode 100644 index 00000000..712d55b4 Binary files /dev/null and b/docs/assets/img/idle_feature_workflow-oriented.png differ diff --git a/docs/assets/img/idle_three_features_blue-transparent.png b/docs/assets/img/idle_three_features_blue-transparent.png new file mode 100644 index 00000000..2b4f4e79 Binary files /dev/null and b/docs/assets/img/idle_three_features_blue-transparent.png differ diff --git a/docs/assets/img/idle_three_features_flat-white.png b/docs/assets/img/idle_three_features_flat-white.png new file mode 100644 index 00000000..91d900b5 Binary files /dev/null and b/docs/assets/img/idle_three_features_flat-white.png differ diff --git a/docs/assets/img/idle_three_features_glow-black.png b/docs/assets/img/idle_three_features_glow-black.png new file mode 100644 index 00000000..5bf26d5f Binary files /dev/null and b/docs/assets/img/idle_three_features_glow-black.png differ diff --git a/docs/assets/logos/favicon.ico b/docs/assets/logos/favicon.ico new file mode 100644 index 00000000..761a17be Binary files /dev/null and b/docs/assets/logos/favicon.ico differ diff --git a/docs/assets/idle_logo_flat_white.png b/docs/assets/logos/idle_logo_flat_white.png similarity index 100% rename from docs/assets/idle_logo_flat_white.png rename to docs/assets/logos/idle_logo_flat_white.png diff --git a/docs/assets/idle_logo_flat_white_text.png b/docs/assets/logos/idle_logo_flat_white_text.png similarity index 100% rename from docs/assets/idle_logo_flat_white_text.png rename to docs/assets/logos/idle_logo_flat_white_text.png diff --git a/docs/assets/idle_logo_flat_white_text_small.png b/docs/assets/logos/idle_logo_flat_white_text_small.png similarity index 100% rename from docs/assets/idle_logo_flat_white_text_small.png rename to docs/assets/logos/idle_logo_flat_white_text_small.png diff --git a/docs/assets/idle_logo_text.png b/docs/assets/logos/idle_logo_text.png similarity index 100% rename from docs/assets/idle_logo_text.png rename to docs/assets/logos/idle_logo_text.png diff --git a/docs/assets/idle_logo_tranparent.png b/docs/assets/logos/idle_logo_transparent.png similarity index 100% rename from docs/assets/idle_logo_tranparent.png rename to docs/assets/logos/idle_logo_transparent.png diff --git a/docs/advanced/releases.md b/docs/develop/releases.md similarity index 97% rename from docs/advanced/releases.md rename to docs/develop/releases.md index 90949fc2..316e2ee2 100644 --- a/docs/advanced/releases.md +++ b/docs/develop/releases.md @@ -1,3 +1,8 @@ +--- +title: Releases +sidebar_labels: Releases +--- + # Releasing IdLE This document describes the **maintainer** release process for IdLE. @@ -91,7 +96,7 @@ For stable releases, all shipped module manifests must have: Pre-releases use tags in the form: -- `vMAJOR.MINOR.PATCH-