diff --git a/README.md b/README.md index 022cd55..6019e57 100644 --- a/README.md +++ b/README.md @@ -341,3 +341,157 @@ helm install my-port-agent port-labs/port-agent \ --set env.secret.CIRCLE_CI_TOKEN=YOUR_CIRCLE_CI_PERSONAL_TOKEN \ --set-file controlThePayloadConfig=./invocations.json ``` + +#### Windmill + +This example helps internal developer teams to trigger [Windmill](https://www.windmill.dev) job using Port's self service actions. In particular, you will create a blueprint for `windmillJob` that will be connected to a backend action. You will then add some configuration files (`invocations.json`) to control the payload and trigger your Windmill job directly from Port. + + +Create the following blueprint, action and mapping to trigger a Windmill job. + +
+Blueprint + +```json +{ + "identifier": "windmillJob", + "description": "This blueprint represents a windmill job in our software catalog", + "title": "Windmill", + "icon": "DefaultProperty", + "schema": { + "properties": { + "workspace": { + "type": "string", + "title": "Workspace" + }, + "path": { + "type": "string", + "title": "File Path" + }, + "trigerredBy": { + "type": "string", + "title": "Triggered By", + "format": "user" + }, + "createdAt": { + "type": "string", + "format": "date-time", + "title": "Created At" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": {} +} +``` +
+ +
+Action + +```json +[ + { + "identifier":"trigger_windmill_pipeline", + "title":"Trigger Windmill Pipeline", + "icon":"DefaultProperty", + "userInputs":{ + "properties":{ + "workspace":{ + "title":"Workspace", + "description":"The Workspace identifier", + "type":"string" + }, + "file_path":{ + "title":"File Path", + "description":"The path of the job script in the workspace, including the /u and /f prefix", + "type":"string" + }, + "job_data":{ + "title":"Job Data", + "description":"The data to be passed to the job in order to execute successfully", + "type":"object" + } + }, + "required":[ + "workspace", + "file_path", + "job_data" + ], + "order":[ + "workspace", + "file_path", + "job_data" + ] + }, + "invocationMethod":{ + "type":"WEBHOOK", + "agent":true, + "synchronized":false, + "method":"POST", + "url":"https://app.windmill.dev/api" + }, + "trigger":"CREATE", + "requiredApproval":false + } +] +``` +
+ +
+Mapping - (Should be saved as `invocations.json`) + +```json +[ + { + "enabled": ".action == \"trigger_windmill_pipeline\"", + "url": "\"https://app.windmill.dev\" as $baseUrl | .payload.properties.workspace as $workspace | .payload.properties.file_path as $path | $baseUrl + \"/api/w/\" + $workspace + \"/jobs/run_wait_result/f/\" + $path", + "headers": { + "Authorization": "\"Bearer \" + env.WINDMILL_TOKEN", + "Content-Type": "\"application/json\"" + }, + "body": ".payload.properties.job_data" + } +] +``` +
+ +**Port agent installation for Windmill example**: + +```sh +helm repo add port-labs https://port-labs.github.io/helm-charts + +helm repo update + +helm install my-port-agent port-labs/port-agent \ + --create-namespace --namespace port-agent \ + --set env.normal.PORT_ORG_ID=YOUR_ORG_ID \ + --set env.normal.KAFKA_CONSUMER_GROUP_ID=YOUR_KAFKA_CONSUMER_GROUP \ + --set env.secret.KAFKA_CONSUMER_USERNAME=YOUR_KAFKA_USERNAME \ + --set env.secret.KAFKA_CONSUMER_PASSWORD=YOUR_KAFKA_PASSWORD + --set env.normal.KAFKA_CONSUMER_BROKERS=PORT_KAFKA_BROKERS \ + --set env.normal.STREAMER_NAME=KAFKA \ + --set env.normal.KAFKA_CONSUMER_AUTHENTICATION_MECHANISM=SCRAM-SHA-512 \ + --set env.normal.KAFKA_CONSUMER_AUTO_OFFSET_RESET=earliest \ + --set env.normal.KAFKA_CONSUMER_SECURITY_PROTOCOL=SASL_SSL \ + --set env.secret.WINDMILL_TOKEN=YOUR_WINDMILL_TOKEN \ + --set-file controlThePayloadConfig=./invocations.json +``` +#### Run action +Run this action with some input + +```json showLineNumbers +{ + "workspace": "demo", + "file_path": "f/examples/ban_user_example", + "job_data": { + "value": "batman", + "reason": "Gotham city in need of superhero", + "database": "$res:f/examples/demo_windmillshowcases", + "username": "Jack", + "slack_channel": "bans" + } +} +``` \ No newline at end of file