{"id":18386548,"url":"https://github.com/ecotoneframework/ecotone-dev","last_synced_at":"2026-04-10T19:06:37.154Z","repository":{"id":48964916,"uuid":"517108640","full_name":"ecotoneframework/ecotone-dev","owner":"ecotoneframework","description":"Ecotone Framework Development - This is Monorepo which contains all official public modules","archived":false,"fork":false,"pushed_at":"2026-02-07T18:38:11.000Z","size":7677,"stargazers_count":51,"open_issues_count":7,"forks_count":21,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-02-08T03:31:16.551Z","etag":null,"topics":["amqp","asynchronous","cqrs","ddd","distributed-architectures","event-sourcing","laravel","microservices","php","symfony"],"latest_commit_sha":null,"homepage":"https://docs.ecotone.tech","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ecotoneframework.png","metadata":{"files":{"readme":"README-DEVELOPMENT-CONTEXT.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["dgafka"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2022-07-23T16:29:44.000Z","updated_at":"2026-02-07T18:38:14.000Z","dependencies_parsed_at":"2023-10-02T12:37:24.586Z","dependency_job_id":"e6fd9e6b-2bfb-417e-be4b-bc686f4819be","html_url":"https://github.com/ecotoneframework/ecotone-dev","commit_stats":null,"previous_names":[],"tags_count":335,"template":false,"template_full_name":null,"purl":"pkg:github/ecotoneframework/ecotone-dev","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecotoneframework%2Fecotone-dev","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecotoneframework%2Fecotone-dev/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecotoneframework%2Fecotone-dev/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecotoneframework%2Fecotone-dev/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecotoneframework","download_url":"https://codeload.github.com/ecotoneframework/ecotone-dev/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecotoneframework%2Fecotone-dev/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29383010,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T22:07:52.078Z","status":"ssl_error","status_checked_at":"2026-02-12T22:07:49.026Z","response_time":55,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amqp","asynchronous","cqrs","ddd","distributed-architectures","event-sourcing","laravel","microservices","php","symfony"],"created_at":"2024-11-06T01:22:26.487Z","updated_at":"2026-04-05T21:11:25.558Z","avatar_url":"https://github.com/ecotoneframework.png","language":"PHP","funding_links":["https://github.com/sponsors/dgafka"],"categories":[],"sub_categories":[],"readme":"# Ecotone Development Context\n\nThis document provides essential information about the Ecotone monorepo project structure, development environment, and testing procedures.\n\n## Project Structure\n\nEcotone is organized as a monorepo containing multiple packages:\n\n- The monorepo\n- Each package is available under `packages/*` directory\n- Core package is `packages/Ecotone`, which is the foundation for all other packages\n- Each package is a separately delivered composer package with its own `composer.json`\n- During release, each package is pushed to a separate read-only repository\n- End-users can download specific packages directly from packagist.com\n\n## Development Environment\n\nThe project uses Docker for development:\n\n- A `docker-compose.yml` file in the root directory sets up all required containers\n- To start the environment: `docker compose up -d`\n- After starting, all packages are available to run and use\n- To enter the development container: `docker compose exec app /bin/bash`\n- From inside the container, you can run tests that require access to other services\n\n## Running Tests\n\nThere are two main approaches to running tests:\n\n### 1. From the Docker Container\n\n```bash\n# Enter the container\ndocker compose exec app /bin/bash\n\n# Run tests from inside the container\nvendor/bin/phpunit\n```\n\n### 2. Directly from the Host Machine using Container context\n\n```bash\n# Run tests directly without entering the container\ndocker compose exec app vendor/bin/phpunit\n```\n\nThis method is faster and preferred for most testing scenarios.\n\n## Testing Contexts\n\nTests can be run in two different contexts:\n\n### Monorepo Context\n\nWhen running tests from the root of the project, they execute in the context of the entire monorepo:\n- Uses shared dependencies\n- Runs on vendor packages compatible with all Ecotone packages\n- Command: `vendor/bin/phpunit` (from project root)\n\n### Package Context\n\nTests can also be run in the context of a specific package:\n```bash\ncd ./packages/Dbal\ncomposer update\nvendor/bin/phpunit\n```\n\nThis approach uses the package's own dependencies and is useful for isolated testing.\n\n## How to write tests\n\nThe preferred way to write tests is writing high level tests, which tests from end-user perspective.\nThe need for that is, that those tests are more reliable in long-term, and allows for refactoring without being broken.  \nThis is done using Ecotone Lite, which bootstrap small Ecotone Application which can be run in isolation for specific set of classes.  \n\nYou can read more about testing approaches under [Testing Support page](https://docs.ecotone.tech/modelling/testing-support).\n\n## Types of Tests\n\nThe project uses several testing tools:\n\n### 1. PHPUnit Tests\n\nUsed for unit and integration testing:\n- Run with: `vendor/bin/phpunit` or `composer tests:phpunit`\n- Configuration: Each package has its own `phpunit.xml.dist` file\n- Can run specific tests: `vendor/bin/phpunit --filter testMethodName tests/path/to/TestFile.php`\n\n### 2. Behat Tests\n\nUsed for behavior-driven development (BDD) and feature testing:\n- Run with: `vendor/bin/behat` or `composer tests:behat`\n- Configuration: Each package that uses Behat has a `behat.yml` file\n- Behat tests are organized in feature files with human-readable scenarios\n\n### 3. PHPStan Static Analysis\n\nUsed for static code analysis to detect potential errors:\n- Run with: `vendor/bin/phpstan` or `composer tests:phpstan`\n- Helps identify type-related issues and other potential bugs without executing the code\n\n### 4. CI Tests\n\nCombined test suites for continuous integration:\n- Run with: `composer tests:ci`\n- Typically runs PHPStan, PHPUnit, and Behat tests in sequence\n- Some packages may include additional checks in their CI process\n\n## Package-Specific Testing\n\n## Common Testing Commands\n\n```bash\n# Run all PHPUnit tests in a package\ncd packages/PackageName\ncomposer tests:phpunit\n\n# Run a specific test file\nvendor/bin/phpunit tests/path/to/TestFile.php\n\n# Run a specific test method\nvendor/bin/phpunit --filter testMethodName tests/path/to/TestFile.php\n\n# Run static analysis\ncomposer tests:phpstan\n\n# Run Behat tests (if available for the package)\ncomposer tests:behat\n\n# Run all tests for CI\ncomposer tests:ci\n```\n\n## Testing Utilities\n\nThe framework provides several testing utilities:\n\n- `EcotoneLite::bootstrapForTesting()` - Creates a test instance of Ecotone\n- `FlowTestSupport` - Helps test message flows\n- `MessagingTestSupport` - Provides support for testing messaging components\n\n## Some packages may support multiple versions of 3rd party libraries\n\nFor example Dbal may support version 3 and 4 of Doctrine DBAL.  \nTo see which version is supported check related composer.json file in the package directory.  \n\nIt's easy to verify lower and highest dependency versions by running from the package context\n\n```bash\ncomposer update --prefer-lowest\nvendor/bin/phpunit\ncomposer update --prefer-stable\nvendor/bin/phpunit\n```\n\nTests within the package will always run faster than in the monorepo context, as they are limited to specific context.  \nHowever it's still worth to run specific failure test with `--filter testMethodName` to have the quickest feedback loop.\n\n## Important Notes\n\n1. Some tests require specific environment variables to be set\n2. Database tests may require the Docker environment to be running\n3. Each package may have specific testing requirements defined in its README or phpunit.xml.dist file\n4. The Dbal package tests interact with actual databases, so they require the database containers to be running\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fecotoneframework%2Fecotone-dev","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fecotoneframework%2Fecotone-dev","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fecotoneframework%2Fecotone-dev/lists"}