Changelogify is a contributed Drupal module for publishing human-friendly changelogs from actual site activity. It automatically collects changes happening on your Drupal site, groups captured events into “releases”, and publishes those releases as a public changelog so stakeholders can see what changed and when.
The goal is to reduce manual bookkeeping and bridge the gap between raw “logging/audit” style data and manually written release notes by turning captured events into structured, publishable release entries.
How it is different from similar approaches:
- Versus audit-trail style modules: audit trail tools focus on recording lots of events, but they typically do not provide a “release” concept or polished changelog output. Changelogify’s focus is the release grouping and the presentation of release notes/changelog entries.
- Versus Workspaces-based workflows: Workspaces can inherently group staged revisions before publishing, but that is tied to editorial/staging workflows. Changelogify is designed for a general “release notes / changelog” output and does not require adopting Workspaces as the source of truth.
Project link
| Comment | File | Size | Author |
|---|---|---|---|
| #6 | changelogify-phpcs-issues.txt | 68.48 KB | vishal.kadam |
Comments
Comment #2
vishal.kadamComment #3
rushikesh raval commentedThank you for applying!
Please read Review process for security advisory coverage: What to expect for more details and Security advisory coverage application checklist to understand what reviewers look for. Tips for ensuring a smooth review gives some hints for a smoother review.
The important notes are the following.
To the reviewers
Please read How to review security advisory coverage applications, Application workflow, What to cover in an application review, and Tools to use for reviews.
The important notes are the following.
For new reviewers, I would also suggest to first read In which way the issue queue for coverage applications is different from other project queues.
Comment #4
rushikesh raval commented1.
mainis a wrong name for a branch and should be removed. Release branch names always end with the literal .x as described in Release branches.main will be a supported branch in future, but for the moment it is better not to use it. It is not wrong, but it is not completely supported on drupal.org.
2. There is No release on drupal.org.
Please go through #3
Comment #5
vishal.kadamRegarding point 2 in comment #4,
A release is not required. Reviewers always verify the code directly from the branch.
Comment #6
vishal.kadam1. FILE: changelogify.module
For a new module that aims to be compatible with Drupal 10/11, it is expected it implements hooks as class methods as described in Support for object oriented hook implementations using autowired services.
It would require increasing the minimum Drupal 10 version supported, but Drupal 10.1 is no longer supported.
Drupal does not have primary and secondary hooks. Instead of that, it is preferable to use the usual description: “Hook implementations for the [module name] module”, where [module name] is the name of the module given in its .info.yml file.
2. FILE: src/EventManager.php
FILE: src/ReleaseGenerator.php
FILE: src/Controller/DashboardController.php
FILE: src/Form/GenerateReleaseForm.php
New modules, which are compatible with Drupal 10 and higher versions are expected to include type declarations in property definitions, and use constructor property promotion.
3. FILE: src/Entity/ChangelogifyEvent.php and src/Entity/ChangelogifyRelease.php
* @ContentEntityType(Projects that are compatible with Drupal 10 or higher versions should use attributes instead of annotations. This means requiring at least Drupal 10.3, but this is not an issue, considering that the minimum supported Drupal version is now Drupal 10.4.9.
4. FILE: src/Form/ReleaseForm.php
$this->messenger()->addStatus($message);The first argument passed to
MessengerInterface::addError(),MessengerInterface::addMessage(),MessengerInterface::addStatus(), andMessengerInterface::addWarning()must be a translatable string which uses placeholders.5. FILE: src/Form/SettingsForm.php
With Drupal 10 and Drupal 11, there is no longer need to use #default_value for each form element, when the parent class is ConfigFormBase: It is sufficient to use #config_target, as in the following code.
Using that code, it is no longer needed to save the configuration values in the form submission handler: The parent class will take care of that.
For this change, it is necessary to require at least Drupal 10.3, but that is not an issue, since Drupal 10.2.x is no longer supported.
6. Fix the warnings/errors reported by PHP_CodeSniffer. (see attached changelogify-phpcs-issues.txt)
NOTE: I would suggest enabling GitLab CI for the project, follow the Drupal Association .gitlab-ci.yml template and fix the PHP_CodeSniffer errors/warnings it reports.
Comment #7
erics1337 commentedThank you for the review. I have addressed the feedback in the 1.0.x branch.
Summary of changes:
1. Modern Release Branch: Created branch `1.0.x` to replace `main`.
2. Refactored Hooks: Moved procedural hooks to [src/Hook/ChangelogifyHooks.php] using the new Drupal 10.3+ Hook attributes system.
3. Modernize Classes: Updated all classes to use Constructor Property Promotion.
4. Attributes: Converted all entity annotations to PHP 8 Attributes.
5. Form API: Updated SettingsForm to use `#config_target` and modernized messenger service calls.
6. CI/CD: Added [.gitlab-ci.yml] to enable automated testing.
Linting checks passed. Ready for re-review.
Comment #8
vishal.kadam1.
mainbranch is still present. It needs to be deleted.2. FILE: changelogify.module
Since the module is declared compatible with Drupal 10.3, removing the function implementing the hook is not possible. The function still needs to be defined, but it calls the method defined by the service class, as described in Support for object oriented hook implementations using autowired services (Backwards-compatible Hook implementation for Drupal versions from 10.1 to 11.0).
3. I don't see a
.gitlab-ci.ymlfile.Comment #9
vishal.kadamIf you changed what has been reported, please change the status to Needs review. In this way, reviewers will know everything has been changed and can be reviewed again.
Comment #10
erics1337 commentedThank you for the feedback. I have addressed the items in the 1.0.x branch:
Main Branch: I have deleted the main branch from the repository. The 1.0.x branch has been set as the default branch and is now the primary development branch.
Hook Implementation: I have restored changelogify.module and implemented the recommended pattern (OO hook with service delegation). The procedural hooks are now defined in the .module file and delegate execution to the Drupal\changelogify\Hook\ChangelogifyHooks service.
CI/CD: I have added a
.gitlab-ci.yml
file to the repository to enable automated testing.
Linting and unit tests are passing. Ready for re-review.
Comment #11
erics1337 commentedThank you for review
Comment #12
vishal.kadamFix the warnings/errors reported by PHP_CodeSniffer. (see attached changelogify-phpcs-issues.txt)
Comment #13
erics1337 commentedThanks for the review @vishal.kadam!
I have addressed all the coding standard violations reported.
Ran phpcbf to automatically fix indentation and formatting issues.
Manually refactored
ReleaseForm.php, DashboardController.php, and ChangelogController.php to use proper Dependency Injection instead of static \Drupal calls, resolving the remaining warnings.
Added a phpcs.xml.dist file to the repository to ensure ease of testing and ongoing compliance with Drupal standards.
The code is now fully compliant with Drupal and DrupalPractice standards.
Setting back to Needs review.
Comment #14
vishal.kadamRest seems fine to me.
Please wait for other reviewers and Project Moderator to take a look and if everything goes fine, you will get the role.
Comment #15
erics1337 commented@vishal.kadam Thanks again for the review. Do you have a sense of when the remaining reviewers or the Project Moderator might be able to take a look?
Comment #16
erics1337 commentedComment #17
bbu23Adjusting the priority as per Issue Priorities.
Comment #18
erics1337 commentedComment #19
bbu23Hi,
I don't have time for a full review, but that composer.json file must be changed. It looks like the contents are coming from "drupal/recommended-project". See Add a composer.json file for more info.
I don't know why there's a web folder there, and its submodules:
web/modules/custom/changelogify.Remove
php: 8.1from the module's info file.In the definition of
changelogify_releasecontent entity, you are defining the adminroute_provider, but you are also manually defining entity routes inchangelogify.routing.yml. The latter is not needed.Since your module is compatible with Drupal 11, and already has the hooks prepared for OOP, you are just missing the hook attribute above each function in
ChangelogifyHooks.php.Comment #20
erics1337 commentedThanks for the review!
I've updated composer.json and the directory structure, cleaned up the routing and info files, and added the #[Hook] attributes for D11 compatibility. I also ensured the hooks won't double-execute on newer versions.
Ready for another look!
Comment #21
bbu23Adjusting the priority as per Issue Priorities.
Comment #22
erics1337 commentedComment #23
avpadernoThe priority is reset to Normal after a review, if it was before raised to Major or Critical.
Comment #24
nkmaniI reviewed the code at 1.0.x branch at this commit: c9e03696a207ad643841a87222aa19891ba406b8 and the following are my comments:
Consider using LegacyHook attribute for all the hooks defined in changelogify.module. Without that this will cause duplicate execution in Drupal 11 (once through the module_entity_insert hook, and second directly through the Hook interface).
This may cause phpstan problems in Drupal 10, which will have to be ignored.
Comment #25
erics1337 commentedThanks for the review! I've updated the code to include these changes:
Replaced the class_exists() checks with #[LegacyHook] attribute on all hook functions in changelogify.module
Added phpstan.neon with an ignore rule for Drupal\Core\Hook\Attribute\LegacyHook to handle Drupal 10 compatibility
Setting back to Needs review.
Comment #26
batigolix1. You are using a customized gitlab CI yml.
https://git.drupalcode.org/project/changelogify/-/blob/1.0.x/.gitlab-ci....
I think using the default gives you better feedback on your code:
https://www.drupal.org/docs/develop/git/using-gitlab-to-contribute-to-dr...
Using the default, also saves you from providing your own phpstan.neon and phpcs.xml.dist files.
2. You use an AI generated README.md that differs from the preferred template https://www.drupal.org/docs/develop/managing-a-drupalorg-theme-module-or...
For example the installation section should not assume that people use DDEV
Comment #27
erics1337 commentedThanks for the review.
I addressed both points:
I removed the custom GitLab CI setup and switched `.gitlab-ci.yml` to the default Drupal GitLab template include (`project/gitlab_templates`).
I also removed the local `phpcs.xml.dist` and `phpstan.neon` files so the default Drupal CI tooling/config is used.
I replaced the README with a Drupal.org-style module README template (Introduction / Requirements / Installation / Configuration / Usage / Maintainers).
The installation instructions are now generic Drupal module installation instructions (with Composer/Drush examples) and no longer assume DDEV.
Please take another look when you have a moment.
Comment #28
batigolixGitlab CI pipeline looks great now!
For the README I would suggest a couple of changes.
1. Replace the complete installation section by the simple instruction
See https://www.drupal.org/docs/develop/managing-a-drupalorg-theme-module-or...
The rest only causes confusion. Or is there a reason to clone the github repo?
2. Remove Roadmap and Contributions section. These are not common for the readme, but could be placed on the drupal.org project page.
3. Remove License section. I do not think it is needed, because it is implicit for all Drupal hosted code. (But feel free to leave it in if you have a special reason)
4. It is noticeable that the README is generated by an AI agent. If the module code includes any AI generated content, then it is a good practice to disclose this (on the project page or in the application). See https://www.drupal.org/docs/develop/issues/issue-procedures-and-etiquett...
Comment #29
avpadernoSince each project is not stored in the same repository containing Drupal core, the license file should be provided, to make explicit the license under which the code is provided.
At the times drupal.org used CVS, this was not necessary, since all the projects were hosted in a single repository which included also Drupal core. There was a single license file which was valid for Drupal core and every contributed project.
Comment #30
erics1337 commentedAddressed the README with reviewer suggestions. Ready for review!
Comment #31
batigolixLooks great!
Comment #32
erics1337 commentedThanks! Do you have a sense of when the security review might be completed?
Comment #33
batigolixNot sure. I am not involved in the approval process. It seems most issues have been addressed. I will mark this as approved in the coming days if there is no more feedback.
Comment #34
erics1337 commentedComment #35
bbu23Hi @erics1337,
Please stop changing the priority when it doesn't respect the Issue Priorities.
Comment #36
erics1337 commentedI apologize for the frustration regarding the priority changes. I only bumped it because the application has been pending for two months and needs review. I will leave the priority at Normal as requested and appreciate your time in looking this over.
Comment #37
batigolixIt seems all feedback has been addressed. I have not seen any more reports over the last week. I set this to RTBC
Comment #38
avpadernoThank you for your contribution and for your patience with the review process!
I am going to update your account so you can opt into security advisory coverage any project you create, including the projects you already created.
These are some recommended readings to help you with maintainership:
You can find more contributors chatting on Slack or IRC in #drupal-contribute. So, come hang out and stay involved!
Anyone is welcome to participate in the review process. Please consider reviewing other projects that are pending review. I encourage you to learn more about that process and join the group of reviewers.
I thank also all the reviewers for helping with these applications.
Comment #39
avpaderno