From ade166b4398555c0da5f262f447dc156a4ae395c Mon Sep 17 00:00:00 2001 From: Luca Sepe Date: Mon, 8 Jun 2020 14:18:32 +0200 Subject: [PATCH] [issue #1] common provider for one or more nodes * groups components with the same `provider` attribute (see examples) * add the new attribute `impl` to all components (see examples) * change microservice shape to 'octagon' * layout README file --- cmd/.gitignore | 2 -- cmd/draft-all.sh | 28 ++++++++++++++++++++++++++++ cmd/test.png | Bin 0 -> 15916 bytes cmd/test.yml | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 2 deletions(-) create mode 100755 cmd/draft-all.sh create mode 100644 cmd/test.png create mode 100644 cmd/test.yml diff --git a/cmd/.gitignore b/cmd/.gitignore index 3c46005..94c170c 100644 --- a/cmd/.gitignore +++ b/cmd/.gitignore @@ -34,5 +34,3 @@ dist/** # Goreleaser file .goreleaser.yml -# Custom Bash Scripts -draft-all.sh diff --git a/cmd/draft-all.sh b/cmd/draft-all.sh new file mode 100755 index 0000000..792324a --- /dev/null +++ b/cmd/draft-all.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +SRC_DIR=../examples +DPI=120 +EXE=./dist/draft_linux_amd64/draft + +## declare an array of files +declare -a arr=("$SRC_DIR/client.yml" + "$SRC_DIR/service.yml" + "$SRC_DIR/broker.yml" + "$SRC_DIR/gateway.yml" + "$SRC_DIR/queue.yml" + "$SRC_DIR/function.yml" + "$SRC_DIR/database.yml" + "$SRC_DIR/storage.yml" + "$SRC_DIR/message-bus-pattern.yml" + "$SRC_DIR/aws-cognito-custom-auth-flow.yml" + "$SRC_DIR/s3-upload-presigned-url.yml" + "$SRC_DIR/backend-for-frontend.yml" ) + +## now loop through the above array +for i in "${arr[@]}" +do + # grab the filename without extension + filename=$(basename -- "$i") + # run draft...run! + "$EXE" "$i" | dot -Tpng -Gdpi=$DPI > "$SRC_DIR/${filename%.*}.png" +done \ No newline at end of file diff --git a/cmd/test.png b/cmd/test.png new file mode 100644 index 0000000000000000000000000000000000000000..f3659de095d31685f5a7dd1f8b490c474fdb50c8 GIT binary patch literal 15916 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 o{*N#I7sYfk