diff --git a/.claude/skills/products/provider-upjet-unifi/SKILL.md b/.claude/skills/products/provider-upjet-unifi/SKILL.md new file mode 100644 index 00000000..fafc290e --- /dev/null +++ b/.claude/skills/products/provider-upjet-unifi/SKILL.md @@ -0,0 +1,32 @@ +--- +name: maintain-provider-upjet-unifi +description: Maintenance + advance task menu for devantler-tech/provider-upjet-unifi — an Upjet-generated Crossplane provider for Ubiquiti UniFi (from ubiquiti-community/terraform-provider-unifi). A shared library consumed by the platform cluster to manage UniFi as Kubernetes resources. Use when the daily maintainer selects provider-upjet-unifi. +--- + +# Maintain: UniFi Crossplane provider (shared agent/infra library) + +A [Crossplane](https://crossplane.io) provider for **Ubiquiti UniFi**, generated with +[Upjet](https://github.com/crossplane/upjet) from +[`ubiquiti-community/terraform-provider-unifi`](https://github.com/ubiquiti-community/terraform-provider-unifi) +(registry source `ubiquiti-community/unifi`). A **shared library** in the portfolio — the `platform` +cluster consumes it (a `Provider` CR + `ProviderConfig`) to manage UniFi networks/WLANs/firewall/VPN/ +WireGuard/devices/settings as Kubernetes custom resources, exactly like it consumes `provider-upjet-github`. + +The canonical task menu lives **in the repo itself** — read the **`## Maintenance`** section of +`libraries/provider-upjet-unifi/AGENTS.md` (on the submodule's latest `main`): +. This card is a pointer by +design — the menu is maintained once, in the product's own `AGENTS.md`. + +**It's a generated provider — respect the generation boundary.** Change behaviour via `config/**` +(external-name coverage, groups) or `internal/clients/unifi.go` (auth), then `make generate`; never +hand-edit `apis/**`, `internal/controller/**`, or `package/crds/**`. The standout recurring task is +**tracking upstream `terraform-provider-unifi` releases**: bump `TERRAFORM_PROVIDER_VERSION`, regenerate, +draft-PR the regenerated tree; new upstream resources get an external-name config so they generate. + +Shared cross-repo rules are in the monorepo [`AGENTS.md`](../../../../AGENTS.md). + +## Roadmap & enhancement +Roadmap lives in **GitHub Issues** on `devantler-tech/provider-upjet-unifi` (`roadmap`-labelled epics + +milestones). To **advance** (resource coverage, auth/reference-resolution improvements, test coverage, +CI/CD health, docs, and the eventual platform consumer wiring) follow +[`product-engineering`](../../product-engineering/SKILL.md). diff --git a/.gitmodules b/.gitmodules index 418f2146..0332c224 100644 --- a/.gitmodules +++ b/.gitmodules @@ -74,3 +74,7 @@ path = applications/fleet-gitops url = git@github.com:devantler-tech/fleet-gitops.git branch = main +[submodule "libraries/provider-upjet-unifi"] + path = libraries/provider-upjet-unifi + url = git@github.com:devantler-tech/provider-upjet-unifi.git + branch = main diff --git a/AGENTS.md b/AGENTS.md index 574cbc0e..14c1471a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -29,6 +29,7 @@ keeping them healthy *and* moving them forward. | Homebrew tap | `devantler-tech/homebrew-tap` (repo renamed from `homebrew-formulas`) | `homebrew-tap` | [AGENTS.md](https://github.com/devantler-tech/homebrew-tap/blob/main/AGENTS.md) | | Agent skills (shared lib) | `devantler-tech/agent-skills` | `libraries/agent-skills` | [AGENTS.md](https://github.com/devantler-tech/agent-skills/blob/main/AGENTS.md) | | Agent plugins (shared lib) | `devantler-tech/agent-plugins` (renamed from `copilot-plugins`) | `libraries/agent-plugins` | [AGENTS.md](https://github.com/devantler-tech/agent-plugins/blob/main/AGENTS.md) | +| UniFi Crossplane provider (shared lib) | `devantler-tech/provider-upjet-unifi` | `libraries/provider-upjet-unifi` | [AGENTS.md](https://github.com/devantler-tech/provider-upjet-unifi/blob/main/AGENTS.md) | | Wedding app (private) | `devantler-tech/wedding-app` | `applications/wedding-app` | (private) | | AS Coaching (private) | `devantler-tech/ascoachingogvaner` | `applications/ascoachingogvaner` | (private) | | UniFi network (private) | `devantler-tech/unifi` | `applications/unifi` | [AGENTS.md](https://github.com/devantler-tech/unifi/blob/main/AGENTS.md) | diff --git a/docs/src/content/docs/projects/active.mdx b/docs/src/content/docs/projects/active.mdx index c67f6eb0..9c39c888 100644 --- a/docs/src/content/docs/projects/active.mdx +++ b/docs/src/content/docs/projects/active.mdx @@ -11,10 +11,10 @@ import platformImg from "../../../assets/platform.webp"; These are the projects I am currently working on and actively maintaining. I'm always looking for contributors and feedback — feel free to visit each project's GitHub page and follow the contribution guidelines. -{/* projects-submodules: applications/ascoachingogvaner=grouped,applications/fleet-gitops=infra,applications/ksail=section,applications/unifi=omitted,applications/wedding-app=grouped,github/devantler-tech/.github-public=infra,github/devantler-tech/github-actions/actions=section,github/devantler-tech/github-actions/reusable-workflows=section,github/devantler-tech/maintenance=infra,github/personal/.github-public=infra,github/personal/profile=infra,homebrew-tap=omitted,libraries/agent-plugins=section,libraries/agent-skills=section,platform=section,templates/dotnet-template=templates-page,templates/gitops-tenant-template=templates-page,templates/go-template=templates-page,templates/platform-template=templates-page +{/* projects-submodules: applications/ascoachingogvaner=grouped,applications/fleet-gitops=infra,applications/ksail=section,applications/unifi=omitted,applications/wedding-app=grouped,github/devantler-tech/.github-public=infra,github/devantler-tech/github-actions/actions=section,github/devantler-tech/github-actions/reusable-workflows=section,github/devantler-tech/maintenance=infra,github/personal/.github-public=infra,github/personal/profile=infra,homebrew-tap=omitted,libraries/agent-plugins=section,libraries/agent-skills=section,libraries/provider-upjet-unifi=section,platform=section,templates/dotnet-template=templates-page,templates/gitops-tenant-template=templates-page,templates/go-template=templates-page,templates/platform-template=templates-page This marker pins EVERY submodule this monorepo tracks (the source-of-truth is .gitmodules) to how it is represented on the site, so a newly-added product can't silently go unlisted. The docs CI drift-check asserts this path set EQUALS the live .gitmodules paths; when a submodule is added or removed, record it here with one disposition and update the page if needed: - • section — has its own H2 product section on this page (KSail, Platform, Reusable Workflows, Actions, Agent Skills, Agent Plugins). + • section — has its own H2 product section on this page (KSail, Platform, Reusable Workflows, Actions, Agent Skills, Agent Plugins, UniFi Provider). • grouped — a private self-hosted app folded into the "🏠 Self-Hosted Personal Apps" section (wedding-app, ascoachingogvaner). • templates-page — a starter template listed on the Templates page (/templates/) instead of here. • infra — an internal config/automation/GitOps-state repo, not surfaced as a project (the .github-public/profile/maintenance/fleet-gitops repos). @@ -89,4 +89,8 @@ A collection of generic, tool-neutral [agent skills](https://github.com/devantle An industry-standard agent-plugin marketplace that bundles curated agent skills — sourced from across the agent-skill ecosystem — into category-based plugins. Each bundled skill is pulled from its own upstream, spanning many sources including the in-house sibling library [Agent Skills](https://github.com/devantler-tech/agent-skills). It ships dual manifests so the same plugins work in [VS Code](https://code.visualstudio.com/), the [GitHub Copilot CLI](https://github.com/features/copilot), and [Claude Code](https://www.anthropic.com/claude-code). +## [🛜 UniFi Provider](https://github.com/devantler-tech/provider-upjet-unifi) ![Crossplane](https://img.shields.io/badge/Crossplane-1A1A1A.svg?style=for-the-badge&logo=crossplane&logoColor=white) ![Kubernetes](https://img.shields.io/badge/Kubernetes-326CE5.svg?style=for-the-badge&logo=Kubernetes&logoColor=white) ![Go](https://img.shields.io/badge/Go-00ADD8.svg?style=for-the-badge&logo=Go&logoColor=white) + +A [Crossplane](https://crossplane.io/) provider for [Ubiquiti UniFi](https://www.ui.com/), generated with [Upjet](https://github.com/crossplane/upjet) from the [`ubiquiti-community/terraform-provider-unifi`](https://github.com/ubiquiti-community/terraform-provider-unifi) Terraform provider. It exposes UniFi networks, WLANs, firewall, VPN/WireGuard, devices and settings as Kubernetes custom resources so they can be managed declaratively and reconciled by GitOps — the same way the [Platform](https://github.com/devantler-tech/platform) cluster consumes the upstream GitHub provider. + diff --git a/libraries/provider-upjet-unifi b/libraries/provider-upjet-unifi new file mode 160000 index 00000000..79867ac9 --- /dev/null +++ b/libraries/provider-upjet-unifi @@ -0,0 +1 @@ +Subproject commit 79867ac98ac5ec254b2abeb8348576b10ac5addd