Files
GithubWorkflowTool/LIMITATIONS.md
copilot-swe-agent[bot] a2ddedb744 Add LIMITATIONS.md and gwt doctor command
- Created comprehensive LIMITATIONS.md documenting all v1 limitations with categories, resolution paths, and workarounds
- Implemented 'gwt doctor' CLI command to check system and workflow compatibility
- Updated README.md to reference LIMITATIONS.md
- Updated USAGE.md with doctor command documentation and examples
- Added example workflow demonstrating known limitations

Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
2025-12-27 03:25:19 +00:00

346 lines
9.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Known Limitations & Resolution Strategy (v1)
## 1. Scope
This document formally defines acknowledged limitations of GithubWorkflowTool v1, explains why they exist, and documents the intended resolution path for future versions.
The goal is **transparency, predictability, and a clear upgrade trajectory** rather than silent incompatibility.
---
## 2. Limitation Categories
Limitations are grouped by capability class and assigned a resolution tier:
- **Deferred** intentionally excluded from v1, planned for v2+
- **Constrained** partially supported with explicit restrictions
- **External** blocked by legal, platform, or ecosystem constraints
- **Configurable** disabled or limited by default but unlockable
---
## 3. Detailed Limitations
### 3.1 Incomplete GitHub Actions Feature Coverage
**Status**
- Type: **Deferred**
- Severity: **Medium**
- Impact: Some workflows may fail or require modification
**Description**
GithubWorkflowTool v1 implements a subset of GitHub Actions semantics. Unsupported or partially supported features include (non-exhaustive):
- Advanced expressions (`fromJSON`, `hashFiles`, complex boolean chains)
- Reusable workflows (`workflow_call`)
- Dynamic job generation outside `strategy.matrix`
- Job-level permissions and token scoping
- Environments with approval gates
- Concurrency groups
**Rationale**
GitHub Actions is not formally specified; it is an evolving behavior-driven platform. v1 prioritizes **deterministic local execution** over speculative compatibility.
**Resolution Path**
- **v2**: Expand expression engine coverage
- **v2**: Add reusable workflow resolution
- **v3**: Permissions & environment gates (read-only simulation)
**User Guidance (v1)**
- Prefer explicit `run:` steps over deeply nested expressions
- Avoid reusable workflows unless flattened
- Use matrix strategies only for static axes
---
### 3.2 Third-Party Actions Compatibility
**Status**
- Type: **Constrained**
- Severity: **MediumHigh**
- Impact: Some marketplace actions may fail
**Description**
Some third-party actions assume:
- Preinstalled tools on GitHub-hosted runners
- Full Node.js runtime availability
- Docker-in-Docker capability
- Privileged filesystem or network access
v1 does not guarantee these assumptions unless explicitly provided by the selected runner backend.
**Supported Action Types (v1)**
- Local composite actions
- Docker-based actions
- Node-based actions **only if**:
- Container backend is used, **or**
- Required runtimes are present in the VM template
**Resolution Path**
- **v2**: Action capability probing (pre-flight validation)
- **v2**: Curated "known-good" action compatibility list
- **v3**: Optional toolchain auto-provisioning
**User Guidance (v1)**
- Prefer Docker-based actions
- Pin action versions explicitly
- Use container backend when testing marketplace actions
---
### 3.3 Service Containers Not Implemented
**Status**
- Type: **Deferred**
- Severity: **High** (for integration-heavy workflows)
- Impact: DB-backed or multi-service workflows will fail
**Description**
GitHub Actions `services:` (e.g., PostgreSQL, Redis) are not supported in v1.
There is no orchestration layer for:
- Service lifecycle management
- Network aliasing
- Health checks
- Port mapping into jobs
**Rationale**
Service containers introduce orchestration complexity comparable to a lightweight Kubernetes layer. This is intentionally excluded from v1 to keep execution semantics simple and debuggable.
**Resolution Path**
- **v2**: Container-backend-only service support
- **v2.1**: Declarative service lifecycle
- **v3**: QEMU backend service networking
**User Guidance (v1)**
Replace services with:
- External services (run manually, point workflows at fixed endpoints)
- Embedded test doubles
- Single-container workflows
- Manual database/service setup before workflow execution
**Example Workaround:**
Instead of:
```yaml
jobs:
test:
services:
postgres:
image: postgres:14
```
Use:
```bash
# Run service manually
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=test postgres:14
# Then run workflow
gwt run /path/to/repo /path/to/workflow.yml --env DATABASE_URL=postgresql://localhost:5432
```
---
### 3.4 macOS Runner Images Unsupported
**Status**
- Type: **External**
- Severity: **High** (for Apple-specific projects)
- Impact: macOS workflows cannot be executed
**Description**
macOS GitHub-hosted runners are not supported in v1.
**Reasons:**
- Apple licensing restrictions
- Virtualization limitations outside Apple hardware
- Lack of redistributable macOS base images
**Resolution Path**
- **v2**: "macOS-host-like" profile (best-effort simulation on Linux)
- **v3**: Native macOS-host execution (host-only, no VM)
- **No QEMU-based macOS support planned** (licensing constraints)
**User Guidance (v1)**
- Use Linux runners for cross-platform builds where possible
- Split workflows:
- Linux CI locally (with GithubWorkflowTool)
- macOS CI only on GitHub
- For macOS-specific testing: use GitHub Actions cloud runners
---
### 3.5 Limited Network Access in Runners
**Status**
- Type: **Configurable**
- Severity: **Medium**
- Impact: Actions requiring external downloads may fail
**Description**
Network access inside runners may be:
- Restricted
- Rate-limited
- Disabled entirely (offline mode)
This applies especially to:
- QEMU backend
- Reproducibility-focused runs
- CI debugging scenarios
**Rationale**
Unrestricted network access:
- Breaks reproducibility
- Introduces nondeterministic failures
- Can leak secrets unintentionally
**Resolution Path**
- **v1.1**: Domain allowlist support
- **v2**: Network profiles per runner
- **v2**: Cached dependency mirrors
- **v3**: Deterministic fetch recording & replay
**User Guidance (v1)**
- Vendor dependencies where possible
- Use local mirrors or caches
- Enable network explicitly when required (container mode allows network by default)
- For offline testing, pre-download all dependencies
---
## 4. Limitation Visibility & UX Requirements
### CLI Requirements
The `gwt doctor` command must report:
- Unsupported workflow features detected in a workflow file
- Action incompatibilities
- Missing toolchains (Docker, Podman, QEMU)
- Runner backend availability
- Clear warnings before execution, not after failure
**Example Output:**
```bash
$ gwt doctor /path/to/repo/.github/workflows/ci.yml
GithubWorkflowTool Diagnostics
==============================
Workflow: ci.yml
✓ Basic workflow structure valid
✓ Job dependencies resolvable
⚠ Warning: Uses reusable workflow (not supported in v1)
⚠ Warning: Service container 'postgres' detected (not supported in v1)
→ Workaround: Run PostgreSQL manually before workflow execution
✗ Error: Uses 'hashFiles' expression (not supported in v1)
→ Resolution: Simplify expression or upgrade to v2 (planned)
Backend Availability:
✓ Container backend: Docker detected (v24.0.0)
✓ QEMU backend: Available (v7.2.0)
Recommendation: 3 issues detected, 2 warnings, 1 error
Workflow may fail or require modifications to run successfully.
```
### GUI Requirements
Visual badges on workflows/jobs:
- "✓ Fully Supported"
- "⚠ Partially Supported" (with details in hover/tooltip)
- "✗ Unsupported in v1" (with workaround in detail pane)
- "Requires Container Backend"
- "Requires QEMU Backend"
When hovering over a badge or clicking for details, explain:
- What limitation applies
- Why it exists
- Recommended workaround
- Expected version for full support
---
## 5. Versioning & Compatibility Policy
### v1.x
- No breaking behavior changes
- Limitations remain explicit and documented
- New features may be added if backward compatible
- Unsupported features fail fast with clear error messages
### v2.0
- Feature expansion allowed
- Backward compatibility preferred but not guaranteed
- Migration guide provided for breaking changes
- Unsupported features must fail fast, not silently degrade
### Future Versions
- Incremental improvements to limitation resolution
- Regular compatibility matrix updates
- Community feedback integration
---
## 6. Acceptance Criteria (Limitations Spec)
This specification is satisfied when:
1. ✅ All listed limitations are explicitly detected or documented at runtime
2. ✅ Failures caused by limitations produce actionable diagnostics
3. ✅ Users can predict before execution whether a workflow is likely to succeed
4. ✅ Resolution paths are versioned and traceable
5. ✅ Documentation is accessible and linked from main README
---
## 7. Compatibility Matrix (Preview)
A detailed compatibility matrix mapping common GitHub Actions to backend support will be provided in a future specification. Preview:
| Action | Container | QEMU | Status | Notes |
|--------|-----------|------|--------|-------|
| actions/checkout@v3 | ✓ | ✓ | Full | Git must be available |
| actions/cache@v3 | ⚠ | ⚠ | Partial | Local cache only |
| actions/setup-node@v3 | ✓ | ✓ | Full | Node must be in image |
| docker/build-push-action@v4 | ✓ | ✗ | Container only | DinD required |
| Service containers | ✗ | ✗ | Not supported | v2 planned |
| Reusable workflows | ✗ | ✗ | Not supported | v2 planned |
Full matrix to be documented in `COMPATIBILITY_MATRIX.md` (future work).
---
## 8. Feedback and Contributions
Users encountering limitations not documented here should:
1. Check for existing GitHub issues
2. Report new limitations with:
- Workflow file (or minimal example)
- Error message
- Expected behavior
- Actual behavior
3. Contribute workarounds to documentation
---
## Summary
GithubWorkflowTool v1 is designed with **intentional constraints** to ensure:
- Predictable, deterministic execution
- Clear error messages and diagnostics
- Transparent limitations with documented workarounds
- Traceable resolution path for future versions
Users should consult this document and use the `gwt doctor` command before deploying workflows to understand compatibility and required modifications.
For questions or issues, please refer to the GitHub repository issue tracker.