summaryrefslogtreecommitdiff
path: root/tests/test_rules/RULES
blob: 1a65ec80973592034e333f0eeb9e2c7060521339 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{ "test_case":
  { "doc": ["Define a test case for rule tests."]
  , "string_fields": ["name", "targets", "asserts"]
  , "target_fields": ["data"]
  , "field_doc":
    { "name": ["Name of the test (multiple entries are joined)."]
    , "targets":
      [ "Target names to build and install. Each target name is prefixed by"
      , "\"+\" or \"-\", indicating if the build should fail or not."
      , "Targets that build successfully will be installed to a directory"
      , "named identical to the target name (without the prefix)."
      ]
    , "asserts":
      [ "List of commands to execute after all targets were processed. To"
      , "access artifacts from installed targets, use the corresponding target"
      , "name as prefix dir (e.g., target \"+foo\" installs to \"./foo/\")."
      ]
    , "data":
      ["The directory that contains the project with the targets to test."]
    }
  , "tainted": ["test"]
  , "implicit":
    { "runner": ["test_runner.py"]
    , "rules": [["@", "test-rules", "", "tree"]]
    , "just": [["@", "test-just", "", ""]]
    }
  , "imports": {"stage_artifact": "stage_singleton_field"}
  , "expression":
    { "type": "let*"
    , "bindings":
      [ ["name", {"type": "join", "$1": {"type": "FIELD", "name": "name"}}]
      , ["fieldname", "just"]
      , ["location", "bin/just"]
      , ["just", {"type": "CALL_EXPRESSION", "name": "stage_artifact"}]
      , ["fieldname", "rules"]
      , ["location", "rules"]
      , ["rules", {"type": "CALL_EXPRESSION", "name": "stage_artifact"}]
      , ["fieldname", "data"]
      , ["location", "work"]
      , ["work", {"type": "CALL_EXPRESSION", "name": "stage_artifact"}]
      , ["fieldname", "runner"]
      , ["location", "runner"]
      , ["runner", {"type": "CALL_EXPRESSION", "name": "stage_artifact"}]
      , ["targets", {"type": "FIELD", "name": "targets"}]
      , ["asserts", {"type": "FIELD", "name": "asserts"}]
      , [ "repos"
        , { "type": "singleton_map"
          , "key": "repos.json"
          , "value":
            { "type": "BLOB"
            , "data":
              { "type": "json_encode"
              , "$1":
                { "type": "let*"
                , "bindings":
                  [ ["workspace_root", ["file", "work"]]
                  , ["rules", "rules"]
                  , ["bindings", {"type": "env", "vars": ["rules"]}]
                  , [ "work"
                    , {"type": "env", "vars": ["workspace_root", "bindings"]}
                    ]
                  , ["workspace_root", ["file", "rules"]]
                  , ["rules", {"type": "env", "vars": ["workspace_root"]}]
                  , [ "repositories"
                    , {"type": "env", "vars": ["rules", "work"]}
                    ]
                  , ["main", "work"]
                  ]
                , "body": {"type": "env", "vars": ["main", "repositories"]}
                }
              }
            }
          }
        ]
      , [ "config"
        , { "type": "singleton_map"
          , "key": "config.json"
          , "value":
            { "type": "BLOB"
            , "data":
              { "type": "json_encode"
              , "$1": {"type": "env", "vars": ["targets", "asserts"]}
              }
            }
          }
        ]
      , [ "results"
        , { "type": "ACTION"
          , "inputs":
            { "type": "map_union"
            , "$1":
              [ {"type": "var", "name": "runner"}
              , {"type": "var", "name": "rules"}
              , {"type": "var", "name": "just"}
              , {"type": "var", "name": "repos"}
              , {"type": "var", "name": "work"}
              , {"type": "var", "name": "config"}
              ]
            }
          , "outs": ["stdout", "stderr", "result", "time-start", "time-stop"]
          , "cmd": ["./runner"]
          , "may_fail": ["test"]
          , "fail_message":
            { "type": "join"
            , "$1": ["Rule test ", {"type": "var", "name": "name"}, " failed"]
            }
          }
        ]
      ]
    , "body":
      { "type": "RESULT"
      , "artifacts": {"type": "var", "name": "results"}
      , "runfiles":
        { "type": "singleton_map"
        , "key": {"type": "var", "name": "name"}
        , "value": {"type": "TREE", "$1": {"type": "var", "name": "results"}}
        }
      }
    }
  }
}