Skip to content

Commit 7e0f48b

Browse files
authored
Merge pull request #4 from elabit/env-refactor
Refactored env settings
2 parents 3a0505f + a5083ee commit 7e0f48b

33 files changed

Lines changed: 171 additions & 131 deletions

File tree

Taskfile.yml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,22 @@ tasks:
6363
vars:
6464
EXAMPLE: '{{.EXAMPLE | default "cryptolibrary"}}'
6565
RCC: _dev/.rcc/rcc
66-
SPACE:
67-
sh: grep '^SPACE=' examples/{{.EXAMPLE}}/.rcc | cut -d= -f2 | tr -d '[:space:]'
66+
RMKS_ENVIRONMENT:
67+
sh: grep '^RMKS_ENVIRONMENT=' examples/{{.EXAMPLE}}/.env | cut -d= -f2 | tr -d '[:space:]'
6868
cmds:
69-
- '{{.RCC}} holotree vars --space {{.SPACE}} --robot examples/{{.EXAMPLE}}/robot.yaml'
70-
- '{{.RCC}} task script --space {{.SPACE}} --robot examples/{{.EXAMPLE}}/robot.yaml -- robot .'
69+
- '{{.RCC}} holotree vars --space {{.RMKS_ENVIRONMENT}} --robot examples/{{.EXAMPLE}}/robot.yaml'
70+
- '{{.RCC}} task script --space {{.RMKS_ENVIRONMENT}} --robot examples/{{.EXAMPLE}}/robot.yaml -- robot .'
7171

7272
test-windows:
7373
desc: "Run a Robot Framework example locally via RCC (Windows). Usage: task test-windows EXAMPLE=cryptolibrary"
7474
platforms: [windows]
7575
vars:
7676
EXAMPLE: '{{.EXAMPLE | default "cryptolibrary"}}'
77-
SPACE:
78-
sh: grep '^SPACE=' examples/{{.EXAMPLE}}/.rcc | cut -d= -f2 | tr -d '[:space:]'
77+
RMKS_ENVIRONMENT:
78+
sh: grep '^RMKS_ENVIRONMENT=' examples/{{.EXAMPLE}}/.env | cut -d= -f2 | tr -d '[:space:]'
7979
cmds:
80-
- '_dev\.rcc\rcc.exe holotree vars --space {{.SPACE}} --robot examples\{{.EXAMPLE}}\robot.yaml'
81-
- '_dev\.rcc\rcc.exe task script --space {{.SPACE}} --robot examples\{{.EXAMPLE}}\robot.yaml -- robot .'
80+
- '_dev\.rcc\rcc.exe holotree vars --space {{.RMKS_ENVIRONMENT}} --robot examples\{{.EXAMPLE}}\robot.yaml'
81+
- '_dev\.rcc\rcc.exe task script --space {{.RMKS_ENVIRONMENT}} --robot examples\{{.EXAMPLE}}\robot.yaml -- robot .'
8282

8383
# ── Shell ──────────────────────────────────────────────────────────────────
8484

@@ -88,7 +88,7 @@ tasks:
8888
vars:
8989
EXAMPLE: '{{.EXAMPLE | default "cryptolibrary"}}'
9090
RCC: _dev/.rcc/rcc
91-
SPACE:
92-
sh: grep '^SPACE=' examples/{{.EXAMPLE}}/.rcc | cut -d= -f2 | tr -d '[:space:]'
91+
RMKS_ENVIRONMENT:
92+
sh: grep '^RMKS_ENVIRONMENT=' examples/{{.EXAMPLE}}/.env | cut -d= -f2 | tr -d '[:space:]'
9393
cmds:
94-
- '{{.RCC}} task shell --space {{.SPACE}} --robot examples/{{.EXAMPLE}}/robot.yaml'
94+
- '{{.RCC}} task shell --space {{.RMKS_ENVIRONMENT}} --robot examples/{{.EXAMPLE}}/robot.yaml'

_dev/README.md

