Skip to content

Plugins

The "plugin" step type allows you to import custom plugins, which can either implement custom protocols or be based on existing step types. The plugins are written in TypeScript

TIP

Make sure your plugin is compiled to JavaScript before running it

Example: Using a plugin

yaml
version: "1.1"
name: Hello Plugins
tests:
  example:
    steps:
      - name: Plugin
        plugin:
          id: "@yourcompany/plugin"
          params:
            hello: world
          check:
            reply: world

Example: Plugin boilerplate

ts
import Ajv from 'ajv'
import { CapturesStorage } from '@stepci/runner/dist/utils/runner'
import { WorkflowConfig, WorkflowOptions, StepRunResult } from '@stepci/runner/dist'
import { Matcher, checkResult } from '@stepci/runner/dist/matcher'

export type YourPlugin = {
  id: "@yourcompany/plugin"
  params: {
    hello: string
  }
  check?: {
    reply: string | Matcher[]
  }
}

export default async function (
  input: YourPlugin,
  captures: CapturesStorage,
  cookies: any,
  schemaValidator: Ajv,
  options?: WorkflowOptions,
  config?: WorkflowConfig
) {
  const stepResult: StepRunResult = {
    type: '@yourcompany/plugin',
  }

  if (input.check) {
    stepResult.checks = {}

    if (input.check.reply) {
      stepResult.checks['reply'] = checkResult(input.params.hello, input.check.reply)
    }
  }

  return stepResult
}

Example: Plugin based on HTTP step type

ts
import Ajv from 'ajv'
import { CookieJar } from 'tough-cookie'
import { CapturesStorage } from '@stepci/runner/dist/utils/runner'
import { WorkflowConfig, WorkflowOptions } from '@stepci/runner/dist'
import runHTTPStep, { HTTPStepBase, HTTPStepCheck } from '@stepci/runner/dist/steps/http'

export type YourPlugin = {
  id: "@yourcompany/plugin"
  params: {
    url: string
  }
  check?: HTTPStepCheck
}

export default async function (
  input: YourPlugin,
  captures: CapturesStorage,
  cookies: CookieJar,
  schemaValidator: Ajv,
  options?: WorkflowOptions,
  config?: WorkflowConfig
) {
  return runHTTPStep(
    {
      url: input.params?.url,
      method: 'GET',
      check: input.check,
    },
    captures,
    cookies,
    schemaValidator,
    options,
    config
  )
}