From d7470c4b9cb684891f46ffcad09ea939040f596c Mon Sep 17 00:00:00 2001 From: Peter Somogyvari Date: Tue, 23 Mar 2021 18:44:23 -0700 Subject: [PATCH] docs(build.md): add build script decision tree Signed-off-by: Peter Somogyvari --- BUILD.md | 24 +++++++++++++++++- README.md | 4 +++ .../build-script-decision-tree-2021-03-06.png | Bin 0 -> 27885 bytes 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 docs/images/build-script-decision-tree-2021-03-06.png diff --git a/BUILD.md b/BUILD.md index 279e5bc623d..f4cd4d6d37f 100644 --- a/BUILD.md +++ b/BUILD.md @@ -1,4 +1,4 @@ -# Hyperledger Cactus SDK Build Instructions +# Hyperledger Cactus Build Instructions This is the place to start if you want to give Cactus a spin on your local machine or if you are planning on contributing. @@ -111,3 +111,25 @@ At this point, with the running API server, you can We recommend you use WSL or WSL2 or any Linux VM. We test most frequently on Ubuntu LTS which at the time of this writing means 18.04 and/or 20.04. + +## Build Script Decision Tree + +The `npm run watch` script should cover 99% of the cases when it comes to working +on Cactus code and having it recompile, but for that last 1% you'll need to +get your hands dirty with the rest of the build scripts. Usually this is only +needed when you are adding new dependencies (npm packages) as part of something +that you are implementing. + +There are a lot of different build scripts in Cactus in order to provide contributors +fine(r) grained control over what parts of the framework they wish build. + +> Q: Why the complexity of so many build scripts? +> +> A: We could just keep it simple with a single build script that builds everything +always, but that would be a nightmare to wait for after having changed a single +line of code for example. + +To figure out which script could work for rebuilding Cactus, please follow +the following decision tree (and keep in mind that we have `npm run watch` too) + +![Build Script Decision Tree](./docs/images/build-script-decision-tree-2021-03-06.png) diff --git a/README.md b/README.md index 59b63197e71..e6b3080802b 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,10 @@ Once the last command has finished executing, open link printed on the console w * [Project Wiki](https://wiki.hyperledger.org/display/cactus): Schedule and logs of the maintainer meetings * [Whitepaper](./whitepaper/whitepaper.md): The official document on Cactus design specifications +* [Contributing](./CONTRIBUTING.md): How to get from an idea to an approved pull request +* [Build](./BUILD.md): Instructions on how to set up the project for development + + ![Build Script Decision Tree](./docs/images/build-script-decision-tree-2021-03-06.png) ## Contact * mailing list: [cactus@lists.hyperledger.org](mailto:cactus@lists.hyperledger.org) diff --git a/docs/images/build-script-decision-tree-2021-03-06.png b/docs/images/build-script-decision-tree-2021-03-06.png new file mode 100644 index 0000000000000000000000000000000000000000..22cf33d8fc5cacbcafbb7a1ef35fe3a2c3da6a3e GIT binary patch literal 27885 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 Np{A=^rEC}We*uSHIx7GG literal 0 HcmV?d00001