summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-01-22 11:50:10 +0100
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-01-23 16:07:53 +0100
commit1c0ad764c0c1e55be393ef0074c8935b3f9c97eb (patch)
tree9d4f8a83063d3322f899982fde8fbd025d927050 /doc
parentda077db52d0af2ce3cf6590e77c9b85de21ef23b (diff)
downloadjustbuild-1c0ad764c0c1e55be393ef0074c8935b3f9c97eb.tar.gz
Add design for using multiple mrrc files
Diffstat (limited to 'doc')
-rw-r--r--doc/future-designs/multiple-mrrc.md60
1 files changed, 60 insertions, 0 deletions
diff --git a/doc/future-designs/multiple-mrrc.md b/doc/future-designs/multiple-mrrc.md
new file mode 100644
index 00000000..a228a5b9
--- /dev/null
+++ b/doc/future-designs/multiple-mrrc.md
@@ -0,0 +1,60 @@
+# Multiple rc files for `just-mr`
+
+## Current situation and shortcomings
+
+Upon startup, `just-mr` reads a single rc file to set various defaults,
+including remote-execution endpoint and early arguments for the
+various `just` subcommands, if used as a launcher. By default, the
+rc file read is the file `~/.just-mrrc`, if it exists. A different
+rc file can be specified via the `--rc` option. Moreover, by givining
+`--norc` the reading of an rc file can be disabled entirely.
+
+Using a global rc file works fine when working on a single project
+or when only building locally. However, when working on several
+projects, it quickly becomes necessary to switch between various
+configurations of the build set up.
+
+Different projects might have different default build configurations,
+dispatch to different execution-property-specific endpoints, or
+consider different repositories absent. Due to the ability to
+specify a workspace-relative file name in the just-mr rc file these
+different set ups can be managed by committing the respective files
+in to the repository.
+
+However, different projects, also use different build images,
+reflected by different remote-execution properties; some might even
+use different remote-execution end points or differ in the serve
+end point they use (or whether a serve end point is used at all).
+Especially for the remote-execution properties used, it is desirable
+to version those in the repository. A change of the remote-execution
+property usually reflects the use of a different build environment
+and properly versioning such change is important when reconstructing
+old binaries or when bisecting to find a breakage.
+
+The current solution is to commit the respective rc file for `just-mr`
+and expect the user to provide the respective `--rc` option. While
+this works in principle, it causes additional inconvenience when
+working deep inside a subdirectory of the project, and often causes
+build attempts in unintended `just-mr` configurations due to a
+forgotten or wrong `--rc` argument.
+
+## Proposed changes
+
+We propose to add a new field `"rc files"` that, if given, contains
+a list of location objects. After reading the main rc file, those
+location objects will be processed in the given order; if a file
+exists at the specified location, it will be read as an additional
+rc file, however ignoring a possibly given `"rc files"` field. If
+values are specified in several rc files, the latest value wins.
+
+Only after all the rc files are read, the resulting rc configuration
+is evaluated. In particular, a later rc file can override an earlier
+specification of the search order for the repository config, or
+for individual `"just files"`.
+
+In this way it is possible, by simply specifying the naming
+conventions used, to automatically use the committed rc-files for
+the project of the current working directory. The global rc file
+can also specify useful defaults; if necessary, it is also possible
+to specify hard overrides, by specifying a corresponding file in
+the user's home directory at the very and of the list.