Skip to content
This repository was archived by the owner on Sep 2, 2025. It is now read-only.
Kyle Tryon edited this page Oct 16, 2021 · 5 revisions

Frequently Asked Questions

What programing languages are available/supported?

At the time of the Early Preview release (0.4.x) the CircleCI Config SDK will support TypeScript and JavaScript. Before the v1.0.0 release it is planned to support Python, C#, and Java.

This issue is being tracked here

What features of CircleCI config are not supported by this SDK?

Currently, the CircleCI Config SDK focuses on feature parity with CircleCI 2.0 configuration. The addition of CircleCI 2.1 configuration introduced many features that attempt to replicate programmatic logic. CircleCI 2.1 features (which are processed to 2.0 on CircleCI) features are not yet supported.

If you are writing a config for yourself with the Config SDK, there should likely not be any reason to implement 2.1 features via JavaScript. Instead it is recommended to use native JavaScript features such as if statements in the place of conditional when steps.

Still, we see value for supporting 2.1 configuration so that we may properly support parsing and manipulating existing 2.1 config.

You can track this issue here

Can existing CircleCI config files be parsed?

Parsing existing config files is expected to be available prior to the 1.0.0 General Availability release.

You can track progress on this feature here

Why does my output config look different from a regular CircleCI config?

The CircleCI Config SDK makes a few assumptions that lead to generated output that might look slightly different than you are used to.

The config SDK currently takes a "compilation" philosophy where the generated config is seen as the ephemeral compiled code, not the source. So the appearance of the compiled code is seen as less of a priority as long as the output is accurate and valid. It is possible the generated output could go through a secondary formatting step to resolve some of these differences in the future.

Below are some of the differences you may notice.

  1. Empty objects in the config.

For standardization purposes, the Config SDK assumes all config keys are objects with the potential parameters. This means some commands which can be strings when they have no parameters according to CircleCI YAML schema, are still treated as empty objects.

This leads to a checkout command for instance that looks like this:

- checkout: {}

as opposed to the typical:

- checkout
  1. YAML Anchors.

You may notice that replicated portions of your output config file contain YAML anchors which reduce the repeated code with YAML references. This functionality is the default behavior enabled by the current YAML library used. This has no affect on your code and only increases the efficiency by reducing file size.

Clone this wiki locally