From 87ea86865b5ef1b35d89dfd69a19c1f7691fd441 Mon Sep 17 00:00:00 2001 From: juskora Date: Mon, 18 Sep 2023 10:50:16 +0200 Subject: [PATCH] Added create bundle --- docs/administration/img/bundle_generator.png | Bin 0 -> 30219 bytes .../img/sys_info_composer_tab.png | Bin 0 -> 75198 bytes .../packages_and_bundles/create_bundle.md | 316 ++++++++++++++++++ .../packages_and_bundles/install_package.md | 74 ++++ .../package_structure.md | 66 +++- .../packages_and_bundles/upload_packagist.md | 29 ++ mkdocs.yml | 7 +- 7 files changed, 473 insertions(+), 19 deletions(-) create mode 100644 docs/administration/img/bundle_generator.png create mode 100644 docs/administration/img/sys_info_composer_tab.png create mode 100644 docs/administration/project_organization/packages_and_bundles/create_bundle.md create mode 100644 docs/administration/project_organization/packages_and_bundles/install_package.md rename docs/{resources/contributing => administration/project_organization/packages_and_bundles}/package_structure.md (64%) create mode 100644 docs/administration/project_organization/packages_and_bundles/upload_packagist.md diff --git a/docs/administration/img/bundle_generator.png b/docs/administration/img/bundle_generator.png new file mode 100644 index 0000000000000000000000000000000000000000..cf196a4d7ceb2ca58b3746d04b3438896c96290a GIT binary patch literal 30219 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 A^8f$< literal 0 HcmV?d00001 diff --git a/docs/administration/img/sys_info_composer_tab.png b/docs/administration/img/sys_info_composer_tab.png new file mode 100644 index 0000000000000000000000000000000000000000..d007c963323e96ac66cfe0b67ab44a76ce92ffaa GIT binary patch literal 75198 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 literal 0 HcmV?d00001 diff --git a/docs/administration/project_organization/packages_and_bundles/create_bundle.md b/docs/administration/project_organization/packages_and_bundles/create_bundle.md new file mode 100644 index 0000000000..a3e46d9a0d --- /dev/null +++ b/docs/administration/project_organization/packages_and_bundles/create_bundle.md @@ -0,0 +1,316 @@ +--- +description: All code contributions to Ibexa DXP must follow package and bundle structure and namespace standards. +--- + +# Create bundle + +The following section explains the whole process from creating a bundle from scratch to uploading it on the [packagist.org](https://packagist.org/) website. + +A bundle is modular structure that contain related functionality and can be integrated into an application. +[Follows specific strucutre](package_structure.md/#package-and-bundle-structure-and-namespaces). + +The bundle extension described here is called `AcmeCurrencyExchangeRate` and enables a new page block which displays a currency exchange rate on your site. + +You can create a bundle skeleton in two simplified ways: + +- [using Ibexa bundle generator](#create-bundle-with-bundle-generator) +- [with GitHub template](#use-github-template) + +## Create bundle with bundle-generator + +[[= product_name_base =]] bundle generator is a Symfony Bundle generator for projects based on [[= product_name =]]. +It can work as a standalone application mode. +This section thoroughly explains how to create a bundle using generator as a stand-alone application. +You can use this skeleton as a basis for your extension project. +It's the easiest and recommended way. + +1\. Go to [Ibexa bundle generator](https://github.com/ibexa/bundle-generator){:target="\_blank"} and clone the repository. + +```bash +git clone git@github.com:ibexa/bundle-generator.git +``` +2\. Change to bundle generator directory. + +```bash +cd bundle-generator +``` + +3\. Install dependencies: + +```bash +composer install +``` + +4\. Run bundle generator: + +```bash +php bin/ibexa-bundle-generator currency-exchange-rate --skeleton-name=extension +``` + +5\. Adjust the bundle to your needs providing the following parameters. + The command runs with an interactive mode. + +- Package vendor name - acme +- Bundle vendor namespace - Acme +- Bundle name - CurrencyExchangeRate +- Skeleton name - acme-ee + +![Bundle generator](bundle_generator.png) + +This creates a bundle files structure in the  `./target` directory. + +You can rename the target directory according to your needs. + +Or you can use a command with all available options: + + +```bash +php bin/ibexa-bundle-generator currency-exchange-rate currency-exchange-rate-dir  --vendor-name=acme --vendor-namespace=ACME --bundle-name=CurrencyExchangeRate  --skeleton-name=extension +``` + +## Use GitHub template + +https://github.com/ibexa/bundle-template + +Directory structure for AcmeCurrencyExchangeRate +podac url +button use template + + + + +Once the repository is created, a workflow starts which generates a bundle structure. +- Vendor namespace is generated from the orgnization name: github/github user name. +Package and bundle name inherits from repository name. + + + +### Bundle directory structure + +Generated bundle consists of the following structure: + +``` +. +├── LICENSE +├── README.md +├── composer.json +├── deptrac.yaml +├── package.json +├── phpstan.neon +├── phpunit.xml.dist +├── src +│   ├── bundle +│   │   ├── AcmeCurrencyExchangeRateBundle.php +│   │   ├── DependencyInjection +│   │   │   └── AcmeCurrencyExchangeRateExtension.php +│   │   └── Resources +│   │   ├── config +│   │   │   ├── prepend.yaml +│   │   │   ├── services +│   │   │   └── services.yaml +│   │   └── views +│   │   └── themes +│   │   ├── admin +│   │   └── standard +│   ├── contracts +│   └── lib +└── tests + ├── bundle + ├── integration + └── lib +``` +Where: + + +- LICENSE - a license file, GPL v2 by default +- README.md - a readme file with bundle description, its version and install instructions +- `composer.json` - a package definition +- `deptrac.yaml` - a tool for static code analysis for PHP, checks the coherence of package architecture, for more information see [deptrac](https://qossmic.github.io/deptrac/) documentation. +- `package.json` - frontend dependencies, for more information, see [about packages and modules](https://docs.npmjs.com/about-packages-and-modules). +- `phpstan.neon` - phpstan configuration, a tool for static code analysis for PHP, scans, and evaluates codebase to find errors, and bugs, for more information, see the [documentation](https://phpstan.org/user-guide/getting-started). +- `phpunit.xml.dist` - config for phpunit, unit and integration tests - see [documentation](https://phpunit.de/getting-started/phpunit-10.html). +- src and tests follow the base catalog structure, according to [package structure](https://phpunit.de/getting-started/phpunit-10.html) docs. + + +To fully use the possibilities of the bundle, get familiar with the structure: + +- `resources/` + - `config/` - contains configuration for the environment/ governs budle configuration + - `services/` - recommended place for services definition files +     all services definitions must be split into separate files + - `prepend.yaml` - houses additional configuration for other extensions + - `views/` - handles the [design engine](../../../templating/design_engine/design_engine.md) +- `tests` - contains all tests for the bundle. For more information, see [continuous integration](#continuous-integration). + +### Add the dependencies to the composer.json + +1. In composer.json add the Page Builder depency to be able to create a page block. + +```json hl_lines="156" + "require": { + "php": "^7.4 || ^8.0", + "ibexa/core": "^4.5", + "ibexa/page-builder": "^4.5", + "symfony/config": "^5.4", + "symfony/dependency-injection": "^5.4", + "symfony/event-dispatcher": "^5.4", + "symfony/event-dispatcher-contracts": "^2.2", + "symfony/http-foundation": "^5.4", + "symfony/http-kernel": "^5.4", + "symfony/yaml": "^5.4", + "http-interop/http-factory-guzzle": "^1.2" + }, +``` +2. Run the following command: + +```bash + composer update +``` + +```json +  "scripts-descriptions": { +    "fix-cs": "Automatically fixes code style in all files", +    "check-cs": "Run code style checker for all files", +    "test": "Run automatic tests", +    "phpstan": "Run static code analysis", +    "deptrac": "Run Deptrac architecture testing" +  }, +``` + +- `composer.json` - defines your project requirements, contains the following sections: + + - `php-cs-fixer` - defines method of verifying/checking code style, by default as internal package `for Ibexa style` + - `eslintrc` - a tool for static code analysis for JavaScript + + +For more information, see [bundles](../../../administration/project_organization/bundles.md) documentation. + + +### Create class + +!!! note + + Make sure you follow naming convention to ensure clarity. + +In the `/src` create a ACMECurrencyExchangeRateBundle class: + + +```php +var fm = "{{ base_currency }}"; +var to = "BTC,AUD,GBP,EUR,CNY,JPY,RUB"; +var tz = "timezone"; +var sz = "1x349"; +var lg = "en";var st = "primary"; +var cd = 0; +var am = {{ amount }} +

