summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--share/man/just-graph-file.5.org147
1 files changed, 147 insertions, 0 deletions
diff --git a/share/man/just-graph-file.5.org b/share/man/just-graph-file.5.org
new file mode 100644
index 00000000..d13dcb52
--- /dev/null
+++ b/share/man/just-graph-file.5.org
@@ -0,0 +1,147 @@
+#+TITLE: JUST GRAPH FILE
+#+MAN_CLASS_OPTIONS: section-id=5
+
+* NAME
+
+just graph file -- The format of the action graph used by *just(1)*
+
+* DESCRIPTION
+
+The file is read as JSON. Any other serialization describing the
+same JSON object is equivalent. We assume, that in JSON objects,
+each key occurs at most once; it is implementation defined how
+repetitions of the same key are treated.
+
+** Artifacts and their serialization
+
+There are four different kind of artifacts. The serialization of
+the artifact is always a JSON object with two keys: ~"type"~ and
+~"data"~. The value for ~"type"~ is always on of the strings ~"LOCAL"~,
+~"KNOWN"~, ~"ACTION"~, or ~"TREE"~. The value for ~"data"~ is a
+JSON object with keys depending on which type the artifact is of.
+
+- ~"LOCAL"~ artifacts refer to source files in a logical repository.
+ The describing data are
+ - the ~"repository"~, given as its global name, and
+ - the ~"path"~, given as path relative to the root of that
+ repository.
+
+- ~"KNOWN"~ artifacts are described by the hash of their content.
+ The describing data are
+ - the ~"file_type"~, which is a one-letter string,
+ - ~"f"~ for regular, non-executable files,
+ - ~"x"~ for executable files, or
+ - ~"t"~ for trees.
+ - the ~"id"~ specifying the (applicable) hash of the file given
+ as its hexadecimal encoding, a string, and
+ - the ~"size"~ of the artifact, a number, in bytes.
+
+- ~"ACTION"~ artifacts are the outputs of actions. The defining data are
+ - the ~"id"~, a string with the name of the action, and
+ - the ~"path"~, specifying the path of this output artifact,
+ relative to the root of the action directory
+
+- ~"TREE"~ artifacts refer to trees defined in the action graph.
+ The defining data are
+ - the ~"id"~, a string with the name of the tree.
+
+** Actions and their serialization
+
+Actions are given by the data described in the following sections.
+For each item a key is associated and the serialization of the action
+is a JSON object mapping those keys to the respective serialization
+of the values. For some data items default values are given; if the
+value for the respective item equals the default, the respective
+key-value pair may be omitted in the serialization.
+
+- ~"command"~ specifies the command to be executed. It is a non-empty
+ list of strings that forms the argument vector; the first entry
+ is taken as program. This key is mandatory.
+
+- ~"env"~ specifies the environment variables the command should
+ be executed with. It is given as map from strings to strings.
+ The default is the empty map.
+
+- ~"input"~ describes the files available to the action. The action
+ must not modify them in any way. They are specified as map from
+ paths to artifacts (the latter serialized as described). Paths
+ have to be relative paths and are taken relative to the working
+ directory of the action. The default is the empty map.
+
+- ~"output"~ describes the files the action is supposed to generate,
+ if any. It is given as a list of strings, each specifying a file
+ name by a path relative to the working directory of the action.
+ The default is the empty list. However, every action has to produce
+ some form of output, so if ~"output"~ is empty, ~"output_dirs"~
+ cannot be empty.
+
+- ~"output_dirs"~ describes the directory output of the action,
+ if any. It is given as a list of strings, each specifying the
+ a directory name by a path relative to the working directory of
+ the action. The ~"output_dirs"~ may also specify directories from
+ which individual files are specified as ~"output"~. The default
+ value for ~"output_dirs"~ is the empty list. However, every action
+ to produce some form of output, so if ~"output_dirs"~ is empty,
+ ~"output"~ cannot be empty.
+
+- ~"may_fail"~ can either be ~null~ or a string. If it is a string,
+ the build should be continued, even if that action returns a
+ non-zero exit state. If the action returns a non-zero exit code,
+ that string should be shown to the user in a suitable way (e.g.,
+ printing on the console). Otherwise (i.e., if no ~"may_fail"~
+ string is given), the build should be aborted if the action
+ returns a non-zero exit code. The default for ~"may_fail"~ is
+ ~null~, i.e., abort on non-zero exit code.
+
+- ~"no_cache"~ is a boolean. If ~true~, the action should never be
+ cached, not even on success. The default is ~false~.
+
+** The graph format
+
+The action graph is given by a JSON object.
+
+- The value for the key ~"blobs"~ is a list of strings. Those strings
+ should be considered known; they might (additionally to what was
+ agreed ahead of time as known) referred to as ~"KNOWN"~ artifacts.
+
+- The value for the key ~"trees"~ is a JSON object, mapping the
+ names of trees to their definition. The definition of a tree is
+ JSON object mapping paths to artifacts (serialized in the way
+ described earlier). The paths are always interpreted as relative
+ paths, relative to the root of the tree. It is not a requirement
+ that a new tree is defined for every subdirectory; if a path
+ contains the hierarchy separator, which is slash, then implicitly
+ a subdirectory is present, and all path going through that
+ subdirectory contribute to its content. It is, however, an error,
+ if the a path is a prefix of another one (with the comparison
+ done in the canonical form of that path).
+
+- The value for the key ~"actions"~ is a JSON object, mapping names
+ of actions to their respective definition (serialized as JSON).
+
+** Additional keys
+
+Any JSON object described here might have additional keys on top
+of the ones described. Implementations reading the graph have to
+accept and ignore those. Implementations writing action-graph files
+should be aware that a future version of this file format might
+give a specific meaning to those extra keys.
+
+Graphs written by *just(1)* have the additional key ~"origins"~
+in each action. The value is a list of all places where this action
+was requested (so often, but not always, the list has length 1). Each
+such place is described by a JSON object with the following keys.
+- ~"target"~ The target in which the action was requested. It is
+ given as a list, either a full qualified named target given as
+ ~"@"~ followed by global repository name, module, and target
+ name, or an anonymous target, given by ~"#"~ followed by a hash
+ of the rule binding and the node name.
+- ~"subtask"~ The running number, starting from ~0~, of the action,
+ as given by the (deterministic) evaluation order of he defining
+ expression for the rule that defined the target.
+- ~"config"~ The effective configuration for that target, a
+ JSON object.
+
+* See also
+
+*just(1)*