import argparse import os import subprocess import sys def main(argv=None): parser = argparse.ArgumentParser( description="""Run terraform-docs on a set of files. Follows the standard convention of pulling the documentation from main.(tf|tofu) in order to replace the entire README.md file each time.""" ) parser.add_argument( "--dest", dest="dest", default="README.md", ) parser.add_argument( "--sort-inputs-by-required", dest="sort", action="store_true", help="[deprecated] use --sort-by-required instead", ) parser.add_argument( "--sort-by-required", dest="sort", action="store_true", ) parser.add_argument( "--with-aggregate-type-defaults", dest="aggregate", action="store_true", help="[deprecated]", ) parser.add_argument("filenames", nargs="*", help="Filenames to check.") args = parser.parse_args(argv) dirs = [] for filename in args.filenames: if os.path.realpath(filename) not in dirs and ( filename.endswith(".tf") or filename.endswith(".tofu") or filename.endswith(".tfvars") ): dirs.append(os.path.dirname(filename)) retval = 0 for dir in dirs: try: procArgs = [] procArgs.append("terraform-docs") if args.sort: procArgs.append("--sort-by-required") procArgs.append("md") procArgs.append("./{dir}".format(dir=dir)) procArgs.append(">") procArgs.append("./{dir}/{dest}".format(dir=dir, dest=args.dest)) subprocess.check_call(" ".join(procArgs), shell=True) except subprocess.CalledProcessError as e: print(e) retval = 1 return retval if __name__ == "__main__": sys.exit(main())