///|
pub(all) struct RuleInfo {
code : String
level : String
summary : String
} derive(Eq, Debug)
///|
pub extend RuleInfo with Eq::{not_equal, equal}
///|
pub extend RuleInfo with @moonbitlang/core/debug.Debug::{to_repr}
///|
pub fn all_rules() -> Array[RuleInfo] {
[
{ code: "DL3000", level: "error", summary: "Use absolute WORKDIR", },
{
code: "DL3002",
level: "warning",
summary: "Last USER should not be root",
},
{ code: "DL3003", level: "warning", summary: "Use WORKDIR instead of cd", },
{ code: "DL3004", level: "error", summary: "Do not use sudo", },
{ code: "DL3005", level: "error", summary: "Do not use apt-get upgrade", },
{ code: "DL3006", level: "error", summary: "Always tag FROM images", },
{ code: "DL3007", level: "warning", summary: "Avoid :latest", },
{
code: "DL3008",
level: "warning",
summary: "Pin apt-get package versions",
},
{ code: "DL3009", level: "warning", summary: "Clean apt-get lists", },
{ code: "DL3011", level: "error", summary: "EXPOSE ports must be 0-65535", },
{ code: "DL3013", level: "warning", summary: "Pin pip package versions", },
{ code: "DL3014", level: "warning", summary: "Use apt-get -y", },
{
code: "DL3015",
level: "warning",
summary: "Use --no-install-recommends",
},
{ code: "DL3016", level: "warning", summary: "Pin npm package versions", },
{ code: "DL3018", level: "warning", summary: "Pin apk package versions", },
{ code: "DL3019", level: "warning", summary: "Use apk --no-cache", },
{ code: "DL3020", level: "error", summary: "Prefer COPY over ADD", },
{
code: "DL3021",
level: "error",
summary: "Multi-source COPY dest must end with /",
},
{
code: "DL3022",
level: "error",
summary: "COPY --from must name a prior stage",
},
{
code: "DL3023",
level: "error",
summary: "COPY --from cannot target its own stage",
},
{ code: "DL3024", level: "error", summary: "FROM aliases must be unique", },
{ code: "DL3025", level: "warning", summary: "Use JSON CMD/ENTRYPOINT", },
{ code: "DL3026", level: "error", summary: "Use only an allowed registry", },
{ code: "DL3027", level: "warning", summary: "Use apt-get instead of apt", },
{ code: "DL3028", level: "warning", summary: "Pin gem package versions", },
{ code: "DL3029", level: "warning", summary: "Avoid FROM --platform", },
{ code: "DL3032", level: "warning", summary: "Use yum clean all", },
{ code: "DL3033", level: "warning", summary: "Pin yum package versions", },
{ code: "DL3040", level: "warning", summary: "Use dnf clean all", },
{ code: "DL3041", level: "warning", summary: "Pin dnf package versions", },
{ code: "DL3042", level: "warning", summary: "Use pip --no-cache-dir", },
{
code: "DL3044",
level: "warning",
summary: "Do not use empty ENV values",
},
{ code: "DL3048", level: "warning", summary: "Invalid LABEL key", },
{ code: "DL3049", level: "warning", summary: "Required LABEL is missing", },
{ code: "DL3059", level: "warning", summary: "Combine consecutive RUN", },
{ code: "DL4000", level: "error", summary: "MAINTAINER is deprecated", },
{ code: "DL4001", level: "warning", summary: "Do not mix wget and curl", },
{ code: "DL4003", level: "warning", summary: "Multiple CMD instructions", },
{
code: "DL4004",
level: "error",
summary: "Multiple ENTRYPOINT instructions",
},
{ code: "DL4006", level: "warning", summary: "Set pipefail before pipes", },
{
code: "DL3061",
level: "error",
summary: "Dockerfile must begin with FROM or ARG",
},
{
code: "SC2046",
level: "warning",
summary: "Quote command substitutions",
},
{ code: "SC2068", level: "warning", summary: "Quote $@ and $* expansions", },
{
code: "SC2086",
level: "warning",
summary: "Quote variables to prevent splitting",
},
{ code: "SC2164", level: "warning", summary: "Guard cd with || exit", },
]
}
///|
pub fn has_rule(code : String) -> Bool {
for rule in all_rules() {
if rule.code == code {
return true
}
}
false
}