stackctl

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Warnings:

Please see https://github.com/freckle/stackctl#readme


[Skip to Readme]

Properties

Versions 1.1.0.0, 1.1.0.1, 1.1.0.2, 1.1.0.3, 1.1.0.4, 1.1.0.5, 1.1.1.0, 1.1.1.1, 1.1.2.0, 1.1.2.1, 1.1.2.2, 1.1.3.0, 1.1.3.1, 1.1.4.0, 1.2.0.0, 1.3.0.0, 1.3.0.1, 1.3.0.2, 1.4.0.0, 1.4.0.1, 1.4.2.0, 1.4.2.1, 1.4.2.2, 1.4.3.0, 1.4.4.0, 1.5.0.0, 1.5.0.1, 1.6.0.0, 1.6.1.0, 1.6.1.1, 1.6.1.2, 1.7.0.0, 1.7.1.0, 1.7.2.0, 1.7.3.0, 1.7.3.2, 1.7.3.3, 1.7.3.3
Change log CHANGELOG.md
Dependencies aeson (>=2.2.3.0), aeson-casing (>=0.2.0.0), aeson-pretty (>=0.8.10), amazonka (>=2.0), amazonka-cloudformation (>=2.0), amazonka-core (>=2.0), amazonka-ec2 (>=2.0), amazonka-lambda (>=2.0), amazonka-mtl (>=0.1.1.0), amazonka-sso (>=2.0), amazonka-sts (>=2.0), base (>=4 && <5), Blammo (>=1.1.2.3), bytestring (>=0.12.1.0), cfn-flip (>=0.1.0.3), conduit (>=1.3.6), containers (>=0.6.8), envparse (>=0.6.0), errors (>=2.3.0), exceptions (>=0.10.7), extra (>=1.7.16), filepath (>=1.4.301.0), Glob (>=0.10.2), lens (>=5.3.3), lens-aeson (>=1.2.3), monad-logger (>=0.3.41), mtl (>=2.3.1), optparse-applicative (>=0.18.1.0), QuickCheck (>=2.14.3), resourcet (>=1.3.0), rio (>=0.1.22.0), semigroups (>=0.20), stackctl, text (>=2.1.1), text-metrics (>=0.3.3), time (>=1.12.2), transformers (>=0.6.1.0), typed-process (>=0.2.12.0), unix (>=2.8.6.0), unliftio (>=0.2.25.0), unordered-containers (>=0.2.20), uuid (>=1.3.16), yaml (>=0.11.11.2) [details]
License MIT
Copyright 2022 Renaissance Learning Inc
Author Freckle Engineering
Maintainer freckle-engineering@renaissance.com
Home page https://github.com/freckle/stackctl#readme
Bug tracker https://github.com/freckle/stackctl/issues
Source repo head: git clone https://github.com/freckle/stackctl
Uploaded by PatrickBrisbin at 2025-02-24T15:12:45Z

Modules

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for stackctl-1.7.3.3

[back to package description]

Stackctl

Hackage CI

Manage CloudFormation Stacks through specifications.

About

stackctl is a command-line tool for working with Stack Specifications. A Stack Specification is a file-system format for describing deployed (or to-be-deployed) CloudFormation Stacks including the Template, Parameters, and Tags. stackctl can be used to pretty-print, diff, and deploy these specifications.

This project also contains a Haskell library for doing the same.

Install

Pre-requisites

Scripted

curl -L https://raw.githubusercontent.com/freckle/stackctl/main/install | bash

[!NOTE] Some in the community have expressed concerns about the security of so-called "curl-sh" installations. We think the argument has been pretty well debunked, but feel free to use the manual steps instead.

Manual

Go to the latest release and download the .tar.gz asset appropriate for your OS. Navigate to the directory containing the downloaded file and run:

tar xvf stackctl-*.tar.gz
cd stackctl

User installation:

make install PREFIX="$HOME/.local"

Global installation

sudo make install

Usage

Once installed, see:

The man pages are also available online, but contain documentation as of main, and not your installed version.

Release

To trigger a release in this project, merge a commit to main with a conventionally-formatted commit message. In short, one that starts with:

  1. fix: to trigger a patch release,
  2. feat: for minor, or
  3. feat!: for major

Conventional commits are not required generally for this project, though you're free to always use them. They are only required when you want to trigger a release.

Comparison to AWS CloudFormation Git Sync

AWS CloudFormation Git Sync was recently released by AWS. It allows you to link a repository on GitHub to a CloudFormation Stack. The repository contains a "deployment file" that defines a template-file-path, parameters, and tags -- effectively, a Stack Specification.

When AWS notices updates to the deployment or template file land on a defined branch, it updates the configured Stack accordingly, emitting events to SNS as it does.

This is great for simple use-cases, and we fully expect they'll improve and extend it such that it obviates Stackctl one day. In the meantime, there are currently the following limitations when compared to Stackctl:

  1. A repository can only target a single account and region
  2. There is no changeset flow amenable to previewing changes via PRs. You update the file(s) on main and it syncs, that's it. If you're using a PR, you have only linting and human review as possible pre-deployment steps.
  3. There is no way to specify description, capabilities, or dependencies
  4. As of 12/23, there seemed to be some bugs, and the setup installs a managed event bridge that "phones home", sending events about your updates to some other AWS account (source)

Relationship to CloudGenesis

CloudGenesis is a project that also takes a directory of Stack Specifications and deploys them when changed. Its on-disk format inspired ours and, in fact, directories built for CloudGenesis can be managed by stackctl (not necessarily the other way around).

The key differences are:


CHANGELOG | LICENSE