A structured record of collaborative pull request activity
Logus records pull request activity as dedicated Project items in GitHub Projects, creating a structured log of collaborative activity.
By combining standard Project fields (Title, Assignees, Reviewers, Repository, Status, Labels) with configurable, non-standard Project fields managed by Logus that store pull request opening timestamp (Posted Date), review timestamps (First Review Date, Last Review Date, Last Approved Review Date) and iteration counts (Review Iteration), each pull request becomes a persistent, queryable Project item that captures its collaboration history within a GitHub Project.
-
Pull request is opened
When an author creates a pull request in the source repository, GitHub triggers its native mechanisms. If automatic reviewer assignment is enabled (see Reviewers Field), reviewers are assigned at this stage. Reviewers can also be assigned manually at any time. -
Author assignment (Logus)
IfaddPullRequestAuthorAsAssignee: trueis set inlogus.yml, Logus assigns the pull request author as an Assignee. The Assignee field may still be modified manually later. -
Project linking (Logus)
Logus sets the pull request’s Projects field to the configured GitHub Project. As a result, GitHub adds the pull request to that Project as a Project item. -
Standard field synchronization (GitHub)
Once the pull request appears in the Project, GitHub automatically fills the existing standard Project fields with the corresponding values, including: Title, Assignees, Reviewers, Repository, Labels, and Status. -
Status management via workflows (GitHub)
If GitHub Projects workflows are configured (see Status Field), they automatically update the Status field in response to pull request events (e.g.Todowhen opened,In Progressafter the first review,Reviewedafter approval). The Status field can also be set manually. -
Review dynamics tracking (Logus)
As collaboration continues, Logus incrementally updates configurable, non-standard Project fields such as:- Posted Date
- First Review Date
- Last Review Date
- Last Approved Review Date
- Review Iteration
Over time, a single Project item becomes a structured, queryable record of the pull request’s collaboration process.
Logus assumes that target GitHub Projects follow a predefined structural template:
- The Project may contain standard and non-standard fields
- Non-standard fields must match those configured in
logus.yml(e.g. First Review Date, Review Iteration). - Field types must be compatible with the stored values (e.g. Date fields for dates, Number fields for review iterations).
All data is stored directly in GitHub Projects and can be explored using native views, filters, and downloaded in JSON format.
- Install Logus within the organization (see Self-hosting)
- Configure the application settings (see Configuration)
- Copy the ready-to-use Project Template with preconfigured workflows
The Reviewers column can be filled automatically using GitHub’s built-in reviewer assignment mechanism. This requires additional configuration:
- Add a
CODEOWNERSfile to the repository (typically in the.github/or.docs/directory). - Define code owners using the standard CODEOWNERS syntax, for example:
* @my-organization/my-team - Ensure that team knows the repository and has at least Write permissions.
- Enable automatic reviewer assignment in the team settings: Settings → Code Review → Enable Auto Assignment.
Automatic reviewer selection works for organizations using Team or Enterprise licenses. These licenses are paid, but teachers can apply for an educational discount and obtain them free of charge.
Logus does not enforce a specific review process. Instead, the Status field of each Project item is managed by GitHub Projects workflows, which automatically update the Status in response to pull request events.
Typical workflow actions include (see Project Template Workflows):
- Setting an initial Status when a pull request is opened (e.g. Todo)
- Updating Status when the first review is submitted (e.g. In Progress)
- Moving the item to an approved or completed Status after an approving review (e.g. Reviewed)
- Install the Node environment
- Run the following commands inside the source code directory:
npm install– install all required dependenciesnpm run build– transpile TypeScript code to JavaScriptnpm start– start the server handling the GitHub App
- Register the GitHub App
- Note: The GitHub App Manifest (
app.yml) contains the app’s permissions and settings on GitHub
- Note: The GitHub App Manifest (
- Install the application within the target organization
- Restart the service using
npm start
The application's organization-level configuration can be done by adding a .github/logus.yml file
to the organization's .github-private repository. Make sure that the GitHub App has access to this
repository in the organization's settings.
projectTitlePrefix: "monitor-"
openPullRequestDateProjectFieldName: "Posted Date"
firstReviewSubmitDateProjectFieldName: "First Review Date"
lastReviewSubmitDateProjectFieldName: "Last Review Date"
lastApprovedReviewSubmitDateProjectFieldName: "Last Approved Review Date"
reviewIterationNumberProjectFieldName: "Review Iteration"
addPullRequestAuthorAsAssignee: trueLogus operates only on GitHub Projects explicitly selected by configuration. Project selection is based on matching Project titles against a configured prefix.
Prefix of GitHub Project titles that Logus should target.
Only Projects whose titles start with this prefix will be scanned and updated.
Name of the Project field where the pull request posted date will be stored.
Optional parameter.
Name of the Project field where the date of the first submitted pull request review will be stored.
Optional parameter.
Name of the Project field where the date of the most recent pull request review submission will be stored.
Optional parameter.
Name of the Project field where the date of the most recent approved pull request review will be stored.
Optional parameter.
Name of the Project field where the number of completed pull request review iterations will be stored.
Optional parameter.
Determines whether the pull request author should be automatically added as an Assignee to the corresponding Project item.
Default value: false.
We welcome contributions! Please read our Contributing Guide to learn about our development process and how to propose changes.
