eb8160e659
Educational RunWhen CodeCollection that discovers Crossplane GCP Bucket CRDs (storage.gcp.upbound.io/v1beta1) and generates one SLX per bucket. Ships only generation rules and Jinja templates; the runtime lives in rw-generic-codecollection/k8s-kubectl-cmd (already loaded by the airgap runner). Includes: - codebundles/gcp-bucket-crossplane-health with generation rule + 3 templates - docs/01..07 numbered training chapters with screenshot placeholders - README, .gitignore Co-authored-by: Cursor <cursoragent@cursor.com>
57 lines
2.3 KiB
Markdown
57 lines
2.3 KiB
Markdown
# simple-private-codecollection
|
||
|
||
An **educational, generation-rule-only** RunWhen CodeCollection. It ships **no**
|
||
Robot Framework code of its own — instead it teaches how a private repository
|
||
can define **discovery rules** and **SLX templates** that reuse a generic
|
||
runtime already loaded by the RunWhen runner (in this case
|
||
[`k8s-kubectl-cmd`](https://github.com/runwhen-contrib/rw-generic-codecollection/tree/main/codebundles/k8s-kubectl-cmd)
|
||
from `rw-generic-codecollection`).
|
||
|
||
## What it demonstrates
|
||
|
||
- How **workspace-builder** discovers a Kubernetes **Custom Resource** (a
|
||
Crossplane `Bucket` from the Upbound GCP provider) via a generation rule.
|
||
- How the resulting SLX points its `codeBundle.repoUrl` at a **different**
|
||
code collection where the runtime actually lives.
|
||
- How to compute a fractional **SLI** (0.0–1.0) from
|
||
`.status.conditions[]` with `jq`, and how to emit a **detailed
|
||
TaskSet** with per-condition issues via `RW.DynamicIssues`.
|
||
|
||
## Layout
|
||
|
||
```
|
||
codebundles/
|
||
gcp-bucket-crossplane-health/ # rules + templates only, no *.robot
|
||
.runwhen/
|
||
generation-rules/gcp-bucket-crossplane-health.yaml
|
||
templates/
|
||
gcp-bucket-crossplane-health-slx.yaml
|
||
gcp-bucket-crossplane-health-sli.yaml
|
||
gcp-bucket-crossplane-health-taskset.yaml
|
||
docs/
|
||
01-overview.md
|
||
02-generation-rules-only-pattern.md
|
||
03-crossplane-crd-discovery.md
|
||
04-generation-rule-walkthrough.md
|
||
05-slx-and-templates.md
|
||
06-runner-integration.md
|
||
07-validate-and-observe.md
|
||
images/ # screenshots referenced from the chapters
|
||
```
|
||
|
||
## Start here
|
||
|
||
Open [`docs/01-overview.md`](docs/01-overview.md) and read the chapters in
|
||
order. Each chapter has a short "What you'll do" preamble, an inline diagram
|
||
or code snippet, and screenshot placeholders that we fill in as we iterate.
|
||
|
||
## Target environment
|
||
|
||
This training example is wired for the RunWhen **airgap** environment (in-cluster
|
||
workspace-builder in `runwhen-env-airgap-runner`, Gitea at
|
||
`gitea.airgap.shared.runwhen.com`). The generation rule targets real Crossplane
|
||
`Bucket` resources already present in that cluster (see
|
||
[llm-storage.yaml](https://github.com/runwhen/infra-flux-nonprod-shared/blob/main/infrastructure/crossplane/llm-storage/llm-storage.yaml)
|
||
and similar). The pattern applies to any RunWhen environment; only the
|
||
`repoUrl` in the templates needs to change.
|