Skip to main content

Local Configuration

x-fidelity supports local configuration for development and testing purposes. This guide explains how to set up and use local configuration files.

Directory Structure​

Your local configuration directory should follow this structure with archetypes in the root:

config/
├── node-fullstack.json
│ java-microservice.json
├── rules/
│ ├── sensitiveLogging-iterative.json
│ └── outdatedFramework-global.json
└── exemptions/
├── node-fullstack-exemptions/
│ ├── team1-exemptions.json
│ └── team2-exemptions.json
└── java-microservice-exemptions/
└── team3-exemptions.json

Usage​

Run x-fidelity with local config:

xfidelity . --localConfigPath ./config

Configuration Files​

Archetype Configuration​

Example node-fullstack.json:

{
"name": "node-fullstack",
"rules": [
"sensitiveLogging-iterative",
"outdatedFramework-global"
],
"operators": [
"fileContains",
"outdatedFramework"
],
"facts": [
"repoFilesystemFacts",
"repoDependencyFacts"
],
"config": {
"minimumDependencyVersions": {
"react": ">=17.0.0"
},
"standardStructure": {
"src": {
"components": null,
"utils": null
}
},
"blacklistPatterns": [
".*\\/\\..*",
".*\\.(log|lock)$",
".*\\/(dist|build|node_modules)(\\/.*|$)"
],
"whitelistPatterns": [
".*\\.(ts|tsx|js|jsx)$"
]
}
}

Rule Configuration​

Example sensitiveLogging-iterative.json:

{
"name": "sensitiveLogging-iterative",
"conditions": {
"all": [
{
"fact": "fileContent",
"operator": "contains",
"value": "password"
}
]
},
"event": {
"type": "warning",
"params": {
"message": "Potential sensitive data exposure"
}
}
}

Exemption Configuration​

Example team1-exemptions.json:

[
{
"repoUrl": "git@github.com:org/repo.git",
"rule": "outdatedFramework-global",
"expirationDate": "2024-12-31",
"reason": "Upgrade scheduled for Q4"
}
]

Hot Reloading​

When running in server mode, x-fidelity watches your local configuration directory for changes and automatically reloads configurations when files are modified.

Best Practices​

  1. Version Control:

    • Keep configurations in version control
    • Use a dedicated repository for configurations
    • Follow branching strategies for changes
  2. Documentation:

    • Document custom rules and archetypes
    • Include examples and use cases
    • Maintain a changelog
  3. Testing:

    • Test configurations before deployment
    • Validate rule effectiveness
    • Check for false positives
  4. Organization:

    • Use clear naming conventions
    • Group related rules together
    • Maintain consistent structure
  5. Maintenance:

    • Regularly review configurations
    • Update outdated rules
    • Remove unused configurations
    • Monitor effectiveness

Next Steps​