264 lines
9.7 KiB
Markdown
264 lines
9.7 KiB
Markdown
# Copilot Coding Agent Instructions for Elsa Workflows
|
|
|
|
## Repository Overview
|
|
|
|
**Elsa Workflows** is a powerful .NET workflow library that enables workflow execution within any .NET application. This is version 3.0, supporting .NET 8.0, .NET 9.0 and .NET 10.0 and providing both a visual designer (from a different repository, elsa-studio) and programmatic workflow definition capabilities.
|
|
|
|
### Key Statistics
|
|
- **Language**: C# (.NET 10.0)
|
|
- **Architecture**: Modular library with 104+ projects
|
|
- **Code Size**: ~3,500 C# files across modules
|
|
- **License**: MIT
|
|
- **Build System**: NUKE build automation
|
|
- **Target Frameworks**: .NET 10.0 (primary)
|
|
|
|
## High-Level Architecture
|
|
|
|
### Directory Structure
|
|
```
|
|
src/
|
|
├── apps/ # Reference applications (5 projects)
|
|
│ ├── Elsa.Server.Web # Workflow server only
|
|
│ └── Elsa.Server.LoadBalancer # Load balancer
|
|
├── common/ # Shared libraries (8 projects)
|
|
├── modules/ # Core functionality modules (70+ projects)
|
|
│ ├── Elsa.Workflows.Core # Core workflow engine
|
|
│ ├── Elsa.Workflows.Runtime # Runtime execution
|
|
│ ├── Elsa.Workflows.Api # REST API
|
|
│ ├── Elsa.Http # HTTP activities
|
|
│ ├── Elsa.Email # Email activities
|
|
│ └── [many others] # Database, messaging, etc.
|
|
└── clients/ # API clients
|
|
test/
|
|
├── unit/ # Unit tests
|
|
├── integration/ # Integration tests
|
|
├── component/ # Component tests
|
|
└── performance/ # Performance tests
|
|
build/ # NUKE build configuration
|
|
docker/ # Docker configurations
|
|
```
|
|
|
|
### Core Components
|
|
- **Elsa.Workflows.Core**: Main workflow engine and activities
|
|
- **Elsa.Workflows.Runtime**: Workflow execution runtime
|
|
- **Elsa.Workflows.Api**: RESTful API for workflow management
|
|
- **Elsa.Workflows.Management**: Workflow definition management
|
|
- **Elsa modules**: Specialized functionality (HTTP, persistence, scheduling, etc.)
|
|
|
|
## Build Instructions
|
|
|
|
### Prerequisites
|
|
- **.NET 10.0 SDK**
|
|
- **Build time**: Initial restore ~1-2 minutes, full compile ~5-10 minutes
|
|
|
|
### Build Commands
|
|
|
|
**Primary build script**: `./build.sh` (Linux/macOS) or `.\build.cmd` (Windows)
|
|
|
|
```bash
|
|
# View available targets
|
|
./build.sh --help
|
|
|
|
# Clean build artifacts
|
|
./build.sh Clean
|
|
|
|
# Restore packages (may show warnings for inaccessible feeds)
|
|
./build.sh Restore --ignore-failed-sources
|
|
|
|
# Compile core components (excludes studio apps)
|
|
./build.sh Compile
|
|
|
|
# Run tests (limited due to external dependencies)
|
|
./build.sh Test
|
|
|
|
# Create NuGet packages
|
|
./build.sh Pack
|
|
|
|
# Full CI pipeline (compile, test, pack)
|
|
./build.sh Compile Test Pack
|
|
```
|
|
|
|
**Direct dotnet commands** for core components:
|
|
```bash
|
|
# Build specific core projects that don't require external packages
|
|
dotnet restore src/modules/Elsa.Workflows.Core/ --ignore-failed-sources
|
|
dotnet build src/modules/Elsa.Workflows.Core/ --no-restore
|
|
dotnet restore src/modules/Elsa.Workflows.Runtime/ --ignore-failed-sources
|
|
dotnet build src/modules/Elsa.Workflows.Runtime/ --no-restore
|
|
|
|
# Note: Server apps may fail due to WebhooksCore dependency
|
|
# Build and test individual core modules
|
|
find test/unit -name "*.csproj" | head -5 | xargs -I {} dotnet build {}
|
|
```
|
|
|
|
### Expected Build Warnings
|
|
- `NU1900`: Unable to load service index for external feeds (safe to ignore)
|
|
- `NU1801`: Service index warnings for feedz.io sources (safe to ignore)
|
|
|
|
### Successful Build Indicators
|
|
- Core modules (Elsa.Workflows.Core, etc.) compile successfully
|
|
- Server applications (Elsa.Server.Web) build
|
|
- Most modules show "succeeded with X warning(s)" (warnings are acceptable)
|
|
|
|
## Testing
|
|
|
|
### Test Structure
|
|
- **Unit tests**: `test/unit/` - Fast, isolated tests
|
|
- **Integration tests**: `test/integration/` - End-to-end scenarios
|
|
- **Component tests**: `test/component/` - Feature testing
|
|
- **Performance tests**: `test/performance/` - Benchmarks
|
|
|
|
### Running Tests
|
|
```bash
|
|
# Via NUKE build system
|
|
./build.sh Test
|
|
|
|
# Direct dotnet test (for accessible projects)
|
|
dotnet test test/unit/[specific-project]/
|
|
dotnet test --no-build --no-restore [project-path]
|
|
```
|
|
|
|
**Note**: Many tests may fail to run due to external package dependencies. Focus on core workflow engine tests that don't require studio packages.
|
|
|
|
## Development Guidelines
|
|
|
|
### Code Standards
|
|
- **Language version**: C# latest
|
|
- **Target framework**: .NET 10.0
|
|
- **Nullable reference types**: Enabled
|
|
- **Implicit usings**: Enabled
|
|
- **EditorConfig**: Configured (4-space indentation, CRLF line endings)
|
|
|
|
### Architecture Patterns
|
|
- **Modular design**: Each feature area is a separate project/module
|
|
- **Dependency injection**: Heavy use of Microsoft.Extensions.DependencyInjection
|
|
- **Activity-based**: Workflows are built from composable activities
|
|
- **Async/await**: Extensive use throughout for scalability
|
|
|
|
### Common Gotchas
|
|
1. **NuGet Source Mapping**: Configured in NuGet.Config, restricts where packages can be sourced
|
|
2**Multiple Target Frameworks**: Some projects conditionally target different frameworks
|
|
3**Build Warnings**: Many NU1900/NU1801 warnings are expected and safe
|
|
|
|
## Continuous Integration
|
|
|
|
### GitHub Actions Workflow
|
|
- **Trigger**: Pull requests to `main` branch
|
|
- **Runner**: ubuntu-latest
|
|
- **.NET Version**: 10.x (latest)
|
|
- **Commands**: `./build.cmd Compile Test Pack`
|
|
- **File**: `.github/workflows/pr.yml` (auto-generated by NUKE)
|
|
|
|
### CI Pipeline Steps
|
|
1. Checkout code
|
|
2. Setup .NET 10.x SDK
|
|
3. Execute: Compile → Test → Pack
|
|
4. Expected warnings for external feed access
|
|
5. Studio apps may be excluded from CI builds
|
|
|
|
## Key Configuration Files
|
|
|
|
- **Build**: `build/Build.cs` (NUKE build configuration)
|
|
- **Dependencies**: `Directory.Packages.props` (central package management)
|
|
- **Global settings**: `Directory.Build.props`
|
|
- **NuGet**: `NuGet.Config` (package sources and mapping)
|
|
- **Solution**: `Elsa.sln` (119 projects)
|
|
- **Docker**: `docker/` directory with multiple Dockerfiles
|
|
- **GitHub Actions**: `.github/workflows/` (auto-generated)
|
|
|
|
## Docker Support
|
|
|
|
Multiple Docker configurations available:
|
|
- `ElsaServer.Dockerfile` - Server only
|
|
- `ElsaServerAndStudio.Dockerfile` - Combined server + studio
|
|
- `ElsaStudio.Dockerfile` - Studio only
|
|
- Docker Compose configurations for development
|
|
|
|
## Quick Start for Development
|
|
|
|
1. **Clone and build core components**:
|
|
```bash
|
|
git clone [repo-url]
|
|
cd elsa-core
|
|
./build.sh Clean Restore --ignore-failed-sources
|
|
```
|
|
|
|
2. **Work with core modules** (avoid studio dependencies):
|
|
```bash
|
|
cd src/modules/Elsa.Workflows.Core
|
|
dotnet build
|
|
dotnet test ../../test/unit/[related-tests]/
|
|
```
|
|
|
|
3. **Work with core modules that don't require external dependencies**:
|
|
```bash
|
|
cd src/modules/Elsa.Workflows.Core
|
|
dotnet restore --ignore-failed-sources
|
|
dotnet build --no-restore
|
|
```
|
|
|
|
## Running the Applications
|
|
|
|
### Development Workflow Server
|
|
|
|
To run the workflow server for development:
|
|
|
|
```bash
|
|
cd src/apps/Elsa.Server.Web
|
|
dotnet restore --ignore-failed-sources
|
|
dotnet run
|
|
```
|
|
|
|
The server will start on the configured ports (check `appsettings.json` or environment variables).
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **Missing External Packages**: If you encounter `NU1101` errors for Elsa.Studio packages:
|
|
- This is expected for studio-related apps
|
|
- Focus development on core workflow modules instead
|
|
- Or use Docker images that have pre-built studio components
|
|
|
|
2. **Build Fails on Server Apps**: If `Elsa.Server.Web` fails due to WebhooksCore:
|
|
- This is a known issue with external package feeds
|
|
- Try building individual core modules instead
|
|
- Use `--ignore-failed-sources` flag consistently
|
|
|
|
3. **Test Failures**: If many tests fail to run:
|
|
- External package dependencies may be unavailable
|
|
- Run tests for specific core modules individually
|
|
- Focus on tests that don't require studio packages
|
|
|
|
4. **Slow Initial Build**: First restore and compile can take 5-10+ minutes:
|
|
- This is normal for a large solution with 100+ projects
|
|
- Subsequent builds are much faster (incremental)
|
|
- Consider building specific projects/modules when iterating
|
|
|
|
## Additional Resources
|
|
|
|
### Documentation
|
|
- **Official Documentation**: [https://docs.elsaworkflows.io/](https://docs.elsaworkflows.io/)
|
|
- **README**: See [README.md](../README.md) for quick start and features overview
|
|
- **Contributing Guide**: See [CONTRIBUTING.md](../CONTRIBUTING.md) for contribution guidelines
|
|
|
|
### Community Support
|
|
- **GitHub Issues**: [Report bugs and request features](https://github.com/elsa-workflows/elsa-core/issues)
|
|
- **GitHub Discussions**: [Ask questions and discuss](https://github.com/elsa-workflows/elsa-core/discussions)
|
|
- **Discord**: [Join the community chat](https://discord.gg/hhChk5H472)
|
|
- **Stack Overflow**: [Tag: elsa-workflows](http://stackoverflow.com/questions/tagged/elsa-workflows)
|
|
|
|
### Enterprise Support
|
|
- **ELSA-X**: [Professional support and enterprise solutions](https://elsa-x.io)
|
|
|
|
## Important Notes for Coding Agents
|
|
|
|
1. **Always use `--ignore-failed-sources`** when restoring packages
|
|
2. **Focus on core workflow functionality**
|
|
3. **Build warnings are normal** - don't try to fix NU1900/NU1801 warnings
|
|
4. **Test individual modules** rather than solution-wide tests when external deps fail
|
|
5. **Use direct dotnet commands** for building specific components when NUKE fails
|
|
6. **Check project references** before attempting builds - some projects have conditional references
|
|
7. **Start with core modules** like `Elsa.Workflows.Core`, `Elsa.Workflows.Runtime` which are more likely to build successfully
|
|
|
|
Trust these instructions for build and development workflows. Only search for additional information if these instructions are incomplete or found to be incorrect. |