A GitHub Action to scan your repository for orphan files. It can be used to scan files modified in a PR or globally checking all files in a branch.
OwnYourCode is a GitHub Action that scans your repository for orphan files, i.e., files that do not have a CODEOWNER assigned to them.
OwnYourCode uses the CODEOWNERS file in your repository to check if the files modified in a PR have an owner assigned to them. If a file does not have an owner, a comment is added to the PR with the list of orphan files.
- Scan files modified in a PR and post a comment with orphan files
- Update the comment in each PR synchronization
- Scan all files in a branch
- Fail the CI if orphan files are found
github_token
: String - Github Token (required)fail_on_missing_codeowners
: Boolean - Fail CI if there are files without owners (default: true)codeowners_path
: String - Path to the codeowners file (default: CODEOWNERS)pr_number
: Number - Scan only the files modified in the PR (optional ifbranch
is set)branch
: String - Scan all files in the specified branch (optional ifpr_number
is set)
total_orphan_files
: Number - Total number of orphaned filestotal_scanned_files
: Number - Total files scannedfailed
: Boolean - If the action failed
Create a new workflow file in your repository
touch .github/workflows/own-your-code.yml
Add the following content to the file
name: Check CODEOWNERS
on:
# To check the files modified in a PR
pull_request:
types: [opened, synchronize]
permissions:
id-token: write
contents: read
pull-requests: write # needed to write comments in PRs
jobs:
check-codeowners:
runs-on: ubuntu-latest
steps:
- name: Check CODEOWNERS
id: ownyourcode
uses: getyourguide/ownyourcode@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
pr_number: ${{ github.event.number }}
- name: Print Output
run: |
echo "${{ steps.ownyourcode.outputs.total_orphan_files }}"
echo "${{ steps.ownyourcode.outputs.total_scanned_files }}"
echo "${{ steps.ownyourcode.outputs.failed }}"
name: Check CODEOWNERS
on:
push:
branches:
- main
permissions:
id-token: write
contents: read
pull-requests: write # we need this to write comments in PRs
jobs:
check-codeowners:
runs-on: ubuntu-latest
steps:
- name: Check CODEOWNERS
id: ownyourcode
uses: getyourguide/ownyourcode@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref_name }}
---
jobs:
check-codeowners:
runs-on: ubuntu-latest
steps:
- name: Check CODEOWNERS
id: ownyourcode
uses: getyourguide/ownyourcode@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref_name }}
fail_on_missing_codeowners: false # important for next step to work
- name: Print Output
run: |
echo "Total orphan files: ${{ steps.ownyourcode.outputs.total_orphan_files }}"
echo "Total scanned files: ${{ steps.ownyourcode.outputs.total_scanned_files }}"
echo "Failed: ${{ steps.ownyourcode.outputs.failed }}"
The CODEOWNERS file should be in the root of your repository and should have the following format:
path/to/file @optional-owner @another-optional-owner
Root wildcard owners are ignored:
* @owner # this line will be ignored
path/to/*/file @owner # this line will be considered
Files with no owner will NOT be considered orphan files.
path/to/file/without/owner # this is not an orphan file, it has no owner