Lines changed: 38 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
```
1111
_dev/
1212
├── _devcontainers/ ← Zentralisierte Devcontainer-Templates
13-
│ ├── headless/ ← Für Beispiele ohne VNC (VNC=false oder nicht gesetzt)
13+
│ ├── headless/ ← Für Beispiele mit RMKS_DEVCONTAINER=headless
1414
│ │ ├── copier.yml
1515
│ │ └── template/
1616
│ │ └── .devcontainer/
1717
│ │ ├── devcontainer.json.jinja
1818
│ │ └── setup.sh
19-
│ └── desktop/ ← Für Beispiele mit VNC (VNC=true)
19+
│ └── desktop/ ← Für Beispiele mit RMKS_DEVCONTAINER=desktop
2020
│ ├── copier.yml
2121
│ └── template/
2222
│ └── .devcontainer/
@@ -33,28 +33,26 @@ _dev/
3333
│ └── versions.partial.md.jinja ← Versions-Tabelle für README
3434
├── _examples/ ← Copier-Quellen für examples/ (vollständige Beispiele)
3535
│ ├── cryptolibrary-simple/
36-
│ │ ├── .rcc ← SPACE=rf-libcrypto
3736
│ │ ├── copier.yml
3837
│ │ ├── README.partial.md ← Beispiel-spezifischer README-Teil
3938
│ │ └── template/
39+
│ │ └── .env ← RMKS_ENVIRONMENT, RMKS_DEVCONTAINER, VNC_RESOLUTION optional
4040
│ ├── web-cryptolibrary/
41-
│ │ ├── .rcc ← SPACE=rf-libbrowser-libcrypto
4241
│ │ ├── copier.yml
4342
│ │ ├── README.partial.md
4443
│ │ └── template/
45-
│ │ └── .env ← VNC=true, VNC_RESOLUTION optional
44+
│ │ └── .env ← RMKS_ENVIRONMENT, RMKS_DEVCONTAINER, VNC_RESOLUTION optional
4645
│ └── web-webshop/
4746
│ └── …
4847
├── _shared/
4948
│ └── README.md.jinja ← Gemeinsame README-Sektionen
5049
├── _templates/ ← Copier-Quellen für templates/ (minimale Skeletons)
5150
├── _labs/ ← Copier-Quellen für labs/ (Checkmk-Praxislabs für Studenten)
5251
│ └── robotmk-lab-slac26/
53-
│ ├── .devcontainer-type ← Zeigt auf den cmk25-Devcontainer-Typ
54-
│ ├── .rcc ← SPACE=rf-full
5552
│ ├── copier.yml
5653
│ ├── README.partial.md ← Lab-spezifischer README-Teil
5754
│ └── template/
55+
│ └── .env ← RMKS_ENVIRONMENT, RMKS_DEVCONTAINER, VNC_RESOLUTION optional
5856
├── config/
5957
│ └── versions.env ← Versionspins (einzige Pflegestelle!)
6058
├── .rcc/ ← RCC-Binaries (NICHT committed)
@@ -124,32 +122,31 @@ Jeder Beispieltyp hat ein eigenes Template (kein Mono-Template mit `{% if %}`-Ch
124122

125123
```
126124
_dev/_examples/cryptolibrary/
127-
├── .rcc ← Zeigt auf das RCC-Environment: SPACE=rf-libbrowser-libcrypto
128125
├── copier.yml ← Variablen-Definitionen (werden von versions.env befüllt)
129126
└── template/ ← Inhalt, der nach examples/cryptolibrary/ kopiert wird
127+
├── .env ← RMKS_ENVIRONMENT + RMKS_DEVCONTAINER + projekt-spezifische Vars
130128
├── robot.yaml ← Statische Datei (wird unverändert kopiert)
131129
├── suite.robot ← Statische Datei
132130
├── robot.toml ← Statische Datei
133131
├── keys/ ← Statische Dateien (CryptoLibrary-Schlüssel)
134-
├── .rcc ← Wird ins generierte Beispiel kopiert (Space-Name)
135132
└── .copier-answers.yml.jinja ← Tracking-Datei (wird generiert)
136133
# conda.yaml fehlt hier absichtlich — wird vom Environment injiziert (s. u.)
137134
```
138135

139136
> **`_subdirectory: template`** in `copier.yml` ist entscheidend: Copier kopiert nur den
140137
> Inhalt von `template/`, nicht `copier.yml` selbst.
141138
142-
### Shared Environments — `_environments/` und `.rcc`
139+
### Shared Environments — `_environments/` und `RMKS_ENVIRONMENT`
143140

144141
Mehrere Beispiele teilen sich oft dieselbe `conda.yaml` (z. B. alle, die Browser + Crypto
145142
benötigen). Statt die `conda.yaml.jinja` in jedes Template zu duplizieren, gibt es eine
146143
zentrale Quelle in `_environments/`.
147144

148145
**Ablauf beim Generieren:**
149146

150-
1. `generate-all.sh` liest die `.rcc`-Datei im Quell-Verzeichnis:
147+
1. `generate-all.sh` liest `RMKS_ENVIRONMENT` aus `template/.env`:
151148
```ini
152-
SPACE=rf-libbrowser-libcrypto
149+
RMKS_ENVIRONMENT=rf-libbrowser-libcrypto
153150
```
154151
2. Es ruft Copier für `_environments/rf-libbrowser-libcrypto/` auf und **injiziert**
155152
`conda.yaml` in `_dev/_examples/<name>/template/` (temporär, für den nächsten Schritt).
@@ -169,8 +166,9 @@ Der **Space-Name** (`rf-libbrowser-libcrypto`) hat zwei Bedeutungen:
169166
- Verzeichnisname in `_environments/` → Copier findet das richtige Template
170167
- RCC Holotree Space-Name → Beispiele mit demselben Space teilen sich den Environment-Cache
171168

172-
Das generierte `examples/<name>/.rcc` (mit `SPACE=rf-libbrowser-libcrypto`) wird auch von
173-
`task test` und dem GitHub-Actions-Workflow gelesen, um den richtigen Space zu übergeben.
169+
`RMKS_ENVIRONMENT` in `template/.env` wird von `generate-all.sh` gelesen, um den richtigen
170+
Space zu injizieren, und von `task test` / `task shell`, um den richtigen Space an RCC zu
171+
übergeben.
174172

175173
### `.copier-answers.yml` — Tracking-Datei
176174

@@ -284,7 +282,8 @@ Falls das neue Beispiel Browser + Crypto benötigt (wie alle bisherigen):
284282

285283
1. **Quellen anlegen**:
286284
- `_dev/_examples/<name>/copier.yml` (minimalst: nur `_subdirectory: template`)
287-
- `_dev/_examples/<name>/.rcc` mit `SPACE=rf-libbrowser-libcrypto`
285+
- `_dev/_examples/<name>/template/.env` mit `RMKS_ENVIRONMENT=rf-libbrowser-libcrypto`
286+
und `RMKS_DEVCONTAINER=desktop` (oder `headless`)
288287
- `_dev/_examples/<name>/template/` mit `robot.yaml`, `suite.robot`, `robot.toml`, ...
289288
- Analog für `_dev/_templates/<name>/` (Skeleton-Variante)
290289
2. **Generieren**: `task generate EXAMPLE=<name>`
@@ -302,9 +301,9 @@ Falls das neue Beispiel andere Dependencies braucht (z. B. nur SeleniumLibrary):
302301
└── template/
303302
└── conda.yaml.jinja ← conda-Abhängigkeiten mit Jinja2-Variablen
304303
```
305-
2. **`.rcc` im Quell-Verzeichnis** auf den neuen Space zeigen lassen:
304+
2. **`RMKS_ENVIRONMENT`** in `template/.env` auf den neuen Space-Namen setzen:
306305
```ini
307-
SPACE=<space-name>
306+
RMKS_ENVIRONMENT=<space-name>
308307
```
309308
3. Falls neue Versionen nötig: in `versions.env` ergänzen und in `generate-all.sh/ps1` als
310309
`--data`-Parameter aufnehmen.
@@ -323,7 +322,7 @@ GitHub-Repos veröffentlicht, die direkt als Codespace geöffnet werden können.
323322
|---|---|---|---|
324323
| Zweck | Vollständige Beispiele | Minimale Skeletons | Praxislabs (mehrere Suites) |
325324
| Devcontainer | `desktop` oder `headless` | keiner | `cmk25` (Checkmk-Image) |
326-
| Devcontainer-Steuerung | VNC in `.env` || `.devcontainer-type`-Datei |
325+
| Devcontainer-Steuerung | `RMKS_DEVCONTAINER` in `template/.env` || `RMKS_DEVCONTAINER` in `template/.env` |
327326
| CI (GitHub Actions) ||||
328327
| Codespace-Zielrepo | `robotmk/example-<name>` || eigenes Repo (manuell pushen) |
329328
| Suiten-Status | vollständig & lauffähig | Skeleton | können unvollständig sein |
@@ -333,34 +332,27 @@ GitHub-Repos veröffentlicht, die direkt als Codespace geöffnet werden können.
333332
1. **Quellen anlegen**:
334333
```
335334
_dev/_labs/<name>/
336-
├── .devcontainer-type ← Inhalt: cmk25
337-
├── .rcc ← SPACE=<env-name>
338335
├── copier.yml ← minimal: nur _subdirectory: template
339336
├── README.partial.md ← Lab-spezifischer README-Teil (s. u.)
340337
└── template/
338+
├── .env ← RMKS_ENVIRONMENT=<env-name>, RMKS_DEVCONTAINER=cmk25
341339
├── robot.yaml
342-
├── .env
343340
└── rf-suites/ ← oder beliebige Struktur
344341
├── robot.toml
345342
└── suite.robot
346343
```
347344

