{"id":13577932,"url":"https://github.com/cloudposse/build-harness","last_synced_at":"2025-05-15T17:03:47.046Z","repository":{"id":16070312,"uuid":"79554354","full_name":"cloudposse/build-harness","owner":"cloudposse","description":"Collection of Makefiles to facilitate building Golang projects, Dockerfiles, Helm charts, and more","archived":false,"fork":false,"pushed_at":"2024-11-13T00:30:16.000Z","size":4530,"stargazers_count":358,"open_issues_count":14,"forks_count":127,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-04-07T22:07:28.199Z","etag":null,"topics":["build","build-automation","build-system","build-tool","cicd","circleci","codefresh","docker","docker-images","dockerfile","golang","helm","helm-charts","jenkins","makefile","travis-ci"],"latest_commit_sha":null,"homepage":"https://cloudposse.com/accelerate","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudposse.png","metadata":{"funding":{"github":"cloudposse"},"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-20T11:40:41.000Z","updated_at":"2025-04-04T03:54:56.000Z","dependencies_parsed_at":"2023-12-27T18:26:30.856Z","dependency_job_id":"6700a889-7993-43d7-99c6-f13540f08a4b","html_url":"https://github.com/cloudposse/build-harness","commit_stats":{"total_commits":269,"total_committers":35,"mean_commits":7.685714285714286,"dds":0.6617100371747212,"last_synced_commit":"00a987053c16e176d4f8a1df69a4005df49c8d97"},"previous_names":[],"tags_count":203,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudposse%2Fbuild-harness","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudposse%2Fbuild-harness/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudposse%2Fbuild-harness/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudposse%2Fbuild-harness/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudposse","download_url":"https://codeload.github.com/cloudposse/build-harness/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254384982,"owners_count":22062422,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build","build-automation","build-system","build-tool","cicd","circleci","codefresh","docker","docker-images","dockerfile","golang","helm","helm-charts","jenkins","makefile","travis-ci"],"created_at":"2024-08-01T15:01:25.508Z","updated_at":"2025-05-15T17:03:46.995Z","avatar_url":"https://github.com/cloudposse.png","language":"Makefile","funding_links":["https://github.com/sponsors/cloudposse"],"categories":["Makefile","jenkins"],"sub_categories":[],"readme":"\n\n\u003c!-- markdownlint-disable --\u003e\n\u003ca href=\"https://cpco.io/homepage\"\u003e\u003cimg src=\"https://github.com/cloudposse/build-harness/blob/main/.github/banner.png?raw=true\" alt=\"Project Banner\"/\u003e\u003c/a\u003e\u003cbr/\u003e\n    \u003cp align=\"right\"\u003e\n\u003ca href=\"https://github.com/cloudposse/build-harness/actions/workflows/docker.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/cloudposse/build-harness/docker.yml?style=for-the-badge\" alt=\"Build Status\"/\u003e\u003c/a\u003e\u003ca href=\"https://github.com/cloudposse/build-harness/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/release/cloudposse/build-harness.svg?style=for-the-badge\" alt=\"Latest Release\"/\u003e\u003c/a\u003e\u003ca href=\"https://github.com/cloudposse/build-harness/commits/master/\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/cloudposse/build-harness/master?style=for-the-badge\" alt=\"Last Updated\"/\u003e\u003c/a\u003e\u003ca href=\"https://slack.cloudposse.com\"\u003e\u003cimg src=\"https://slack.cloudposse.com/for-the-badge.svg\" alt=\"Slack Community\"/\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c!-- markdownlint-restore --\u003e\n\n\u003c!--\n\n\n\n\n  ** DO NOT EDIT THIS FILE\n  **\n  ** This file was automatically generated by the `cloudposse/build-harness`.\n  ** 1) Make all changes to `README.yaml`\n  ** 2) Run `make init` (you only need to do this once)\n  ** 3) Run`make readme` to rebuild this file.\n  **\n  ** (We maintain HUNDREDS of open source projects. This is how we maintain our sanity.)\n  **\n\n\n\n\n\n--\u003e\n\nThis `build-harness` is a collection of Makefiles to facilitate building READMEs, Golang projects, Dockerfiles, Helm charts, and more.\nIt's designed to work with CI/CD systems such as GitHub Actions.\n\n## Screenshots\n\n\u003cimg src=\"docs/demo.gif?raw=true\" alt=\"demo\" /\u003e*Example of using the `build-harness` to build a docker image*\n\n\n\n\n\n\n\n## Usage\n\n\n\u003e [!IMPORTANT]\n\u003e **Regarding the phase out of `git.io`**\n\u003e Prior to April 25, 2022, practically all Cloud Posse Makefiles pulled in a common Makefile via\n\u003e ```bash\n\u003e curl -sSL -o .build-harness \"https://git.io/build-harness\"\n\u003e ```\n\u003e \n\u003e The `git.io` service is a link shortener/redirector provided by GitHub, but [they no longer support it](https://github.blog/changelog/2022-04-25-git-io-deprecation/).\n\u003e We have therefore set up `https://cloudposse.tools/build-harness` as an alternative and are migrating\n\u003e all our Makefiles to use that URL instead. We encourage you to update any references you have in your\n\u003e own code derived from our code, whether by forking one of our repos or simply following one of our examples.\n\u003e \n\u003e Full details are available in our [`git.io` deprecation documentation](docs/git-io-deprecation.md).\n\nAt the top of your `Makefile` add, the following...\n\n```make\n-include $(shell curl -sSL -o .build-harness \"https://cloudposse.tools/build-harness\"; echo .build-harness)\n```\n\nThis will download a `Makefile` called `.build-harness` and include it at run time. We recommend adding the `.build-harness` file to your `.gitignore`.\n\nThis automatically exposes many new targets that you can leverage throughout your build \u0026 CI/CD process.\n\nRun `make help` for a list of available targets.\n\n**NOTE:** the `/` is interchangable with the `:` in target names\n\n## GitHub Actions\n\nThe `build-harness` is compatible with [GitHub Actions](https://github.com/features/actions).\n\nHere's an example of running `make readme/lint`\n\n```yaml\nname: build-harness/readme/lint\non: [pull_request]\njobs:\n  build:\n    name: 'Lint README.md'\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@master\n    - uses: cloudposse/build-harness@master\n      with:\n        entrypoint: /usr/bin/make\n        args: readme/lint\n ```\n\n\n## Quick Start\n\nHere's how to get started...\n\n1. `git clone https://github.com/cloudposse/build-harness.git` to pull down the repository\n2. `make init` to initialize the [`build-harness`](https://github.com/cloudposse/build-harness/)\n## Examples\n\nHere is a real world example:\n- [`terraform-null-label`](https://github.com/cloudposse/terraform-null-label/) - A terraform module that leverages `terraform/%` targets\n\n\n\n\n\u003c!-- markdownlint-disable --\u003e\n## Makefile Targets\n```text\nAvailable targets:\n\n  aws/install                         Install aws cli bundle\n  aws/shell                           Start a aws-vault shell with access to aws api\n  bash/lint                           Lint all bash scripts\n  chamber/install                     Install chamber\n  chamber/shell                       Start a chamber shell with secrets exported to the environment\n  clean                               Clean build-harness\n  codefresh/export                    DEPRECATED!!! Export codefresh additional envvars\n  codefresh/notify/slack/build        Send notification from codefresh to slack using \"build\" template\n  codefresh/notify/slack/deploy       Send notification from codefresh to slack using \"deploy\" template\n  codefresh/notify/slack/deploy/webapp Send notification from codefresh to slack using \"deploy\" template with exposed endpoint\n  codefresh/notify/slack/sync         Send notification from codefresh to slack using \"codefresh-sync\" template\n  codefresh/pipeline/export           Export pipeline vars\n  codefresh/sync/apply                Codefresh pipelines sync - Apply the changes\n  codefresh/sync/auth/%               Authentificate on codefresh account\n  codefresh/sync/deps                 Install dependencies for codefresh sync\n  codefresh/sync/diff                 Codefresh pipelines sync - Show changes\n  codefresh/sync/pipeline/export      Export sync pipeline vars\n  codefresh/trigger/webhook           Trigger a CodeFresh WebHook\n  completion/install/bash             Install completion script for bash\n  compose/build                       Build local dev environment\n  compose/down                        Stop local dev environment\n  compose/monitor                     Show containers resource usage\n  compose/monitor/follow              Monitor in time containers resource usage\n  compose/purge                       Purge local dev environment\n  compose/rebuild                     Rebuild custom containers for local dev environment\n  compose/restart                     Restart local dev environment\n  compose/top                         Show top for containers\n  compose/up                          Start local dev environment (daemonized)\n  docker/build                        Build docker image\n  docker/clean                        Cleanup docker.                     WARNING!!! IT WILL DELETE ALL UNUSED RESOURCES\n  docker/clean/containers             Cleanup docker containers.          WARNING!!! IT WILL DELETE ALL UNUSED CONTAINERS\n  docker/clean/images                 Cleanup docker images.              WARNING!!! IT WILL DELETE ALL UNUSED IMAGES\n  docker/clean/images/all             Cleanup docker images all.          WARNING!!! IT WILL DELETE ALL IMAGES\n  docker/clean/networks               Cleanup docker networks.            WARNING!!! IT WILL DELETE ALL UNUSED NETWORKS\n  docker/clean/volumes                Cleanup docker volumes.             WARNING!!! IT WILL DELETE ALL UNUSED VOLUMES\n  docker/image/promote/local          Promote $SOURCE_DOCKER_REGISTRY/$IMAGE_NAME:$SOURCE_VERSION to $TARGET_DOCKER_REGISTRY/$IMAGE_NAME:$TARGET_VERSION\n  docker/image/promote/remote         Pull $SOURCE_DOCKER_REGISTRY/$IMAGE_NAME:$SOURCE_VERSION and promote to $TARGET_DOCKER_REGISTRY/$IMAGE_NAME:$TARGET_VERSION\n  docker/image/push                   Push $TARGET_DOCKER_REGISTRY/$IMAGE_NAME:$TARGET_VERSION\n  docker/login                        Login into docker hub\n  docs/copyright-add                  Add copyright headers to source code\n  docs/github-action.md               Update `docs/github-action.md` from `action.yaml`\n  docs/github-actions-reusable-workflows.md Update `docs/github-actions-reusable-workflows.md` from `.github/workflows/*.yaml`\n  docs/targets.md                     Update `docs/targets.md` from `make help`\n  docs/terraform.md                   Update `docs/terraform.md` from `terraform-docs`\n  geodesic/deploy                     Run a Jenkins Job to Deploy $(APP) with $(CANONICAL_TAG)\n  git/aliases-update                  Update git aliases\n  git/export                          Export git vars\n  git/submodules-update               Update submodules\n  github/download-private-release     Download release from github\n  github/download-public-release      Download release from github\n  github/latest-release               Fetch the latest release tag from the GitHub API\n  github/push-artifacts               Push all release artifacts to GitHub (Required: `GITHUB_TOKEN`)\n  gitleaks/install                    Install gitleaks\n  gitleaks/scan                       Scan current repository\n  go/build                            Build binary\n  go/build-all                        Build binary for all platforms\n  go/clean                            Clean compiled binary\n  go/clean-all                        Clean compiled binary and dependencies\n  go/deps                             Install dependencies\n  go/deps-dev                         Install development dependencies\n  go/fmt                              Format code according to Golang convention\n  go/install                          Install cli\n  go/lint                             Lint code\n  go/test                             Run tests\n  go/vet                              Vet code\n  helm/chart/build                    Build chart $CHART_NAME from $SOURCE_CHART_TPL\n  helm/chart/build-all                Alias for helm/chart/build/all. Depricated.\n  helm/chart/build/all                Build chart $CHART_NAME from $SOURCE_CHART_TPL for all available $SEMVERSIONS\n  helm/chart/clean                    Clean chart packages\n  helm/chart/create                   Create chart $CHART from starter scaffold\n  helm/chart/promote/local            Promote $SOURCE_CHART_FILE to $TARGET_VERSION\n  helm/chart/promote/remote           Promote $CHART_NAME from $SOURCE_VERSION to $TARGET_VERSION. ($SOURCE_CHART_REPO_ENDPOINT required)\n  helm/chart/publish                  Alias for helm/chart/publish/all. WARNING: Eventually will became functional equal to helm/chart/publish/one\n  helm/chart/publish/all              Publish chart $CHART_NAME to $TARGET_CHART_REPO_ENDPOINT\n  helm/chart/publish/package          Publish chart $SOURCE_CHART_FILE to $REPO_GATEWAY_ENDPOINT\n  helm/chart/starter/fetch            Fetch starter\n  helm/chart/starter/remove           Remove starter\n  helm/chart/starter/update           Update starter\n  helm/delete/failed                  Delete all failed releases in a `NAMESPACE` subject to `FILTER`\n  helm/delete/namespace               Delete all releases in a `NAMEPSACE` as well as the namespace\n  helm/delete/namespace/empty         Delete `NAMESPACE` if there are no releases in it\n  helm/install                        Install helm\n  helm/repo/add                       Add $REPO_NAME from $REPO_ENDPOINT\n  helm/repo/add-current               Add helm remote dev repos\n  helm/repo/add-remote                Add helm remote repos\n  helm/repo/build                     Build repo\n  helm/repo/clean                     Clean helm repo\n  helm/repo/fix-perms                 Fix repo filesystem permissions\n  helm/repo/info                      Show repo info\n  helm/repo/lint                      Lint charts\n  helm/repo/update                    Update repo info\n  helm/serve/index                    Build index for serve helm charts\n  helm/toolbox/upsert                 Install or upgrade helm tiller \n  helmfile/install                    Install helmfile\n  help                                Help screen\n  help/all                            Display help for all targets\n  help/short                          This help short screen\n  init                                Init build-harness\n  jenkins/run-job-with-tag            Run a Jenkins Job with $(TAG)\n  make/lint                           Lint all makefiles\n  packages/delete                     Delete local copy of packages repository\n  packages/install                    Download packages repository\n  packages/install/%                  Install package (e.g. helm, helmfile, kubectl)\n  packages/reinstall                  Reinstall local copy of packages repository\n  packages/reinstall/%                Reinstall package (e.g. helm, helmfile, kubectl)\n  packages/uninstall/%                Uninstall package (e.g. helm, helmfile, kubectl)\n  readme                              Alias for readme/build\n  readme/build                        Create README.md by building it from README.yaml\n  readme/init                         Create basic minimalistic .README.md template file\n  readme/lint                         Verify the `README.md` is up to date\n  semver/export                       Export semver vars\n  slack/notify                        Send webhook notification to slack\n  slack/notify/build                  Send notification to slack using \"build\" template\n  slack/notify/deploy                 Send notification to slack using \"deploy\" template\n  template/build                      Create $OUT file by building it from $IN template file\n  template/deps                       Install dependencies\n  terraform/bump-tf-12-min-version    Rewrite versions.tf to bump modules with minimum core version of '0.12.x' to '\u003e= 0.12.26'\n  terraform/fmt                       Format terraform\n  terraform/get-modules               (Obsolete) Ensure all modules can be fetched\n  terraform/get-plugins               (Obsolete) Ensure all plugins can be fetched\n  terraform/install                   Install terraform\n  terraform/lint                      Format check terraform\n  terraform/loosen-constraints        and convert \"~\u003e\" constraints to \"\u003e=\".\n  terraform/precommit                 Terraform pull-request routine check/update\n  terraform/rewrite-required-providers Rewrite versions.tf to update existing configuration to add an explicit source attribute for each provider\n  terraform/tflint                    Lint terraform (with tflint)\n  terraform/upgrade-modules           This target has not been upgraded to handle registry format\n  terraform/validate                  Basic terraform sanity check\n  travis/docker-login                 Login into docker hub\n  travis/docker-tag-and-push          Tag \u0026 Push according Travis environment variables\n\n```\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- markdownlint-disable --\u003e\n## Extending `build-harness` with targets from another repo\n\nIt is possible to extend the `build-harness` with targets and entire modules of your own, without having to fork or modify `build-harness` itself.\nThis might be useful if, for example, you wanted to maintain some tooling that was specific to your environment that didn't have enough general applicability to be part of the main project.\nThis makes it so you don't necessarily need to fork `build-harness` itself - you can place a repo defined by the environment variable `BUILD_HARNESS_EXTENSIONS_PATH` (a filesystem peer of `build-harness` named `build-harness-extensions` by default) and populate it with tools in the same `Makefile` within `module` structure as `build-harness` has.\nModules will be combined and available with a unified `make` command. \n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- markdownlint-disable --\u003e\n## Using the \"auto-init\" feature\n\nTypically, the `build-harness` project requires running `make init` before any of the Makefile targets can be invoked. The `init` target will \"install\" the `build-harness` project and \"include\" the `Makefile` from the `build-harness` project.\n\nAlternatively, the \"auto-init\" feature can automatically run the `init` logic for you to install the `build-harness` and help keep the install up-to-date. This feature is enabled using the env or Makefile variable `BUILD_HARNESS_AUTO_INIT=true`. By default, this feature is disabled; to enable it, you must set the variable yourself.\n\n**Note:** The \"auto-init\" feature is a convenience for running `make` interactively. Regardless of your setting of `BUILD_HARNESS_AUTO_INIT`, \"auto-init\" will be disabled if `make` is running inside a Docker container. Scripts and automation should continue to call `make init` explicitly. \n\n```make\nBUILD_HARNESS_AUTO_INIT = true\n\n-include $(shell curl -sSL -o .build-harness \"https://cloudposse.tools/build-harness\"; echo .build-harness)\n```\n\nThe \"auto-init\" feature will _also_ keep the install up-to-date. It will check the value of `BUILD_HARNESS_BRANCH`, get the commit ID, compare that to the current checkout, and update the clone if they differ. A useful side-effect is that it becomes easy to pin to versions of the `build-harness` from your own project, and let the `build-harness` update itself as you update the pin:\n\n```make\nBUILD_HARNESS_AUTO_INIT = true\nBUILD_HARNESS_BRANCH = {TAG}\n\n-include $(shell curl -sSL -o .build-harness \"https://cloudposse.tools/build-harness\"; echo .build-harness)\n```\n\nNow when you run `make` the project will update itself to use the version specified by the `BUILD_HARNESS_BRANCH` value:\n\n```sh\n$ make help\nRemoving existing build-harness\nCloning https://github.com/cloudposse/build-harness.git#{TAG}...\nCloning into 'build-harness'...\nremote: Enumerating objects: 143, done.\nremote: Counting objects: 100% (143/143), done.\nremote: Compressing objects: 100% (118/118), done.\nremote: Total 143 (delta 7), reused 71 (delta 3), pack-reused 0\nReceiving objects: 100% (143/143), 85.57 KiB | 2.09 MiB/s, done.\nResolving deltas: 100% (7/7), done.\nAvailable targets:\n\n  aws/install                         Install aws cli bundle\n```\n\u003c!-- markdownlint-restore --\u003e\n\n\n## Related Projects\n\nCheck out these related projects.\n\n- [Packages](https://github.com/cloudposse/packages) - Cloud Posse installer and distribution of native apps\n- [Atmos](https://github.com/cloudposse/atmos) - DevOps Automation Tool\n\n\n## References\n\nFor additional context, refer to some of these links.\n\n- [Wikipedia - Test Harness](https://en.wikipedia.org/wiki/Test_harness) - The `build-harness` is similar in concept to a \"Test Harness\"\n\n\n\n\n## ✨ Contributing\n\nThis project is under active development, and we encourage contributions from our community.\n\n\n\nMany thanks to our outstanding contributors:\n\n\u003ca href=\"https://github.com/cloudposse/build-harness/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=cloudposse/build-harness\u0026max=24\" /\u003e\n\u003c/a\u003e\n\nFor 🐛 bug reports \u0026 feature requests, please use the [issue tracker](https://github.com/cloudposse/build-harness/issues).\n\nIn general, PRs are welcome. We follow the typical \"fork-and-pull\" Git workflow.\n 1. Review our [Code of Conduct](https://github.com/cloudposse/build-harness/?tab=coc-ov-file#code-of-conduct) and [Contributor Guidelines](https://github.com/cloudposse/.github/blob/main/CONTRIBUTING.md).\n 2. **Fork** the repo on GitHub\n 3. **Clone** the project to your own machine\n 4. **Commit** changes to your own branch\n 5. **Push** your work back up to your fork\n 6. Submit a **Pull Request** so that we can review your changes\n\n**NOTE:** Be sure to merge the latest changes from \"upstream\" before making a pull request!\n\n### 🌎 Slack Community\n\nJoin our [Open Source Community](https://cpco.io/slack?utm_source=github\u0026utm_medium=readme\u0026utm_campaign=cloudposse/build-harness\u0026utm_content=slack) on Slack. It's **FREE** for everyone! Our \"SweetOps\" community is where you get to talk with others who share a similar vision for how to rollout and manage infrastructure. This is the best place to talk shop, ask questions, solicit feedback, and work together as a community to build totally *sweet* infrastructure.\n\n### 📰 Newsletter\n\nSign up for [our newsletter](https://cpco.io/newsletter?utm_source=github\u0026utm_medium=readme\u0026utm_campaign=cloudposse/build-harness\u0026utm_content=newsletter) and join 3,000+ DevOps engineers, CTOs, and founders who get insider access to the latest DevOps trends, so you can always stay in the know.\nDropped straight into your Inbox every week — and usually a 5-minute read.\n\n### 📆 Office Hours \u003ca href=\"https://cloudposse.com/office-hours?utm_source=github\u0026utm_medium=readme\u0026utm_campaign=cloudposse/build-harness\u0026utm_content=office_hours\"\u003e\u003cimg src=\"https://img.cloudposse.com/fit-in/200x200/https://cloudposse.com/wp-content/uploads/2019/08/Powered-by-Zoom.png\" align=\"right\" /\u003e\u003c/a\u003e\n\n[Join us every Wednesday via Zoom](https://cloudposse.com/office-hours?utm_source=github\u0026utm_medium=readme\u0026utm_campaign=cloudposse/build-harness\u0026utm_content=office_hours) for your weekly dose of insider DevOps trends, AWS news and Terraform insights, all sourced from our SweetOps community, plus a _live Q\u0026A_ that you can’t find anywhere else.\nIt's **FREE** for everyone!\n## License\n\n\u003ca href=\"https://opensource.org/licenses/Apache-2.0\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=for-the-badge\" alt=\"License\"\u003e\u003c/a\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ePreamble to the Apache License, Version 2.0\u003c/summary\u003e\n\u003cbr/\u003e\n\u003cbr/\u003e\n\nComplete license is available in the [`LICENSE`](LICENSE) file.\n\n```text\nLicensed to the Apache Software Foundation (ASF) under one\nor more contributor license agreements.  See the NOTICE file\ndistributed with this work for additional information\nregarding copyright ownership.  The ASF licenses this file\nto you under the Apache License, Version 2.0 (the\n\"License\"); you may not use this file except in compliance\nwith the License.  You may obtain a copy of the License at\n\n  https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing,\nsoftware distributed under the License is distributed on an\n\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, either express or implied.  See the License for the\nspecific language governing permissions and limitations\nunder the License.\n```\n\u003c/details\u003e\n\n## Trademarks\n\nAll other trademarks referenced herein are the property of their respective owners.\n\n\n## Copyrights\n\nCopyright © 2016-2024 [Cloud Posse, LLC](https://cloudposse.com)\n\n\n\n\u003ca href=\"https://cloudposse.com/readme/footer/link?utm_source=github\u0026utm_medium=readme\u0026utm_campaign=cloudposse/build-harness\u0026utm_content=readme_footer_link\"\u003e\u003cimg alt=\"README footer\" src=\"https://cloudposse.com/readme/footer/img\"/\u003e\u003c/a\u003e\n\n\u003cimg alt=\"Beacon\" width=\"0\" src=\"https://ga-beacon.cloudposse.com/UA-76589703-4/cloudposse/build-harness?pixel\u0026cs=github\u0026cm=readme\u0026an=build-harness\"/\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudposse%2Fbuild-harness","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudposse%2Fbuild-harness","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudposse%2Fbuild-harness/lists"}