This module contains helper scripts used in CircleCI jobs of Gruntwork Modules, including:
configure-environment-for-gruntwork-module: This script is meant to be run in a Circle CI job to configure the
build environment for a typical Gruntwork module, including installing Terraform, Packer, Go, and Terragrunt, and
using Go modules to install dependencies.
run-go-tests: This script is meant to be run in a CircleCI job to run automated tests written in Go with the proper
settings for the test path (so it works with GOPATH), parallelism, and timeouts.
upload-github-release-assets: This script can be used to automatically upload assets to a GitHub
Release. For example, if you need to build new binaries of some
app each time you release, you can use this script to upload those binaries to GitHub.
build-go-binaries: This script is meant to be run in a CircleCI job to build binaries for an app written in Go. It
uses gox under the hood and provides reasonable defaults for parallelism, build flags, file naming, and
os/architecture options.
We recommend running this command in the dependencies section of circle.yml:
dependencies:
override:
# Install the Gruntwork Installer
- curl -Ls https://raw.githubusercontent.com/gruntwork-io/gruntwork-installer/master/bootstrap-gruntwork-installer.sh | bash /dev/stdin --version 0.0.9# Use the Gruntwork Installer to install the gruntwork-module-circleci-helpers module
- gruntwork-install --module-name "gruntwork-module-circleci-helpers" --repo "https://github.com/gruntwork-io/module-ci" --tag "0.0.5"
Using the configure-environment-for-gruntwork-module helper
The configure-environment-for-gruntwork-module script will do the following:
Install Terraform, Packer, and Go. If you wish to customize the version of each app that gets installed, you can
use the --terraform-version, --packer-version, and --go-version flags, respectively.
Run go get -v -t -d for folders you specify via the --go-src-path parameter.
We recommend running this helper in the dependencies section of circle.yml:
machine:
# Add the folders where configure-environment-for-gruntwork-module installs binaries to the PATH
environment:
PATH: $PATH:$HOME/terraform:$HOME/packer:$HOME/glide/linux-amd64
dependencies:
override:
# Install the Gruntwork Installer
- curl -Ls https://raw.githubusercontent.com/gruntwork-io/gruntwork-installer/master/bootstrap-gruntwork-installer.sh | bash /dev/stdin --version 0.0.9# Use the Gruntwork Installer to install the gruntwork-module-circleci-helpers module
- gruntwork-install --module-name "gruntwork-module-circleci-helpers" --repo "https://github.com/gruntwork-io/module-ci" --tag "0.0.1"# Configure the CircleCI environment using the gruntwork-module-circleci-helpers module
- configure-environment-for-gruntwork-module --go-src-path test --go-src-path modules/my-go-app
# Cache the folders where configure-environment-for-gruntwork-module installs binaries
cache_directories:
- ~/terraform
- ~/packer
Three key things to note:
While the configure-environment-for-gruntwork-module script can install Terraform, Packer, and Go, it cannot
automatically add them to your PATH. Therefore, you have to do it yourself in the machine section of
circle.yml as shown above.
Use the --go-src-path option to tell configure-environment-for-gruntwork-module where your Go source files are
located. You can specify the flag more than once if you have more than one Go app, as shown in the example above.
The configure-environment-for-gruntwork-module script will run go get -v -t -d in each of those folders to
install their dependencies.
To avoid reinstalling Terraform, Packer, and Glide over and over again, use cache_directories as shown above.
Using the run-go-tests helper
The run-go-tests can run automated tests written in Go with the proper settings for the test path (so it works with
GOPATH), parallelism, and timeouts.
We recommend running this helper in the test section of circle.yml:
test:
override:
- run-go-tests --path test
A few things to note:
Use the --path parameter to tell run-go-tests where your tests are located. The path should be relative to your
project root. The default is the present working directory, which in Circle CI, is the root of your Git checkout.
Use the --packages parameter to specify which packages to test. The default is the output of running
glide novendor in --path.
The run-go-tests script will add a -short parameter to the test command when not running on the master branch.
Your tests can read in the value of this flag as shown here to determine if a
long-running test should be executed or not.
Passing extra arguments
Sometimes, you might find that you need to tweak a few options to make your go tests run a certain way,
usually to help in debugging them.
To achieve this, you're able to pass extra command line arguments to the go test command
through a commit message.
For example, to run a specific test, your last commit could look something like this:
Some commit message. [go-test-args=-run SomeTestFunc]
Now when you push to the CI server, only SomeTestFunc is tested. You are able to set multiple options
as you normally would in the command line:
Some commit message. [go-test-args=-run SomeTestFunc -cpu 2]
Using the upload-github-release-assets helper
To use this helper, you must first create a GitHub access
token and set it as the environment
variable GITHUB_OAUTH_TOKEN.
After that, in CircleCI, you can run the upload-github-release-assets script as follows:
That is, you just pass in a list of assets to upload, and the script will automatically figure out the proper GitHub
repo and tag to use based on CircleCI environment variables. If
you're not using CircleCI or want to customize some of the settings, you may use the following options:
--github-repo-owner: The user or organization that owns the repo (e.g. gruntwork-io).
--github-repo-name: The name of the repo (e.g. module-ci).
--git-tag: The git tag for which assets should be pushed (e.g. v0.0.3).
Using the build-go-binaries helper
This script accepts the following options:
--src-path: The path, relative to the project root, where Go source files can be found. Default: current working
directory.
--dest-path: The path, relative to the project root, in which the binaries should be created.
This will create 32 bit and 64 bit binaries for Linux, OS X, and Windows in the foo/bin folder with the name
myapp_<os>_<arch> (e.g. myapp_linux_amd64, myapp_windows_386.exe, etc).
If you run build-go-binaries with no options, it will build the source code in the current working directory into a
bin folder and pick reasonable defaults for all the other values using CircleCI environment
variables.
Questions? Ask away.
We're here to talk about our services, answer any questions, give advice, or just to chat.
{"treedata":{"name":"root","toggled":true,"children":[{"name":".circleci","children":[{"name":"config.yml","path":".circleci/config.yml","sha":"a84097c44e1f76dc9f80279d5c9db2de70bd8e19"}]},{"name":".gitignore","path":".gitignore","sha":"1cd2e7ca72e5102b6b85a0c1de82d28c99d4287e"},{"name":".pre-commit-config.yaml","path":".pre-commit-config.yaml","sha":"5ed0bc7f2115f7400ca8e1dff435c584323c2694"},{"name":"CODEOWNERS","path":"CODEOWNERS","sha":"8756b38c5d955dfa04e10eda748ee62fc361d244"},{"name":"LICENSE.txt","path":"LICENSE.txt","sha":"f4e3d9bd4717a044ed31ad847a300eee74371a78"},{"name":"README-CircleCI.adoc","path":"README-CircleCI.adoc","sha":"046b030ed6e15023530d4a29a3dcf60ac7982d27"},{"name":"README-Jenkins.adoc","path":"README-Jenkins.adoc","sha":"2587e3b59001ed39eaac88468202afdcbc2332af"},{"name":"README-Terraform-Terragrunt-Pipeline.adoc","path":"README-Terraform-Terragrunt-Pipeline.adoc","sha":"1ad99530c6cf984aa638e7c2fcd0bf4d4987ce12"},{"name":"README-TravisCI.adoc","path":"README-TravisCI.adoc","sha":"45e0d32aae5d971ee7e7670dc0da94d364c14457"},{"name":"README.adoc","path":"README.adoc","sha":"47cb10253af3b2e514678434a61ad681c02a88f2"},{"name":"_ci","children":[{"name":"deploy.sh","path":"_ci/deploy.sh","sha":"c41fc3ee5a4ad6b6a9fd0e4a09e7ee4219d18e6a"},{"name":"output-debug-values.sh","path":"_ci/output-debug-values.sh","sha":"fa613638c76c2031b1427c2daa1d66f71fedad68"}]},{"name":"_docs","children":[{"name":"circleci-cicd-architecture.png","path":"_docs/circleci-cicd-architecture.png","sha":"06f8a55b7c123b6e589333a1ff1c3d90c43222d6"},{"name":"circleci-icon.png","path":"_docs/circleci-icon.png","sha":"d4e8df17858e6f230ff9e8d90ea388b3ff340b79"},{"name":"jenkins-architecture.png","path":"_docs/jenkins-architecture.png","sha":"a35a534eb7f13547e232635262d6b1c1506e9230"},{"name":"jenkins-icon.png","path":"_docs/jenkins-icon.png","sha":"cfb474486acb167b655c22a400fe5cc999959164"},{"name":"terraform-icon.png","path":"_docs/terraform-icon.png","sha":"85602f11c76fd989788112ba40c08d979ddb1164"},{"name":"tftg-pipeline-architecture.png","path":"_docs/tftg-pipeline-architecture.png","sha":"a95ebd4883285ae616c62e767e346c036c97389e"},{"name":"travisci-cicd-architecture.png","path":"_docs/travisci-cicd-architecture.png","sha":"c7da609e901de1baba84918893af9016c3da78ed"},{"name":"travisci-icon.png","path":"_docs/travisci-icon.png","sha":"57116e900f797c8f35399929fb3a24b2cf0e7181"}]},{"name":"examples","children":[{"name":"ecs-deploy-runner","children":[{"name":"README.md","path":"examples/ecs-deploy-runner/README.md","sha":"f7dbc2c05f78cdeaff779eecfef93594f7a9c175"},{"name":"main.tf","path":"examples/ecs-deploy-runner/main.tf","sha":"deb1a19a18e25342377451940b566aa6e031c287"},{"name":"outputs.tf","path":"examples/ecs-deploy-runner/outputs.tf","sha":"5d043c276e64e390f78fd92f89683423b87812cf"},{"name":"variables.tf","path":"examples/ecs-deploy-runner/variables.tf","sha":"a6512d265d355af883b7a3efe290ca09698bd51c"}]},{"name":"iam-policies","children":[{"name":"README.md","path":"examples/iam-policies/README.md","sha":"4eaf42cd7b4bc254ac9aabfaa8d6c1b4b8cc4281"},{"name":"main.tf","path":"examples/iam-policies/main.tf","sha":"2a1c9d0380b66da922b51e259b0691987de595b1"},{"name":"vars.tf","path":"examples/iam-policies/vars.tf","sha":"ffd4eed9234a389e6809cbb1c149efdbe778578e"}]},{"name":"jenkins","children":[{"name":"README.md","path":"examples/jenkins/README.md","sha":"5c76af2853297fa24f0ab44dc1cdcdf6ba8e1a55"},{"name":"docker-compose.yml","path":"examples/jenkins/docker-compose.yml","sha":"cdbb01e4c39d6ad67656d7997355b03027f2358e"},{"name":"main.tf","path":"examples/jenkins/main.tf","sha":"e1f8f860a255eb25cf8411e328c1495d33d2a26f"},{"name":"mock","children":[{"name":"mock-user-data.sh","path":"examples/jenkins/mock/mock-user-data.sh","sha":"610ba8091622d0bbec4301093b63c4263b5939ae"},{"name":"mount-ebs-volume","path":"examples/jenkins/mock/mount-ebs-volume","sha":"faa2394ad8a7a35657fb7f34b2014c7f05224e56"},{"name":"systemctl","path":"examples/jenkins/mock/systemctl","sha":"c656c65a7fd2b411548adb7865bc9c065333ad2e"}]},{"name":"outputs.tf","path":"examples/jenkins/outputs.tf","sha":"c23cb7b34a3e1c87c303e6b6167537f0d8c5853a"},{"name":"packer","children":[{"name":"jenkins.json","path":"examples/jenkins/packer/jenkins.json","sha":"fa01efbd48ad2e5f80859ff5349ac6b2b2cf3522"}]},{"name":"user-data","children":[{"name":"user-data.sh","path":"examples/jenkins/user-data/user-data.sh","sha":"19a4ccc9a1f8cb264d6995473ece0c2b02a0091a"}]},{"name":"vars.tf","path":"examples/jenkins/vars.tf","sha":"9677907a3c79dac888c623251e43e992872d72fe"}]}]},{"name":"modules","children":[{"name":"aws-helpers","children":[{"name":"README.md","path":"modules/aws-helpers/README.md","sha":"2fc74c09e7880238a4c049022f455809549d2ee1"},{"name":"bin","children":[{"name":"publish-ami","path":"modules/aws-helpers/bin/publish-ami","sha":"1d5697d411cbeed05734fb356ffbf598f7e4eeeb"}]},{"name":"install.sh","path":"modules/aws-helpers/install.sh","sha":"2700711d6a80c6f6c218e4b3d5b1b0cfe4d7609b"}]},{"name":"build-helpers","children":[{"name":"README.md","path":"modules/build-helpers/README.md","sha":"0c9d44fcb852f57f1c044eb5f3340ec6e6705076"},{"name":"bin","children":[{"name":"build-docker-image","path":"modules/build-helpers/bin/build-docker-image","sha":"0fde55c7e1985925fe00d2d399b190ae6b2edd26"},{"name":"build-packer-artifact","path":"modules/build-helpers/bin/build-packer-artifact","sha":"655fc4a37acd6402fd13e38fecf84170ef156081"}]},{"name":"install.sh","path":"modules/build-helpers/install.sh","sha":"a132488127b88ef8268399a0b3852aa5e0967a20"}]},{"name":"check-url","children":[{"name":"README.md","path":"modules/check-url/README.md","sha":"070d26ac5f4cf136fc28a69d97df6710a341cf24"},{"name":"bin","children":[{"name":"check-url","path":"modules/check-url/bin/check-url","sha":"4e6c57dd70e0a385fb23814619dc917b7c527e57"}]},{"name":"install.sh","path":"modules/check-url/install.sh","sha":"488fad728f75e4ffb6d7156b7cc9ee9682d60183"}]},{"name":"circleci-helpers","children":[{"name":"README.md","path":"modules/circleci-helpers/README.md","sha":"3e58d0856dd6ae04bbd22814d6243b0225a689d9"},{"name":"bin","children":[{"name":"install-go-version","path":"modules/circleci-helpers/bin/install-go-version","sha":"8a0121205f24358a00af129e729795013ebf7edb"},{"name":"place-repo-in-gopath","path":"modules/circleci-helpers/bin/place-repo-in-gopath","sha":"ac7085bb304a2004050e676bea658f039493fdcc"}]},{"name":"install.sh","path":"modules/circleci-helpers/install.sh","sha":"313288f93c55678a883f53106471a21f8ebbb2fa"}]},{"name":"docs-generator","children":[{"name":"Gopkg.lock","path":"modules/docs-generator/Gopkg.lock","sha":"ed9374f63ba7f58682ce32280d18f1eb8b2c1b64"},{"name":"Gopkg.toml","path":"modules/docs-generator/Gopkg.toml","sha":"4c60aa943b9c6e60b4b29de43dc50de703949053"},{"name":"README.md","path":"modules/docs-generator/README.md","sha":"2f6d3cccf601b029b37d1a1174afb8ef41006b84"},{"name":"cli.go","path":"modules/docs-generator/cli.go","sha":"9b21b3b996f6c9a664e537f62473ba67ac9522f7"},{"name":"cli_test.go","path":"modules/docs-generator/cli_test.go","sha":"5b2b8f8a0ac43aed3d7fe43a0eb4d9eb6e640f56"},{"name":"errors.go","path":"modules/docs-generator/errors.go","sha":"12e1b3be5167b2a5bf2c4ab9571784763c3b2139"},{"name":"file.go","path":"modules/docs-generator/file.go","sha":"739560fb3f7de0355130e5617c6a435bf34fa905"},{"name":"generator.go","path":"modules/docs-generator/generator.go","sha":"17c9aebb915efeb44dec7f7834ea9b963f59cbd9"},{"name":"generator_test.go","path":"modules/docs-generator/generator_test.go","sha":"f3785b83e6869696c0f3e9ebf91d4d1027209186"},{"name":"glob.go","path":"modules/docs-generator/glob.go","sha":"850d3fb4927b9d55a33edfb24691689080ae762c"},{"name":"glob_test.go","path":"modules/docs-generator/glob_test.go","sha":"f64539547ba90ff76bf6307c777b9093debbb4cc"},{"name":"logger.go","path":"modules/docs-generator/logger.go","sha":"512a924261dac04c1254507b31ef9c3a501857ed"},{"name":"main.go","path":"modules/docs-generator/main.go","sha":"9d71ef7296f8ed369d63696d3b67d3b659188adc"},{"name":"placeholder.go","path":"modules/docs-generator/placeholder.go","sha":"1f67dd342324270fc52afe95db3018cfdda00f99"},{"name":"placeholder_test.go","path":"modules/docs-generator/placeholder_test.go","sha":"0a37f79ed169b05af416005218fb761b04613e0e"},{"name":"test-fixtures","children":[{"name":"all-file-types-and-subfolders-copy-everything-output","children":[{"name":"another-subfolder","children":[{"name":"non-documentation-empty.css","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/another-subfolder/non-documentation-empty.css","sha":"b2f431e42186ead4b40e69c44bc32e6d635c8a9e"},{"name":"non-documentation.java","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/another-subfolder/non-documentation.java","sha":"7477f52ad80bd3ab173dbb90be14733ed7df9a0d"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/documentation.md","sha":"361dc342c8710689cabce350177f9a76c7c273ab"},{"name":"documentation.txt","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/documentation.txt","sha":"f2d086f4d9adc789457cb4e3cbb8900c98e38edb"},{"name":"logo.png","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/logo.png","sha":"4b4af5bb80a3b81f5b05aeb1fbf06febeb2006a5"},{"name":"non-documentation.yml","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/non-documentation.yml","sha":"854b47f81dec8dedf335fa2c4990296b8a1284c6"},{"name":"subfolder","children":[{"name":"another-subfolder","children":[{"name":"documentation-empty.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/subfolder/another-subfolder/documentation-empty.md","sha":"dd401f0d6a397258a63a406f3fc3e3c365e396d6"},{"name":"non-documentation.json","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/subfolder/another-subfolder/non-documentation.json","sha":"e2ce87d2be184a735ec4b82fb8c36d97dd6bbf6f"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/subfolder/documentation.md","sha":"1b978b8c7d0e1ca8c9a704f1e2b3a0dd10c26c14"},{"name":"non-documentation.tf","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/subfolder/non-documentation.tf","sha":"3c62b0cb12adb708af8b66fb44531f66b3133cf6"},{"name":"subfolder","children":[{"name":"non-documentation.sh","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-copy-everything-output/subfolder/subfolder/non-documentation.sh","sha":"18ce52b03559084b48242eb3bcac8095d5619e86"}]}]}]},{"name":"all-file-types-and-subfolders-docs-excluded-output","children":[{"name":"another-subfolder","children":[{"name":"non-documentation-empty.css","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-docs-excluded-output/another-subfolder/non-documentation-empty.css","sha":"b2f431e42186ead4b40e69c44bc32e6d635c8a9e"},{"name":"non-documentation.java","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-docs-excluded-output/another-subfolder/non-documentation.java","sha":"1a50193c47ab5146fb5558774da3da602cc32240"}]},{"name":"non-documentation.yml","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-docs-excluded-output/non-documentation.yml","sha":"179e4e4c6101d2a0856b0c5aba09359558d8dfc2"},{"name":"subfolder","children":[{"name":"another-subfolder","children":[{"name":"non-documentation.json","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-docs-excluded-output/subfolder/another-subfolder/non-documentation.json","sha":"d9c65fab379e06a5fda95ba163c90149cc6ccd90"}]},{"name":"non-documentation.tf","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-docs-excluded-output/subfolder/non-documentation.tf","sha":"a7573bb16167db1119d2976ff008d41755dd9784"},{"name":"subfolder","children":[{"name":"non-documentation.sh","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-docs-excluded-output/subfolder/subfolder/non-documentation.sh","sha":"b9e3ac3cb6328555d8bee673b171f06f777e0d69"}]}]}]},{"name":"all-file-types-and-subfolders-markdown-docs-only-output","children":[{"name":"another-subfolder","children":[{"name":"non-documentation-empty.css","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/another-subfolder/non-documentation-empty.css","sha":"b2f431e42186ead4b40e69c44bc32e6d635c8a9e"},{"name":"non-documentation.java","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/another-subfolder/non-documentation.java","sha":"1a50193c47ab5146fb5558774da3da602cc32240"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/documentation.md","sha":"361dc342c8710689cabce350177f9a76c7c273ab"},{"name":"documentation.txt","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/documentation.txt","sha":"04be4cc1e25385ba4a59ac13daac07488ba28cfc"},{"name":"logo.png","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/logo.png","sha":"02568aecb3b3c52059225968993cb2801f1f354f"},{"name":"non-documentation.yml","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/non-documentation.yml","sha":"179e4e4c6101d2a0856b0c5aba09359558d8dfc2"},{"name":"subfolder","children":[{"name":"another-subfolder","children":[{"name":"documentation-empty.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/subfolder/another-subfolder/documentation-empty.md","sha":"dd401f0d6a397258a63a406f3fc3e3c365e396d6"},{"name":"non-documentation.json","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/subfolder/another-subfolder/non-documentation.json","sha":"d9c65fab379e06a5fda95ba163c90149cc6ccd90"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/subfolder/documentation.md","sha":"1b978b8c7d0e1ca8c9a704f1e2b3a0dd10c26c14"},{"name":"non-documentation.tf","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/subfolder/non-documentation.tf","sha":"a7573bb16167db1119d2976ff008d41755dd9784"},{"name":"subfolder","children":[{"name":"non-documentation.sh","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-markdown-docs-only-output/subfolder/subfolder/non-documentation.sh","sha":"b9e3ac3cb6328555d8bee673b171f06f777e0d69"}]}]}]},{"name":"all-file-types-and-subfolders-no-matching-doc-patterns-output","children":[{"name":"another-subfolder","children":[{"name":"non-documentation-empty.css","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/another-subfolder/non-documentation-empty.css","sha":"b2f431e42186ead4b40e69c44bc32e6d635c8a9e"},{"name":"non-documentation.java","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/another-subfolder/non-documentation.java","sha":"1a50193c47ab5146fb5558774da3da602cc32240"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/documentation.md","sha":"34721f2be68a10bd006361d8f293068acff1317d"},{"name":"documentation.txt","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/documentation.txt","sha":"04be4cc1e25385ba4a59ac13daac07488ba28cfc"},{"name":"logo.png","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/logo.png","sha":"02568aecb3b3c52059225968993cb2801f1f354f"},{"name":"non-documentation.yml","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/non-documentation.yml","sha":"179e4e4c6101d2a0856b0c5aba09359558d8dfc2"},{"name":"subfolder","children":[{"name":"another-subfolder","children":[{"name":"documentation-empty.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/subfolder/another-subfolder/documentation-empty.md","sha":"dd401f0d6a397258a63a406f3fc3e3c365e396d6"},{"name":"non-documentation.json","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/subfolder/another-subfolder/non-documentation.json","sha":"d9c65fab379e06a5fda95ba163c90149cc6ccd90"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/subfolder/documentation.md","sha":"bb93770608db4b7d467ad86bdfcc07991ae7a02b"},{"name":"non-documentation.tf","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/subfolder/non-documentation.tf","sha":"a7573bb16167db1119d2976ff008d41755dd9784"},{"name":"subfolder","children":[{"name":"non-documentation.sh","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-no-matching-doc-patterns-output/subfolder/subfolder/non-documentation.sh","sha":"b9e3ac3cb6328555d8bee673b171f06f777e0d69"}]}]}]},{"name":"all-file-types-and-subfolders-output","children":[{"name":"another-subfolder","children":[{"name":"non-documentation-empty.css","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/another-subfolder/non-documentation-empty.css","sha":"b2f431e42186ead4b40e69c44bc32e6d635c8a9e"},{"name":"non-documentation.java","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/another-subfolder/non-documentation.java","sha":"1a50193c47ab5146fb5558774da3da602cc32240"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/documentation.md","sha":"361dc342c8710689cabce350177f9a76c7c273ab"},{"name":"documentation.txt","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/documentation.txt","sha":"f2d086f4d9adc789457cb4e3cbb8900c98e38edb"},{"name":"logo.png","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/logo.png","sha":"4b4af5bb80a3b81f5b05aeb1fbf06febeb2006a5"},{"name":"non-documentation.yml","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/non-documentation.yml","sha":"179e4e4c6101d2a0856b0c5aba09359558d8dfc2"},{"name":"subfolder","children":[{"name":"another-subfolder","children":[{"name":"documentation-empty.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/subfolder/another-subfolder/documentation-empty.md","sha":"dd401f0d6a397258a63a406f3fc3e3c365e396d6"},{"name":"non-documentation.json","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/subfolder/another-subfolder/non-documentation.json","sha":"d9c65fab379e06a5fda95ba163c90149cc6ccd90"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/subfolder/documentation.md","sha":"1b978b8c7d0e1ca8c9a704f1e2b3a0dd10c26c14"},{"name":"non-documentation.tf","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/subfolder/non-documentation.tf","sha":"a7573bb16167db1119d2976ff008d41755dd9784"},{"name":"subfolder","children":[{"name":"non-documentation.sh","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders-output/subfolder/subfolder/non-documentation.sh","sha":"b9e3ac3cb6328555d8bee673b171f06f777e0d69"}]}]}]},{"name":"all-file-types-and-subfolders","children":[{"name":"another-subfolder","children":[{"name":"non-documentation-empty.css","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/another-subfolder/non-documentation-empty.css","sha":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"},{"name":"non-documentation.java","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/another-subfolder/non-documentation.java","sha":"8098f9f26ec5dd770382cc1b4c93a982ffd70c45"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/documentation.md","sha":"6e7f6a1b6b31c0091ab66d99df487068fc1783a9"},{"name":"documentation.txt","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/documentation.txt","sha":"60303204b8834945d26d9ae7b184b2c7c1f01899"},{"name":"logo.png","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/logo.png","sha":"4b4af5bb80a3b81f5b05aeb1fbf06febeb2006a5"},{"name":"non-documentation.yml","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/non-documentation.yml","sha":"048500db13abd24c1896cd48dd1a940b5d6c7487"},{"name":"subfolder","children":[{"name":"another-subfolder","children":[{"name":"documentation-empty.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/subfolder/another-subfolder/documentation-empty.md","sha":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"},{"name":"non-documentation.json","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/subfolder/another-subfolder/non-documentation.json","sha":"07c70839ad3ef7ae3a4a9384a9c6a101a6aeff05"}]},{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/subfolder/documentation.md","sha":"6e7f6a1b6b31c0091ab66d99df487068fc1783a9"},{"name":"non-documentation.tf","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/subfolder/non-documentation.tf","sha":"ad0858eea6d1f4ff0fc2cf90403ab64ac4dbd3ce"},{"name":"subfolder","children":[{"name":"non-documentation.sh","path":"modules/docs-generator/test-fixtures/all-file-types-and-subfolders/subfolder/subfolder/non-documentation.sh","sha":"124fe8fc2df0c0886224c922c43d8d70cf5f2292"}]}]}]},{"name":"all-file-types-subfolders-excluded-output","children":[{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/all-file-types-subfolders-excluded-output/documentation.md","sha":"361dc342c8710689cabce350177f9a76c7c273ab"},{"name":"documentation.txt","path":"modules/docs-generator/test-fixtures/all-file-types-subfolders-excluded-output/documentation.txt","sha":"f2d086f4d9adc789457cb4e3cbb8900c98e38edb"},{"name":"logo.png","path":"modules/docs-generator/test-fixtures/all-file-types-subfolders-excluded-output/logo.png","sha":"4b4af5bb80a3b81f5b05aeb1fbf06febeb2006a5"},{"name":"non-documentation.yml","path":"modules/docs-generator/test-fixtures/all-file-types-subfolders-excluded-output/non-documentation.yml","sha":"179e4e4c6101d2a0856b0c5aba09359558d8dfc2"}]},{"name":"generator-tests","children":[{"name":"documentation-no-urls-output.md","path":"modules/docs-generator/test-fixtures/generator-tests/documentation-no-urls-output.md","sha":"3b95d4400f315380acc62f088a656595cc7ca0e9"},{"name":"documentation-no-urls.md","path":"modules/docs-generator/test-fixtures/generator-tests/documentation-no-urls.md","sha":"941274efbebd367c315fa58b279bb35b8c453cb4"},{"name":"documentation-output.txt","path":"modules/docs-generator/test-fixtures/generator-tests/documentation-output.txt","sha":"26fbbeb14a529bdb767fc606b443e59e51ed7105"},{"name":"documentation-with-urls-output.md","path":"modules/docs-generator/test-fixtures/generator-tests/documentation-with-urls-output.md","sha":"87243db4cbb83fd2257ef613567f3ad555ba4efa"},{"name":"documentation-with-urls.md","path":"modules/docs-generator/test-fixtures/generator-tests/documentation-with-urls.md","sha":"95c45e8915cb495e5ae6ffaea794b963ef219c47"},{"name":"documentation.txt","path":"modules/docs-generator/test-fixtures/generator-tests/documentation.txt","sha":"ea4b74ecb7fe418ce2689dcc603641b53fe055a0"},{"name":"logo-output.png","path":"modules/docs-generator/test-fixtures/generator-tests/logo-output.png","sha":"4b4af5bb80a3b81f5b05aeb1fbf06febeb2006a5"},{"name":"logo.png","path":"modules/docs-generator/test-fixtures/generator-tests/logo.png","sha":"4b4af5bb80a3b81f5b05aeb1fbf06febeb2006a5"},{"name":"non-documentation-output.java","path":"modules/docs-generator/test-fixtures/generator-tests/non-documentation-output.java","sha":"b8ee5f7495c8e14abcbac0ff4d275c332ea68992"},{"name":"non-documentation.java","path":"modules/docs-generator/test-fixtures/generator-tests/non-documentation.java","sha":"8098f9f26ec5dd770382cc1b4c93a982ffd70c45"}]},{"name":"no-documentation-output","children":[{"name":"non-documentation.java","path":"modules/docs-generator/test-fixtures/no-documentation-output/non-documentation.java","sha":"b8ee5f7495c8e14abcbac0ff4d275c332ea68992"},{"name":"non-documentation.tf","path":"modules/docs-generator/test-fixtures/no-documentation-output/non-documentation.tf","sha":"5bef10ee8ab662ad833740cd4c9ceb4409ba6039"}]},{"name":"no-documentation","children":[{"name":"non-documentation.java","path":"modules/docs-generator/test-fixtures/no-documentation/non-documentation.java","sha":"8098f9f26ec5dd770382cc1b4c93a982ffd70c45"},{"name":"non-documentation.tf","path":"modules/docs-generator/test-fixtures/no-documentation/non-documentation.tf","sha":"ad0858eea6d1f4ff0fc2cf90403ab64ac4dbd3ce"}]},{"name":"only-documentation-output","children":[{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/only-documentation-output/documentation.md","sha":"361dc342c8710689cabce350177f9a76c7c273ab"},{"name":"documentation.txt","path":"modules/docs-generator/test-fixtures/only-documentation-output/documentation.txt","sha":"f2d086f4d9adc789457cb4e3cbb8900c98e38edb"}]},{"name":"only-documentation","children":[{"name":"documentation.md","path":"modules/docs-generator/test-fixtures/only-documentation/documentation.md","sha":"6e7f6a1b6b31c0091ab66d99df487068fc1783a9"},{"name":"documentation.txt","path":"modules/docs-generator/test-fixtures/only-documentation/documentation.txt","sha":"60303204b8834945d26d9ae7b184b2c7c1f01899"}]}]},{"name":"urls.go","path":"modules/docs-generator/urls.go","sha":"b909b2a6fb1effa0b386d129444c9a5c049fce24"},{"name":"urls_test.go","path":"modules/docs-generator/urls_test.go","sha":"28f828efc795e6f754266b92234d06e1dc3601db"}]},{"name":"ec2-backup","children":[{"name":"README.md","path":"modules/ec2-backup/README.md","sha":"8123dab2b46b585e57e56b001ffd96ae80c525df"},{"name":"backup-lambda-function","children":[{"name":"ec2-snapper_linux_amd64-v0.5.2","path":"modules/ec2-backup/backup-lambda-function/ec2-snapper_linux_amd64-v0.5.2","sha":"11f872d3dde35b44c160eccf3f0adf49cc5bd72f"},{"name":"index.js","path":"modules/ec2-backup/backup-lambda-function/index.js","sha":"555ea9666346d7d57588452a5a9642ff73bcf25e"}]},{"name":"main.tf","path":"modules/ec2-backup/main.tf","sha":"7f9600fe86cc66496911e24a4c39d14e5dd92ddb"},{"name":"outputs.tf","path":"modules/ec2-backup/outputs.tf","sha":"770744637fcd7cafd98991397b26a82d01524192"},{"name":"vars.tf","path":"modules/ec2-backup/vars.tf","sha":"dd8d61875d9f68596d05bf677a51119750f512e8"}]},{"name":"ecs-deploy-runner-invoke-iam-policy","children":[{"name":"README.md","path":"modules/ecs-deploy-runner-invoke-iam-policy/README.md","sha":"66152227a29ea201358ced76a359bb5f2cfd7c9d"},{"name":"main.tf","path":"modules/ecs-deploy-runner-invoke-iam-policy/main.tf","sha":"4feb1fb6e2e4a1a526a83dd8d8981e3108abe781"},{"name":"outputs.tf","path":"modules/ecs-deploy-runner-invoke-iam-policy/outputs.tf","sha":"8703d962acdf4584375558aa59831c1c873fe606"},{"name":"variables.tf","path":"modules/ecs-deploy-runner-invoke-iam-policy/variables.tf","sha":"566d414f7ef8621e8c7613847d92b77c3e08cbb6"}]},{"name":"ecs-deploy-runner","children":[{"name":"README.adoc","path":"modules/ecs-deploy-runner/README.adoc","sha":"022f8c42447bb64214ecc80dd7bb41b455cb6850"},{"name":"_docs","children":[{"name":"images","children":[{"name":"sequence-diagram.png","path":"modules/ecs-deploy-runner/_docs/images/sequence-diagram.png","sha":"15c9ea45ff27d20fdc23cf918f8c9ba64c0601a3"}]}]},{"name":"core-concepts.md","path":"modules/ecs-deploy-runner/core-concepts.md","sha":"30940f80946ed959dbc974cc35c3b66034d6a64b"},{"name":"docker","children":[{"name":"Dockerfile","path":"modules/ecs-deploy-runner/docker/Dockerfile","sha":"fa5bbaccbfc7baa58f767e90d31f793123fcd04f"},{"name":"known_hosts","path":"modules/ecs-deploy-runner/docker/known_hosts","sha":"de69cda4803d693eacf310c76b900af40a054255"}]},{"name":"invoker-lambda","children":[{"name":"dev_requirements.txt","path":"modules/ecs-deploy-runner/invoker-lambda/dev_requirements.txt","sha":"dcf16d182a3956a52a02581e1602042ba3c5b864"},{"name":"invoker","children":[{"name":"__init__.py","path":"modules/ecs-deploy-runner/invoker-lambda/invoker/__init__.py","sha":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"},{"name":"exceptions.py","path":"modules/ecs-deploy-runner/invoker-lambda/invoker/exceptions.py","sha":"a0ce583c334ea9b8690384c91cd85e53f4ac74ba"},{"name":"index.py","path":"modules/ecs-deploy-runner/invoker-lambda/invoker/index.py","sha":"7f32d408df0f1762db666233ec9661ade7d1790a"},{"name":"project_logging.py","path":"modules/ecs-deploy-runner/invoker-lambda/invoker/project_logging.py","sha":"7073c22d7c70ee8940a3ab194a2edc3aef554055"},{"name":"types.py","path":"modules/ecs-deploy-runner/invoker-lambda/invoker/types.py","sha":"b797adf4db623fa74d19383a644248723808142c"}]},{"name":"test","children":[{"name":"test_invoker.py","path":"modules/ecs-deploy-runner/invoker-lambda/test/test_invoker.py","sha":"03fd463202e13201c703e07d9dc75e03d20fdf11"}]}]},{"name":"main.tf","path":"modules/ecs-deploy-runner/main.tf","sha":"a18611618f57805f6dd734b6c723d38e7305d43b"},{"name":"main_ecs.tf","path":"modules/ecs-deploy-runner/main_ecs.tf","sha":"76686c7287c37af92896f699f9f36908ee9eb336"},{"name":"main_lambda.tf","path":"modules/ecs-deploy-runner/main_lambda.tf","sha":"57f43f86121ad64a9ddaeebf48f91208fb867a5a"},{"name":"outputs.tf","path":"modules/ecs-deploy-runner/outputs.tf","sha":"60a1ad73865ab89210316c9f61d8a294c57e5e77"},{"name":"variables.tf","path":"modules/ecs-deploy-runner/variables.tf","sha":"bbabd17704b4a8b8057b289533186b147960fc78"}]},{"name":"git-helpers","children":[{"name":"README.md","path":"modules/git-helpers/README.md","sha":"86803f51a9bdcca05dfd13756fe16088a6363ff4"},{"name":"bin","children":[{"name":"git-add-commit-push","path":"modules/git-helpers/bin/git-add-commit-push","sha":"e6e1d1714bec031d434ff158a99891fb6f9dc8d9"},{"name":"git-rebase","path":"modules/git-helpers/bin/git-rebase","sha":"887dd90ba36adc5c0362cbadca79707756535b24"}]},{"name":"install.sh","path":"modules/git-helpers/install.sh","sha":"f22ede2f2f085af0a065dd43ed1279c69dd5a00b"}]},{"name":"gruntwork-module-circleci-helpers","children":[{"name":"README.md","path":"modules/gruntwork-module-circleci-helpers/README.md","sha":"074bc610447d27206bc50ba1a7b06fc95226d369","toggled":true},{"name":"bin","children":[{"name":"build-go-binaries","path":"modules/gruntwork-module-circleci-helpers/bin/build-go-binaries","sha":"8aca966ed857b2d6d50a7c72c09e9181ae125e3c"},{"name":"configure-environment-for-gruntwork-module","path":"modules/gruntwork-module-circleci-helpers/bin/configure-environment-for-gruntwork-module","sha":"a7f380698b134afecd89d3c3187c021fb2ae170d"},{"name":"run-go-tests","path":"modules/gruntwork-module-circleci-helpers/bin/run-go-tests","sha":"d5406bdd61dae657ded161cf6f2ca66b17cd5b81"},{"name":"upload-github-release-assets","path":"modules/gruntwork-module-circleci-helpers/bin/upload-github-release-assets","sha":"b86a2f1049b1be58179569ea7fed641d960d1f05"}]},{"name":"install.sh","path":"modules/gruntwork-module-circleci-helpers/install.sh","sha":"a9cc16c05a73cf6c40097608838758a8de64daab"}],"toggled":true},{"name":"iam-policies","children":[{"name":"README.md","path":"modules/iam-policies/README.md","sha":"da28056c8749bc2c46dc99ed16286e14b7c55511"},{"name":"ecr-docker-push","children":[{"name":"README.md","path":"modules/iam-policies/ecr-docker-push/README.md","sha":"6a0a84157fe573f2c7ac1e0bd6e2169b2814f1c0"},{"name":"main.tf","path":"modules/iam-policies/ecr-docker-push/main.tf","sha":"1339a8f20e8b96343790f3861a5f0bc85125f4d7"},{"name":"outputs.tf","path":"modules/iam-policies/ecr-docker-push/outputs.tf","sha":"91c35371bd190c90b7e48a23273923f3205447a2"},{"name":"vars.tf","path":"modules/iam-policies/ecr-docker-push/vars.tf","sha":"d8aaeae6205750961e3deaba741ee68180a32ca7"}]},{"name":"ecs-service-deployment","children":[{"name":"README.md","path":"modules/iam-policies/ecs-service-deployment/README.md","sha":"77bb1df6db0d7cd886ee665f1d6566944521b00c"},{"name":"main.tf","path":"modules/iam-policies/ecs-service-deployment/main.tf","sha":"73dd267d5e16b853b6c233f962df8ec8ac50303f"},{"name":"outputs.tf","path":"modules/iam-policies/ecs-service-deployment/outputs.tf","sha":"456e432ea1ac303f0e3f6d72e5a38ef0c4fdd126"},{"name":"vars.tf","path":"modules/iam-policies/ecs-service-deployment/vars.tf","sha":"78c2705c906b853f0e4b18b6c8f2c05e164109bf"}]},{"name":"terraform-remote-state-s3","children":[{"name":"README.md","path":"modules/iam-policies/terraform-remote-state-s3/README.md","sha":"b7892fd6dabecb66909706dbb8941e63e2c56954"},{"name":"main.tf","path":"modules/iam-policies/terraform-remote-state-s3/main.tf","sha":"36b7ceb572efcf59c447f1a8ae34279cb6d8bd3b"},{"name":"outputs.tf","path":"modules/iam-policies/terraform-remote-state-s3/outputs.tf","sha":"19c52170f58f07dced95687dab8b6e6f134d225c"},{"name":"vars.tf","path":"modules/iam-policies/terraform-remote-state-s3/vars.tf","sha":"720084fa0f9cf944b19ba30f59e78efc2e7b96b9"}]},{"name":"terragrunt","children":[{"name":"README.md","path":"modules/iam-policies/terragrunt/README.md","sha":"eccacc553810fa838b23d24718ffb8f70a9a39e5"},{"name":"main.tf","path":"modules/iam-policies/terragrunt/main.tf","sha":"efbcfe3f7ce1e4001588ef1b14625b8c2273d7d8"},{"name":"outputs.tf","path":"modules/iam-policies/terragrunt/outputs.tf","sha":"fbfd6010c9f952f65248fc42897d976a2e26b4e8"},{"name":"vars.tf","path":"modules/iam-policies/terragrunt/vars.tf","sha":"52f0480b69a57d0ff43e76ae26cb17d77dab5069"}]}]},{"name":"infrastructure-deploy-script","children":[{"name":"README.adoc","path":"modules/infrastructure-deploy-script/README.adoc","sha":"bdc742de962f03859b43866ea46e4383ad32f10f"},{"name":"core-concepts.md","path":"modules/infrastructure-deploy-script/core-concepts.md","sha":"e617d3dd528507993c8162811cb6de16328e9ed3"},{"name":"dev_requirements.txt","path":"modules/infrastructure-deploy-script/dev_requirements.txt","sha":"5eaa61caa1ebf937a016037606bb0d2faeb17888"},{"name":"infrastructure_deploy_script","children":[{"name":"__init__.py","path":"modules/infrastructure-deploy-script/infrastructure_deploy_script/__init__.py","sha":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"},{"name":"deploy.py","path":"modules/infrastructure-deploy-script/infrastructure_deploy_script/deploy.py","sha":"642229cf87f3d9dc4329964d1a64230775a229a5"},{"name":"exceptions.py","path":"modules/infrastructure-deploy-script/infrastructure_deploy_script/exceptions.py","sha":"44e5f7173e4e2aba1abb4b2923c94aa8534f60da"},{"name":"git.py","path":"modules/infrastructure-deploy-script/infrastructure_deploy_script/git.py","sha":"749ace8d9812e8a906eba2d14b6eef4f90c97e02"},{"name":"project_logging.py","path":"modules/infrastructure-deploy-script/infrastructure_deploy_script/project_logging.py","sha":"a72c2a19962838f3375390380dcf444b73e1fcef"},{"name":"py.typed","path":"modules/infrastructure-deploy-script/infrastructure_deploy_script/py.typed","sha":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"},{"name":"shell.py","path":"modules/infrastructure-deploy-script/infrastructure_deploy_script/shell.py","sha":"f9b98a99686b214a68c8c99d23fd8019a9f68213"},{"name":"ssh.py","path":"modules/infrastructure-deploy-script/infrastructure_deploy_script/ssh.py","sha":"3db8994be058bfa590bbbbdd0476128c44ad5979"},{"name":"terra.py","path":"modules/infrastructure-deploy-script/infrastructure_deploy_script/terra.py","sha":"38a5b01a023142bd0af2064a13ccb7168045434c"}]},{"name":"install.sh","path":"modules/infrastructure-deploy-script/install.sh","sha":"c958f1065315b16e9f0474ee39728a4556c18247"},{"name":"requirements.txt","path":"modules/infrastructure-deploy-script/requirements.txt","sha":"ebe0f49e006828d7147c8ee540a278142e44e618"},{"name":"scripts","children":[{"name":"infrastructure-deploy-script","path":"modules/infrastructure-deploy-script/scripts/infrastructure-deploy-script","sha":"f29cb3f8976d7987e5877565d3b4a106f866c4cb"}]},{"name":"setup.py","path":"modules/infrastructure-deploy-script/setup.py","sha":"0885421ba85af260d5e2d97ebc75e26c76fb25da"},{"name":"test","children":[{"name":"conftest.py","path":"modules/infrastructure-deploy-script/test/conftest.py","sha":"ebae81d85a6ce4997c9d6f4a3d833c617822a0a0"},{"name":"fixtures","children":[{"name":"terraform","children":[{"name":"main.tf","path":"modules/infrastructure-deploy-script/test/fixtures/terraform/main.tf","sha":"362851fda16747e2a39abba071646933e51fbbdf"}]},{"name":"terragrunt","children":[{"name":"terragrunt.hcl","path":"modules/infrastructure-deploy-script/test/fixtures/terragrunt/terragrunt.hcl","sha":"2359b15bc6a698e481a8e99fdb352e174203b925"}]}]},{"name":"test_deploy.py","path":"modules/infrastructure-deploy-script/test/test_deploy.py","sha":"8be69b5d758bec2318a52d5eb7c4a31e5b914085"},{"name":"test_git.py","path":"modules/infrastructure-deploy-script/test/test_git.py","sha":"862852a92b7a7edb7276cdd3cf212e500ca3c8d9"},{"name":"test_shell.py","path":"modules/infrastructure-deploy-script/test/test_shell.py","sha":"fa0f984c4ce6218303d7f9c38c4c20d018411318"}]}]},{"name":"infrastructure-deployer","children":[{"name":"README.adoc","path":"modules/infrastructure-deployer/README.adoc","sha":"a6ba378b13dbe19060f491b23774557cc3abf09c"},{"name":"core-concepts.md","path":"modules/infrastructure-deployer/core-concepts.md","sha":"6d5dffe58cee8ec78c9fcb6ee4783d3127ebd10f"},{"name":"deploy","children":[{"name":"aws.go","path":"modules/infrastructure-deployer/deploy/aws.go","sha":"87815214bc2c690373bace2702631a040c0b2a19"},{"name":"aws_ecs.go","path":"modules/infrastructure-deployer/deploy/aws_ecs.go","sha":"302bb0dfd75838a847b47dc71c290a48ac6e3c5f"},{"name":"deploy.go","path":"modules/infrastructure-deployer/deploy/deploy.go","sha":"444121a8fe44413b11e217bf28b57baf02e291a6"},{"name":"errors.go","path":"modules/infrastructure-deployer/deploy/errors.go","sha":"74d73d20144cbbac68ebe4a7c50a53b204151fb4"}]},{"name":"go.mod","path":"modules/infrastructure-deployer/go.mod","sha":"3ff9d1d2acc87e9dfb6a2ca319307d7c17ccdb14"},{"name":"go.sum","path":"modules/infrastructure-deployer/go.sum","sha":"3ac57b5b909b4991198c08a0c29f9acde9812151"},{"name":"logging","children":[{"name":"logging.go","path":"modules/infrastructure-deployer/logging/logging.go","sha":"a381e79c9e66c762322d49d2a3726a8c66c7ef65"}]},{"name":"main.go","path":"modules/infrastructure-deployer/main.go","sha":"6b630a56fe6992bc7cc1523580193bd2db132f15"}]},{"name":"install-jenkins","children":[{"name":"README.md","path":"modules/install-jenkins/README.md","sha":"f3c33b9c09257522281a7be9687a53b343bc1fd8"},{"name":"install.sh","path":"modules/install-jenkins/install.sh","sha":"30b1f9f60c29ce75b8bd00d5df106fe7178a7017"},{"name":"run-jenkins","path":"modules/install-jenkins/run-jenkins","sha":"d73823a893790ac1027e6c6d34889e03a60096eb"}]},{"name":"jenkins-server","children":[{"name":"README.md","path":"modules/jenkins-server/README.md","sha":"49ecb595ff9883d9a77ddfebe1369e25f1692890"},{"name":"main.tf","path":"modules/jenkins-server/main.tf","sha":"15a78ff89ac7ae5eec58c70806adb2b22da31759"},{"name":"outputs.tf","path":"modules/jenkins-server/outputs.tf","sha":"5670bd47368b97e5eeedcca805a28a337230e9e2"},{"name":"vars.tf","path":"modules/jenkins-server/vars.tf","sha":"86dec8ea74e61afba2b48f950f97ff783fa2937c"}]},{"name":"kubernetes-circleci-helpers","children":[{"name":"README.md","path":"modules/kubernetes-circleci-helpers/README.md","sha":"833fef8b04c17c43b10c680fad7db3aa7da2e8ad"},{"name":"bin","children":[{"name":"setup-minikube","path":"modules/kubernetes-circleci-helpers/bin/setup-minikube","sha":"142ca1af8c9fbb954d3640f3186a410c3331985d"}]},{"name":"install.sh","path":"modules/kubernetes-circleci-helpers/install.sh","sha":"2ae8670872407ceb2c434dc5b117ae14073af9a2"}]},{"name":"terraform-helpers","children":[{"name":"README.md","path":"modules/terraform-helpers/README.md","sha":"d6004df66f3b9684ea901f0d41592fca2aceb874"},{"name":"bin","children":[{"name":"git-updated-folders","path":"modules/terraform-helpers/bin/git-updated-folders","sha":"781a8c0348578af693a9430824c29e590bb1922a"},{"name":"terraform-update-variable","path":"modules/terraform-helpers/bin/terraform-update-variable","sha":"8ac66d5d7ac52076ae645d76ae48f5d7c6c58a25"}]},{"name":"install.sh","path":"modules/terraform-helpers/install.sh","sha":"6b7e40c382ec391f64e54efab3367d202b123883"}]}],"toggled":true},{"name":"setup.cfg","path":"setup.cfg","sha":"dbcd773df9356e74782ad58e0a2255ffa188df49"},{"name":"test","children":[{"name":"README.md","path":"test/README.md","sha":"6e1ceee7e9a037225f0674121b4fada50d2f8d67"},{"name":"build_docker_image_test.go","path":"test/build_docker_image_test.go","sha":"9b3dac61e083049cd10277bcabab5904bfc869ac"},{"name":"build_helpers.go","path":"test/build_helpers.go","sha":"8475977fda1ed59c83c272b13c38e81478ef63b9"},{"name":"build_packer_artifact_test.go","path":"test/build_packer_artifact_test.go","sha":"98dca3b411e5b36362b81e2652c680924d7ecdab"},{"name":"check_url_test.go","path":"test/check_url_test.go","sha":"6e099e94ab237cc9f140fa3aba9f6b8e253e624d"},{"name":"ecs_deploy_runner_test.go","path":"test/ecs_deploy_runner_test.go","sha":"eaea4585025abe421144b6a4a5acd1a2d6ac087e"},{"name":"ecs_deploy_runner_test_helpers.go","path":"test/ecs_deploy_runner_test_helpers.go","sha":"8c323d2e82797044b2686c90547b066535e2fa3e"},{"name":"fixtures","children":[{"name":"git-add-commit-push","children":[{"name":"auto-committed.txt","path":"test/fixtures/git-add-commit-push/auto-committed.txt","sha":"fdb8c850993480e4b4c7fea8c041b7fc1c7c0830"}]},{"name":"hello-world-go-app","children":[{"name":"main.go","path":"test/fixtures/hello-world-go-app/main.go","sha":"3e0c7643f51386747f1b85656a0c797f282aed04"}]},{"name":"test-docker-image","children":[{"name":"Dockerfile","path":"test/fixtures/test-docker-image/Dockerfile","sha":"5de35bbecce145045ae22fbc5fb97c133568a1ff"},{"name":"test.sh","path":"test/fixtures/test-docker-image/test.sh","sha":"ef3083cf7f3436ac7d01acfa33e4dab143fbcafd"}]},{"name":"test-go-test-files","children":[{"name":"simple_test.go","path":"test/fixtures/test-go-test-files/simple_test.go","sha":"53007ca88996e540ddfc503ce42982bdd5e785d2"},{"name":"test.sh","path":"test/fixtures/test-go-test-files/test.sh","sha":"25b8ef156d589c8d088d026b422e3b9c751c4b53"}]},{"name":"test-packer-image","children":[{"name":"hello-world-multiple-builders.json","path":"test/fixtures/test-packer-image/hello-world-multiple-builders.json","sha":"e09479bf9c86e63e69daaac08faf4094c9cc5bf7"},{"name":"hello-world-one-builder.json","path":"test/fixtures/test-packer-image/hello-world-one-builder.json","sha":"499d94ac898e20ddcf62979adff37852892c84a6"}]},{"name":"test-tfvars-files","children":[{"name":"multiple-similar-variables.tfvars","path":"test/fixtures/test-tfvars-files/multiple-similar-variables.tfvars","sha":"8147977dee3d9a196177c575cd664354c601e68f"},{"name":"multiple-variables-and-comments.tfvars","path":"test/fixtures/test-tfvars-files/multiple-variables-and-comments.tfvars","sha":"8b757cfa5ed1d5049c478ed9180b9e9a5743335e"},{"name":"one-variable-extra-whitespace.tfvars","path":"test/fixtures/test-tfvars-files/one-variable-extra-whitespace.tfvars","sha":"743b02f7015bd51232f9c40564c654f424cbb523"},{"name":"one-variable-no-whitespace.tfvars","path":"test/fixtures/test-tfvars-files/one-variable-no-whitespace.tfvars","sha":"39ddb49aa78f683e3e45384d2440a904d0ad7ec9"},{"name":"one-variable.tfvars","path":"test/fixtures/test-tfvars-files/one-variable.tfvars","sha":"82a0cea8ac06d9534dd2549c73ae70afd47336bb"}]},{"name":"test-tghcl-files","children":[{"name":"multiple-similar-variables.hcl","path":"test/fixtures/test-tghcl-files/multiple-similar-variables.hcl","sha":"8224297de9667b6887136c897b473977f7013fc0"},{"name":"multiple-variables-and-comments.hcl","path":"test/fixtures/test-tghcl-files/multiple-variables-and-comments.hcl","sha":"1905719b9208e53d78a9bced9792194f6955f928"},{"name":"one-variable-extra-whitespace.hcl","path":"test/fixtures/test-tghcl-files/one-variable-extra-whitespace.hcl","sha":"aa09bc5beacd10b66660e71173d16f3b093e9415"},{"name":"one-variable-no-whitespace.hcl","path":"test/fixtures/test-tghcl-files/one-variable-no-whitespace.hcl","sha":"8e77e4baf099fdb7f1e1d1571725c835ac92093a"},{"name":"one-variable.hcl","path":"test/fixtures/test-tghcl-files/one-variable.hcl","sha":"0afe11b72b3635feb75d71d7aff4cc28806a7f67"}]},{"name":"tfpipeline","children":[{"name":"failure","children":[{"name":"terraform","children":[{"name":"main.tf","path":"test/fixtures/tfpipeline/failure/terraform/main.tf","sha":"5488bde3fbd03a58398aeeb904cfef74d7200aae"}]},{"name":"terragrunt","children":[{"name":"terragrunt.hcl","path":"test/fixtures/tfpipeline/failure/terragrunt/terragrunt.hcl","sha":"2359b15bc6a698e481a8e99fdb352e174203b925"}]}]},{"name":"nested","children":[{"name":"terraform","children":[{"name":"main.tf","path":"test/fixtures/tfpipeline/nested/terraform/main.tf","sha":"19538a8d8cb3820ffc99138ecf3b19004e7afa8f"}]},{"name":"terragrunt","children":[{"name":"terragrunt.hcl","path":"test/fixtures/tfpipeline/nested/terragrunt/terragrunt.hcl","sha":"2359b15bc6a698e481a8e99fdb352e174203b925"}]}]},{"name":"root","children":[{"name":"terraform","children":[{"name":"main.tf","path":"test/fixtures/tfpipeline/root/terraform/main.tf","sha":"4c38ad94d4d10a46cb1acd012f9b3e5513757ac2"}]},{"name":"terragrunt","children":[{"name":"terragrunt.hcl","path":"test/fixtures/tfpipeline/root/terragrunt/terragrunt.hcl","sha":"2359b15bc6a698e481a8e99fdb352e174203b925"}]}]}]}]},{"name":"git_updated_folders_test.go","path":"test/git_updated_folders_test.go","sha":"f8429b385809cfe3beb234a5fd24de1fef05d29c"},{"name":"go.mod","path":"test/go.mod","sha":"84d6920105974c5ecbc19118f1e17bc91bb55952"},{"name":"go.sum","path":"test/go.sum","sha":"c15a58ff8e3eee155d265b8dc0db9e9ba3bedf1b"},{"name":"gruntwork_module_circleci_helpers_integration_test.go","path":"test/gruntwork_module_circleci_helpers_integration_test.go","sha":"d4de824393fad25ae23f1667b1efef30b98ab365"},{"name":"iam_policies_test.go","path":"test/iam_policies_test.go","sha":"75daff44988b41977dcfd064c868f038f77ffbb0"},{"name":"infrastructure_deploy_script_test.go","path":"test/infrastructure_deploy_script_test.go","sha":"b22f63ba905480fc3c4a54eb5d523e40f8610c6a"},{"name":"jenkins_test.go","path":"test/jenkins_test.go","sha":"fb2c9a0fd22e496833b7eed5c8821b9e54a6856a"},{"name":"kubernetes_circleci_helpers_test.go","path":"test/kubernetes_circleci_helpers_test.go","sha":"76a87d2854c2c7cf0a57c56582796b9cdb533c1b"},{"name":"publish_ami_test.go","path":"test/publish_ami_test.go","sha":"c5ca4d2b9db3d2bc75f3e732747198efa0c27e66"},{"name":"terraform_update_variable_unit_test.go","path":"test/terraform_update_variable_unit_test.go","sha":"e1469d18b1a1dbdf6c193589549bcac662c61e1e"},{"name":"terragrunt_update_variable_unit_test.go","path":"test/terragrunt_update_variable_unit_test.go","sha":"4adb82100c62f799380dea99f76f22be7f5ebbb2"},{"name":"test-git-add-commit-push.sh","path":"test/test-git-add-commit-push.sh","sha":"95fd142ed3d26e85c2873ee55c0e2718f0927ffd"}]},{"name":"testdep","children":[{"name":"Gopkg.lock","path":"testdep/Gopkg.lock","sha":"f12dfa4652085a0043d69d1b3bff7cc16b64551f"},{"name":"Gopkg.toml","path":"testdep/Gopkg.toml","sha":"092de38583d1bb2aff2b194753b7cc18aecddd87"},{"name":"dep_test.go","path":"testdep/dep_test.go","sha":"b87facc135093c5258a5f2da43e5f9177bc008b7"},{"name":"fixtures","children":[{"name":"hello-world-godep-app","children":[{"name":"Gopkg.lock","path":"testdep/fixtures/hello-world-godep-app/Gopkg.lock","sha":"623c785ee006b1ff3c524d18935ebdeb45395d55"},{"name":"Gopkg.toml","path":"testdep/fixtures/hello-world-godep-app/Gopkg.toml","sha":"26f5a8f783bb942cf6fba93c10b6a09017329526"},{"name":"main.go","path":"testdep/fixtures/hello-world-godep-app/main.go","sha":"0a09ad54ada955edd8e8ae731e0c113cc708766c"}]}]}]}]},"detailsContent":"<h1 class=\"preview__body--title\" id=\"gruntwork-module-circle-ci-helpers\">Gruntwork Module CircleCI Helpers</h1><div class=\"preview__body--border\"></div><p>This module contains helper scripts used in CircleCI jobs of Gruntwork Modules, including:</p>\n<ul>\n<li><code>configure-environment-for-gruntwork-module</code>: This script is meant to be run in a Circle CI job to configure the\nbuild environment for a typical Gruntwork module, including installing Terraform, Packer, Go, and Terragrunt, and\nusing Go modules to install dependencies.</li>\n<li><code>run-go-tests</code>: This script is meant to be run in a CircleCI job to run automated tests written in Go with the proper\nsettings for the test path (so it works with GOPATH), parallelism, and timeouts.</li>\n<li><code>upload-github-release-assets</code>: This script can be used to automatically upload assets to a <a href=\"https://help.github.com/articles/about-releases/\" class=\"preview__body--description--blue\" target=\"_blank\">GitHub\nRelease</a>. For example, if you need to build new binaries of some\napp each time you release, you can use this script to upload those binaries to GitHub.</li>\n<li><code>build-go-binaries</code>: This script is meant to be run in a CircleCI job to build binaries for an app written in Go. It\nuses gox under the hood and provides reasonable defaults for parallelism, build flags, file naming, and\nos/architecture options.</li>\n</ul>\n<h2 class=\"preview__body--subtitle\" id=\"installing-the-helpers\">Installing the helpers</h2>\n<p>You can install the helpers using the <a href=\"/repos/gruntwork-installer\" class=\"preview__body--description--blue\">Gruntwork Installer</a>:</p>\n<pre><span class=\"hljs-string\">gruntwork-install </span><span class=\"hljs-built_in\">--module-name</span> <span class=\"hljs-string\">\"gruntwork-module-circleci-helpers\"</span> <span class=\"hljs-built_in\">--repo</span> <span class=\"hljs-string\">\"https://github.com/gruntwork-io/module-ci\"</span> <span class=\"hljs-built_in\">--tag</span> <span class=\"hljs-string\">\"0.0.1\"</span>\n</pre>\n<p>We recommend running this command in the <code>dependencies</code> section of <code>circle.yml</code>:</p>\n<pre>dependencies:\n override:\n <span class=\"hljs-comment\"># Install the Gruntwork Installer</span>\n - curl -Ls https://raw.githubusercontent.com/gruntwork-io/gruntwork-installer/master/bootstrap-gruntwork-installer.sh | bash /dev/stdin --version <span class=\"hljs-number\">0.0</span>.<span class=\"hljs-number\">9</span>\n\n <span class=\"hljs-comment\"># Use the Gruntwork Installer to install the gruntwork-module-circleci-helpers module</span>\n - gruntwork-install --<span class=\"hljs-keyword\">module</span>-name <span class=\"hljs-string\">\"gruntwork-module-circleci-helpers\"</span> --repo <span class=\"hljs-string\">\"https://github.com/gruntwork-io/module-ci\"</span> --tag <span class=\"hljs-string\">\"0.0.5\"</span>\n</pre>\n<h2 class=\"preview__body--subtitle\" id=\"using-the-configure-environment-for-gruntwork-module-helper\">Using the configure-environment-for-gruntwork-module helper</h2>\n<p>The <code>configure-environment-for-gruntwork-module</code> script will do the following:</p>\n<ol>\n<li>Install Terraform, Packer, and Go. If you wish to customize the version of each app that gets installed, you can\nuse the <code>--terraform-version</code>, <code>--packer-version</code>, and <code>--go-version</code> flags, respectively.</li>\n<li>Run <code>go get -v -t -d</code> for folders you specify via the <code>--go-src-path</code> parameter.</li>\n</ol>\n<p>We recommend running this helper in the <code>dependencies</code> section of <code>circle.yml</code>:</p>\n<pre>machine:\n <span class=\"hljs-comment\"># Add the folders where configure-environment-for-gruntwork-module installs binaries to the PATH</span>\n environment:\n PATH: $PATH:$HOME/<span class=\"hljs-keyword\">terraform</span>:$HOME/packer:$HOME/glide/linux-amd64\n\ndependencies:\n override:\n <span class=\"hljs-comment\"># Install the Gruntwork Installer</span>\n - curl -Ls https://raw.githubusercontent.com/gruntwork-io/gruntwork-installer/master/bootstrap-gruntwork-installer.sh | bash /dev/stdin --version <span class=\"hljs-number\">0.0</span>.<span class=\"hljs-number\">9</span>\n\n <span class=\"hljs-comment\"># Use the Gruntwork Installer to install the gruntwork-module-circleci-helpers module</span>\n - gruntwork-install --<span class=\"hljs-keyword\">module</span>-name <span class=\"hljs-string\">\"gruntwork-module-circleci-helpers\"</span> --repo <span class=\"hljs-string\">\"https://github.com/gruntwork-io/module-ci\"</span> --tag <span class=\"hljs-string\">\"0.0.1\"</span>\n\n <span class=\"hljs-comment\"># Configure the CircleCI environment using the gruntwork-module-circleci-helpers module</span>\n - configure-environment-for-gruntwork-<span class=\"hljs-keyword\">module</span> --go-src-path test --go-src-path modules/my-go-app\n\n <span class=\"hljs-comment\"># Cache the folders where configure-environment-for-gruntwork-module installs binaries</span>\n cache_directories:\n - ~/<span class=\"hljs-keyword\">terraform</span>\n - ~/packer\n</pre>\n<p>Three key things to note:</p>\n<ol>\n<li>While the <code>configure-environment-for-gruntwork-module</code> script can install Terraform, Packer, and Go, it cannot\nautomatically add them to your <code>PATH</code>. Therefore, you have to do it yourself in the <code>machine</code> section of\n<code>circle.yml</code> as shown above.</li>\n<li>Use the <code>--go-src-path</code> option to tell <code>configure-environment-for-gruntwork-module</code> where your Go source files are\nlocated. You can specify the flag more than once if you have more than one Go app, as shown in the example above.\nThe <code>configure-environment-for-gruntwork-module</code> script will run <code>go get -v -t -d</code> in each of those folders to\ninstall their dependencies.</li>\n<li>To avoid reinstalling Terraform, Packer, and Glide over and over again, use <code>cache_directories</code> as shown above.</li>\n</ol>\n<h2 class=\"preview__body--subtitle\" id=\"using-the-run-go-tests-helper\">Using the run-go-tests helper</h2>\n<p>The <code>run-go-tests</code> can run automated tests written in Go with the proper settings for the test path (so it works with\nGOPATH), parallelism, and timeouts.</p>\n<p>We recommend running this helper in the <code>test</code> section of <code>circle.yml</code>:</p>\n<pre>\n<span class=\"hljs-keyword\">test:\n </span>override:\n - run-go-tests --path test\n</pre>\n<p>A few things to note:</p>\n<ol>\n<li>Use the <code>--path</code> parameter to tell <code>run-go-tests</code> where your tests are located. The path should be relative to your\nproject root. The default is the present working directory, which in Circle CI, is the root of your Git checkout.</li>\n<li>Use the <code>--packages</code> parameter to specify which packages to test. The default is the output of running\n<code>glide novendor</code> in <code>--path</code>.</li>\n<li>The <code>run-go-tests</code> script will add a <code>-short</code> parameter to the test command when not running on the master branch.\nYour tests can read in the value of this flag <a href=\"https://golang.org/pkg/testing/\" class=\"preview__body--description--blue\" target=\"_blank\">as shown here</a> to determine if a\nlong-running test should be executed or not.</li>\n</ol>\n<h3 class=\"preview__body--subtitle\" id=\"passing-extra-arguments\">Passing extra arguments</h3>\n<p>Sometimes, you might find that you need to tweak a few options to make your go tests run a certain way,\nusually to help in debugging them.\nTo achieve this, you're able to pass extra command line arguments to the <code>go test</code> command\nthrough a commit message.\nFor example, to run a specific test, your last commit could look something like this:</p>\n<pre>Some <span class=\"hljs-keyword\">commit</span> message. [<span class=\"hljs-keyword\">go</span>-<span class=\"hljs-keyword\">test</span>-args=-run SomeTestFunc]\n</pre>\n<p>Now when you push to the CI server, only <code>SomeTestFunc</code> is tested. You are able to set multiple options\nas you normally would in the command line:</p>\n<pre>Some <span class=\"hljs-keyword\">commit</span> message. [<span class=\"hljs-keyword\">go</span>-<span class=\"hljs-keyword\">test</span>-args=-run SomeTestFunc -cpu <span class=\"hljs-number\">2</span>]\n</pre>\n<h2 class=\"preview__body--subtitle\" id=\"using-the-upload-github-release-assets-helper\">Using the upload-github-release-assets helper</h2>\n<p>To use this helper, you must first create a <a href=\"https://help.github.com/articles/creating-an-access-token-for-command-line-use/\" class=\"preview__body--description--blue\" target=\"_blank\">GitHub access\ntoken</a> and set it as the environment\nvariable <code>GITHUB_OAUTH_TOKEN</code>.</p>\n<p>After that, in CircleCI, you can run the <code>upload-github-release-assets</code> script as follows:</p>\n<pre>upload-github-<span class=\"hljs-keyword\">release</span>-assets /assets-<span class=\"hljs-keyword\">to</span>-upload/file<span class=\"hljs-number\">1</span> /assets-<span class=\"hljs-keyword\">to</span>-upload/file<span class=\"hljs-number\">2</span> /assets-<span class=\"hljs-keyword\">to</span>-upload/file<span class=\"hljs-number\">3</span>\n</pre>\n<p>You can also use bash parameter expansion:</p>\n<pre>upload-github-<span class=\"hljs-keyword\">release</span>-assets /assets-<span class=\"hljs-keyword\">to</span>-upload/*\n</pre>\n<p>That is, you just pass in a list of assets to upload, and the script will automatically figure out the proper GitHub\nrepo and tag to use based on <a href=\"https://circleci.com/docs/environment-variables/\" class=\"preview__body--description--blue\" target=\"_blank\">CircleCI environment variables</a>. If\nyou're not using CircleCI or want to customize some of the settings, you may use the following options:</p>\n<ul>\n<li><code>--github-repo-owner</code>: The user or organization that owns the repo (e.g. gruntwork-io).</li>\n<li><code>--github-repo-name</code>: The name of the repo (e.g. module-ci).</li>\n<li><code>--git-tag</code>: The git tag for which assets should be pushed (e.g. v0.0.3).</li>\n</ul>\n<h2 class=\"preview__body--subtitle\" id=\"using-the-build-go-binaries-helper\">Using the build-go-binaries helper</h2>\n<p>This script accepts the following options:</p>\n<ul>\n<li><code>--src-path</code>: The path, relative to the project root, where Go source files can be found. Default: current working\ndirectory.</li>\n<li><code>--dest-path</code>: The path, relative to the project root, in which the binaries should be created.</li>\n<li><code>--app-name</code>: What to name the Go binaries.</li>\n<li><code>--os</code>: The OS's to build binaries for.</li>\n<li><code>--arch</code>: The architectures to build binaries for.</li>\n</ul>\n<p>Example:</p>\n<pre><span class=\"hljs-keyword\">build-go-binaries </span>--app-name myapp --src-path foo/<span class=\"hljs-keyword\">bar </span>--dest-path foo/<span class=\"hljs-keyword\">bin\n</span></pre>\n<p>This will create 32 bit and 64 bit binaries for Linux, OS X, and Windows in the <code>foo/bin</code> folder with the name\n<code>myapp_<os>_<arch></code> (e.g. <code>myapp_linux_amd64</code>, <code>myapp_windows_386.exe</code>, etc).</p>\n<p>If you run <code>build-go-binaries</code> with no options, it will build the source code in the current working directory into a\n<code>bin</code> folder and pick reasonable defaults for all the other values using <a href=\"https://circleci.com/docs/environment-variables/\" class=\"preview__body--description--blue\" target=\"_blank\">CircleCI environment\nvariables</a>.</p>\n","repoName":"module-ci","repoRef":"v0.17.0","serviceDescriptor":{"serviceName":"EC2 backup","serviceRepoName":"module-ci","serviceRepoOrg":"gruntwork-io","serviceMainReadmePath":"/modules/ec2-backup","cloudProviders":["aws"],"description":"Snapshot your EC2 instances on a scheduled basis.","imageUrl":"grunt.png","licenseType":"subscriber","technologies":["Terraform","JavaScript","Lambda"],"compliance":[],"tags":[""]},"serviceCategoryName":"Backup & recovery","fileName":"README.md","filePath":"/modules/gruntwork-module-circleci-helpers","title":"Repo Browser: EC2 backup","description":"Browse the repos in the Gruntwork Infrastructure as Code Library."}