348-
2. **`.devcontainer-type` anlegen**:
349-
```bash
350-
echo "cmk25" > _dev/_labs/<name>/.devcontainer-type
351-
```
352-
353-
3. **`README.partial.md` anlegen** — enthält `{% include 'how-to-run-lab.partial.md' %}`
345+
2. **`README.partial.md` anlegen** — enthält `{% include 'how-to-run-lab.partial.md' %}`
354346
statt `how-to-run.partial.md`. Als Vorlage kann `_dev/_labs/robotmk-lab-slac26/README.partial.md`
355347
dienen.
356348

357-
4. **Generieren**:
349+
3. **Generieren**:
358350
```bash
359351
task generate EXAMPLE=<name>
360352
```
361353
Erzeugt `labs/<name>/` mit fertigem `.devcontainer/`.
362354

363-
5. **Veröffentlichen** (manuell):
355+
4. **Veröffentlichen** (manuell):
364356
```bash
365357
cd labs/<name>
366358
git init && git add . && git commit -m "initial"
@@ -539,20 +531,17 @@ _dev/_devcontainers/
539531
└── install_cmk_agent.sh
540532
```
541533

542-
**Steuerung über `.env` oder `.devcontainer-type`:**
534+
**Steuerung über `RMKS_DEVCONTAINER` in `template/.env`:**
543535

