Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

replicated-lint

replicatedhq1.8kMIT0.19.3TypeScript support: included

Yaml Linting Tools for Replicated yaml

yaml, rules, lint, replicated, studio

readme

replicated-lint

CircleCI Code Climate Test Coverage

YAML linting tools for Replicated applications.

Usage

Install the CLI executable with

npm install -g replicated-lint

Lint with replicated-lint validate

replicated-lint validate -f my-app.yml

or pipe from stdin:

cat my-app.yml | replicated-lint validate -f -

Results that have issues will look something like:

{ type: 'info',
  rule: 'prop-configitem-testproc-run-on-save',
  message: 'If a config item\'s test_proc.run_on_save is not set to \'true\', test_proc\'s will not be checked automatically. Consider setting your test_proc\'s run_on_save to automatically validate inputs',
  positions:
   [ { path: 'config.1.items.2.test_proc',
       start: { position: 8130, line: 325, column: 4 },
       end: { position: 8322, line: 331, column: 0 } },
     { path: 'config.3.test_proc',
       start: { position: 8692, line: 346, column: 2 },
       end: { position: 9141, line: 365, column: 2 } } ],
  links: [ 'https://www.replicated.com/docs/packaging-an-application/test-procs/' ] }

# prop-configitem-testproc-run-on-save continued from line 321
322  
323    - name: phone_number
324      type: text
325      test_proc:
326        display_name: Is this a Phone Number?
327        command: regex_match
328        args:
329        - "([0-9]{3})[-]([0-9]{3})[-]([0-9]{4})$"
330        - "That doesn't seem to be a phone number!"
331  - name: auth
332    title: Authentication
333    description: Where will user accounts be provisioned
334    items:

Extending the CLI with custom rules

replicated-lint rules can be expressed as JSON, so it is easy to add your own custom rules.

If you have a custom rule set in no-latest.json, you can pass it to replicated-lint using

cat my-app.yml | replicated-lint validate -f - --extraRules no-latest.yaml

--extraRules can be specified multiple times. An example YAML rule set might look something like

---
- name: custom-no-latest
  type: error
  message: "Don't use `latest` for container versions."
  test:
    AnyOf:
      path: components
      pred:
        AnyOf: containers
        pred:
          Eq:
            path: version
            value: latest

replicated-lint validate supports the following options:

Options:
  --version         Show version number                                [boolean]
  --help            Show help                                          [boolean]
  --infile, -f      Input file to validate. Use "-" for stdin
                                                         [string] [default: "-"]
  --threshold, -t   Threshold of of issues to report
                  [string] [choices: "info", "warn", "error"] [default: "error"]
  --extraRules, -e  Path to file containing JSON definitions for additional yaml
                    rules. Can be specified multiple times.[array] [default: []]
  --reporter, -r    Output Format to use
                     [string] [choices: "console", "junit"] [default: "console"]
  --outputDir, -o   junit reporter only -- path to directory to output junit xml
                    reports                   [string] [default: "test-results"]

Developing

Installing Dependencies

We compile to ES5 and test on nodejs 7.8.0, but earlier versions of node should work as well.

npm install -g yarn
yarn

Running the tests

To run the tests once

yarn test

To watch files and re-run tests on changes, use the tdd script

./tdd

Before committing

Run

make project-import PROJECT=<project-name>

Where <project-name> is the project being updated and should be one of

  • replicated-supportbundle
  • replicated-entitlements
  • replicated-rbac
  • replicated-ship

    For more up to date list check the project directory listing.

Regenerating the documentation

replicated-lint docs gen will print reference documentation stdout as markdown. yarn docs will write it to docs/gen.md.

To update the docs in help center, grab everything in replicated-lint/docs/gen.md and paste it into help-center/.../yaml.md, replacing everything below <!-- the rest of this document is autogenerated-->.

Library Usage

replicated-lint is designed with extensibility in mind, making it suitable for general purpose YAML and JSON linting and policy definition

  • Flexible, modular rule sets
  • CLI
  • Autogenerate unit tests and documentation from rule definitions
npm install --save replicated-lint
import * as linter from "replicated-lint";

const yaml = `
---
replicated_api_version: 2.8.0
components:
  - name: ELK
    containers:
      - image: getelk/search`;


const ruleViolations = linter.defaultLint(yaml);
console.log(ruleViolations); // []

Custom Rule Sets

