Compare commits

...

6 commits
v0.1.0 ... main

Author SHA1 Message Date
19a88a0c26
chore(version): v0.2.0 2026-01-28 14:40:58 +01:00
481b9c4a38
chore(module): remove "template" generator type 2026-01-28 14:40:22 +01:00
0cadca0298 Merge branch 'mustache' into 'main'
feat(generator): add Mustache

See merge request TECHNOFAB/soonix!4
2026-01-28 14:38:53 +01:00
asimon
26e79ede19 feat(generator): add Mustache 2026-01-26 21:23:49 +01:00
7e3efd400c Merge branch 'gomplate' into 'main'
fix(generator): replace gotmpl with gomplate

See merge request TECHNOFAB/soonix!5
2026-01-26 14:50:22 +01:00
asimon
a8acaf7143 fix(generator): replace gotmpl with gomplate 2026-01-25 12:15:49 +01:00
9 changed files with 49 additions and 12 deletions

View file

@ -2,6 +2,16 @@
All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
- - - - - -
## [v0.2.0](https://gitlab.com/TECHNOFAB/soonix/compare/a8acaf7143572dac1bc02b124e593d68b5bdddc7..v0.2.0) - 2026-01-28
#### Features
- (**generator**) add Mustache - ([26e79ed](https://gitlab.com/TECHNOFAB/soonix/commit/26e79ede19e815a619a3878ffd5fa6b757da50c4)) - asimon
#### Bug Fixes
- (**generator**) replace gotmpl with gomplate - ([a8acaf7](https://gitlab.com/TECHNOFAB/soonix/commit/a8acaf7143572dac1bc02b124e593d68b5bdddc7)) - asimon
#### Miscellaneous Chores
- (**module**) remove "template" generator type - ([481b9c4](https://gitlab.com/TECHNOFAB/soonix/commit/481b9c4a38455ba6d8502029894f9223ab2545d5)) - [@TECHNOFAB](https://gitlab.com/TECHNOFAB)
- - -
## [v0.1.0](https://gitlab.com/TECHNOFAB/soonix/compare/25cc087b1da8dda965d47283c120a726b84ad6cf..v0.1.0) - 2026-01-05 ## [v0.1.0](https://gitlab.com/TECHNOFAB/soonix/compare/25cc087b1da8dda965d47283c120a726b84ad6cf..v0.1.0) - 2026-01-05
#### Features #### Features
- add nice to have `devshellModule` to soonix module for easy import - ([add807e](https://gitlab.com/TECHNOFAB/soonix/commit/add807ef8980197bbd06652a36d937b93b2a31c7)) - [@TECHNOFAB](https://gitlab.com/TECHNOFAB) - add nice to have `devshellModule` to soonix module for easy import - ([add807e](https://gitlab.com/TECHNOFAB/soonix/commit/add807ef8980197bbd06652a36d937b93b2a31c7)) - [@TECHNOFAB](https://gitlab.com/TECHNOFAB)

View file

@ -53,8 +53,9 @@ use the `devshellModule` for easy integration, see the docs for more.
- **`nix`**: Convert Nix data to JSON, YAML, TOML, INI, XML formats - **`nix`**: Convert Nix data to JSON, YAML, TOML, INI, XML formats
- **`string`**: Output raw string content with optional executable permissions - **`string`**: Output raw string content with optional executable permissions
- **`derivation`**: Use existing Nix derivations as file content - **`derivation`**: Use existing Nix derivations as file content
- **`gotmpl`**: Advanced Go template rendering via gomplate - **`gomplate`**: Advanced Go template rendering via gomplate
- **`jinja`**: Python Jinja2 template rendering - **`jinja`**: Python Jinja2 template rendering
- **`mustache`**: Mustache template rendering
## Docs ## Docs

View file

@ -19,8 +19,9 @@ Soonix helps you:
- **nix**: Convert Nix data to JSON, YAML, TOML, INI, XML formats - **nix**: Convert Nix data to JSON, YAML, TOML, INI, XML formats
- **string**: Output raw string content with optional executable permissions - **string**: Output raw string content with optional executable permissions
- **derivation**: Use existing Nix derivations as file content - **derivation**: Use existing Nix derivations as file content
- **gotmpl**: Advanced Go template rendering via gomplate - **gomplate**: Advanced Go template rendering via gomplate
- **jinja**: Python Jinja2 template rendering - **jinja**: Python Jinja2 template rendering
- **mustache**: Mustache template rendering
### Automatic File Management ### Automatic File Management
@ -63,7 +64,7 @@ Automatically manage .gitignore entries for generated files to keep your reposit
dockerfile = { dockerfile = {
output = "Dockerfile"; output = "Dockerfile";
generator = "gotmpl"; generator = "gomplate";
data = { data = {
baseImage = "node:18-alpine"; baseImage = "node:18-alpine";
port = 3000; port = 3000;

View file

@ -100,7 +100,7 @@ Use Go templates for more complex file generation:
hooks = { hooks = {
dockerfile = { dockerfile = {
output = "Dockerfile"; output = "Dockerfile";
generator = "gotmpl"; generator = "gomplate";
data = { data = {
baseImage = "node:18-alpine"; baseImage = "node:18-alpine";
workdir = "/app"; workdir = "/app";
@ -331,7 +331,7 @@ in {
hooks = { hooks = {
kubernetes-manifest = { kubernetes-manifest = {
output = "k8s/deployment.yaml"; output = "k8s/deployment.yaml";
generator = "gotmpl"; generator = "gomplate";
data = { data = {
app = { app = {
name = "my-app"; name = "my-app";

View file

@ -50,7 +50,7 @@
# only a passthru # only a passthru
derivation = {data, ...}: data; derivation = {data, ...}: data;
gotmpl = { gomplate = {
name, name,
opts, opts,
data, data,
@ -100,6 +100,21 @@
} '' } ''
python ${renderScript} > $out python ${renderScript} > $out
''; '';
mustache = {
name,
opts,
data,
}: let
inherit (opts) template;
mustache = opts.mustache or pkgs.mustache-go;
dataJson = writeText "template-data.json" (builtins.toJSON data);
in
runCommand name {
buildInputs = [mustache];
} ''
mustache ${dataJson} ${template} > $out
'';
}; };
buildAllFiles = files: buildAllFiles = files:

View file

@ -30,7 +30,7 @@ in {
}; };
generator = mkOption { generator = mkOption {
type = types.enum ["nix" "string" "derivation" "gotmpl" "jinja" "template"]; type = types.enum ["nix" "string" "derivation" "gomplate" "jinja" "mustache"];
description = '' description = ''
Which engine to use for content generation. Which engine to use for content generation.
''; '';

1
tests/fixtures/mustache_template vendored Normal file
View file

@ -0,0 +1 @@
Hello {{hello}}

View file

@ -19,10 +19,10 @@
}; };
}; };
gomplate = { gomplate = {
output = "gotmpl"; output = "gomplate";
generator = "gotmpl"; generator = "gomplate";
data.hello = "world"; data.hello = "world";
opts.template = ./fixtures/gotmpl_template; opts.template = ./fixtures/gomplate_template;
}; };
jinja = { jinja = {
output = "jinja"; output = "jinja";
@ -30,6 +30,12 @@
data.hello = "world"; data.hello = "world";
opts.template = ./fixtures/jinja_template; opts.template = ./fixtures/jinja_template;
}; };
mustache = {
output = "mustache";
generator = "mustache";
data.hello = "world";
opts.template = ./fixtures/mustache_template;
};
}; };
in { in {
suites."Soonix Tests" = { suites."Soonix Tests" = {
@ -48,11 +54,14 @@ in {
assert "-f ${finalFiles}/out/test.json" "should exist" assert "-f ${finalFiles}/out/test.json" "should exist"
assert_file_contains ${finalFiles}/out/test.json "soonix-test" assert_file_contains ${finalFiles}/out/test.json "soonix-test"
assert "-f ${finalFiles}/gotmpl" "should exist" assert "-f ${finalFiles}/gomplate" "should exist"
assert_file_contains ${finalFiles}/gotmpl "Hello world" assert_file_contains ${finalFiles}/gomplate "Hello world"
assert "-f ${finalFiles}/jinja" "should exist" assert "-f ${finalFiles}/jinja" "should exist"
assert_file_contains ${finalFiles}/jinja "Hello world" assert_file_contains ${finalFiles}/jinja "Hello world"
assert "-f ${finalFiles}/mustache" "should exist"
assert_file_contains ${finalFiles}/mustache "Hello world"
''; '';
} }
{ {