Skip to content

Commit be0a7a9

Browse files
refactoring
1 parent 040faeb commit be0a7a9

30 files changed

Lines changed: 3764 additions & 1078 deletions

README.md

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ Write your deploy logic once in `Taskfile.yml`, run it from your terminal, GitLa
3636
- [Multi-Environment Deploy](#multi-environment-deploy)
3737
- [Multi-Platform Deploy](#multi-platform-deploy)
3838
- [Environment Groups & Fleet Management](#environment-groups--fleet-management)
39+
- [Workspace (multi-project operations)](#workspace-multi-project-operations)
3940
- [Parallel Tasks & Error Handling](#parallel-tasks--error-handling)
4041
- [Registry Authentication](#registry-authentication)
4142
- [Multi-Registry Publishing](#multi-registry-publishing)
@@ -47,6 +48,7 @@ Write your deploy logic once in `Taskfile.yml`, run it from your terminal, GitLa
4748
- [Diagnostics & Validation](#diagnostics--validation)
4849
- [Examples](#examples)
4950
- [Development](#development)
51+
- [Test Performance](#test-performance)
5052
- [Troubleshooting & Debugging](#troubleshooting--debugging)
5153

5254
---
@@ -866,6 +868,81 @@ taskfile fleet repair kiosk-lobby --auto-fix
866868

867869
---
868870

871+
## Workspace (multi-project operations)
872+
873+
`taskfile workspace` discovers all projects under a given path (with a depth
874+
limit) and runs group operations on them: list, run, doctor, validate, deploy,
875+
fix, analyze.
876+
877+
Use it when you keep many small repositories in one folder (e.g.
878+
`~/github/semcod/`, `~/github/oqlos/`) and want one command to list them,
879+
lint them all, find missing tasks, or deploy the Docker-enabled ones.
880+
881+
### Quick examples
882+
883+
```bash
884+
# List every project under a folder (direct + 1 level nested)
885+
taskfile workspace list --root ~/github/semcod --depth 2
886+
887+
# Which projects have a `test` task?
888+
taskfile workspace list --root ~/github/semcod --has-task test
889+
890+
# Frequency table — tasks shared across projects
891+
taskfile workspace tasks --root ~/github/semcod
892+
893+
# Run lint in every project that has it (dry-run first)
894+
taskfile workspace run lint --root ~/github/semcod --dry-run
895+
taskfile workspace run lint --root ~/github/semcod
896+
897+
# Run doctor across all projects
898+
taskfile workspace doctor --root ~/github/semcod
899+
900+
# Validate manifests (Taskfile.yml + app.doql.css)
901+
taskfile workspace validate --root ~/github/semcod
902+
903+
# Generate CSV analysis report
904+
taskfile workspace analyze --root ~/github/semcod -o semcod_analysis.csv
905+
906+
# Fix manifest errors (empty workflows, orphan workflows, …)
907+
taskfile workspace fix --root ~/github/semcod --dry-run
908+
taskfile workspace fix --root ~/github/semcod
909+
910+
# Group deploy (docker compose up -d in each Docker project)
911+
taskfile workspace deploy --root ~/github/semcod --dry-run
912+
```
913+
914+
### Also: `doql workspace` for `.doql.css` manifests
915+
916+
The sister project [doql](https://github.com/softreck/doql) exposes the same
917+
workspace commands focused on `app.doql.css` manifests (workflows, entities,
918+
databases, interfaces):
919+
920+
```bash
921+
doql workspace list --root ~/github/oqlos
922+
doql workspace analyze --root ~/github/oqlos -o oqlos_report.csv
923+
doql workspace validate --root ~/github/oqlos
924+
doql workspace fix --root ~/github/oqlos # delegates to taskfile.workspace
925+
doql workspace run build --root ~/github/oqlos # runs `doql build` per project
926+
```
927+
928+
`doql workspace` reuses `taskfile.workspace` when available (for `fix`), and
929+
falls back to a minimal pure-Python implementation for `list`/`analyze`/`validate`/`run`.
930+
931+
### Full documentation
932+
933+
See [docs/WORKSPACE.md](docs/WORKSPACE.md) for:
934+
935+
- All commands and options (taskfile side)
936+
- Python API (`taskfile.workspace` module)
937+
- Project discovery rules (markers, exclusions, depth)
938+
- How `fix` heals manifests and how `analyze` outputs CSV
939+
- Filtering recipes (regex name, has-task, has-workflow, docker-only, taskfile-only)
940+
941+
For the `doql` side of the workspace story, see
942+
[doql README → doql workspace](https://github.com/softreck/doql#doql-workspace--operacje-na-wielu-projektach).
943+
944+
---
945+
869946
## Parallel Tasks & Error Handling
870947

871948
### Parallel Dependencies
@@ -1588,6 +1665,34 @@ taskfile --dry-run run <task>
15881665

15891666
---
15901667

1668+
## Test Performance
1669+
1670+
The test suite includes both unit tests and integration tests. To speed up development, slow integration tests are marked with `@pytest.mark.slow` and can be skipped.
1671+
1672+
```bash
1673+
# Run all tests (includes slow e2e SSH tests ~24s)
1674+
pytest
1675+
1676+
# Run only fast tests (skip slow integration tests ~15s)
1677+
pytest -m "not slow"
1678+
1679+
# Run only slow/integration tests
1680+
pytest -m slow
1681+
1682+
# Run with coverage
1683+
pytest --cov=taskfile -m "not slow"
1684+
```
1685+
1686+
### Test Performance Summary
1687+
1688+
- **Full suite**: ~24s (876 tests including e2e SSH tests)
1689+
- **Fast tests only**: ~15s (skips slow SSH integration tests)
1690+
- **Slow tests**: e2e SSH connectivity tests (5+ seconds each)
1691+
1692+
The slow tests are primarily SSH connectivity tests that attempt real SSH connections to validate error handling. These can be skipped during normal development.
1693+
1694+
---
1695+
15911696
## Troubleshooting & Debugging
15921697

15931698
### Step-by-Step Execution Tracing

0 commit comments

Comments
 (0)