linter.rules.all can be substituted or extended with custom rule definitions. A rule's test field should return { matched: true } when the rule is triggered by invalid JSON.

import * as linter from "replicated-lint";

const yaml = `
---
foo:
  bar: baz`;

const testSpec: any = {
  Or: {
    preds: [
      {Eq: { path: "foo.bar", value: "baz"}},
      {Eq: { path: "foo.bar", value: "boz"}},
    ],
  }
}

const rules: linter.YAMLRule[] = [
  {
    name: "foo-bar-neq-baz",
    message: "foo.bar can't be baz!",
    test: testSpec,
    type: "error",
  }
];

const ruleViolations = linter.lint(yaml, { rules });
console.log(ruleViolations);  /*
[{
        type: "error",
        positions: [{
          path: "foo.bar",
          start: {
            position: 12,
            line: 3,
            column: 2,
          },
          end: {
            position: 20,
            line: 3,
            column: 10,
          },
        }],
        message: "foo.bar can't be baz!",
}]
*/

Register new rules with linter.enginer.register. Rules should implement JSONReadable<Predicate<any>>, usually as a static method

import * as linter from "replicated-lint";


// rule MyRule checks if root object has property "spam" equal to "eggs"
class MyRule implements linter.Predicate<any> {
  test(obj: any) {
    const matched = obj.spam !== "eggs"; // fail when spam != eggs
    const paths = ["spam"];              // if matched == true, optionally include a path where a rule was violated
    return { matched, paths };
  }

  public static fromJson(obj: any, registry: linter.engine.Registry) {
    return new MyRule();
  }
}

linter.engine.register(MyRule);

const testSpec: linter.Test = { MyRule: {}};

const rules: linter.YAMLRule[] = [
  {
    name: "spam-eq-eggs",
    message: "spam must be equal to eggs!",
    test: testSpec,
    type: "error",
  }
];

const yaml = `
---
spam: eggs`;

const ruleViolations = linter.lint(yaml, { rules });
console.log(ruleViolations); // []

Custom implementations of engine.Registry can also be passed as a third argument to linter.lint, otherwise a default registry will be used.

changelog

0.1.0 / 2017-06-09

* Initial release

0.3.0 / 2017-06-17

* Implementation of ruleset, accept raw json and compile to rule predicates

0.3.1 / 2017-06-17

* Fix bug in testproc rule that caused it to fire when `test_proc` was not present on the config item/group

0.3.2 / 2017-06-17

* Fix bug TraverseSearcher and fix an issue where Monitor predicate not registered

0.4.0 / 2017-06-17

* Update rule definition schema, rewrite rules to match
* Update rule messaging descriptions and examples

0.5.0 / 2017-07-11

* Update rule definition schema and compilation to use a typed object, rewrite rules to match

0.6.0 / 2017-08-11

* Incorporate json schema for validation
* (breaking) `linter.lint()` now takes a `LinterOpts` object instead of positional params
    * `linter.lint(yaml, linter.rules.all)` should change to `linter.lint(yaml, {rules: linter.rules.all})`
* Add `linter.lintDefault()` which will lint with the recommended schema and rules
* Tweaks to `replicated-lint` bin command in package.json

0.6.1 / 2017-08-14

* Port config item `type` validation https://github.com/replicatedhq/libyaml/blob/master/validate.go#L376
* Port config item `when` validation https://github.com/replicatedhq/libyaml/blob/master/validate.go#L402
* Remove `received` field from linter results.

0.6.2 / 2017-08-14

* Port custom monitor `target` validation https://github.com/replicatedhq/libyaml/blob/master/validate.go#L487

0.6.3 / 2017-08-14

* Port host requirements docker version validation https://github.com/replicatedhq/libyaml/blob/master/validate.go#L659

0.6.4 / 2017-08-14

* Validate `kubernetes.requirements.server_version` is a valid semver range
* Validate `host_requirements.replicated_version` is a valid semver range

0.6.5 / 2017-08-14

* Validate `admin_commands.component` and `admin_commands.container` match a valid component/container
* Fix a bug in `monitors.cpuacct` and `monitors.memory` validation where the linter would fail with no components, even if both `cpuacct` and `memacct` are empty

0.6.6 / 2017-08-15

* Allow `support.timeout` to be either a `number` or `string`
* Add a path to schema error messaging

0.6.7 / 2017-08-18