544-
`generate-all.sh` wählt den Devcontainer-Typ nach folgender Priorität:
536+
`generate-all.sh` liest `RMKS_DEVCONTAINER` direkt aus `template/.env` und injiziert
537+
den passenden Devcontainer-Typ. Kein separates `.devcontainer-type`-File nötig.
545538

546-
1. **`.devcontainer-type`-Datei** im Quell-Verzeichnis (für Labs): Enthält den gewünschten
547-
Typ explizit (z. B. `cmk25`). Überschreibt die VNC-Erkennung vollständig.
548-
2. **`VNC`-Variable** in `template/.env` (für Beispiele): Wie bisher.
549-
550-
| Mechanismus | Wert | Injizierter Typ | Beschreibung |
551-
|---|---|---|---|
552-
| `.devcontainer-type` | `cmk25` | `cmk25` | Checkmk Pro 2.5 + desktop-lite + RCC |
553-
| `.env` | `VNC=true` | `desktop` | Python-Image + noVNC-Desktop |
554-
| `.env` | `VNC=false` oder fehlend | `headless` | Python-Image, kein VNC |
555-
| keine `.env`, kein `.devcontainer-type` || kein Devcontainer | Injektion übersprungen |
539+
| `RMKS_DEVCONTAINER` | Injizierter Typ | Beschreibung |
540+
|---|---|---|
541+
| `desktop` | `desktop` | Python-Image + noVNC-Desktop |
542+
| `headless` | `headless` | Python-Image, kein VNC |
543+
| `cmk25` | `cmk25` | Checkmk Pro 2.5 + desktop-lite + RCC |
544+
| nicht gesetzt / keine `.env` || Injektion übersprungen |
556545

