Summary: we're excited to announce Infracost v0.9.14 and our new composable GitHub Actions 🎉 This release also includes new GitHub comment and Slack message output formats, 6 new AWS/Azure/Google resources, a summary table in PR comments, improved CLI output, and faster runs. We recommend everyone to upgrade!
How did we get here?
It's a bit noisy! We'd received a bunch of feedback about Infracost's CI/CD integrations - let's face it, everyone's Terraform workflow is different — so in November we decided to try a new approach… Let's rewind for a second: around a year ago, we made an 86-line bash script that ran Infracost on a repo's main and pull request branches, it then ran
git diff with some tricks on the CLI output, and
curled it to GitHub to post a PR comment as you can see below:
As with most useful bash scripts, it grew arms and legs over time and went from 86 lines to 647! It handled a bunch of workflows, and edge cases, in GitHub, GitLab, CircleCI, Bitbucket and Azure DevOps - it even made you breakfast! The original bash script was packaged-up in a Docker image, which meant it also had to include Terraform, Terragrunt, git and a bunch of other stuff. We then had to add multiple Terraform versions to support everyone's workflows and the image grew to ~1GB uncompressed 🤮
So in November we went back to the drawing board, put away the 1 year old bash script, and developed a new composable way of using Infracost in CI/CD pipelines. Thank you bash, you served us well and we still love you for prototyping in CI/CD.
New composable GitHub Actions
The new Infracost GitHub Actions provide a composable way of using Infracost in your workflow. These native JS actions can be used to install Infracost, and comment on pull requests using different behaviors so you can control the noise level (described below). This enables the Infracost output to be used by other actions too, e.g. to set cost policies or post messages to Slack!
If you used our old infracost-gh-actions repo, please follow our migration guide to use the new new actions repo. The infracost-gh-actions repo will be deprecated in the next Infracost release but will continue to work without issues.
The "setup" action installs the Infracost CLI using SemVer ranges. This enables you to automatically get the latest backward compatible changes in the 0.9 release (e.g. new resources/features and bug fixes) without worrying about CI/CD pipelines breaking.
Configure pull request comments
The "comment" action lets you configure how pull request comments are posted using a
behavior and a
Behavior describes how and when comments should be posted; we support four options:
update: Create a single comment and update it on changes. This is a good default. The GitHub comments UI shows what/when changed when the comment is updated. Pull request followers will only be notified on the comment create (not updates), and the comment will stay at the same location in the comment history.
delete-and-new: Delete previous cost estimate comments and create a new one. Pull request followers will be notified on each comment.
hide-and-new: Minimize previous cost estimate comments and create a new one. Pull request followers will be notified on each comment.
new: Create a new cost estimate comment. Pull request followers will be notified on each comment.
target-type describes where the comment should be posted against, which can be either
pull-request (default) or
We've created 10 examples of how the Infracost actions can be used in different workflows, including multi-project setups using a build matrix, setting cost or percentage thresholds for comments using the Infracost JSON output, and posting cost estimates to Slack.
We'd love to see the community contribute their examples too; we've even developed automated tests for the examples 😎
New output formats
infracost output command can be used to combine and output Infracost JSON files in different formats. This is useful when you want to combine cost estimates across different projects, e.g. Terraform mono repos or Terragrunt projects, or produce different formats from the same cost estimate, e.g. create a GitHub comment, and a Slack message when a threshold is crossed. We've added two new formats to this command:
github-comment: produces a Github-flavored Markdown comment. This is used internally by the new Infracost GitHub Actions; if you use GitHub with other CI/CD systems, you can also use this format to create comments that can then posted to GitHub.
slack-message: produces a Slack-flavored Markdown message. Slack message blocks have a 3000 char limit so the Infracost CLI automatically truncates the middle of slack-message output format if required.
We added support for 6 new resources:
- AWS: Transfer Family, RDS additional backup storage
- Azure: Storage Account (V2), Front Door, Private Link Endpoints
- Google: Secret Manager
Our automated tests caught the price changes AWS announced at re:Invent and we've updated CLI to handle them.
Create GitHub issues if you need support for other resources. Checkout our contributing guide if you'd like to join the 50+ community members who have added resource mappings already. Once a mapping has been coded, the whole community enjoys the benefits.
Summary table in PR comments
Pull/merge request comments in GitHub, GitLab and Azure DevOps Repos now show a summary table. This enables you to quickly understand the overall changes and review the detailed diff if the changes seem significant. Unfortunately we couldn't do the same for Bitbucket comments as they don't support HTML yet; please upvote this GitHub issue if you'd like us to use their markdown format instead.
Improved CLI output
Infracost CLI commands now include a summary of the resources at the bottom, which can be expanded to show details with the
--show-skipped flag. The summary shows the total number of cloud resources, how many include usage-based costs, how many weren't estimated, and how many are free.
The CLI diff output has been simplified to show changes in one line, similar to how Terraform and Pulumi show changes. Previously we showed 2 lines: one showing the old resource being removed, and one showing the new resource being added.
Save to file
output commands now support an
--out-file flag, which can be used to save the output to a file. This is specially helpful when the
--format flag is used as you can save the output and use it in subsequent actions.
The sync-usage-file flag now runs a lot faster as we've parallelized the API calls to fetch usage data from AWS CloudWatch. If you're using this feature, we highly recommend you upgrade!
We ❤️ seeing feedback, bug reports and pull requests from the community! To pick a few: Josh Niec and Maksym Vlasov made their first contributions, Simon-jt kept improving the Cloud Pricing API deployment, Pat Myron simplified a bunch of test files, and Hugo Rut and Sina Bakhtiari are making it easier for contributors to add resources.
Especial thanks to the many users who gave us feedback on our old GitHub Action, particularly:
- Jon Leemon, Sushant Pradhan and Semjon Bibow for highlighting the issues with our long/complicated diff.sh bash script.
- AJ Bowen and Didier Caron for pointing us in the right direction about pull request commenting behaviors.
- Frank Chiarulli Jr. for inspiring the pull request summary table.
Up next, we're focusing on the following areas. You keep upvoting and sharing your comments in the following GitHub discussions and we'll keep shipping
- Sharing cost estimates
- Learning about your Infracost CI/CD journey
- Investigating cost policies
- Improving our Atlantis integration
- Composable GitLab CI Templates