* Messaging tweak for `test_proc` rule
* Schema support for inline component/container in `admin_commands` and `support`
* Skip validating container references in non-native scheduler sources in `admin_commands` and `support`

0.6.8 / 2017-08-18

* Validate that `components.*.containers.*.publish_events.*.subscriptions` all reference valid component/containers

0.6.9 / 2017-08-18

* Validate that a component's cluster `strategy` is one of `autoscale` or `random`

0.6.10 / 2017-08-18

* Ensure no conflicting volume options are specified

0.6.11 / 2017-08-18

* Ensure host_path and container_path are absolute paths
* Validate custom monitor colors

0.6.12 / 2017-08-21

* Ensure `graphite.port` and `statsd.port` are valid tcp ports
* Ensure `custom_metrics.*.retention` is a valid graphite retention specification

0.6.13 / 2017-08-21

* Ensure `custom_metrics.*.aggregation` is a valid graphite aggregation specification

0.6.14 / 2017-08-21

* Ensure `components.*.cluster` is either a boolean or a `{{repl ... }}` template

0.6.15 / 2017-08-21

* Ensure `monitors.custom.*.display.label_scale` is a valid label scale expression

0.6.16 / 2017-08-21

* Ensure `components.*.containers.*.content_trust.public_key_fingerprint` is a valid RFC4716 fingerprint
* Ensure `images.*.content_trust.public_key_fingerprint` is a valid RFC4716 fingerprint

0.6.17 / 2017-08-21

* Ensure `admin_commands.*.alias` is a valid shell alias
* Ensure `properties.shell_alias` is a valid shell alias
* Ensure `properties.logo_url` is a http or https url
* Ensure a container's `volumes_from` section references existing containers
* Ensure `name` entries are unique across all containers

0.6.18 / 2017-08-21

* Schema fixes for swarm-specific options
* Fix regex for config item type field

0.6.19 / 2017-08-21

* Fix schema definition to allow boolean literals for
  `components.*.containers.*.volumes.*.is_ephemeral` and `.is_excluded_from_backup`

0.6.20 / 2017-08-29

* Fix a bug that would allow URLs with spaces in the hostname

0.6.21 / 2017-08-29

* Add new `test_proc` command `ldap_config_validate`

0.6.22 / 2017-09-05

* Fix an issue where `when` clauses on config groups weren't being validated

0.6.23 / 2017-09-15

* Tweak `mesg-yaml-empty` description, update docs generation.

0.6.24 / 2017-09-19

* Ensure minimum Replicated API version of 2.8.0 when specifying a public port
* Ensure swarm secrets have a name and value and that any labels have keys that are not the empty string

0.6.25 /2017-09-19

* Schema fix for backup.hidden, now can be boolean or string. Formerly could only be string.

0.6.26 /2017-09-20

* components.cluster_host_count and components.containers.cluster_instance_count uint properties are now checked to make sure they are actually uints
* Schema fix for cluster_instance_count and cluster_host_count, all of their uint properties can now be strings or numbers

0.6.27 /2017-09-19

* Check for swarm secrets label keys not "" now checks within an object, not an array

0.6.28 /2017-09-19

* Schema fix so that ports[].public_port and ports[].private_port can be ints or strings, instead of only strings

0.6.29 /2017-09-19

* Check that custom_requirements have unique ids

0.6.30 /2017-09-20

* Validate `volumes_from` usage

0.6.31 /2017-09-21

* Validate storage and memory sizes in host_requirements and kubernetes

0.6.32 /2017-09-25

* Accept and validate a greater variety of admin command formats
* Added a new predicate, `Not`

0.6.33 /2017-09-25

* Verifies that if a public port is set, only one instance can run per cluster host

0.6.34 /2017-09-25

* Added value checking to `components.*.containers.*.volumes.*.is_ephemeral` and `.is_excluded_from_backup`
* Now can only be booleans literals, boolean strings, or templates

0.6.35 /2017-09-29

* Fix `volumes_from` subscription validation

0.6.36 /2017-10-04

* Ensure swarm configs have a name and value and that any labels have keys that are not the empty string

0.6.37 /2017-10-05

* Deprecating `components.*.containers.*.env_vars.*.static_val` in favor of `value`

0.6.38 /2017-10-12

* Add packaging for replicated-lint npm-installable executable

0.7.0 /2017-10-12

* Fix some bugs with npm executable packaging
* Add support for extra rulesets in CLI

