MoonBit 构建输入与阶段影响分析
///|
test "explicit code suppression preserves parse errors" {
let src = "FROM ubuntu\nRUN apt-get install curl\n"
let ds = @dockerlint.check(src)
assert_true(!ds.is_empty())
let ignored = ds.map(d => d.code)
assert_eq(@dockerlint.check(src, ignore_codes=ignored), [])
assert_true(
try {
ignore(@dockerlint.check("RUN [", ignore_codes=ignored))
false
} catch {
_ => true
},
)
}pub struct BuildComparison {
before : BuildImpact
after : BuildImpact
affected_targets : Array[String]
conservative : Bool
reason : String
} derive(Eq, ToJson, Debug)pub struct ContextPlan {
graph : BuildImpact
entries : Array[ContextEntry]
inputs : Array[ContextInput]
selected_entries : Array[Int]
missing_lines : Array[Int]
uncertainties : Array[BuildUncertainty]
changes : Array[ContextFileImpact]
image_metadata : Array[ImageContextMetadataEvidence]
} derive(Eq, ToJson, Debug)fn ImageContextMetadataEvidence::equal(ImageContextMetadataEvidence, ImageContextMetadataEvidence) -> Boolfn ImageContextMetadataEvidence::not_equal(x : ImageContextMetadataEvidence, y : ImageContextMetadataEvidence) -> Boolpub struct VariableScope {
line : Int
stage : Int
instruction : String
expanded : String
arguments : Map[String, String]
environment : Map[String, String]
unresolved : Array[String]
uncertain_arguments : Array[String]
uncertain_environment : Array[String]
unknown_base_environment : Bool
} derive(Eq, ToJson, Debug)fn analyze_context(source : String, entries : Array[ContextEntry], target? : String, changes? : Array[ContextChange], build_args? : Map[String, String], control_files? : Array[String], platform? : String, image_metadata? : Array[ImageContextMetadata]) -> ContextPlan raise ParseErrorfn analyze_variables(source : String, build_args? : Map[String, String]) -> Array[VariableScope] raise ParseErrorfn build_impact(source : String, target? : String, changed_lines? : Array[Int]) -> BuildImpact raise ParseErrorfn check(source : String, ignore_codes? : Array[String], honor_inline? : Bool, trusted_registries? : Array[String]) -> Array[Diagnostic] raise ParseErrorfn compare_build_impact(before_source : String, after_source : String, changed_before? : Array[Int], changed_after? : Array[Int]) -> BuildComparison raise ParseErrorfn compare_build_sources(before_source : String, after_source : String) -> SourceComparison raise ParseErrorfn configured_report(source : String, config : String, filename? : String) -> String raise ParseErrorfn report_json(source : String, filename? : String, honor_inline? : Bool) -> String raise ParseError