557546
### VNC-Auflösung (`VNC_RESOLUTION`)
558547

@@ -591,24 +580,25 @@ Alle Typen führen `setup.sh` per `postCreateCommand` aus.
591580

592581
### Devcontainer für ein neues Beispiel (examples/templates)
593582

594-
Kein manuelles Anlegen nötig — einfach in `template/.env` eintragen:
583+
In `template/.env` eintragen:
595584

596585
```dotenv
597-
VNC=true # → desktop-Devcontainer wird injiziert
598-
# oder weglassen # → headless-Devcontainer wird injiziert
586+
RMKS_DEVCONTAINER=desktop # → desktop-Devcontainer wird injiziert
587+
# oder:
588+
RMKS_DEVCONTAINER=headless # → headless-Devcontainer wird injiziert
599589
```
600590

601591
`task generate EXAMPLE=<name>` erledigt den Rest.
602592

603593
### Devcontainer für ein neues Lab
604594

605-
Eine `.devcontainer-type`-Datei im Lab-Verzeichnis anlegen:
595+
In `template/.env` eintragen:
606596

607-
```bash
608-
echo "cmk25" > _dev/_labs/<name>/.devcontainer-type
597+
```dotenv
598+
RMKS_DEVCONTAINER=cmk25
609599
```
610600

611-
Damit wird der `cmk25`-Typ unabhängig von `.env` injiziert. Kein VNC-Eintrag in `.env` nötig.
601+
Damit wird der `cmk25`-Typ injiziert.
612602

613603
### Codespaces-Badge in Sub-Repos
614604

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,8 @@
1-
VNC=false
1+
# ── robotmk-starter ──────────────────────────────────────────────────────────
2+
# RCC environment
3+
RMKS_ENVIRONMENT=rf-libcrypto
4+
# Devcontainer type
5+
RMKS_DEVCONTAINER=headless
6+
7+
# ── Environment ───────────────────────────────────────────────────────────────
28
RMKCRYPTPW=secret

_dev/_examples/cryptolibrary-simple/template/.rcc

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
1-
VNC=false
1+
# ── robotmk-starter ──────────────────────────────────────────────────────────
2+
# RCC environment
3+
RMKS_ENVIRONMENT=rf
4+
# Devcontainer type
5+
RMKS_DEVCONTAINER=headless
6+
7+
# ── Environment ───────────────────────────────────────────────────────────────

_dev/_examples/rf-custom-library/template/.rcc

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
1-
VNC=false
1+
# ── robotmk-starter ──────────────────────────────────────────────────────────
2+
# RCC environment
3+
RMKS_ENVIRONMENT=rf-yaml
4+
# Devcontainer type
5+
RMKS_DEVCONTAINER=headless
6+
7+
# ── Environment ───────────────────────────────────────────────────────────────

_dev/_examples/rf-python-varfiles/template/.rcc

Lines changed: 0 additions & 1 deletion
This file was deleted.

_dev/_examples/web-cryptolibrary/template/.env

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
VNC=true
1+
# ── robotmk-starter ──────────────────────────────────────────────────────────
2+
# RCC environment
3+
RMKS_ENVIRONMENT=rf-libbrowser-libcrypto
4+
# Devcontainer type
5+
RMKS_DEVCONTAINER=desktop
6+
7+
# ── Environment ───────────────────────────────────────────────────────────────
28
# VNC desktop resolution (default: 1280x1024 if not set)
39
# VNC_RESOLUTION=1920x1080
410
RMKCRYPTPW=rmksecret

_dev/_examples/web-cryptolibrary/template/.rcc

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)