forked from github-starred/komodo
86 lines
2.7 KiB
Markdown
86 lines
2.7 KiB
Markdown
# Procedures and Actions
|
|
|
|
For orchestrations involving multiple Resources, Komodo offers the `Procedure` and `Action` resource types.
|
|
|
|
## Procedures
|
|
|
|
`Procedures` are compositions of many executions, such as `RunBuild` and `DeployStack`.
|
|
The executions are grouped into a series of `Stages`, where each `Stage` contains one or more executions
|
|
to run **_all at once_**. The Procedure will wait until all of the executions in a `Stage` are complete before moving
|
|
on to the next stage. In short, the executions in a `Stage` are run **_in parallel_**, and the stages themselves are
|
|
executed **_sequentially_**.
|
|
|
|
### Batch Executions
|
|
|
|
Many executions have a `Batch` version you can select, for example [**BatchDeployStackIfChanged**](https://docs.rs/komodo_client/latest/komodo_client/api/execute/struct.BatchDeployStackIfChanged.html). With this, you can match multiple Stacks by name
|
|
using [**wildcard syntax**](https://docs.rs/wildcard/latest/wildcard) and [**regex**](https://docs.rs/regex/latest/regex).
|
|
|
|
### TOML Example
|
|
|
|
Like all Resources, `Procedures` have a TOML representation, and can be managed in `ResourceSyncs`.
|
|
|
|
```toml
|
|
[[procedure]]
|
|
name = "pull-deploy"
|
|
description = "Pulls stack-repo, deploys stacks"
|
|
|
|
[[procedure.config.stage]]
|
|
name = "Pull Repo"
|
|
executions = [
|
|
{ execution.type = "PullRepo", execution.params.pattern = "stack-repo" },
|
|
]
|
|
|
|
[[procedure.config.stage]]
|
|
name = "Deploy if changed"
|
|
executions = [
|
|
# Uses the Batch version, witch matches many stacks by pattern
|
|
# This one matches all stacks prefixed with `foo-` (wildcard) and `bar-` (regex).
|
|
{ execution.type = "BatchDeployStackIfChanged", execution.params.pattern = "foo-* , \\^bar-.*$\\" },
|
|
]
|
|
```
|
|
|
|
## Actions
|
|
|
|
`Actions` give users the power of Typescript to write calls to the Komodo API.
|
|
|
|
For example, an `Action` script like this will align the versions and branches of many `Builds`.
|
|
|
|
```ts
|
|
const VERSION = "1.16.5";
|
|
const BRANCH = "dev/" + VERSION;
|
|
const APPS = ["core", "periphery"];
|
|
const ARCHS = ["x86", "aarch64"];
|
|
|
|
await komodo.write("UpdateVariableValue", {
|
|
name: "KOMODO_DEV_VERSION",
|
|
value: VERSION,
|
|
});
|
|
console.log("Updated KOMODO_DEV_VERSION to " + VERSION);
|
|
|
|
for (const app of APPS) {
|
|
for (const arch of ARCHS) {
|
|
const name = `komodo-${app}-${arch}-dev`;
|
|
await komodo.write("UpdateBuild", {
|
|
id: name,
|
|
config: {
|
|
version: VERSION as any,
|
|
branch: BRANCH,
|
|
},
|
|
});
|
|
console.log(
|
|
`Updated Build ${name} to version ${VERSION} and branch ${BRANCH}`,
|
|
);
|
|
}
|
|
}
|
|
|
|
for (const arch of ARCHS) {
|
|
const name = `periphery-bin-${arch}-dev`;
|
|
await komodo.write("UpdateRepo", {
|
|
id: name,
|
|
config: {
|
|
branch: BRANCH,
|
|
},
|
|
});
|
|
console.log(`Updated Repo ${name} to branch ${BRANCH}`);
|
|
}
|
|
``` |