0.7.1 /2017-10-12

* Updates and cleanup for package.json

0.7.2 /2017-10-12

* Add command line flags to filter by issue type, default is to only expose `error` issues

0.7.3 /2017-10-12

* Fix a bug in log-level filtering,

0.8.0 /2017-10-16

* Add flag `--reporter` to control CLI output type
* add `junit` and `console` to available reporters
* Refactor schema testing and docs generation

0.8.1 /2017-10-16

* Add extra_hosts to schema defintion

0.8.2 /2017-10-16

* Allow `container.version` to be specified as either `number` or `string`, previously was only `string`

0.8.3 /2017-10-28

* Add option `--excludeDefaults`, `-x` to exclude the default rules+schema and only use rulesets specificed in `--extraRules`
* Don't process.exit in reporters
* Some minor refactoring around `validate` command and reporters

0.8.4 /2017-10-30

* Add `schema` and a few extra utility functions to package exports

0.9.0 /2017-11-16

* Allow `--extraRules` to be passed as YAML (JSON rule sets will work the same)
* Add `replicated-lint verify-rules` command to verify the examples in custom rule sets
* Update `replicated-lint docs gen` to allow generating documentation for custom rule sets via `--extraRules` and `--excludeDefaults`
* Add projects/ folder, which will be a home for rule definitions for validation of non-replicated YAML documents
* Add a minimal projects/kubernetes/ example

0.9.1 /2017-12-14

* Add `container.shm_size`, a string

0.9.2 /2017-12-14

* `container.shm_size` should be an unsigned integer

0.9.3 /2017-12-14

* Added `container.shm_size` tests and docs

0.9.4 /2018-01-15

* CLI allows passing `--schema` to set the path to an alternate JSONSchema document for validation
* Add `projects/replicated-entitlements` with a passing and failing example

0.9.5 /2018-01-15

* Fix bug in interface definition for `Test`

0.9.6 /2018-01-15

* Add projects/replicated-supportbundle

0.10.0 /2018-01-22

* Fix a bug where objects with a `.` in property paths would not have `positions` returned when errors were found
* Expand Support bundle schema with examples and full property set

0.10.1 /2018-01-30

* Finalize support bundle schema

0.10.2 /2018-01-30

* Changes to Support Bundle custom rules

0.10.3 /2018-02-02

* Allow default monitors on swarm scheduler

0.10.4 /2018-02-21

* `components.*.containers.*.env_vars.*.is_excluded_from_support` can now be a boolean or a string

0.10.5 /2018-02-21

* Add `swarm/volumes` to `backup`

0.10.6 /2018-02-21

* `components.*.containers.*.env_vars.*.is_excluded_from_support` must be a boolean literal, boolean string, or template

0.10.7 /2018-04-05

* Add `lifecycle.generate.use_defaults` to Support Bundle custom rules

0.10.8 /2018-04-06

* Update .ts files to use updated Support Bundle rules

0.11.0 /2018-05-01

* Add project for Replicated Ship product
* Add `AllOf` predicate to default registry

0.11.1 /2018-05-01

* Fix bug in `spec-require-render` rule `projects/replicated-ship`

0.11.2 /2018-05-01

* Import fix from `0.11.1`

0.11.3 /2018-05-01

* Export `replicated-ship` project in module

0.11.4 /2018-05-16

* Add info rule with additional help info for support sections

0.11.5 /2018-05-21

* Add support for github in `replicated-ship` project

0.11.6 /2018-05-23

* Fix Ship `spec-require-*-script` rules to enforce folder path structure

0.11.7 /2018-05-24

* Add support for new include_empty shared spec in support bundle project

0.11.8 /2018-05-31

* Add support for docker cp from containers identified by labels in support bundle project

0.11.9 /2018-06-06

* Add labels property to component.container

0.11.10 /2018-06-07

* Add kubernetes.logs to supportbundle schema

0.11.11 /2018-06-15

* Add strategies property to backup

0.11.12 /2018-06-15

* Add `helm` and `dockerlayer` assets to replicated-ship project

0.11.13 /2018-06-20

* Fixed `validate_json` test proc name

0.11.14 /2018-06-21

* Add label filter for stack service logs and stack service logs to support bundle schema

0.11.15 /2018-06-25

* Add Github asset validation to replicated-ship rules
* Regenerate replicated-supportbundle schema

0.12.0 /2018-06-27

