dune has very powerful extensions, but the documentation doesn’t tell you directly. Today I’ll share a specific example of how we can make dune do many things with a dune configuration.
For example
Publish compiled documents to our documentation server
Sending email notifications to email groups
Sending SMS notifications to administrators
Build a document and open a browser to preview the document page
Let’s start with an example, we create a dune file in the root directory of our project, which you may not have originally, you have to create a new one, we enter the following
; now we tell you how to define a custom rule
; rule start with (rule )
(rule
; (alias is point the command name , so you can run this rule by call dune build @docopen
(alias docopen)
; following line is very important, it tell dune do not cache this build command, so it will running every call without any cache
(deps (universe))
; action (system to told system run command by `sh` in your Linux/MacOS, windows user may running cmd.exe
; cd ../.. is change the base directory of the running command ,or the default directory will be _build/default
(action (system "cd ../.. && pwd && dune build @doc && open _build/default/_doc/_html/index.html" ))
)
; end of one piece of rule
; and we define more and more rule as we want
(rule
(alias whoami)
(deps (universe))
(action (system "uname -a;whoami"))
)
In this example, we define two rules, the rules are the tasks that dune can recognize, in dune, it is called rules
Because it is a custom build command, we use alias to take a unique and non-repeating alias.
The first build command is to build the document and open the browser preview.
Our alias is docopen
Then deps we add universe to tell dune that you don’t want to cache and give me a new build every time. If you don’t add this line, dune will only give you one build, and then because of the cache, you won’t be able to execute it later.
action following by system here, action is the command to start, system means to use the system shell (windows is cmd, linux macos is sh) to give you the execution of the code you specify.
You can see the first we are first change the directory to the project root directory [because the default directory is _build/default], and then we perform the build document generation, and then open open the generated html page.
The first build command is this, if you want to perform the first build task, you can type
dune build @docopen
Then our second build command, relatively simple, with reference to the first, we can add a lot of build commands we want to add inside this dune configuration file.
We just need to specify different alias aliases for them, no duplication.
The official documentation also specifies some other available commands, I won’t go into them one by one. Since I prefer to use shell scripts, I really only need the system to execute my shell scripts for me.