{"id":18654811,"url":"https://github.com/craftzing/lola","last_synced_at":"2026-01-24T16:44:12.845Z","repository":{"id":42257687,"uuid":"276658632","full_name":"craftzing/lola","owner":"craftzing","description":"Lola is a tool to organise/deploy AWS Cloudformation stacks","archived":false,"fork":false,"pushed_at":"2025-07-10T08:38:46.000Z","size":255,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-08-09T10:18:46.414Z","etag":null,"topics":["aws"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/craftzing.png","metadata":{"files":{"readme":"Readme.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-07-02T13:49:44.000Z","updated_at":"2025-07-10T08:38:36.000Z","dependencies_parsed_at":"2025-08-02T01:08:08.744Z","dependency_job_id":null,"html_url":"https://github.com/craftzing/lola","commit_stats":{"total_commits":88,"total_committers":3,"mean_commits":"29.333333333333332","dds":0.09090909090909094,"last_synced_commit":"ec5e2c6fcb347c33741258846df54801b4ab6c12"},"previous_names":["craftzing/lola","wieni/lola"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/craftzing/lola","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craftzing%2Flola","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craftzing%2Flola/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craftzing%2Flola/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craftzing%2Flola/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/craftzing","download_url":"https://codeload.github.com/craftzing/lola/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/craftzing%2Flola/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28731887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws"],"created_at":"2024-11-07T07:16:41.049Z","updated_at":"2026-01-24T16:44:12.825Z","avatar_url":"https://github.com/craftzing.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lola\n\nLola is an opinionated cli tool to orchestrate AWS Cloudformation templates.\n\n## Installation\n\n``` bash\n  $ [sudo] npm install lola -g\n```\n\n## Usage\n\n### lola.yml\n\nLola expects a config file (lola.yml) which holds information about the AWS Cloudformation stacks you wish to control.\n\n```yml\n# The name of your project. This is required and will be used in\n# stack names, tags, etc.\nproject: \u003cproject-name\u003e\n\n# List of key-value tags that should be added to each stack. When set on this or a lower level,\n# it wil override the default tags of project, environment and region.\ntags:\n  \u003cname-of-tag\u003e: \u003cvalue-of-tag\u003e\n  \u003cname-of-another-tag\u003e: \u003cvalue-of-another-tag\u003e\n\n# Stacks is a description of the different cloudformation stacks you'll want to\n# manage and the specific order in which they'll need to be managed.\nstacks:\n    # Give that stack a name.\n    \u003cstack1\u003e:\n        template: \u003clocation of the template.yml file for this stack\u003e\n        description: \u003coptionally describe this stack\u003e\n        actions:\n            preDeploy: preDeployScript.js\n\nenvironments:\n    # This is reserved, you can set global stuff for each stack in each env. Optional.\n    default:\n        \u003cstack1\u003e:\n            # This will override ANY region/profile for stack1 in ANY env below\n            region: \u003caws region\u003e\n            profile: \u003c~/.aws/credentails profile name\u003e\n            tags:\n              \u003cname-of-tag\u003e: \u003cvalue-of-tag\u003e\n              \u003cname-of-another-tag\u003e: \u003cvalue-of-another-tag\u003e\n    # Give that environment a name.\n    \u003cdev\u003e:\n        # Environment params for \u003cstack1\u003e\n        \u003cstack1\u003e:\n            # Override the stackname for this env. Optional, if not present lola generates one.\n            name: \u003cmy-stack-dev\u003e\n            region: \u003caws region\u003e\n            profile: \u003c~/.aws/credentails profile name\u003e\n            tags:\n              \u003cname-of-tag\u003e: \u003cvalue-of-tag\u003e\n              \u003cname-of-another-tag\u003e: \u003cvalue-of-another-tag\u003e\n            terminationProtection: \u003ctrue|false\u003e\n            params:\n                \u003cParam1\u003e: \u003cValue1\u003e\n            hooks:\n                pre-deploy:\n                    - preDeploy\n```\n\n### cli\n\n```\n$ lola --help\nUsage: lola [options] [command]\n\nDo AWS Stuff\n\nOptions:\n  -V, --version                                   output the version number\n  -c, --config-file \u003cconfigFile\u003e                  Optional config file\n  -o, --options-file \u003coptionsFile\u003e                Optional deploy options file\n  -v, --verbose                                   Verbose output\n  -s, --options-stack \u003coptionsStack\u003e              Stack\n  -e, --options-environment \u003coptionsEnvironment\u003e  Environment\n  -h, --help                                      display help for command\n\nCommands:\n  validate|v                                      Validates a stack\n  status|s                                        Get the status of a stack\n  deploy|d                                        Deploys a stack\n  delete|x                                        Deletes a stack\n  action|a                                        Runs an action on a stack/env\n  protection|p                                    Toggles termination protection on a stack/env\n  changeSet|c                                     Create and view changeset of a stack/env\n  help [command]                                  display help for command\n  ```\n\n### Running lola\n\nWhen running a lola command (validate, status, ..) without arguments, lola will ask about two things: **the stack** and the **environment**. These can also be provided through an input file (-o flag) or other input flags.\n\n\n### deploy hooks\n\n- pre-deploy\n\n### actions\n\nEach stack can define actions. Each action can be run on it's own or can be attached to one of the deploy hooks.\n\nSince version 2.0.0, you can use traditional Common.js Modules or new ES Modules.\n\n**Common.js Modules**\\\nIn `package.json` set `\"type\": \"commonjs\"` or leave it empty or name file with `.cjs` extension, not `.js`.\n\n```js\nconst { S3Client, PutObjectCommand } = require(\"@aws-sdk/client-s3\");\n\n/**\n * @param Object context\n */\nasync function runAction(context) {\n    const { region } = context.config.environments[context.env][context.stackName];\n    const { profile } = context.config.environments[context.env][context.stackName];\n    const { params } = context.config.environments[context.env][context.stackName];\n\n    throw new Error('Error');\n}\n\nmodule.exports.runAction = runAction;\n```\n\n**ES Modules**\\\nIn `package.json` set `\"type\": \"module\"` or name file with `.mjs` extension, not `.js`.\n\n```js\nimport { S3Client, PutObjectCommand } from \"@aws-sdk/client-s3\";\n/**\n * @param Object context\n */\nexport async function runAction(context) {\n    const { region } = context.config.environments[context.env][context.stackName];\n    const { profile } = context.config.environments[context.env][context.stackName];\n    const { params } = context.config.environments[context.env][context.stackName];\n\n    throw new Error('Error');\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcraftzing%2Flola","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcraftzing%2Flola","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcraftzing%2Flola/lists"}