+``` + +### Continuous integration + +Before releasing the newly created bundle: +run php cs fixer +run unit tests + +[GitHub actions](https://docs.github.com/en/actions) + +To ensure delivery of working code, use CI/CD pipeline right from the GitHub repository. + +Best practices for testing your bundle encompas:: + +- supported Symfony versions +- supported PHP versions + + +### Continuous development + + +## License and readme + +Choose license type, modify readme doc. \ No newline at end of file diff --git a/docs/administration/project_organization/packages_and_bundles/install_package.md b/docs/administration/project_organization/packages_and_bundles/install_package.md new file mode 100644 index 0000000000..f13480cb4c --- /dev/null +++ b/docs/administration/project_organization/packages_and_bundles/install_package.md @@ -0,0 +1,74 @@ +# Install bundle +  + + +## Add repository to composer + +To be able to install the bundle to your [[= product_name_base =]] project, first, update the requirements. + + +```json + "require": { + "php": ">=7.4", + "ext-ctype": "*", + "ext-iconv": "*", + "acme/video-editor": "dev-master", + "ibexa/commerce": "4.6.x-dev", + "ibexa/connector-seenthis": "^4.6@dev", +``` + + +Next, add the repository to the `composer.json`: + +```json hl_lines="17" + "repositories": { + "ibexa": { + "type": "composer", + "url": "https://updates.ibexa.co" + }, + "acme/currency-exchange-rate":{ + "type": "vcs", + "url": "file:///Users/justyna.koralewicz/example-3rd-party-extension" + } + } +``` + + +On your [[= product_name_base =]] root project run: +  +```bash +composer require acme/currency-exchange-rate:dev-master +``` + +!!! note + + If your application uses Symfony Flex, the bundle is registered automatically after you install it. + + +Check whether the bundle is enabled, if not, you must enable it per environment in the `config/bundles.php` file: + + +```php +return [ +    Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], +    ... +    Ibexa\Bundle\TestFixtures\IbexaTestFixturesBundle::class => ['all' => true], +    ACME\Bundle\CurrencyExchangeRate\ACMECurrencyExchangeRateBundle::class => ['all' => true], +]; +``` + + +Next, clear the cache by runnig the following command: + +```bash +php bin/console cache:clear +``` + +The newly installed bundle should be visible in the **Composer** tab in **Admin** -> **System information**. + +![Installed bundles](sys_info_composer_tab.png) + + +## Add currency exchange page block + + diff --git a/docs/resources/contributing/package_structure.md b/docs/administration/project_organization/packages_and_bundles/package_structure.md similarity index 64% rename from docs/resources/contributing/package_structure.md rename to docs/administration/project_organization/packages_and_bundles/package_structure.md index 30fe79ef10..626a6835f8 100644 --- a/docs/resources/contributing/package_structure.md +++ b/docs/administration/project_organization/packages_and_bundles/package_structure.md @@ -4,51 +4,64 @@ description: All code contributions to Ibexa DXP must follow package and bundle # Package and bundle structure and namespaces -If you wish to contribute to [[= product_name =]] development, -you need to adhere to the package and bundle structure and namespace standards. +Bundle allows you to extend the system by adding new services, routes, controllers, and views, and extend functionality to fully customize your [[= product_name =]] application. +If you want to contribute to [[= product_name =]] development, you need to adhere to the package and bundle structure and namespace standards. -The following conventions apply to contributions to [[= product_name_base =]] core code, not to third party packages. +All conventions described here apply to contributions to [[= product_name_base =]] core code, not to third party packages. !!! note - New code needs to follow the rules outlined here. They are being applied progressively to existing code. + + ## Root PHP namespace Define [[= product_name =]] core PHP code in a namespace with the following prefix: + + ```php namespace Ibexa; ``` A package which groups some DXP features can use an additional prefix, for example: + + ```php namespace Ibexa\Commerce; ``` + + ```php namespace Ibexa\Personalization; ``` + + ## Packages -The general package directory structure and corresponding PHP namespace mapping are: +The general package directory structure and corresponding PHP namespace mappings are: + + ``` . +-- src -| +-- bundle (`Ibexa\Bundle\`) -| +-- contracts (`Ibexa\Contracts\`) -| +-- lib (`Ibexa\`) +|   +-- bundle (`Ibexa\Bundle\`) +|   +-- contracts (`Ibexa\Contracts\`) +|   +-- lib (`Ibexa\`) +-- tests -| +-- bundle (`Ibexa\Tests\Bundle\`) -| +-- integration (`Ibexa\Tests\Integration\`) -| +-- lib (`Ibexa\Tests\`) +|   +-- bundle (`Ibexa\Tests\Bundle\`) +|   +-- integration (`Ibexa\Tests\Integration\`) +|   +-- lib (`Ibexa\Tests\`) ``` -If a package does not contain some of the described parts, you can skip those directories. +If a package doesn't contain some of the described parts, you can skip those directories. + + ### Implementation (lib) @@ -56,58 +69,76 @@ The `src/lib` directory and its corresponding `Ibexa\` namespace ar Examples: + + ```php namespace Ibexa\Search; ``` + + ```php namespace Ibexa\Commerce\Shop; ``` + + ### Bundles -The bundle class definition in the `src/bundle` directory must be: +The bundle class definition in the `src/bundle` directory must have the following pattern: + + ```php namespace Ibexa\Bundle\; - +  class Ibexa[ProductGroup]Bundle // ... ``` Examples: - ```php namespace Ibexa\Bundle\Search; - +  class IbexaSearchBundle // ... ``` + + ```php namespace Ibexa\Bundle\Commerce\Shop; - class IbexaCommerceShopBundle // ... ``` + + ### Contracts A package may introduce a namespace for contracts, to be consumed by first and third party packages and projects, which must be prefixed as: + + ```php namespace Ibexa\Contracts; ``` Examples: + + ```php namespace Ibexa\Contracts\Kernel; ``` + + ```php namespace Ibexa\Contracts\SiteFactory; ``` + + ```php namespace Ibexa\Contracts\Commerce\Shop; ``` @@ -115,5 +146,4 @@ namespace Ibexa\Contracts\Commerce\Shop; That namespace needs to be mapped to the `src/contracts` directory of a package. !!! note - Backward compatibility for interfaces and objects defined in the `Contracts` namespace is guaranteed. diff --git a/docs/administration/project_organization/packages_and_bundles/upload_packagist.md b/docs/administration/project_organization/packages_and_bundles/upload_packagist.md new file mode 100644 index 0000000000..fe2397c55e --- /dev/null +++ b/docs/administration/project_organization/packages_and_bundles/upload_packagist.md @@ -0,0 +1,29 @@ +# Upload bundle to Packagist + +1\. Go to the Packagist website. Click submit. +1\. Provide the repository url to your package. + +1\. When you add a new feature, you need to create a tag. +In PHPStorm or other PHP IntelliJ editor, go to commits, Log and create a new tag. +Then a new version will be published on packagist. + +1\. Link repo with packagist. +Make sure your repository is set to public. +Each time you add a new feature to your bundle, you need to also add a new tag. +New version will be released on Packagist. + +1\. Click the **Check** button to verify the completeness of the bundle. + +In `composer.json` in the repositories + +```json + "repositories": [ + { + "type": "composer", + "url": "https://updates.ibexa.co" + } +``` + +Indicate the type for path +and url - bundle name +Any change in repository immediately affects the other bundle so you can see the changes. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 049bb4a864..85d8d554dc 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -90,6 +90,11 @@ nav: - Project organization: administration/project_organization/project_organization.md - Architecture: administration/project_organization/architecture.md - Bundles: administration/project_organization/bundles.md + - Packages and bundles: + - Package structure: administration/project_organization/packages_and_bundles/package_structure.md + - Create bundle: administration/project_organization/packages_and_bundles/create_bundle.md + - Install bundle: administration/project_organization/packages_and_bundles/install_package.md + - Upload on Packagist: administration/project_organization/packages_and_bundles/upload_packagist.md - Admin panel: - Admin panel: administration/admin_panel/admin_panel.md - Users: administration/admin_panel/users_admin_panel.md @@ -755,9 +760,9 @@ nav: - Ibexa DXP PhpStorm plugin: resources/phpstorm_plugin.md - New in documentation: resources/new_in_doc.md - Contributing: + - Report and follow issues: resources/contributing/report_and_follow_issues.md - Contribute translations: resources/contributing/contribute_translations.md - - Package structure: resources/contributing/package_structure.md - Release notes: - Release notes: release_notes/release_notes.md - Ibexa DXP v4.5: release_notes/ibexa_dxp_v4.5.md