# linid-dm-api-community-plugins **Repository Path**: mirrors_linagora/linid-dm-api-community-plugins ## Basic Information - **Project Name**: linid-dm-api-community-plugins - **Description**: No description available - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-11 - **Last Updated**: 2026-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ๐Ÿ”Œ linid-im-api-community-plugins This repository hosts all **official backend plugins** for the `linid-im-api` platform. Each plugin is maintained in a dedicated subdirectory and follows the same structure as the provided `template-plugin`. --- ## **๐Ÿงช Current Available Plugins** ### **๐Ÿ“ฆ Task plugins** | Name | Description | | ------ | ------------------------------------------------------------------------- | | `cmtp` | Task plugin to copy and transform context values using Jinjava templates. | | `jptp` | Task plugin to parse a JSON string from the context. | ### **๐Ÿ“ฆ Provider plugins** | Name | Description | | ----- | ----------------------------------------------------------------------------- | | `hpp` | Provider plugin to interact with configurable HTTP REST APIs (CRUD, mapping). | ### **๐Ÿงฉ Validation Plugins** | Name | Description | | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | | `rvp` | Validation plugin to ensure a value matches a regular expression pattern. | | `rqvp` | Validation plugin to ensure a value is not empty. | | `lvp` | Validation plugin to ensure a value belongs to a predefined list of allowed values. | | `dlvp` | Validation plugin to ensure a value belongs to a dynamic list fetched from an external API. Also exposes a route returning the allowed values. | ## ๐Ÿ“ฆ Structure ``` linid-dm-api-community-plugins/ โ”œโ”€โ”€ plugin-a/ โ”œโ”€โ”€ plugin-b/ โ”œโ”€โ”€ template-plugin/ โ† Reference structure for new plugins โ”œโ”€โ”€ .github/workflows/release.yml โ””โ”€โ”€ .releaserc.base.js ``` --- ## ๐Ÿš€ Releasing Plugins This repository uses a **centralized release process** powered by [semantic-release](https://github.com/Zorin95670/semantic-version) and GitHub Actions. ### โœ… How it works - On every push to the `main` branch, the workflow: 1. Analyzes recent commits. 2. Extracts the plugin names based on commit messages (e.g., `feat(plugin-a): ...`). 3. Triggers a release **only for affected plugins**. ### โœ๏ธ Commit Convention Commits must follow [Conventional Commits](https://www.conventionalcommits.org), with the plugin name in parentheses: ```bash # Examples: feat(plugin-a): add support for LDAP fix(plugin-b): correct response format chore(plugin-c): update dependencies ``` ### ๐Ÿท๏ธ Tagging Each plugin release is tagged using the format: ``` -v e.g. plugin-a-v1.2.3 ``` --- ## โž• Creating a New Official Plugin To add a new official plugin: 1. Copy the `template-plugin/` directory. 2. Rename it and adapt it to your plugin's needs. 3. Push it to `main` with a commit message following the convention: ```bash feat(plugin-my-new-plugin): initial implementation ``` The release workflow will handle versioning, changelog, and publication. --- ## โš™๏ธ CI/CD This repository uses a modular GitHub Actions setup: ### ๐Ÿ”’ Default Pull Request Checks Every pull request is validated by a common workflow that performs: - โœ… **Branch name validation** Branches must follow predefined naming patterns (e.g., `feature/`, `bugfix/`, `release/`). - โœ… **Commit message validation** Commits must follow the [Conventional Commits](https://www.conventionalcommits.org) format, including plugin scoping (`feat(plugin-x): ...`). - โœ… **Code style checks** The repository enforces a common `checkstyle` configuration shared across all plugins. These checks are run automatically on every pull request. ### ๐Ÿงช Plugin-specific Unit Tests Each plugin **must define its own unit test workflow**. To do this: 1. Create a workflow file under `.github/workflows/test-.yml` 2. Use the Maven test lifecycle: ```yaml name: Test plugin-a on: pull_request: paths: - 'plugin-a/**' jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '21' distribution: 'temurin' - name: Run unit tests run: cd plugin-a && mvn test ``` You can copy and adapt this per plugin. --- ## ๐Ÿ› ๏ธ Development Tips - Ensure that each plugin is **independent and buildable with Maven**. - Use standard Maven conventions inside each plugin. - Keep plugin-specific logic scoped to its folder. --- ## ๐Ÿค Contributions Official plugins are maintained by the core team, but community contributions are welcome through pull requests. If you're building a **custom plugin**, please use [`linid-im-api-plugin-template`](https://github.com/linagora/linid-im-api-plugin-template) in your own repository.