PHPackages                             mrimann/como - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mrimann/como

ActiveTypo3-flow-package[Utility &amp; Helpers](/categories/utility)

mrimann/como
============

Tool to automatically elect the Coder of the Month based on the Git commits within your team.

v1.2.1(11y ago)629[10 issues](https://github.com/mrimann/CoMo/issues)MITPHP

Since Apr 19Pushed 11y ago4 watchersCompare

[ Source](https://github.com/mrimann/CoMo)[ Packagist](https://packagist.org/packages/mrimann/como)[ RSS](/packages/mrimann-como/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependencies (2)Versions (8)Used By (0)

Why?
----

[](#why)

It started as a fun-project - and still is: One day we discussed at [internezzo](http://www.internezzo.ch/) how we can give away an award to our employees for e.g. "the committer of the month" (hence the name "CoMo").

CoMo fetches the meta data of commits from Git repositories, stores them in the database, aggregates them and renders some stats per person (this part and some trending stuff will be added soon).

The main screen looks like this:

[![Screenshot of CoMo in action](https://camo.githubusercontent.com/56ca4a30e359e78ed6a412244862a486f3f8c5e0bdd17adcebaf4e042db5d32b/68747470733a2f2f7261772e6769746875622e636f6d2f6d72696d616e6e2f436f4d6f2f6d61737465722f446f63756d656e746174696f6e2f53637265656e73686f74732f636f6465724f665468654d6f6e74682e706e67)](https://camo.githubusercontent.com/56ca4a30e359e78ed6a412244862a486f3f8c5e0bdd17adcebaf4e042db5d32b/68747470733a2f2f7261772e6769746875622e636f6d2f6d72696d616e6e2f436f4d6f2f6d61737465722f446f63756d656e746174696f6e2f53637265656e73686f74732f636f6465724f665468654d6f6e74682e706e67)

The stats can be integrated in a radiator screen within one's office to publicly promote the most active employee. To show different tool's output and "flip" through those pages one after each other, we've additionally built a small wrapper called "[radiate](https://github.com/mrimann/radiate)"

But it goes even further: There's a command controller that can be run e.g. once a day to fetch a list of all repositories from a remote server via the Gitweb frontend. This eases it a lot for us as newly added repositories will be detected automatically by CoMo.

Regarding the repositories: Remote repositories will be cloned the first time, then just the changes will be pulled down to the local clone to save bandwith and processing time. For repos that are located locally (URL begins with `file://`), no clone is made, their log get's directly read from the original repo location.

Does it make sense?
-------------------

[](#does-it-make-sense)

Well, basically one can create a ton of smallish commits and he'll be the winner every month. That's true and of course a fact. CoMo is really more about the fun. But if you and your team is running via a code-review system (e.g. Gerrit) before committing to your master branch, the number of "merged-to-master"-changes get's more relevant of course (and you'll directly see those black sheeps that try to cheat with small commits)

Feature list
------------

[](#feature-list)

- Automatically fetch a list of repositories from a Gitweb-Frontend (can be run e.g. daily to detect new repos)
- Extracts the commit's meta-data for each repository
    - only extracts the latest n days to save resources (configurable)
    - only extracts stuff that hasn't been extracted yet (e.g. the new commits since the last extraction run)
- Aggregates the extracted data
- Automatically elects the winners based on the aggregated data
- Sends a notification e-mail to the ceremony master upon electing a new award (so he can hand over the physical award to the winner)
- Everything can be automated via cronjobs
    - cronjobs are built in a way that they can be fired regularly and will just exit as soon as nothing is to do
    - they have a "be quiet" flag
- Shows several big-screen optimized views:
    - the last month's winner(s)
- If the committer's e-mail address has a gravatar image, this one will be shown - or a fallback pixel-image if there's no portrait

Configuration options
---------------------

[](#configuration-options)

- maxDaysToFetchFromGitLogHistory: 100

    Defines how far back in the git log we're going to extract the commits (to avoid extracting and aggregating data for e.g. 10 years of commits and then just electing the award for the last month or so).
- cacheBasePath: %FLOW\_PATH\_DATA%Temporary/

    Sets the base directory to be used for the local cloning of the remote repositories before the data can be extracted.
- whoGetsCredits: author

    Defines who'll get the credits, this is defaulting to the author which usually is the one that created the change and often is the same person that commits the change. The whole thing is configurable for situations where you want to credit the committer instead.

    Allowed values: "author" and "committer"

    Sinces v1.2.0
- sendNotificationMailsForCoderOfTheMonth: FALSE

    Whether to send mails to the ceremony master upon election of a new coder of the month
- sendNotificationMailsForTopicAwardWinner: FALSE

    Whether to send mails to the ceremony master upon election of a new topic award winner
- ceremonyMasterEmail:

    The e-mail address of the ceremony master (get's notifications upon newly elected awards)
- senderEmail:

    The sender e-mail address
- senderName: CoMo

    The sender name of the mails

Getting it set-up
-----------------

[](#getting-it-set-up)

To get the system up and running, of course you need to have a TYPO3 Flow setup and install this package into it (it's [on packagist as mrimann/como](https://packagist.org/packages/mrimann/como). Then you need to execute the following commands on the commandline - or even better run them via crontab to let the system do the work on it's own:

### Adding new repositories

[](#adding-new-repositories)

A list of repositories to monitor is kept in the database. If you run a server that hosts your Git repositories and have a Gitweb-Frontend installed, *CoMo* can actually get a list of all repos e.g. once daily and automatically add new repositories that have been created so they get monitored, too.

```
./flow help repodetectorgitweb:fetchrepos

```

This will show you all the options on how to use this command.

### Processing the data

[](#processing-the-data)

There are two commands that do the whole data-processing-stuff. Just execute the following two commands to get stuff processed:

```
./flow metadataextractor:processrepositories
./flow dataaggregator:processcommits

```

### Electing the Coder of the Month

[](#electing-the-coder-of-the-month)

Based on the now processed (aggregated) data, *CoMo* can now elect the Coder of the Month if you execute the following command:

```
./flow election:electlastmonth

```

This will elect the coder of the month for the last calendar month (since the current month is not over yet, it can't be elected yet).

How to contribute?
------------------

[](#how-to-contribute)

Feel free to [file new issues](https://github.com/mrimann/Mrimann.CoMo/issues) if you find a problem or to propose a new feature. If you want to contribute your time and submit a code change, I'm very eager to look at your pull request!

In case you want to discuss a new feature with me, just send me an e-mail.

Want to make me happy?
----------------------

[](#want-to-make-me-happy)

Here's [a list](http://www.rimann.org/support) of things to make me happy and that will keep me doing stuff like this in the future :-)

License
-------

[](#license)

Licensed under the permissive [MIT license](http://opensource.org/licenses/MIT) - have fun with it!

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity12

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity68

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~89 days

Recently: every ~44 days

Total

7

Last Release

4236d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c47d078a8df83802429407a7f38c2585747d16746696b8fa0b812ce5677513fe?d=identicon)[mrimann](/maintainers/mrimann)

---

Top Contributors

[![mrimann](https://avatars.githubusercontent.com/u/1093784?v=4)](https://github.com/mrimann "mrimann (82 commits)")

---

Tags

gitgameTeamGamificationCoderTYPO3 FlowTYPO3 NeosChallengeRadiator

### Embed Badge

![Health badge](/badges/mrimann-como/health.svg)

```
[![Health](https://phpackages.com/badges/mrimann-como/health.svg)](https://phpackages.com/packages/mrimann-como)
```

###  Alternatives

[czproject/git-php

Library for work with Git repository in PHP.

5544.9M81](/packages/czproject-git-php)[gitscrum-community-edition/laravel-gitscrum

GitScrum is a project to help developer team. Git + Scrum = Team More Productive

2.9k2.0k](/packages/gitscrum-community-edition-laravel-gitscrum)[cypresslab/gitelephant

An abstraction layer for git written in PHP

6131.0M23](/packages/cypresslab-gitelephant)[bruli/php-git-hooks

Git hooks for PHP projects.

675370.8k5](/packages/bruli-php-git-hooks)[qcod/laravel-gamify

Add gamification in laravel app with reputation point and badges support

680347.0k1](/packages/qcod-laravel-gamify)[marcocesarato/php-conventional-changelog

Generate changelogs and release notes from a project's commit messages and metadata and automate versioning with semver.org and conventionalcommits.org

2511.3M109](/packages/marcocesarato-php-conventional-changelog)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
