Releases: tfutils/tfscaffold
Releases · tfutils/tfscaffold
v2.3.3
Multi-group support and OpenTofu compatibility
Features
- Multi-group support:
-g/--group/--groupsnow accepts comma-delimited values, e.g.-g dev,live. Each group's tfvars file is loaded in order. Closes #41. - OpenTofu compatibility: All terraform binary invocations now use
${TERRAFORM_BIN:-terraform}. SetTERRAFORM_BIN=tofuto use OpenTofu as a drop-in replacement.
Full Changelog: v2.3.1...v2.3.3
v2.3.2
Multi-group support
The -g/--group flag (also --groups) now accepts comma-delimited values, e.g. -g dev,live, loading each group's tfvars file in order before environment-specific vars.
- IFS-safe parsing via
read -ra - Safe under
set -uo pipefailwith empty input - Groups are loaded in specified order, after global/region vars but before environment vars
Closes #41.
Full Changelog: v2.3.1...v2.3.2
v2.3.1
Backport downstream improvements to lambda, s3bucket, and cognito modules
Features
- Lambda: Replaced external data source + Node.js script with native
aws_lambda_layer_versionfor CloudWatch Lambda Insights - Lambda: Added ADOT OpenTelemetry layer support
- Lambda: Added SSM Parameters & Secrets extension layer support
- Lambda: Added memory usage CloudWatch alarm
- Lambda: Error alarm now supports percentage-based thresholds
- Lambda: Added destroy-time placeholder handling for S3 function source
- Cognito: SMS IAM role and configuration gated on
sms_enabledvariable - Cognito: Added
software_token_mfa_configurationsupport - Cognito: Extracted
ui_customisationas standalone variable - Cognito: Added
generate_secretvariable for cognito user pool client - Cognito: Added
callback_urlsvariable withapp_fqdnfallback - Cognito: Added
user_pool_domain_readyoutput - terraform.sh: Added edge lambda logging support
Bug Fixes
- Lambda: Added length guards on S3 bucket/key/version references during destroy
- Cognito: Fixed recovery mechanism priority ordering
- Cognito: Fixed trailing whitespace
Chores
- S3bucket: Removed deprecated
expected_bucket_ownerfrom accelerate, CORS, and encryption configs - S3bucket: Fixed
lifecycle_configuration_idoutput - S3bucket: Uncommented
ownership_controlsoutput - Lambda: Removed
externalprovider dependency (and ~63K lines of bundled Node.js) - Regenerated terraform-docs READMEs
Full Changelog: v2.3.0...v2.3.1
v2.3.0
2.3.0 (24/04/2026)
BREAKING CHANGES:
- Shebang changed from
#!/bin/bashto#!/usr/bin/env bashfor portability. set -uo pipefailnow enforced across all scripts. Unbound variable access
will now cause failures rather than silent empty expansion.- Bootstrap tag keys changed from capitalised (
tfscaffold:Environment) to
lowercase (tfscaffold:environment) for consistency with module conventions.
FEATURES:
error_and_dienow accepts an optional second argument for custom exit codes.TF_VAR_aws_account_idandTF_VAR_environmentare now exported automatically,
making them available to Terraform without explicit variable passthrough.- S3 backend configuration now always includes
encrypt = true. - S3 backend configuration now injects
profilewhenAWS_PROFILEis set,
enabling named profile support for state access. - Remote dynamic tfvars now supports multiple files: all
*.tfvarsand
*.tfvars.jsonfiles under the environment's S3 prefix are downloaded,
replacing the previous singledynamic.tfvarspattern. - New
outputaction for standalone terraform output retrieval, with optional
JSON file output support. - IAM role module now supports
sts:ExternalIdconditions via optional
external_idfield on trusted principals. - SNS module now supports
content_based_deduplicationfor FIFO topics. - Lambda module now supports
reserved_concurrent_executions.
BUG FIXES:
- Fixed unquoted variable expansions throughout
terraform.sh(~20 instances),
including two HIGH-severityrmcommands insidetrapstatements. - Fixed
set -usafety: alldeclarestatements now initialised, empty array
access guarded, and${AWS_DEFAULT_REGION:-}defaulted. - Fixed cognito module
access_token_validitydefault key typo:
validitycorrected tovalue. - Fixed KMS module
aliasvariable default from string"null"to HCLnull. - Fixed VPC module
force_destroyfrom string"true"to booleantrue. - Fixed missing semicolons throughout
terraform.shfor style consistency. - Fixed
lockfilevariable quoting in conditional test.
CHORES:
- Removed dead code:
data.aws_iam_policy_document.default_assumerolefrom
bootstrap (never referenced). - Removed duplicate
data.aws_iam_policy_document.xrayfrom lambda module
(functionality already inlambda_core.tf). - Removed committed state files from bootstrap directory.
- Renamed
module.s3bucket_other.tftomodule.s3bucket_bestpractice.tfto
match the module name it declares. - Replaced TODO comment on cognito SNS policy with explanation of why
sns:Publishon*is required for Cognito MFA/SMS. - Regenerated all terraform-docs README files.
- Added vim modelines to all shell scripts.
SECURITY:
- Updated
esbuildfrom 0.24.0 to ^0.25.0 (CVE: dev server request forgery,
medium severity). - Updated
undicifrom 6.21.0 to >=6.21.1 (CVE: insufficiently random values,
medium severity).
Full Changelog: v2.0.1...v2.3.0
v2.0.1
2.0.1 (12/02/2025)
- Updated included modules to follow new standard and include other generics
Full Changelog: v2.0.0...v2.0.1
v2.0.0
2.0.0 (02/12/2024)
BREAKING CHANGES:
- It is now possible, with a validation check, to destroy the bootstrap.
- Bootstrap and the example component have been completely rewritten.
.terraformandbackend_tfscaffold.tfno longer removed during bootstrap cleanup- Bootstrap and examples now configured to use terraform >= 1.10.0.
- Bootstrap and examples now require terraform > 1.0.0.
- Bootstrap and examples now require AWS Provider ~> 5.79.0.
- tfscaffold tagging default have changed to prefix tag keys with tfscaffold:
FEATURES:
- Bootstraps can now be fully and cleanly destroyed, however only interactively,
requiring a manual text input to confirm. - A DynamoDB lock table has been added to Bootstrap.
- Bootstrap now uses AWS Provider v4+ S3 Bucket property resources instead
of declaring all configuration in a single bucket resource. - The example component has been rewritten to reflect modern naming standards,
and idempotency structures. - An example module has been added, which is called from the example component.
- Example region changed to eu-west-2.
bin/docs.shhas been added to recursively apply terraform-docs
(https://github.com/terraform-docs/terraform-docs) to all directories beneath
the project root that contain a variables.tf file.- Remove unnecessary compatability log entry for auto-approve.
- Remove unnecessary non-current version transitions from the bootstrap bucket.
BUG FIXES:
- Do not write
.terraform.output.jsonafter a destroy. -compact-warningsis no longer passed toterraform init
CHORES:
.gitignoreupdated
Full Changelog: v1.10.2...v2.0.0
v1.10.2
1.10.2 (02/12/2024)
BUG FIXES:
- Correct
terraform.output.jsonto.terraform.output.json
Full Changelog: v1.10.1...v1.10.2
v1.10.1
1.10.1 (02/12/2024)
BUG FIXES:
- Add
**/terraform.output.jsonto the default .gitignore
Full Changelog: v1.10.0...v1.10.1
v1.10.0
1.10.0 (02/12/2024)
FEATURES:
- Apply/Refresh/Destroy actions now output a terraform.output.json file containing
the contents of terraform output -json -no-color. On by default, can be disabled. - Ignore -w/--compact-warnings for commands that don't support it so the user
can specify it all the time without worrying which commands support it.
BUG FIXES:
- Fix plugin-cache base directory from
$(pwd)to${base_path}so it is correctly
located if terraform.sh is invoked from somewhere other than the project root.
CHORES:
- Fix inappropriate double-quoting of non-interpolated strings.
Full Changelog: v1.9.1...v1.10.0
v1.9.1
1.9.1 (06/09/2024)
BUG FIXES:
- Correct selection of
lockfile_or_upgrade, thanks to @edmundcraske-bjss
Full Changelog: v1.9.0...v1.9.1