Octostache is the variable substitution syntax for Octopus Deploy.
Octopus allows you to define variables, which can then be referenced from deployment steps and in scripts using the following syntax:
#{MyVariable}
This library contains the code for parsing and evaluating these variable expressions.
Usage is simple: install Octostache from NuGet.org, then create a VariableDictionary:
var variables = new VariableDictionary();
variables.Set("Server", "Web01");
variables.Set("Port", "10933");
variables.Set("Url", "http://#{Server | ToLower}:#{Port}");
var url = variables.Get("Url"); // http://web01:10933
var raw = variables.GetRaw("Url"); // http://#{Server | ToLower}:#{Port}
var eval = variables.Evaluate("#{Url}/foo"); // http://web01:10933/fooMore examples can be found in UsageFixture.
The full list of filters is in the variable filters documentation. A couple of behaviours worth calling out here:
Truncate <length> shortens a value and appends an ellipsis. The suffix is configurable via an optional second option, so pass an empty string to truncate without any suffix:
#{MyVariable | Truncate 7} // Octopus...
#{MyVariable | Truncate 7 ""} // Octopus
#{MyVariable | Truncate 7 " (more)"} // Octopus (more)
The suffix is only appended when the value is actually longer than <length>.
Substring <length> and Substring <startIndex> <length> both clamp the length to what remains in the value, so asking for more characters than are available returns the rest of the string rather than failing:
#{MyVariable | Substring 100} // Octopus Deploy
#{MyVariable | Substring 8 100} // Deploy
A <startIndex> past the end of the value is still an error, and leaves the expression unevaluated.
🐙 We welcome Pull Requests ❤️🧑💻
The first stage of our CI/CD pipeline for Octostache runs a ReSharper code cleanup, to keep everything neat and tidy.
Your PR won't be able to pass without ensuring the code is clean. You can do this locally via the ReSharper CLI tools, which is how we enforce it during our builds.
All the formatting settings are committed to Octostache.sln.DotSettings, so as long as you don't override these with an Octostache.sln.DotSettings.User file, you should be all good.
To get started with code cleanup the easiest way (via dotnet tool), get the CodeCleanup tool installed globally (one-time):
dotnet tool install -g JetBrains.ReSharper.GlobalTools
then execute the cleanup:
jb cleanupcode ./source/Octostache.sln
We don't try to enforce this through build scripts or pre-commit hooks, it's up to you to run when you need to. If you use the Rider IDE, it seems to apply another opinion or two when running the code cleanup, and might get different results to the CLI approach; we don't recommend cleaning up this way.