aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2021-02-13-jsonnet
diff options
context:
space:
mode:
authorAlexander Neonxp Kiryukhin <i@neonxp.ru>2024-12-15 14:37:33 +0300
committerAlexander Neonxp Kiryukhin <i@neonxp.ru>2024-12-15 14:37:33 +0300
commit47fc02a8c71af4926148beb5d5cc0fc221aa5429 (patch)
treee2e5922b7fc16f3d25b02cd345ad534991d38629 /content/posts/2021-02-13-jsonnet
parent017c7b792f3e679f61b004ec132a36f866b39e9b (diff)
Auto-commit 2024-12-15
Diffstat (limited to 'content/posts/2021-02-13-jsonnet')
-rw-r--r--content/posts/2021-02-13-jsonnet/index.md53
-rw-r--r--content/posts/2021-02-13-jsonnet/logo.pngbin0 -> 221249 bytes
2 files changed, 48 insertions, 5 deletions
diff --git a/content/posts/2021-02-13-jsonnet/index.md b/content/posts/2021-02-13-jsonnet/index.md
index 64a7fcc..7402880 100644
--- a/content/posts/2021-02-13-jsonnet/index.md
+++ b/content/posts/2021-02-13-jsonnet/index.md
@@ -3,11 +3,12 @@ categories = ['Без рубрики']
date = '2021-02-13T22:08:19Z'
tags = ['go', 'it', 'разное']
title = 'Jsonnet'
+image = 'logo.png'
+++
Редко такое бывает, что случайно натыкаешься на какую-то технологию и она вызывает вау-эффект и буквально переворачивает всё верх дном. На днях для меня такой технологией стал [Jsonnet](https://jsonnet.org/) от Google.
-<figure class="wp-block-image">![Jsonnet logo](/img/jsonnet.svg)</figure>В кратце, это надмножество JSON являющееся языком описания шаблонов. Пока звучит не очень круто, да? На деле это офигенный Тьюринг полный функциональный язык, результатом выполнения которого будет сформированый JSON (и не только) документ([или несколько документов](https://jsonnet.org/learning/getting_started.html#multi)).
+В кратце, это надмножество JSON являющееся языком описания шаблонов. Пока звучит не очень круто, да? На деле это офигенный Тьюринг полный функциональный язык, результатом выполнения которого будет сформированый JSON (и не только) документ([или несколько документов](https://jsonnet.org/learning/getting_started.html#multi)).
[Если интересно, рекомендую сразу переходить к туториалу.](https://jsonnet.org/learning/tutorial.html)
@@ -23,14 +24,56 @@ title = 'Jsonnet'
Накидал простенький пример который формирует конфигурацию пайплайна для гипотетической CI системы:
-```
-local map(arr, predicate) = // определяем функцию map if std.length(arr) == 0 then [] else [predicate(arr[0])] + map(arr[1:], predicate) // функциональненько!;local tasks = [['go1.14', '1.14-alpine'],['go1.15', '1.15-alpine'],['go1.16-RC', '1.16-rc-alpine']];local commands = ['go build', 'go test']; // Общая часть{ // Результирующий JSON pipeline: map(tasks, function (task) { // Вызов map от tasks name: task[0], image: "golang:"+task[1], commands: commands, })}
+```json
+local map(arr, predicate) = // определяем функцию map
+if std.length(arr) == 0 then
+ []
+ else
+ [
+ predicate(arr[0])
+ ] + map(arr[1:], predicate); // функциональненько!
+local tasks = [['go1.14', '1.14-alpine'],['go1.15', '1.15-alpine'],['go1.16-RC', '1.16-rc-alpine']];
+local commands = ['go build', 'go test']; // Общая часть
+{ // Результирующий JSON
+ pipeline: map(tasks, function (task) { // Вызов map от tasks
+ name: task[0],
+ image: "golang:"+task[1],
+ commands: commands,
+ })
+}
```
Результат:
-```
-{ "pipeline": [ { "commands": [ "go build", "go test" ], "image": "golang:1.14-alpine", "name": "go1.14" }, { "commands": [ "go build", "go test" ], "image": "golang:1.15-alpine", "name": "go1.15" }, { "commands": [ "go build", "go test" ], "image": "golang:1.16-rc-alpine", "name": "go1.16-RC" } ]}
+```json
+{
+ "pipeline": [
+ {
+ "commands": [
+ "go build",
+ "go test"
+ ],
+ "image": "golang:1.14-alpine",
+ "name": "go1.14"
+ },
+ {
+ "commands": [
+ "go build",
+ "go test"
+ ],
+ "image": "golang:1.15-alpine",
+ "name": "go1.15"
+ },
+ {
+ "commands": [
+ "go build",
+ "go test"
+ ],
+ "image": "golang:1.16-rc-alpine",
+ "name": "go1.16-RC"
+ }
+ ]
+}
```
Круть же!
diff --git a/content/posts/2021-02-13-jsonnet/logo.png b/content/posts/2021-02-13-jsonnet/logo.png
new file mode 100644
index 0000000..c87fd63
--- /dev/null
+++ b/content/posts/2021-02-13-jsonnet/logo.png
Binary files differ