* Type schema property in linter constructor to JSONSchema
* Add types to base schema
* Add typings to generated code
* Add newlines to generated files

0.12.1 /2018-07-03

* Add support for `assets.v1.helm.github` to `projects/replicated-ship`

0.12.2 /2018-07-05

* Fix bug in `assets.v1.helm.github` schema in `projects/replicated-ship`

0.12.3 /2018-07-05

* Add `kubernetes.container-cp` schema in `projects/replicated-supportbundle`

0.12.4 /2018-07-09

* Add `kubernetes.api-versions`, `kubernetes.cluster-info`, `kubernetes.resource-list` and `kubernetes.version` schemas in `projects/replicated-supportbundle`

0.12.5 /2018-07-09

* Add `assets.v1.web` schemas in `projects/replicated-ship`

0.12.6 /2018-07-09

* Remove `include_empty` examples from specs in `projects/replicated-supportbundle`

0.12.7 /2018-07-11

* Change default behavior for omitted namespace param in kubernetes specs within `projects/replicated-supportbundle`

0.12.8 /2018-07-17

* Add `lifecycle.notes` to enter note as part of upload

0.12.9 /2018-07-18

* Update `assets.v1.web` schemas in `projects/replicated-ship`

0.12.10 /2018-07-17

* Add `assets.v1.terraform` and `lifecycle.v1.terraform` to `projects/replicated-ship`

0.12.11 2018-07-18

* Core: Add `source` and `image_name` as required fields for `components.*.containers`

0.12.12 2018-07-25

* Core: Add `restore_script` property to backup and backup strategies

0.13.0 2018-07-25

* Added analyze spec to replicated-supportbundle schema
* replicated-supportbundle specs is now an alias of collect.v1
* replicated-supportbundle collect.v1.meta.labels added patternProperties

0.13.1 2018-07-25

* Analyze v1 spec

0.13.2 2018-07-31

* Add Amazon EKS asset to Ship schema
* Add 'path' property to Terraform lifecycle step in Ship schema

0.13.3 2018-08-01

* Fix bug in `rbac` pattern rule in `projects/replicated-rbac`

0.13.4 2018-08-02

* replicated-supportbundle kubernetes.resource-list allows for additional resources in Kubernetes v1.11
* replicated-supportbundle kubernetes.resource-list optional group_version argument

0.13.5 2018-08-07

* replicated-ship's amazon_elastic_kubernetes_service asset has been renamed to amazon_eks
* replicated-ship 'kubectl_apply' lifecycle step added

0.13.6 2018-08-10

* replicated-ship now supports `lifecycle.v1.config`
* replicated-ship now supports `lifecycle.v1.*.{id,requires,invalidates,description}`

0.13.7 2018-08-20

* Add `host_requirements.docker_space` and validate that it is a valid byte size

0.13.8 2018-08-21

* replicated-ship now supports the `helm_fetch` method for `helm` assets

0.13.9 2018-08-23 replicated-supportbundle selinux.notenforcing, docker.version, and raw analyzers have been added

0.13.10 2018-08-30

* replicated-ship now supports `google_gke` assets
* replicated-ship's `amazon_eks` asset has had the autoscaling_groups.group_size property changed from an int to a string, allowing templating

0.13.11 2018-08-30

* Add terms to Replicated schema defintion

0.13.12 2018-08-31

* replicated-ship's `kustomize` lifecycle step now enforces requirements for `base_path` and `dest`

0.13.13 2018-09-06

* replicated-ship's `github` asset adds two new parameters `mode` and `strip_path`

0.13.14 2018-09-06

* replicated-ship now supports `azure_aks` assets

0.13.15 2018-09-21

* identity provisioners now support `filter` parameter

0.13.16 2018-09-28

* update replicated-ship property names "kubectlApply" and "azure_aks.resource_group_name"

0.13.17 2018-09-28

* remove replicate-ship config.filters and config.test_proc properties

0.13.18 2018-10-03

* Add `stop_timeout` property to containers

0.13.19 2018-10-24

* Add `kustomizeIntro` property to `replicated-ship`

0.13.20 2018-10-24

* Add `--project` flag to `replicated-lint validate` command to pull schema+rules from another project

0.13.21 2018-10-25

* Add support for test procedure custom commands

0.13.22 2018-10-26

* Add write_once property to config item

0.14.0 2018-11-2

