API and vela plugin to test and validate vela-ci templates. The API can also be used to expand any golang/sprig template
- Endpoint: 
https://vela-template-tester.onrender.com/api/expandTemplate - Request Content-Type: 
application/x-yaml - Response Content-Type: 
application/x-yaml 
Sample valid template payload:
template: |-
  metadata:
    template: true
  slack_plugin_image: &slack_plugin_image
    image: devatherock/simple-slack:0.2.0
  steps:
    - name: notify_success
      ruleset:
        branch: {{ default "[ master, v1 ]" .notification_branch }}
        event: {{ default "[ push, tag ]" .notification_event }}
      <<: *slack_plugin_image
      secrets: [ slack_webhook ]
      parameters:
        color: "#33ad7f"
        text: |-
          Success: {{"{{.BuildLink}}"}} ({{"{{.BuildRef}}"}}) by {{"{{.BuildAuthor}}"}}
          {{"{{.BuildMessage}}"}}
parameters:
  notification_branch: developResponse:
message: template is a valid yaml
template: |-
  metadata:
    template: true
  slack_plugin_image: &slack_plugin_image
    image: devatherock/simple-slack:0.2.0
  steps:
    - name: notify_success
      ruleset:
        branch: develop
        event: [ push, tag ]
      <<: *slack_plugin_image
      secrets: [ slack_webhook ]
      parameters:
        color: "#33ad7f"
        text: |-
          Success: {{.BuildLink}} ({{.BuildRef}}) by {{.BuildAuthor}}
          {{.BuildMessage}}Sample invalid template payload:
template: |-
  metadata:
    template: true
  steps:
    - name: notify_success
      ruleset:
        branch: {{ default "[ master, v1 ]" .notification_branch }}
        event: {{ default "[ push, tag ]" .notification_event }}
      <<: *slack_plugin_image
      secrets: [ slack_webhook ]
      parameters:
        color: "#33ad7f"
        text: |-
          Success: {{"{{.BuildLink}}"}} ({{"{{.BuildRef}}"}}) by {{"{{.BuildAuthor}}"}}
          {{"{{.BuildMessage}}"}}
parameters:
  notification_branch: developResponse:
message: template is not a valid yaml
error: 'yaml: unknown anchor ''slack_plugin_image'' referenced'
template: |-
  metadata:
    template: true
  steps:
    - name: notify_success
      ruleset:
        branch: develop
        event: [ push, tag ]
      <<: *slack_plugin_image
      secrets: [ slack_webhook ]
      parameters:
        color: "#33ad7f"
        text: |-
          Success: {{.BuildLink}} ({{.BuildRef}}) by {{.BuildAuthor}}
          {{.BuildMessage}}Sample Starlark template payload:
template: |-
  def main(ctx):
    return {
        'version': '1',
        'steps': [
            {
                'name': 'build',
                'image': ctx["vars"]["image"],
                'commands': [
                    'go build',
                    'go test',
                ]
            },
        ],
    }
type: starlark    
parameters:
  image: "go:1.16"
The following parameters can be set to configure the plugin.
Parameters
- input_file - Input template file to test. Optional if 
templatesis specified - template_type - The template type. Needs to be 
starlarkifinput_fileis a starlark template - variables - 
varsto test the template with. Doesn't need to be specified if the template can be tested without variables - expected_output - File containing the expected output of the template after applying the variables. Optional, if not specified, only the validity of the processed template will be checked
 - templates - A list of templates to test. Optional if 
input_fileis specified - log_level - Sets the log level. Set to 
debugto enable debug logs. Optional, defaults toinfo 
Test a single template
steps:
  - name: vela-template-tester
    ruleset:
      branch: master
      event: [ pull_request, push ]
    image: devatherock/vela-template-tester:latest
    parameters:
      input_file: path/to/template.yml
      variables:
        notification_branch: develop
        notification_event: pushTest a single template with output verification
steps:
  - name: vela-template-tester
    ruleset:
      branch: master
      event: [ pull_request, push ]
    image: devatherock/vela-template-tester:latest
    parameters:
      input_file: path/to/template.yml
      variables:
        notification_branch: develop
        notification_event: push
      expected_output: samples/output_template.ymlTest multiple templates
steps:
  - name: vela-template-tester
    ruleset:
      branch: master
      event: [ pull_request, push ]
    image: devatherock/vela-template-tester:latest
    parameters:
      templates:
        - input_file: path/to/first_template.yml
          variables:
            notification_branch: develop
            notification_event: push
          expected_output: samples/first_template.yml
        - input_file: path/to/second_template.ymlA vela Starlark template can also be tested using Starlark playground. We need to specify the template along with the template variables specified within a ctx variable and a print method call to view the compiled template. Sample usage below:
def main(ctx):
  return {
    'version': '1',
    'steps': [
      {
        'name': 'build',
        'image': ctx["vars"]["image"],
        'commands': [
          'go build',
          'go test',
        ]
      },
    ],
}
ctx = {
	"vars": {
		"image": "alpine"
	}
}
print(main(ctx))