diff --git a/.gitignore b/.gitignore index 42d7e2a..57d904f 100644 --- a/.gitignore +++ b/.gitignore @@ -113,3 +113,4 @@ dist circleci-circleci-config-sdk-0.0.0-development.tgz +dynamicConfig.yml \ No newline at end of file diff --git a/README.md b/README.md index 3917fbf..e50cfb4 100644 --- a/README.md +++ b/README.md @@ -5,15 +5,23 @@ [![npm](https://img.shields.io/npm/v/@circleci/circleci-config-sdk?logo=npm)](https://www.npmjs.com/package/@circleci/circleci-config-sdk) [![codecov](https://codecov.io/gh/CircleCI-Public/circleci-config-sdk-ts/branch/main/graph/badge.svg?token=Z4C4RXABS7)](https://codecov.io/gh/CircleCI-Public/circleci-config-sdk-ts) [![npm](https://img.shields.io/npm/dm/@circleci/circleci-config-sdk?logo=npm)](https://www.npmjs.com/package/@circleci/circleci-config-sdk) +![GitHub Repo stars](https://img.shields.io/github/stars/CircleCI-Public/circleci-config-sdk-ts?style=social) -Create and manage your CircleCI configuration files with JavaScript and +Create and manage your [CircleCI](https://circleci.com/) configuration files with JavaScript and TypeScript. ## Table of Contents -- [Getting Started](#getting-started) -- [Getting Help](#getting-help) +- [CircleCI Config SDK](#circleci-config-sdk) + - [Table of Contents](#table-of-contents) + - [Getting Started](#getting-started) + - [Installation](#installation) + - [Usage](#usage) + - [Example](#example) + - [Getting Help](#getting-help) + - [Resources](#resources) - [Contributing](#contributing) +- [Related](#related) ## Getting Started @@ -139,7 +147,7 @@ Consider checking the following common resources before opening a new issue. # Contributing -This repository welcomes community contributions! See our +This [repository](https://github.com/CircleCI-Public/circleci-config-sdk-ts) welcomes community contributions! See our [CONTRIBUTING.md](https://github.com/CircleCI-Public/circleci-config-sdk-ts/blob/main/CONTRIBUTING.md) for guidance on configuring your development environment and how to submit quality pull requests. diff --git a/sample/01-dynamic-workflow-javascript/.circleci/dynamic/executors/docker-node.js b/sample/01-dynamic-workflow-javascript/.circleci/dynamic/executors/docker-node.js index 3f2f8e0..5103768 100644 --- a/sample/01-dynamic-workflow-javascript/.circleci/dynamic/executors/docker-node.js +++ b/sample/01-dynamic-workflow-javascript/.circleci/dynamic/executors/docker-node.js @@ -1,5 +1,5 @@ const CircleCI = require("@circleci/circleci-config-sdk"); -const dockerNode = new CircleCI.executor.DockerExecutor( +const dockerNode = new CircleCI.executors.DockerExecutor( "docker-node", "cimg/node:lts" ); diff --git a/sample/01-dynamic-workflow-javascript/.circleci/dynamic/index.js b/sample/01-dynamic-workflow-javascript/.circleci/dynamic/index.js index 3a99e7d..5903206 100644 --- a/sample/01-dynamic-workflow-javascript/.circleci/dynamic/index.js +++ b/sample/01-dynamic-workflow-javascript/.circleci/dynamic/index.js @@ -18,6 +18,8 @@ const dynamicWorkflow = new CircleCI.Workflow("dynamic-workflow"); dynamicWorkflow.addJob(jobA); // Conditionally add jobB +// This condition could be based on anything from the response of an API call +// to the contents of a file if (1 == 1) { dynamicWorkflow.addJob(jobB); } diff --git a/sample/01-dynamic-workflow-javascript/.circleci/dynamic/package-lock.json b/sample/01-dynamic-workflow-javascript/.circleci/dynamic/package-lock.json new file mode 100644 index 0000000..f275444 --- /dev/null +++ b/sample/01-dynamic-workflow-javascript/.circleci/dynamic/package-lock.json @@ -0,0 +1,19 @@ +{ + "name": "01-dynamic-workflow-javascript", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "01-dynamic-workflow-javascript", + "version": "1.0.0", + "license": "ISC" + }, + "../../..": { + "extraneous": true + }, + "../../../dist": { + "extraneous": true + } + } +} diff --git a/sample/01-dynamic-workflow-javascript/.circleci/dynamic/package.json b/sample/01-dynamic-workflow-javascript/.circleci/dynamic/package.json index c12aab1..8cb19f2 100644 --- a/sample/01-dynamic-workflow-javascript/.circleci/dynamic/package.json +++ b/sample/01-dynamic-workflow-javascript/.circleci/dynamic/package.json @@ -4,12 +4,13 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node index.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { - "@circleci/circleci-config-sdk": "^1.0.0" + "@circleci/circleci-config-sdk-ts": "*" } } diff --git a/sample/01-dynamic-workflow-javascript/README.md b/sample/01-dynamic-workflow-javascript/README.md index 6d39660..50501c3 100644 --- a/sample/01-dynamic-workflow-javascript/README.md +++ b/sample/01-dynamic-workflow-javascript/README.md @@ -1,12 +1,19 @@ -# 01-dynamic-workflow-javascript +# 01 dynamic workflow Javascript This example uses CircleCI's [Dynamic Configuration](https://circleci.com/docs/2.0/dynamic-config/) feature, -which allows us to run any arbitrary config file at runtime, to compile and run -our JavaScript config file. +which allows us to run any arbitrary config file at runtime. Our `config.yml` file will be used to execute our Javascript config application, which will generate a new `dynamicConfig.yml` file that will be executed. + + +```mermaid +graph TD + A((fa:fa-file config.yml)) -->|dynamic config enabled| B[ fa:fa-code Generate dynamic config] + B --> C[\ fa:fa-file Execute dynamic config\] + +``` The included `config.yml` file defines a workflow which will build our -JavaScript _config application_ (located in `./.circleci/dynamic`) on every push +JavaScript _config application_ (located in `.circleci/dynamic`) on every push to our repository and then trigger a new workflow which has been generated by the _config application_.