{"id":24012871,"url":"https://github.com/glassechidna/stackit","last_synced_at":"2025-04-15T08:38:08.362Z","repository":{"id":20287018,"uuid":"89179944","full_name":"glassechidna/stackit","owner":"glassechidna","description":"Cross-platform CloudFormation CLI tool for easy synchronous and idempotent stack updates","archived":false,"fork":false,"pushed_at":"2023-02-25T03:42:54.000Z","size":240,"stargazers_count":37,"open_issues_count":19,"forks_count":7,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-28T18:11:31.712Z","etag":null,"topics":["aws","cloudformation","golang","linux","osx","windows"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/glassechidna.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2017-04-23T23:46:30.000Z","updated_at":"2024-03-20T11:14:20.000Z","dependencies_parsed_at":"2024-06-19T00:01:27.194Z","dependency_job_id":null,"html_url":"https://github.com/glassechidna/stackit","commit_stats":null,"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glassechidna%2Fstackit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glassechidna%2Fstackit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glassechidna%2Fstackit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glassechidna%2Fstackit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/glassechidna","download_url":"https://codeload.github.com/glassechidna/stackit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249038500,"owners_count":21202720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","cloudformation","golang","linux","osx","windows"],"created_at":"2025-01-08T06:22:40.732Z","updated_at":"2025-04-15T08:38:08.344Z","avatar_url":"https://github.com/glassechidna.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `stackit`\n\n`stackit` is a CLI tool to synchronously and idempotently operate on AWS\nCloudFormation stacks - a perfect complement for continuous integration systems\nand developers who prefer the comfort of the command line.\n\n![Animated gif demonstrating functionality](https://user-images.githubusercontent.com/369053/51422660-92d00a80-1c06-11e9-81b2-da296b36cf6d.gif)\n\n## Where\n\nThe latest compiled `stackit` binaries for Linux, macOS and Windows can be\ndownloaded from the project's [**GitHub Releases**](https://github.com/glassechidna/stackit/releases)\npage.\n\n## Why\n\nCloudFormation is inherently asychronous and this is reflected in the usage\nof the AWS CLI tools - a `create-stack` or `update-stack` operation exits long\nbefore the stack has reached its final state. `stackit` treats a stack update\nsynchronously, streaming stack events to the CLI until the stack reaches a\nsteady state.\n\nAWS CLI commands for CloudFormation aren't idempotent. If you call `create-stack`\nwhen a stack already exists, the behaviour is different to if it doesn't.\nLikewise with `update-stack`. This means you either have to manually create a\nstack before putting it under CI, or script up a \"does it exist yet?\" check\nbefore deciding which command to invoke. `stackit` abstracts over these with\nan `up` facade.\n\n## How\n\n### `up`\n\n```\nstackit up --stack-name some-other-name # use this stack name, fallback to yml for rest\nstackit up \\\n  --stack-name some-other-name \\\n  --template sample.yml \\\n  --param-value DockerImage=redis \\\n  --param-value Cluster=some-ecs-cluster # no yml necessary\n```\n\nNote that there is JSON printed at the end of the `up` command. This is all the\n_Outputs_ defined in your CloudFormation template file. These are printed to\nstdout. The event lines above them are printed to stderr.\n\nThis separation makes it easy to pipe output from `stackit up` to another\ncommand without having to skip the log lines. Likewise, a non-zero exit code\nindicates stack update/creation failure.\n\n### `outputs`\n\n`stackit outputs --stack-name \u003cname\u003e` prints the stack's Outputs in JSON form,\nwithout making any modifications to the stack.\n\n### `tail`\n\nIf an existing stack creation or update is in progress, `stackit tail --stack-name \u003cname\u003e`\nwill poll for events, similar to the `up` command.\n\n### `down`\n\n`stackit down --stack-name \u003cname\u003e` will delete the named stack if it exists,\notherwise it will do nothing. Non-zero exit code indicates failure to delete\nan existing stack.\n\n### More\n\nAll commands can be passed a `--profile \u003cname\u003e` parameter. This will use alternative\nAWS credentials defined in a profile named in `~/.aws/config` if it exists. If your\nprofile requires MFA credentials in order to assume a role, `stackit` will prompt\nfor those to be entered on `stdin`.\n\nAll commands can be passed a `--region \u003cregion\u003e` parameter if you want to deploy\nyour stack in a different region.\n\n## TODO\n\n* `stackit \u003cstack-name\u003e cancel`\n* `stackit \u003cstack-name\u003e signal \u003clogical-name\u003e`\n\n## Additional Flags\n\nTODO: Document these properly\n\n* `--service-role VAL`\n* `--previous-param-value NAME`\n* `--tag NAME=VAL` (multiple)\n* `--notification-arn` (multiple)\n* `--stack-policy VAL`\n* `--previous-template`\n* `--no-cancel-on-exit`\n* `--no-destroy` (not yet implemented)\n\nfor changes: (not yet implemented)\n* `--name VAL`\n* `--execute-if-no-destroy`\n\n### Notes\n\n* Change-sets return special exit code to indicate destructive (replacement,\n  deletion) actions\n* MFA support\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglassechidna%2Fstackit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglassechidna%2Fstackit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglassechidna%2Fstackit/lists"}