* update CLI `replicated-lint validate` to read in multidoc YAML. It will lint the first doc by default, but now supports a flag `--multidocIndex` to select out any document in the stream

0.14.1 2018-11-6

* Support using labels to identify containers for the docker exec command in support bundle project

0.14.2 2018-11-6

* Updates for [vulnerable dependencies](https://github.com/replicatedhq/replicated-lint/pull/158)

0.14.3 2018-11-6

* Updates for [vulnerable dependencies](https://github.com/replicatedhq/replicated-lint/pull/166)

0.14.4 2018-11-6

* Updated missing generated files.

0.14.5 2018-11-19

* Remove `test.sh` and `install.sh` recommendations for `replicated-ship` project

0.14.6 2018-11-20

* Add proxy key to ship github assets to replace source key

0.14.7 2018-12-5

* Add `when` property to `test_proc` config items
* Add `when` property to container volumes

0.14.8 2018-12-7

* Fix proxy key in ship GitHub and Helm assets

0.14.9 2018-12-14

* Handle errors that are out of range

0.14.10 2019-01-10

* Add `when` property to `terraform` lifecycle steps

0.14.11 2019-01-11

* Config group `test_proc` missing `when` property

0.14.12 2019-01-11

* Add kubernetes shared filesystem config

0.14.13 2019-01-14

* Add kubernetes shared filesystem config

0.14.14 2019-01-28

* Added test procs: cert, random, echo, publicip, tcp_port_accept, http_status_code, system

0.14.15 2019-02-01

* Linter now allows templates in the `components.containers.cluster_instance_count` sub-keys

0.14.16 2019-02-01

* Allow `enabled` flags under `identity` be boolean

0.14.17 2019-02-01

* Add 'meta.redact' to replicated-supportbundle schema

0.14.18 2019-03-13

* Add support for `lifecycle.v1.helmValues` to ship schema
* Add support for `lifecycle.v1.kustomizeIntro` to ship schema
* Add support for `lifecycle.v1.render.assets.v1` to ship schema

0.14.19 2019-03-21

* Add scheduler to be passed as a command line argument or constructor param

0.14.20 2019-04-16

* components.cluster_host_count and components.containers.cluster_instance_count uint properties now accept templates

0.15.0 2019-05-07

* Analyze v1 spec final

0.15.1 2019-05-13

* Added platform `identity.enable_reset_request` to enable the reset request feature of the provisioning api.

0.16.0 2019-06-07

* Separate analyze spec linting as a separate replicated-analyze project.

0.16.1 2019-06-07

* Revert linter import change for backwards compatibility.

0.17.0 2019-07-09

* Support bundle `lifecycle` now includes v1 prefix

0.18.0 2019-09-05

* Add kubernetes shared filesystem mount paths

0.18.1 2020-01-13

* `container.shm_size` should be an unsigned integer string

0.18.2 2020-03-09

* No longer enforce `container.cluster_instance_count.initial == 1` when `container.public_port` set

0.18.3 2020-04-22

* `host_requirements.memory` and `kubernetes.requirements.total_memory` can now be expressed in binary formats

0.18.4 2020-04-22

* Update to support-bundle schema 0.29.0

0.18.5 2020-05-05

* Added ports[].public_port_initial property for specifying a port range when cluster_instance_count > 1

0.18.6 2020-05-06

* No longer require replicated_api_version minimum for ports[].public_port and ports[].public_port_initial

0.18.7 2020-09-10

* Added `container.disable_publish_all_ports` a boolean or string
* Added `container.oom_kill_disable` a boolean or string

0.18.8 2021-01-05

* Added `container.network` a string
* Added `container.network_aliases` an array of strings
* Added `container.links` an array of strings
* Added `container.ipv4_address` an array of strings
* Added `container.ipv6_address` an array of strings

0.18.9 2021-05-18

* Added `component.log_config` and `container.log_config`

0.19.0 2022-06-03

* Upgraded Node 8 to 17, TypeScript 2 to 4.
* Upgraded dependencies to resolve known CVEs.

0.19.1 2022-06-06

* Upgraded junit-report-builder to 3.0.0.

0.19.2 2023-03-13

* Added `container.user` a string
* Added `container.readonly_rootfs` a boolean or string

0.19.3 2023-03-23

* Added `cmds.readonly_rootfs` a boolean
* Added `state.ready.readonly_rootfs` a boolean or string