From 5e773cc78f17d6e9b5ca341bba45c91b6940470f Mon Sep 17 00:00:00 2001 From: Leynos Date: Sat, 12 Jul 2025 11:55:54 +0100 Subject: [PATCH 1/2] Add example manifests --- examples/book.yml | 20 ++++++++++++++++++++ examples/c_app.yml | 31 +++++++++++++++++++++++++++++++ examples/photo_album.yml | 29 +++++++++++++++++++++++++++++ examples/python_package.yml | 25 +++++++++++++++++++++++++ examples/svg_to_png.yml | 21 +++++++++++++++++++++ 5 files changed, 126 insertions(+) create mode 100644 examples/book.yml create mode 100644 examples/c_app.yml create mode 100644 examples/photo_album.yml create mode 100644 examples/python_package.yml create mode 100644 examples/svg_to_png.yml diff --git a/examples/book.yml b/examples/book.yml new file mode 100644 index 00000000..feefeec6 --- /dev/null +++ b/examples/book.yml @@ -0,0 +1,20 @@ +netsuke_version: "1.0" + +vars: + outdir: build/book + +rules: + - name: build + command: "pandoc {ins} -o {outs}" + description: Compile document + +targets: + - name: "{{ outdir }}/manuscript.pdf" + rule: build + sources: + - chapters/intro.md + - chapters/body.md + - chapters/outro.md + +defaults: + - "{{ outdir }}/manuscript.pdf" diff --git a/examples/c_app.yml b/examples/c_app.yml new file mode 100644 index 00000000..0184f85e --- /dev/null +++ b/examples/c_app.yml @@ -0,0 +1,31 @@ +netsuke_version: "1.0" + +vars: + cc: gcc + cflags: -Wall + +rules: + - name: compile + command: "{{ cc }} {{ cflags }} -c {ins} -o {outs}" + description: Compile C source + - name: link + command: "{{ cc }} {ins} -o {outs}" + description: Link objects + +# Target list generated from source files + +targets: +{% for src in glob('src/*.c') %} + - name: "{{ src | replace('.c', '.o') }}" + rule: compile + sources: "{{ src }}" +{% endfor %} + - name: app + rule: link + sources: +{% for src in glob('src/*.c') %} + - "{{ src | replace('.c', '.o') }}" +{% endfor %} + +defaults: + - app diff --git a/examples/photo_album.yml b/examples/photo_album.yml new file mode 100644 index 00000000..2ed964bf --- /dev/null +++ b/examples/photo_album.yml @@ -0,0 +1,29 @@ +netsuke_version: "1.0" + +vars: + style: "{{ env('DT_STYLE') | default('natural') }}" + outdir: build/jpg + +rules: + - name: develop + command: "darktable-cli {ins} {outs} --style {{ style }}" + description: Develop RAW image + + - name: thumb + command: "convert {ins} -resize 200x200 {outs}" + description: Create thumbnail + +targets: +{% for raw in glob('photos/*.nef') %} + - name: "{{ outdir }}/{{ raw | basename | replace('.nef', '.jpg') }}" + rule: develop + sources: "{{ raw }}" + - name: "{{ outdir }}/thumbs/{{ raw | basename | replace('.nef', '.jpg') }}" + rule: thumb + sources: "{{ outdir }}/{{ raw | basename | replace('.nef', '.jpg') }}" +{% endfor %} + +defaults: +{% for raw in glob('photos/*.nef') %} + - "{{ outdir }}/thumbs/{{ raw | basename | replace('.nef', '.jpg') }}" +{% endfor %} diff --git a/examples/python_package.yml b/examples/python_package.yml new file mode 100644 index 00000000..0f9d4f9a --- /dev/null +++ b/examples/python_package.yml @@ -0,0 +1,25 @@ +netsuke_version: "1.0" + +vars: + python: python3 + +rules: + - name: install + command: "{{ python }} -m pip install -e ." + description: Install package + - name: test + command: "{{ python }} -m pytest {ins}" + description: Run tests + +targets: + - name: venv + rule: install + sources: requirements.txt + - name: test-results + rule: test + sources: tests + deps: + - venv + +defaults: + - test-results diff --git a/examples/svg_to_png.yml b/examples/svg_to_png.yml new file mode 100644 index 00000000..9d382a63 --- /dev/null +++ b/examples/svg_to_png.yml @@ -0,0 +1,21 @@ +netsuke_version: "1.0" + +vars: + outdir: build/png + +rules: + - name: rasterise + command: "inkscape {ins} --export-type=png --export-filename={outs}" + description: Convert SVG to PNG + +targets: +{% for svg in glob('assets/svg/*.svg') %} + - name: "{{ outdir }}/{{ svg | replace('.svg', '.png') }}" + rule: rasterise + sources: "{{ svg }}" +{% endfor %} + +defaults: +{% for svg in glob('assets/svg/*.svg') %} + - "{{ outdir }}/{{ svg | replace('.svg', '.png') }}" +{% endfor %} From 1b9ea7679673ad15eebc23ca417f6e464fda5de8 Mon Sep 17 00:00:00 2001 From: Leynos Date: Sat, 12 Jul 2025 12:31:07 +0100 Subject: [PATCH 2/2] Improve sample manifests --- examples/book.yml | 7 ++----- examples/c_app.yml | 19 ++++++++++--------- examples/photo_album.yml | 6 +++--- examples/python_package.yml | 14 +++++++++++--- examples/svg_to_png.yml | 6 +++--- 5 files changed, 29 insertions(+), 23 deletions(-) diff --git a/examples/book.yml b/examples/book.yml index feefeec6..881066fa 100644 --- a/examples/book.yml +++ b/examples/book.yml @@ -5,16 +5,13 @@ vars: rules: - name: build - command: "pandoc {ins} -o {outs}" + command: "mkdir -p $(dirname {outs}) && pandoc {ins} -o {outs}" description: Compile document targets: - name: "{{ outdir }}/manuscript.pdf" rule: build - sources: - - chapters/intro.md - - chapters/body.md - - chapters/outro.md + sources: "{{ glob('chapters/*.md') }}" defaults: - "{{ outdir }}/manuscript.pdf" diff --git a/examples/c_app.yml b/examples/c_app.yml index 0184f85e..e8d04097 100644 --- a/examples/c_app.yml +++ b/examples/c_app.yml @@ -3,29 +3,30 @@ netsuke_version: "1.0" vars: cc: gcc cflags: -Wall + objdir: build/obj rules: - name: compile - command: "{{ cc }} {{ cflags }} -c {ins} -o {outs}" + command: "mkdir -p $(dirname {outs}) && {{ cc }} {{ cflags }} -c {ins} -o {outs}" description: Compile C source - name: link - command: "{{ cc }} {ins} -o {outs}" + command: "{{ cc }} {{ cflags }} {ins} -o {outs}" description: Link objects # Target list generated from source files -targets: -{% for src in glob('src/*.c') %} - - name: "{{ src | replace('.c', '.o') }}" +targets: | + {% for src in glob('src/*.c') %} + - name: "{{ objdir }}/{{ src | basename | replace('.c', '.o') }}" rule: compile sources: "{{ src }}" -{% endfor %} + {% endfor %} - name: app rule: link sources: -{% for src in glob('src/*.c') %} - - "{{ src | replace('.c', '.o') }}" -{% endfor %} + {% for src in glob('src/*.c') %} + - "{{ objdir }}/{{ src | basename | replace('.c', '.o') }}" + {% endfor %} defaults: - app diff --git a/examples/photo_album.yml b/examples/photo_album.yml index 2ed964bf..c605f9be 100644 --- a/examples/photo_album.yml +++ b/examples/photo_album.yml @@ -2,15 +2,15 @@ netsuke_version: "1.0" vars: style: "{{ env('DT_STYLE') | default('natural') }}" - outdir: build/jpg + outdir: "build/jpg/{{ style }}" rules: - name: develop - command: "darktable-cli {ins} {outs} --style {{ style }}" + command: "mkdir -p $(dirname {outs}) && darktable-cli {ins} {outs} --style {{ style }}" description: Develop RAW image - name: thumb - command: "convert {ins} -resize 200x200 {outs}" + command: "mkdir -p $(dirname {outs}) && convert {ins} -resize 200x200^ -gravity center -extent 200x200 {outs}" description: Create thumbnail targets: diff --git a/examples/python_package.yml b/examples/python_package.yml index 0f9d4f9a..d678f2a7 100644 --- a/examples/python_package.yml +++ b/examples/python_package.yml @@ -2,24 +2,32 @@ netsuke_version: "1.0" vars: python: python3 + venv: .venv rules: + - name: setup + command: "{{ python }} -m venv {{ venv }}" + description: Create virtual environment - name: install - command: "{{ python }} -m pip install -e ." + command: "{{ venv }}/bin/pip install -e . -r requirements.txt" description: Install package - name: test - command: "{{ python }} -m pytest {ins}" + command: "{{ venv }}/bin/python -m pytest {{ ins | join(' ') }}" description: Run tests targets: - name: venv + rule: setup + - name: deps rule: install sources: requirements.txt + deps: + - venv - name: test-results rule: test sources: tests deps: - - venv + - deps defaults: - test-results diff --git a/examples/svg_to_png.yml b/examples/svg_to_png.yml index 9d382a63..0c93e42f 100644 --- a/examples/svg_to_png.yml +++ b/examples/svg_to_png.yml @@ -5,17 +5,17 @@ vars: rules: - name: rasterise - command: "inkscape {ins} --export-type=png --export-filename={outs}" + command: "mkdir -p $(dirname {outs}) && inkscape {ins} --export-type=png --export-filename={outs}" description: Convert SVG to PNG targets: {% for svg in glob('assets/svg/*.svg') %} - - name: "{{ outdir }}/{{ svg | replace('.svg', '.png') }}" + - name: "{{ outdir }}/{{ svg | basename | replace('.svg', '.png') }}" rule: rasterise sources: "{{ svg }}" {% endfor %} defaults: {% for svg in glob('assets/svg/*.svg') %} - - "{{ outdir }}/{{ svg | replace('.svg', '.png') }}" + - "{{ outdir }}/{{ svg | basename | replace('.svg', '.png') }}" {% endfor %}