DEV Community

Erika Heidi
Erika Heidi

Posted on • Updated on

Automatically update your CONTRIBUTORS file with this GitHub Action + Workflow

My Workflow

I wanted to build something simple but yet useful for open source maintainers. So here's what I built: an action to automatically generate a CONTRIBUTORS.md file based on a project's top contributors, using the GitHub API to pull information about the project. The workflow then uses another action to create a pull request or commit the changes directly to the same repository where the workflow is configured.

Automated pull request with github actions

The action runs a single-command application created with Minicli, a minimalist command-line framework for building PHP CLI commands.

The application, action, and example workflows can be found here:

GitHub logo minicli / action-contributors

GitHub Action to dynamically update CONTRIBUTORS file

Generate / Update CONTRIBUTORS File - GitHub Action

This GitHub Action updates a CONTRIBUTORS file with the top contributors from the specified project, pulling contents from the GitHub API.

Example Usage

This action is made to use in conjunction with test-room-7/action-update-file in order to automatically commit an updated CONTRIBUTORS file in a fixed interval.

The following example sets a workflow to update the file once a month, committing the changes directly to the main project's branch:

name: Update CONTRIBUTORS file
on
  schedule:
    - cron: "0 0 1 * *"
  workflow_dispatch:
jobs:
  main:
    runs-on: ubuntu-latest
    steps:
      - uses: minicli/action-contributors@v3
        name: "Update a projects CONTRIBUTORS file"
        env:
          CONTRIB_REPOSITORY: 'minicli/minicli'
          CONTRIB_OUTPUT_FILE: 'CONTRIBUTORS.md'
      - name: Commit changes
        uses: test-room-7/action-update-file@v1
        with:
          file-path: 'CONTRIBUTORS.md'
          commit-msg: Update Contributors
Enter fullscreen mode Exit fullscreen mode

Note: If you want to learn how I built this, check out this post: How to build GitHub Actions in PHP with Minicli and Docker.

Submission Category:

Maintainer Must-Haves

Yaml File or Link to Code

Here is an example workflow to run this action once a month and commit the changes directly to the main project's branch:

name: Update CONTRIBUTORS file
on:
  schedule:
    - cron: "0 0 1 * *"
  workflow_dispatch:
jobs:
  main:
    runs-on: ubuntu-latest
    steps:
      - uses: minicli/action-contributors@v2
        name: 'Update a projects CONTRIBUTORS file'
        env:
          CONTRIB_REPOSITORY: 'minicli/minicli'
          CONTRIB_OUTPUT_FILE: 'CONTRIBUTORS.md'
      - name: Update resources
        uses: test-room-7/action-update-file@v1
        with:
          file-path: 'CONTRIBUTORS.md'
          commit-msg: Update Contributors
          github-token: ${{ secrets.GITHUB_TOKEN }}
Enter fullscreen mode Exit fullscreen mode

You need to replace the CONTRIB_REPOSITORY value with the GitHub project you want to pull contributors from.

If you'd prefer to create a pull request instead of committing the changes directly to the main branch, you can use the create-pull-request action instead. For that, you'll also need to include the actions/checkout GitHub Action:

name: Update CONTRIBUTORS file
on:
  schedule:
    - cron: "0 0 1 * *"
  workflow_dispatch:
jobs:
  main:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: minicli/action-contributors@v3
        name: "Update a projects CONTRIBUTORS file"
        env:
          CONTRIB_REPOSITORY: 'minicli/minicli'
          CONTRIB_OUTPUT_FILE: 'CONTRIBUTORS.md'
      - name: Create a PR
        uses: peter-evans/create-pull-request@v3
        with:
          commit-message: Update Contributors
          title: "[automated] Update Contributors File"
          token: ${{ secrets.GITHUB_TOKEN }}
Enter fullscreen mode Exit fullscreen mode

Additional Resources / Info

Projects using this action:

If you want to learn how I built this, check out this post: How to build GitHub Actions in PHP with Minicli and Docker.

Discussion (6)

Collapse
bytrangle profile image
Trang Le

I've always thought of implementing something like this to celebrate amazing contributors, but don't know how to implement. Great solution.

Collapse
erikaheidi profile image
Erika Heidi Author

Thank you!

Collapse
ful1e5 profile image
Kaiz Khatri

Awesome job ❤️

Collapse
erikaheidi profile image
Erika Heidi Author

Thank you!

Collapse
abandonedsign profile image
Evil Commissar

Very robust and clean solution! Awesome!

I would love to see also bumping VERSION file using similiar approach. Like, from 1.2.3 -> 1.2.4

Collapse
erikaheidi profile image
Erika Heidi Author

Thank you <3