From 036a5e5913f8ab2009b4dfd4bed2373429d64173 Mon Sep 17 00:00:00 2001 From: Deveus Date: Fri, 23 Dec 2022 16:44:21 +0200 Subject: [PATCH 1/4] feat: Inherit dependances from workspace --- Cargo.lock | 41 +++------------ Cargo.toml | 56 ++++++++++++++++++++ checksum | 4 +- contracts/cw-croncat/Cargo.toml | 72 ++++++++++++-------------- contracts/cw-rules/Cargo.toml | 80 +++++++++++++---------------- justfile | 2 +- packages/cw-croncat-core/Cargo.toml | 36 ++++++------- packages/cw-rules-core/Cargo.toml | 21 ++++---- packages/generic-query/Cargo.toml | 10 ++-- packages/smart-query/Cargo.toml | 13 +++-- 10 files changed, 175 insertions(+), 160 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1231ff6f..4bff284d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -669,8 +669,8 @@ dependencies = [ "cw20", "cw20-base", "cw20-stake", - "cw4 0.13.4", - "cw4-group 0.13.4", + "cw4", + "cw4-group", "cwd-core", "cwd-interface", "cwd-proposal-single", @@ -788,7 +788,7 @@ dependencies = [ [[package]] name = "cw-rules" -version = "0.0.2" +version = "0.0.3" dependencies = [ "base64", "cosmwasm-schema", @@ -801,8 +801,8 @@ dependencies = [ "cw20", "cw20-base", "cw20-stake", - "cw4 0.16.0", - "cw4-group 0.16.0", + "cw4", + "cw4-group", "cw721 0.15.0", "cw721-base", "cwd-core", @@ -1009,18 +1009,6 @@ dependencies = [ "serde", ] -[[package]] -name = "cw4" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0acc3549d5ce11c6901b3a676f2e2628684722197054d97cd0101ea174ed5cbd" -dependencies = [ - "cosmwasm-std", - "cw-storage-plus 0.13.4", - "schemars", - "serde", -] - [[package]] name = "cw4" version = "0.16.0" @@ -1034,23 +1022,6 @@ dependencies = [ "serde", ] -[[package]] -name = "cw4-group" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6c95c89153e7831c8306c8eba40a3daa76f9c7b8f5179dd0b8628aca168ec7a" -dependencies = [ - "cosmwasm-std", - "cw-controllers 0.13.4", - "cw-storage-plus 0.13.4", - "cw-utils 0.13.4", - "cw2 0.13.4", - "cw4 0.13.4", - "schemars", - "serde", - "thiserror", -] - [[package]] name = "cw4-group" version = "0.16.0" @@ -1063,7 +1034,7 @@ dependencies = [ "cw-storage-plus 0.16.0", "cw-utils 0.16.0", "cw2 0.16.0", - "cw4 0.16.0", + "cw4", "schemars", "serde", "thiserror", diff --git a/Cargo.toml b/Cargo.toml index d47c59e7..8989006e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,3 +19,59 @@ debug-assertions = false panic = 'abort' incremental = false overflow-checks = true + +[workspace.package] +version = "0.0.3" +authors = ["meow@cron.cat", "@tjtc", "@mikedotexe"] +edition = "2021" +description = "Croncat provides a general purpose, fully autonomous network that enables scheduled function calls for blockchain contract execution. It allows any application to schedule logic to get executed in the future, once or many times, triggered by an approved “agent,” in an economically stable format." +documentation = "https://docs.cron.cat/" + +[workspace.dependencies] +schemars = "0.8" +serde = { version = "1.0" } +cosmwasm-std = { version = "1.0.0" } +serde-cw-value = "0.7.0" +generic-query = { version = "0.1.1", path = "./packages/generic-query" } +thiserror = { version = "1.0" } +cosmwasm-schema = { version = "1.0.0" } +rusty-hook = "0.11.2" +#For some reason it tries to deploy cw_core here +# voting = { version = "0.2.0", default-features = false, git = "https://github.com/DA0-DA0/dao-contracts" } +smart-query = { version = "0.1.0", path = "./packages/smart-query" } +cw20 = { version = "0.13.4" } +cw-multi-test = { version = "0.16.0" } +cw20-base = { version = "0.13.4", features = ["library"] } +cw-rules-core = { version = "0.1.2", path = "./packages/cw-rules-core" } +cw-storage-plus = "0.16.0" +cron_schedule = "0.2.3" +cw2 = "0.16.0" +hex = { version = "0.4", default-features = false } +sha2 = { version = "0.10.6", default-features = false } +serde-json-wasm = { version = "0.5.0" } +cw-utils = "0.13.4" +cw721 = "0.15.0" +# DAO contracts +cwd-voting = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts.git" } +cwd-proposal-single = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } +cwd-proposal-multiple = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } +cwd-voting-cw20-staked = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } +cw20-stake = { version = "0.2.6", git = "https://github.com/DA0-DA0/dao-contracts" } +cwd-core = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } +cwd-interface = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } +# Testing generic msg +cw4 = "0.16.0" +cw4-group = "0.16.0" +base64 = "0.13.0" +serde_json = { version = "1.0" } +anyhow = "1" +cw-rules = { version = "*", path = "./contracts/cw-rules" } +cw-croncat-core = { version = "0.1.5", path = "./packages/cw-croncat-core" } +cw721-base = "0.15.0" + +[workspace.metadata.scripts] +optimize = """docker run --rm -v "$(pwd)":/code \ + --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ + --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ + cosmwasm/rust-optimizer:0.12.5 +""" diff --git a/checksum b/checksum index 2ef21e65..aca2110b 100644 --- a/checksum +++ b/checksum @@ -1,2 +1,2 @@ -2d2b8d5bb188d7a29b24a00c5fcb87c1e2e4f7c53c0f4bf176e2dc2024bd2cc6 cw_croncat.wasm -307b8919d8fcae59dd7336319c6220fe5c477488b59bf043158fba67a292234d cw_rules.wasm +b589630b11c5c0b1734b5c2cd7163efdbf7d4f25e7401d0662bd589c8225b628 cw_croncat.wasm +ce9221c037fb3c97b88fab2441130533d52df2e1f684663906444b2046bcdfb0 cw_rules.wasm diff --git a/contracts/cw-croncat/Cargo.toml b/contracts/cw-croncat/Cargo.toml index 00d58288..df3f9629 100644 --- a/contracts/cw-croncat/Cargo.toml +++ b/contracts/cw-croncat/Cargo.toml @@ -1,9 +1,10 @@ [package] name = "cw-croncat" -version = "0.0.3" -authors = ["meow@cron.cat", "@tjtc", "@mikedotexe"] -edition = "2018" - +authors = { workspace = true } +description = { workspace = true } +edition = { workspace = true } +documentation = { workspace = true } +version = { workspace = true } exclude = [ # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. "contract.wasm", @@ -11,7 +12,6 @@ exclude = [ ] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [lib] crate-type = ["cdylib", "rlib"] @@ -24,40 +24,36 @@ staking = ["cw-multi-test/staking"] stargate = ["cw-multi-test/stargate"] [package.metadata.scripts] -optimize = """docker run --rm -v "$(pwd)":/code \ - --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ - --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/rust-optimizer:0.12.5 -""" +optimize = { workspace = true } [dependencies] -cw-croncat-core = { version = "0.1.5", path = "../../packages/cw-croncat-core" } -cw-rules-core = { version = "0.1.2", path = "../../packages/cw-rules-core" } -cosmwasm-std = { version = "1.0.0", features = ["staking", "stargate"] } -cw-storage-plus = "0.16.0" -cw-utils = "0.13" -cw2 = "0.16.0" -cw20 = { version = "0.13.4", default-features = false } -schemars = "0.8" -serde = { version = "1.0", default-features = false, features = ["derive"] } -thiserror = { version = "1.0" } -hex = "0.4" -sha2 = "0.10.6" +cw-croncat-core = { workspace = true } +cw-rules-core = { workspace = true } +cosmwasm-std = { workspace = true, features = ["staking", "stargate"] } +cw-storage-plus = { workspace = true } +cw-utils = { workspace = true } +cw2 = { workspace = true } +cw20 = { workspace = true, default-features = false } +schemars = { workspace = true } +serde = { workspace = true, default-features = false, features = ["derive"] } +thiserror = { workspace = true } +hex = { workspace = true } +sha2 = { workspace = true } [dev-dependencies] -anyhow = "1" -cosmwasm-schema = { version = "1.0.0" } -cw-rules = { version = "*", path = "../cw-rules" } -cw-multi-test = { version = "0.16.0", features = ["staking"] } -cw20-base = { version = "0.13.4", features = ["library"] } -cw4 = { version = "0.13.4" } -cw4-group = { version = "0.13.4", features = ["library"] } -smart-query = { version = "*", path = "../../packages/smart-query" } -generic-query = { version = "*", path = "../../packages/generic-query" } -cwd-voting-cw20-staked = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } -cw20-stake = { version = "0.2.6", git = "https://github.com/DA0-DA0/dao-contracts" } -cwd-core = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } -cwd-interface = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } -cwd-proposal-single = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } -cwd-voting = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts.git" } -rusty-hook = "0.11.2" +anyhow = { workspace = true } +cosmwasm-schema = { workspace = true } +cw-rules = { workspace = true } +cw-multi-test = { workspace = true, features = ["staking"] } +cw20-base = { workspace = true, features = ["library"] } +cw4 = { workspace = true } +cw4-group = { workspace = true, features = ["library"] } +smart-query = { workspace = true } +generic-query = { workspace = true } +cwd-voting-cw20-staked = { workspace = true } +cw20-stake = { workspace = true } +cwd-core = { workspace = true } +cwd-interface = { workspace = true } +cwd-proposal-single = { workspace = true } +cwd-voting = { workspace = true } +rusty-hook = { workspace = true } diff --git a/contracts/cw-rules/Cargo.toml b/contracts/cw-rules/Cargo.toml index 3be7286d..1e36083e 100644 --- a/contracts/cw-rules/Cargo.toml +++ b/contracts/cw-rules/Cargo.toml @@ -1,9 +1,10 @@ [package] name = "cw-rules" -version = "0.0.2" -authors = ["meow@cron.cat", "@tjtc", "@mikedotexe"] -edition = "2018" - +authors = { workspace = true } +version = { workspace = true } +description = "CronCat rules core logic for tasks that require conditions" +edition = { workspace = true } +documentation = { workspace = true } exclude = [ # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. "contract.wasm", @@ -11,7 +12,6 @@ exclude = [ ] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [lib] crate-type = ["cdylib", "rlib"] @@ -24,48 +24,42 @@ staking = ["cw-multi-test/staking"] stargate = ["cw-multi-test/stargate"] [package.metadata.scripts] -optimize = """docker run --rm -v "$(pwd)":/code \ - --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ - --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/rust-optimizer:0.12.5 -""" +optimize = { workspace = true } [dependencies] -generic-query = { version = "0.1.1", path = "../../packages/generic-query" } -smart-query = { version = "0.1.0", path = "../../packages/smart-query" } -cw-rules-core = { version = "0.1.2", path = "../../packages/cw-rules-core" } -cosmwasm-std = "1.0.0" -cw-storage-plus = "0.16.0" -cw-utils = "0.13.4" -cw2 = "0.16.0" -cw721 = "0.15.0" -cw20 = "0.13.4" -schemars = "0.8.8" -serde = { version = "1.0.137", default-features = false, features = ["derive"] } -thiserror = { version = "1.0.31" } - +generic-query = { workspace = true } +smart-query = { workspace = true } +cw-rules-core = { workspace = true } +cosmwasm-std = { workspace = true } +cw-storage-plus = { workspace = true } +cw-utils = { workspace = true } +cw2 = { workspace = true } +cw721 = { workspace = true } +cw20 = { workspace = true } +schemars = { workspace = true } +serde = { workspace = true, default-features = false, features = ["derive"] } +thiserror = { workspace = true } # This thing saved our lives thanks @hashedone for implementing it -serde-cw-value = "0.7.0" - -serde-json-wasm = { version = "0.5.0" } +serde-cw-value = { workspace = true } +serde-json-wasm = { workspace = true } [dev-dependencies] -cw721-base = "0.15.0" -cosmwasm-schema = "1.0.0" -cw-multi-test = "0.16.0" -cw-utils = "0.13.4" -cw20-base = "0.13.4" +cw721-base = { workspace = true } +cosmwasm-schema = { workspace = true } +cw-multi-test = { workspace = true } +cw-utils = { workspace = true } +cw20-base = { workspace = true } # DAO contracts -cwd-voting = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts.git" } -cwd-proposal-single = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } -cwd-proposal-multiple = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } -cwd-voting-cw20-staked = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } -cw20-stake = { version = "0.2.6", git = "https://github.com/DA0-DA0/dao-contracts" } -cwd-core = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } -cwd-interface = { version = "0.2.0", git = "https://github.com/DA0-DA0/dao-contracts" } +cwd-voting = { workspace = true } +cwd-proposal-single = { workspace = true } +cwd-proposal-multiple = { workspace = true } +cwd-voting-cw20-staked = { workspace = true } +cw20-stake = { workspace = true } +cwd-core = { workspace = true } +cwd-interface = { workspace = true } # Testing generic msg -cw4 = "0.16.0" -cw4-group = "0.16.0" -base64 = "0.13.0" -serde_json = { version = "1.0", default-features = false, features = ["alloc"] } -rusty-hook = "0.11.2" +cw4 = { workspace = true } +cw4-group = { workspace = true } +base64 = { workspace = true } +serde_json = { workspace = true } +rusty-hook = { workspace = true } diff --git a/justfile b/justfile index 6af25e8b..473e88d0 100644 --- a/justfile +++ b/justfile @@ -48,7 +48,7 @@ optimize: --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ --platform linux/amd64 \ - cosmwasm/workspace-optimizer:0.12.8 + cosmwasm/workspace-optimizer:0.12.10 optimize-m1: docker run --rm -v "$(pwd)":/code \ diff --git a/packages/cw-croncat-core/Cargo.toml b/packages/cw-croncat-core/Cargo.toml index 2a36ee8d..e99c9934 100644 --- a/packages/cw-croncat-core/Cargo.toml +++ b/packages/cw-croncat-core/Cargo.toml @@ -13,23 +13,23 @@ optimize = """docker run --rm -v "$(pwd)":/code \ """ [dependencies] -cosmwasm-std = { version = "1.0.0", features = ["staking", "stargate"] } -cw-rules-core = { version = "0.1.2", path = "../cw-rules-core" } -generic-query = { version = "0.1.1", path = "../generic-query" } -cw-storage-plus = "0.16.0" -cron_schedule = "0.2.3" -cw2 = "0.16.0" -cw20 = { version = "0.13.4" } -schemars = "0.8" -serde = { version = "1.0", default-features = false, features = ["derive"] } -thiserror = { version = "1.0" } -hex = { version = "0.4", default-features = false } -sha2 = { version = "0.10.6", default-features = false } -serde-cw-value = "0.7.0" -serde-json-wasm = { version = "0.5.0" } +cosmwasm-std = { workspace = true, features = ["staking", "stargate"] } +cw-rules-core = { workspace = true, path = "../cw-rules-core" } +generic-query = { workspace = true, path = "../generic-query" } +cw-storage-plus = { workspace = true } +cron_schedule = { workspace = true } +cw2 = { workspace = true } +cw20 = { workspace = true } +schemars = { workspace = true } +serde = { workspace = true, default-features = false, features = ["derive"] } +thiserror = { workspace = true } +hex = { workspace = true, default-features = false } +sha2 = { workspace = true, default-features = false } +serde-cw-value = { workspace = true } +serde-json-wasm = { workspace = true } [dev-dependencies] -cosmwasm-schema = { version = "1.0.0" } -cw-multi-test = { version = "0.16.0", features = ["staking"] } -cw20-base = { version = "0.13.4", features = ["library"] } -rusty-hook = "0.11.2" +cosmwasm-schema = { workspace = true } +cw-multi-test = { workspace = true, features = ["staking"] } +cw20-base = { workspace = true, features = ["library"] } +rusty-hook = { workspace = true } diff --git a/packages/cw-rules-core/Cargo.toml b/packages/cw-rules-core/Cargo.toml index c2d3855d..47c04454 100644 --- a/packages/cw-rules-core/Cargo.toml +++ b/packages/cw-rules-core/Cargo.toml @@ -1,23 +1,22 @@ [package] name = "cw-rules-core" -description = "CronCat rules logic for tasks that require conditions" +description = "CronCat rules core logic for tasks that require conditions" license = "MIT OR Apache-2.0" version = "0.1.2" -edition = "2021" +edition = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] schemars = "0.8" -serde = { version = "1.0", default-features = false, features = ["derive"] } -cosmwasm-std = { version = "1.0.0", features = ["staking", "stargate"] } -serde-cw-value = "0.7.0" +serde = { workspace = true, default-features = false, features = ["derive"] } +cosmwasm-std = { workspace = true, features = ["staking", "stargate"] } +serde-cw-value = { workspace = true } # For some reason it tries to deploy cw_core here # voting = { version = "0.2.0", default-features = false, git = "https://github.com/DA0-DA0/dao-contracts" } -generic-query = { version = "0.1.1", path = "../generic-query" } -smart-query = { version = "0.1.0", path = "../smart-query" } -cw20 = { version = "0.13.4" } +generic-query = { workspace = true } +smart-query = { workspace = true } +cw20 = { workspace = true } [dev-dependencies] -cosmwasm-schema = { version = "1.0.0" } -rusty-hook = "0.11.2" +cosmwasm-schema = { workspace = true } +rusty-hook = { workspace = true } diff --git a/packages/generic-query/Cargo.toml b/packages/generic-query/Cargo.toml index 70140887..7d4af558 100644 --- a/packages/generic-query/Cargo.toml +++ b/packages/generic-query/Cargo.toml @@ -3,10 +3,10 @@ name = "generic-query" description = "Generalizing ways to query and order" license = "MIT OR Apache-2.0" version = "0.1.1" -edition = "2021" +edition = { workspace = true } [dependencies] -schemars = "0.8" -serde = { version = "1.0", default-features = false, features = ["derive"] } -cosmwasm-std = { version = "1.0.0", features = ["staking", "stargate"] } -serde-cw-value = "0.7.0" +schemars = { workspace = true } +serde = { workspace = true, default-features = false, features = ["derive"] } +cosmwasm-std = { workspace = true, features = ["staking", "stargate"] } +serde-cw-value = { workspace = true } diff --git a/packages/smart-query/Cargo.toml b/packages/smart-query/Cargo.toml index 92a87424..1b5054aa 100644 --- a/packages/smart-query/Cargo.toml +++ b/packages/smart-query/Cargo.toml @@ -3,14 +3,13 @@ name = "smart-query" description = "Robust approach to queries for CronCat" license = "MIT OR Apache-2.0" version = "0.1.0" -edition = "2021" +edition = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] schemars = "0.8" -serde = { version = "1.0", default-features = false, features = ["derive"] } -cosmwasm-std = { version = "1.0.0", features = ["staking", "stargate"] } -serde-cw-value = "0.7.0" -generic-query = { version = "0.1.1", path = "../generic-query"} -thiserror = { version = "1.0" } \ No newline at end of file +serde = { workspace = true, default-features = false, features = ["derive"] } +cosmwasm-std = { workspace = true, features = ["staking", "stargate"] } +serde-cw-value = { workspace = true } +generic-query = { workspace = true } +thiserror = { workspace = true } From 4988805a3719602b95ed935811bd1d7aedd6e766 Mon Sep 17 00:00:00 2001 From: Deveus Date: Fri, 23 Dec 2022 16:45:18 +0200 Subject: [PATCH 2/4] fix: minor fix --- justfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/justfile b/justfile index 473e88d0..9d14b616 100644 --- a/justfile +++ b/justfile @@ -55,7 +55,7 @@ optimize-m1: --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ --platform linux/arm64 \ - cosmwasm/workspace-optimizer:0.12.8 + cosmwasm/workspace-optimizer:0.12.10 optimize-rs: docker run --rm -v "$(pwd)":/code \ From ecc25b8e2091acfb632621df65190c17600966d8 Mon Sep 17 00:00:00 2001 From: Deveus Date: Fri, 23 Dec 2022 17:11:21 +0200 Subject: [PATCH 3/4] fix: toolchain --- .github/workflows/Basic.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Basic.yml b/.github/workflows/Basic.yml index 2ce5628a..08679623 100644 --- a/.github/workflows/Basic.yml +++ b/.github/workflows/Basic.yml @@ -48,7 +48,7 @@ jobs: uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.63.0 + toolchain: 1.64.0 override: true components: rustfmt, clippy From f93efc0f1e2a671105a57589f81b2a2d6c570835 Mon Sep 17 00:00:00 2001 From: Deveus Date: Fri, 23 Dec 2022 21:48:53 +0200 Subject: [PATCH 4/4] feat: add authors --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 8989006e..8d38e2af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ overflow-checks = true [workspace.package] version = "0.0.3" -authors = ["meow@cron.cat", "@tjtc", "@mikedotexe"] +authors = ["meow@cron.cat", "@tjtc", "@mikedotexe","@NinoLipartiia","@Buckram123","deveusss"] edition = "2021" description = "Croncat provides a general purpose, fully autonomous network that enables scheduled function calls for blockchain contract execution. It allows any application to schedule logic to get executed in the future, once or many times, triggered by an approved “agent,” in an economically stable format." documentation = "https://docs.cron.cat/"