|
|
|
|
|
import json |
|
from pathlib import Path |
|
|
|
|
|
top_rules = [ |
|
"DL4006", "DL3008", "SC2086", "DL3003", "DL3015", "DL3047", "DL3009", "DL3004", "DL4001", "DL4000", |
|
"DL3059", "DL3018", "SC2016", "SC2046", "DL3006", "SC2028", "DL3027", "DL3020", "DL3025", "DL3042", |
|
"DL3013", "DL3007", "DL3033", "SC2043", "DL3019", "DL3005", "DL3002", "DL3048", "DL3045", "DL3032" |
|
] |
|
|
|
|
|
descriptions = { |
|
"DL4006": "Set the SHELL option -o pipefail before using RUN with a pipe.", |
|
"DL3008": "Pin versions in apt-get install. Avoid floating dependencies.", |
|
"SC2086": "Double quote to prevent globbing and word splitting.", |
|
"DL3003": "Use WORKDIR to switch to a directory instead of RUN cd.", |
|
"DL3015": "Avoid installing unnecessary packages to keep the image lean.", |
|
"DL3047": "Do not use latest tag for the base image.", |
|
"DL3009": "Delete the apt-get lists after installing packages.", |
|
"DL3004": "Do not use sudo as it leads to unpredictable behavior in containers.", |
|
"DL4001": "Either use ADD for local tar archives or COPY for everything else.", |
|
"DL4000": "MAINTAINER is deprecated. Use LABEL instead.", |
|
"DL3059": "Multiple consecutive RUN instructions should be combined.", |
|
"DL3018": "Pin versions in apk add commands.", |
|
"SC2016": "Expressions don't expand in single quotes. Use double quotes.", |
|
"SC2046": "Quote this to prevent word splitting.", |
|
"DL3006": "Always tag the version of the base image explicitly.", |
|
"SC2028": "Quotes in echo may not behave as expected. Use printf instead.", |
|
"DL3027": "Use only an allowed registry in the FROM image.", |
|
"DL3020": "Use COPY instead of ADD for files and folders.", |
|
"DL3025": "Use COPY instead of ADD unless you need ADD's features.", |
|
"DL3042": "Avoid cache busting by rearranging ADD/RUN order properly.", |
|
"DL3013": "Avoid installing unnecessary packages in your container.", |
|
"DL3007": "Using yum install is discouraged. Prefer apk or apt.", |
|
"DL3033": "Specify version with pip install to ensure reproducibility.", |
|
"SC2043": "Use 'case' instead of many 'if' statements for simplicity.", |
|
"DL3019": "Do not use ADD with URLs; use curl or wget instead.", |
|
"DL3005": "Do not use apt-get upgrade or dist-upgrade.", |
|
"DL3002": "Last USER should not be root.", |
|
"DL3048": "Avoid using the ADD instruction; prefer COPY.", |
|
"DL3045": "Do not specify the same label multiple times.", |
|
"DL3032": "Do not use deprecated ADD syntax; use COPY." |
|
} |
|
|
|
|
|
output_data = {} |
|
for rule in top_rules: |
|
output_data[rule] = { |
|
"code": rule, |
|
"title": descriptions.get(rule, "No title available."), |
|
"description": descriptions.get(rule, "No description available."), |
|
"documentation": "" |
|
} |
|
|
|
|
|
output_path = Path("data/metadata/rules_descriptions_en.json") |
|
output_path.parent.mkdir(parents=True, exist_ok=True) |
|
with open(output_path, "w", encoding="utf-8") as f: |
|
json.dump(output_data, f, indent=2) |
|
|
|
print(f"✅ Zapisano {len(output_data)} reguł do {output_path}") |
|
|