Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions dsl/test/claim/v1_dag_parse_witness_test.dag
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module test.claim.v1_dag_parse_witness

import tools.v1_dag_parse_transport {
run_v1_dag_parse_green,
run_v1_dag_parse_perturb_red_receipt
}

fn witness_v1_dag_parse_green_holds() -> Bool {
run_v1_dag_parse_green()
}

fn witness_v1_dag_parse_perturb_goes_red() -> Bool {
run_v1_dag_parse_perturb_red_receipt()
}

test fn v1_dag_parse_witnesses() -> Bool {
witness_v1_dag_parse_green_holds()
&& witness_v1_dag_parse_perturb_goes_red()
}
4 changes: 4 additions & 0 deletions dsl/tools/host_prelude.dag
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ fn ensure_discover_source_root_ingest_built() -> List<ShellStmt> {
ensure_bin_built_and_verified(var_name: "DISCOVER_SOURCE_ROOT_INGEST", bin_name: "discover_source_root_ingest")
}

fn ensure_v2_whole_tree_parse_scan_built() -> List<ShellStmt> {
ensure_bin_built_and_verified(var_name: "V2_WHOLE_TREE_PARSE_SCAN", bin_name: "v2_whole_tree_parse_scan")
}

fn toolchain_provision_shell_exec(script: String) -> Bool {
let result = shell.Exec.Run(script: script)
result.success
Expand Down
98 changes: 98 additions & 0 deletions dsl/tools/v1_dag_parse_transport.dag
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
module tools.v1_dag_parse_transport

import extdeps.shell
import gunbc.ci_layer_roots { witness_layer_roots }
import std.logic { Bool }
import extdeps.languages.bash.program {
ShellProgram, ShellStmt, ShellWord,
Command, If, WithRedir, Heredoc, Exit,
Lit, VarRef, Concat, CmdSubst,
StdoutAndStderrToNull,
lit, var_ref, command, assign, serialize_bash
}
import tools.host_prelude { ensure_v2_whole_tree_parse_scan_built }

data v1_dag_scan_dir: String = "src/v1"

data v1_dag_stage0_subpath_exclusion: String = "stage0"

fn parse_scan_source_root_flags(extra_roots: List<String>) -> List<ShellWord> {
let base = fold(witness_layer_roots, init: [], f: (acc, r) => concat(acc, [lit(text: "--source-root"), lit(text: r)]))
fold(extra_roots, init: base, f: (acc, r) => concat(acc, [lit(text: "--source-root"), lit(text: r)]))
}

fn v1_dag_parse_scan_stmts(scan_dir: ShellWord, extra_roots: List<String>) -> List<ShellStmt> {
let root = var_ref(name: "ROOT")
let scanner = var_ref(name: "V2_WHOLE_TREE_PARSE_SCAN")
concat(ensure_v2_whole_tree_parse_scan_built(), [
command(words: [lit(text: "cd"), root]),
command(words: concat(
[scanner],
concat(
parse_scan_source_root_flags(extra_roots: extra_roots),
[
lit(text: "--scan-dir"), scan_dir,
lit(text: "--exclude-subpath"), lit(text: v1_dag_stage0_subpath_exclusion)
]
)
))
])
}

fn v1_dag_parse_green_program() -> ShellProgram {
ShellProgram {
set_e: true,
statements: v1_dag_parse_scan_stmts(
scan_dir: lit(text: v1_dag_scan_dir),
extra_roots: [v1_dag_scan_dir]
)
}
}

data perturb_parse_red_source: String = "module v1.perturb.parse_red\ntype Foo {"

fn v1_dag_parse_perturb_red_program() -> ShellProgram {
let root = var_ref(name: "ROOT")
let scanner = var_ref(name: "V2_WHOLE_TREE_PARSE_SCAN")
let tmp = var_ref(name: "TMP")
ShellProgram {
set_e: true,
statements: concat(ensure_v2_whole_tree_parse_scan_built(), [
command(words: [lit(text: "cd"), root]),
assign(name: "TMP", value: CmdSubst { body: command(words: [lit(text: "mktemp"), lit(text: "-d")]) }),
Heredoc {
path: Concat { parts: [tmp, lit(text: "/_perturb_parse_red.dag")] },
delimiter: "PERTURB",
body: perturb_parse_red_source
},
If {
cond: WithRedir {
stmt: command(words: concat(
[scanner],
concat(
parse_scan_source_root_flags(extra_roots: []),
[lit(text: "--source-root"), tmp, lit(text: "--scan-dir"), tmp]
)
)),
redir: StdoutAndStderrToNull
},
then: [
command(words: [lit(text: "rm"), lit(text: "-rf"), tmp]),
Exit { code: 1 }
]
},
command(words: [lit(text: "rm"), lit(text: "-rf"), tmp]),
Exit { code: 0 }
])
}
}

fn run_v1_dag_parse_green() -> Bool {
let result = shell.Exec.Run(script: serialize_bash(p: v1_dag_parse_green_program()))
result.success
}

fn run_v1_dag_parse_perturb_red_receipt() -> Bool {
let result = shell.Exec.Run(script: serialize_bash(p: v1_dag_parse_perturb_red_program()))
result.success
}
Loading