Example DAGs

Hello World

name: hello world
steps:
  - name: s1
    command: echo hello world
  - name: s2
    command: echo done!
    depends:
      - s1

Conditional Steps

params: foo
steps:
  - name: step1
    command: echo start
  - name: foo
    command: echo foo
    depends:
      - step1
    preconditions:
      - condition: "$1"
        expected: foo
  - name: bar
    command: echo bar
    depends:
      - step1
    preconditions:
      - condition: "$1"
        expected: bar
https://raw.githubusercontent.com/dagu-org/dagu/main/examples/images/conditional.png

File Output

steps:
  - name: write hello to '/tmp/hello.txt'
    command: echo hello
    stdout: /tmp/hello.txt

Passing Output to Next Step

steps:
  - name: pass 'hello'
    command: echo hello
    output: OUT1
  - name: output 'hello world'
    command: bash
    script: |
      echo $OUT1 world
    depends:
      - pass 'hello'

Running a Docker Container

steps:
  - name: deno_hello_world
    executor:
      type: docker
      config:
        image: "denoland/deno:latest"
        autoRemove: true
    command: run https://raw.githubusercontent.com/denoland/deno-docs/main/by-example/hello-world.ts

See Docker Executor for more details.

Sending HTTP Requests

steps:
  - name: get fake json data
    executor: http
    command: GET https://jsonplaceholder.typicode.com/comments
    script: |
      {
        "timeout": 10,
        "headers": {},
        "query": {
          "postId": "1"
        },
        "body": ""
      }

Querying JSON Data with jq

steps:
  - name: run query
    executor: jq
    command: '{(.id): .["10"].b}'
    script: |
      {"id": "sample", "10": {"b": 42}}

Expected Output:

{
    "sample": 42
}

Formatting JSON Data with jq

steps:
  - name: format json
    executor: jq
    script: |
      {"id": "sample", "10": {"b": 42}}

Expected Output:

{
    "10": {
        "b": 42
    },
    "id": "sample"
}

Outputting Raw Values with jq

steps:
  - name: output raw value
    executor:
      type: jq
      config:
        raw: true
    command: '.id'
    script: |
      {"id": "sample", "10": {"b": 42}}

Expected Output:

sample

Sending Email Notifications

https://raw.githubusercontent.com/dagu-org/dagu/main/examples/images/email.png
steps:
  - name: Sending Email on Finish or Error
    command: echo "hello world"

mailOn:
  failure: true
  success: true

smtp:
  host: "smtp.foo.bar"
  port: "587"
  username: "<username>"
  password: "<password>"
errorMail:
  from: "foo@bar.com"
  to: "foo@bar.com"
  prefix: "[Error]"
  attachLogs: true
infoMail:
  from: "foo@bar.com"
  to: "foo@bar.com"
  prefix: "[Info]"
  attachLogs: true

Sending Email

smtp:
  host: "smtp.foo.bar"
  port: "587"
  username: "<username>"
  password: "<password>"

steps:
  - name: step1
    executor:
      type: mail
      config:
        to: <to address>
        from: <from address>
        subject: "Sample Email"
        message: |
          Hello world

Customizing Signal Handling on Stop

steps:
  - name: step1
    command: bash
    script: |
      for s in {1..64}; do trap "echo trap $s" $s; done
      sleep 60
    signalOnStop: "SIGINT"