This repo contains workflow templates and other org level config and files
QuIC repos should enable the Repolinter GitHub Action upon creation. This action runs the Repolinter tool, which lints open source repositories for common issues.
- Navigate to the new repo
- Click on Actions
- If you have existing actions in the repo, click "New workflow", else skip to next step
- Locate the "By Qualcomm Innovation Center" section and click "Configure" under "QuIC Organization Repolinter Workflow"
- Click "Commit changes...", select "Commit directly to the main branch" (or feel free to create a new branch and start a PR), ensure your QuIC email is selected under "Commit Email", and then click "Sign off and commit changes"
- This will create a GitHub Action config file in your repo under the path
.github/workflows/quic-organization-repolinter.yml
- Adjust it as needed, e.g. the Repolinter action is configured to run on Push and Pull Requests into the main/master branch, but you may want to further adjust when it runs.
When the GitHub Action is run, it first checks your QuIC repo for a local repolint.json
file at the root directory. If it doesn't find one it'll use the default QuIC Repolinter ruleset, which is located here https://github.com/quic/.github/blob/main/repolint.json
To customize the default QuIC Repolinter ruleset (e.g. to add some language specific file extensions for the license check), you can extend the default ruleset and override specific rules. In other cases you may have to copy the ruleset locally and edit as needed. See below for examples.
For example, if we wanted to exclude the copyright/license check for a directory e.g. /test-data
from Repolinter, we can extend the ruleset as we are adding additional rules.
- Create the file
repolint.json
at the root of your project - "Extend" the QuIC repolint.json file
{
"extends": "https://raw.githubusercontent.com/quic/.github/main/repolint.json",
"rules": {}
}
- Copy the rule block you need to adjust from
https://raw.githubusercontent.com/quic/.github/main/repolint.json
. E.g. in this case we want to exclude/test-data
from the license header check. So let's copy the json blocksource-license-headers-exist
and paste it into therules
section of the localrepolint.json
we extended - Now lets add the
test-data
directory to the list of patterns to skip/exclude from being checked
{
"extends": "https://raw.githubusercontent.com/quic/.github/main/repolint.json",
"rules": {
"source-license-headers-exist": {
"level": "error",
"rule": {
"type": "file-starts-with",
"options": {
"globsAll": [
"**/*.py",
"**/*.js",
"**/*.c",
"**/*.cc",
"**/*.cpp",
"**/*.h",
"**/*.ts",
"**/*.sh",
"**/*.rs",
"**/*.java",
"**/*.go",
"**/*.bbclass",
"**/*.S"
],
"skip-paths-matching": {
"patterns": [
"babel.config.js",
"build\/",
"jest.config.js",
"node_modules\/",
"types\/",
"uthash.h",
"test-data\/"
]
},
"lineCount": 60,
"patterns": [
"(Copyright|©).*Qualcomm Innovation Center, Inc|Copyright (\\(c\\)|©) (20(1[2-9]|2[0-2])(-|,|\\s)*)+ The Linux Foundation",
"SPDX-License-Identifier|Redistribution and use in source and binary forms, with or without"
],
"flags": "i"
}
}
}
}
}
For example, to only check .c
files in a specific directory (e.g., /src
) in the copyright/license check using Repolinter, we cannot extend and must instead replace the ruleset and edit it as necessary.
- Copy the default QuIC repolint.json ruleset to the root of your project
- Find the relevant rule to edit. In this example, we are going to edit the
source-license-headers-exist
rule and replace theglobsAll
property to only.c
files in the/src
directory.
[...]
"source-license-headers-exist": {
"level": "error",
"rule": {
"type": "file-starts-with",
"options": {
"globsAll": [
"src/**/*.c"
],
"skip-paths-matching": {
"patterns": []
},
"lineCount": 60,
"patterns": [
"(Copyright|©).*Qualcomm Innovation Center, Inc|Copyright (\\(c\\)|©) (20(1[2-9]|2[0-2])(-|,|\\s)*)+ The Linux Foundation",
"SPDX-License-Identifier|Redistribution and use in source and binary forms, with or without"
],
"flags": "i"
}
}
},
[...]
- For more information on Repolinter rules and options, see Repolinter rules