This repository provides code quality and compliance tooling for CCDC repositories:
- Native Git Hooks (
main/): Local hooks configured globally (commit-msg,pre-commit,pre-merge-commit) for standard Git workflows. - GitHub Action (
action.yml): Composite GitHub Action for CI workflows to validate copyright headers and repository compliance on PRs/commits.
It does a few checks on source code to ensure compliance with general CCDC coding standards.
The commit will be flagged if it includes certain text files with:
- File name that can cause errors on Windows
- CRLF line endings
- NO NOT MERGE or DO NOT COMMIT
- Tabs
- Missing terminating newline for certain files
- Certain C++ #include patterns and std::exception
- Missing or non-compliant CCDC copyright and licence headers (when header validation is enabled)
The commit will also be flagged if the commit message does not include a Jira ID (unless marked with NO_JIRA or a Copilot Autofix co-author line), or if the size of new or modified files exceeds a threshold.
This repository provides a composite GitHub Action for validating copyright headers and file compliance rules in CI.
- name: Checkout repository
uses: actions/checkout@v7
with:
ref: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v7
with:
python-version: "3.11"
- name: Extract commit message
shell: bash
run: |
delimiter="$(python -c 'import uuid; print(uuid.uuid4())')"
{
echo "commit_message<<${delimiter}"
git log --format=%B -n 1 HEAD
echo "${delimiter}"
} >> "$GITHUB_ENV"
- uses: ccdc-opensource/commit-hooks@v8
with:
commitMessage: ${{ env.commit_message }}
# Optional: enable CCDC licence header validation on PR changed files
licenceCheck: true # default: false (opt-in)A complete workflow template for CI is available in templates/compliance.yml.
To enable CCDC commit checks (Jira ID, CRLF, line endings, DO NOT COMMIT, file size, and automatic copyright headers):
- Clone this repository.
- Configure
core.hooksPath:- Globally (for all repositories on your machine):
git config --global core.hooksPath <path-to-cloned-repo>/main
- Locally (for a single repository only):
Run inside the target repository:
git config core.hooksPath <path-to-cloned-repo>/main
--globalif you want the hooks applied across all repositories.) - Globally (for all repositories on your machine):
- (Optional) Enable automatic CCDC copyright and licence header formatting as described below.
Developers can customise the licence header hook using Git configuration (use --global for all repos, or omit it within a specific repo):
-
Enable / Disable Header Formatting:
git config --global hooks.licenceCheck true # opt-in: enable licence header formatting git config --global hooks.licenceCheck false # default: disabled
-
Set Mode (
fixvscheck):git config --global hooks.licenceCheckMode fix # default: automatically inserts/updates headers on commit git config --global hooks.licenceCheckMode check # read-only check (warns/fails if headers are missing)
- On Windows:
git config --global core.autocrlf true - On other platforms (including WSL):
git config --global core.autocrlf input