<a href="https://cpco.io/homepage"><img src=".github/banner.png?raw=true" alt="Project Banner"/></a><br/> <p align="right"> <a href="https://github.com/cloudposse/build-harness/actions/workflows/docker.yml"><img src="https://img.shields.io/github/actions/workflow/status/cloudposse/build-harness/docker.yml?style=for-the-badge" alt="Build Status"/></a><a href="https://github.com/cloudposse/build-harness/releases/latest"><img src="https://img.shields.io/github/release/cloudposse/build-harness.svg?style=for-the-badge" alt="Latest Release"/></a><a href="https://github.com/cloudposse/build-harness/commits/master/"><img src="https://img.shields.io/github/last-commit/cloudposse/build-harness/master?style=for-the-badge" alt="Last Updated"/></a><a href="https://slack.cloudposse.com"><img src="https://slack.cloudposse.com/for-the-badge.svg" alt="Slack Community"/></a></p>
<!-- markdownlint-restore --> <!-- ** DO NOT EDIT THIS FILE ** ** This file was automatically generated by the `cloudposse/build-harness`. ** 1) Make all changes to `README.yaml` ** 2) Run `make init` (you only need to do this once) ** 3) Run`make readme` to rebuild this file. ** ** (We maintain HUNDREDS of open source projects. This is how we maintain our sanity.) ** -->This build-harness
is a collection of Makefiles to facilitate building READMEs, Golang projects, Dockerfiles, Helm charts, and more.
It's designed to work with CI/CD systems such as GitHub Actions.
<img src="docs/demo.gif?raw=true" alt="demo" />Example of using the build-harness
to build a docker image
[!IMPORTANT] Regarding the phase out of
git.io
Prior to April 25, 2022, practically all Cloud Posse Makefiles pulled in a common Makefile viacurl -sSL -o .build-harness "https://git.io/build-harness"
The
git.io
service is a link shortener/redirector provided by GitHub, but they no longer support it. We have therefore set uphttps://cloudposse.tools/build-harness
as an alternative and are migrating all our Makefiles to use that URL instead. We encourage you to update any references you have in your own code derived from our code, whether by forking one of our repos or simply following one of our examples.Full details are available in our
git.io
deprecation documentation.
At the top of your Makefile
add, the following...
-include $(shell curl -sSL -o .build-harness "https://cloudposse.tools/build-harness"; echo .build-harness)
This will download a Makefile
called .build-harness
and include it at run time. We recommend adding the .build-harness
file to your .gitignore
.
This automatically exposes many new targets that you can leverage throughout your build & CI/CD process.
Run make help
for a list of available targets.
NOTE: the /
is interchangable with the :
in target names
The build-harness
is compatible with GitHub Actions.
Here's an example of running make readme/lint
name: build-harness/readme/lint on: [pull_request] jobs: build: name: 'Lint README.md' runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: cloudposse/build-harness@master with: entrypoint: /usr/bin/make args: readme/lint
Here's how to get started...
git clone https://github.com/cloudposse/build-harness.git
to pull down the repositorymake init
to initialize the build-harness
Here is a real world example:
terraform-null-label
- A terraform module that leverages terraform/%
targets<!-- markdownlint-restore --> <!-- markdownlint-disable -->Available targets: aws/install Install aws cli bundle aws/shell Start a aws-vault shell with access to aws api bash/lint Lint all bash scripts chamber/install Install chamber chamber/shell Start a chamber shell with secrets exported to the environment clean Clean build-harness codefresh/export DEPRECATED!!! Export codefresh additional envvars codefresh/notify/slack/build Send notification from codefresh to slack using "build" template codefresh/notify/slack/deploy Send notification from codefresh to slack using "deploy" template codefresh/notify/slack/deploy/webapp Send notification from codefresh to slack using "deploy" template with exposed endpoint codefresh/notify/slack/sync Send notification from codefresh to slack using "codefresh-sync" template codefresh/pipeline/export Export pipeline vars codefresh/sync/apply Codefresh pipelines sync - Apply the changes codefresh/sync/auth/% Authentificate on codefresh account codefresh/sync/deps Install dependencies for codefresh sync codefresh/sync/diff Codefresh pipelines sync - Show changes codefresh/sync/pipeline/export Export sync pipeline vars codefresh/trigger/webhook Trigger a CodeFresh WebHook completion/install/bash Install completion script for bash compose/build Build local dev environment compose/down Stop local dev environment compose/monitor Show containers resource usage compose/monitor/follow Monitor in time containers resource usage compose/purge Purge local dev environment compose/rebuild Rebuild custom containers for local dev environment compose/restart Restart local dev environment compose/top Show top for containers compose/up Start local dev environment (daemonized) docker/build Build docker image docker/clean Cleanup docker. WARNING!!! IT WILL DELETE ALL UNUSED RESOURCES docker/clean/containers Cleanup docker containers. WARNING!!! IT WILL DELETE ALL UNUSED CONTAINERS docker/clean/images Cleanup docker images. WARNING!!! IT WILL DELETE ALL UNUSED IMAGES docker/clean/images/all Cleanup docker images all. WARNING!!! IT WILL DELETE ALL IMAGES docker/clean/networks Cleanup docker networks. WARNING!!! IT WILL DELETE ALL UNUSED NETWORKS docker/clean/volumes Cleanup docker volumes. WARNING!!! IT WILL DELETE ALL UNUSED VOLUMES docker/image/promote/local Promote $SOURCE_DOCKER_REGISTRY/$IMAGE_NAME:$SOURCE_VERSION to $TARGET_DOCKER_REGISTRY/$IMAGE_NAME:$TARGET_VERSION docker/image/promote/remote Pull $SOURCE_DOCKER_REGISTRY/$IMAGE_NAME:$SOURCE_VERSION and promote to $TARGET_DOCKER_REGISTRY/$IMAGE_NAME:$TARGET_VERSION docker/image/push Push $TARGET_DOCKER_REGISTRY/$IMAGE_NAME:$TARGET_VERSION docker/login Login into docker hub docs/copyright-add Add copyright headers to source code docs/github-action.md Update `docs/github-action.md` from `action.yaml` docs/github-actions-reusable-workflows.md Update `docs/github-actions-reusable-workflows.md` from `.github/workflows/*.yaml` docs/targets.md Update `docs/targets.md` from `make help` docs/terraform.md Update `docs/terraform.md` from `terraform-docs` geodesic/deploy Run a Jenkins Job to Deploy $(APP) with $(CANONICAL_TAG) git/aliases-update Update git aliases git/export Export git vars git/submodules-update Update submodules github/download-private-release Download release from github github/download-public-release Download release from github github/latest-release Fetch the latest release tag from the GitHub API github/push-artifacts Push all release artifacts to GitHub (Required: `GITHUB_TOKEN`) gitleaks/install Install gitleaks gitleaks/scan Scan current repository go/build Build binary go/build-all Build binary for all platforms go/clean Clean compiled binary go/clean-all Clean compiled binary and dependencies go/deps Install dependencies go/deps-dev Install development dependencies go/fmt Format code according to Golang convention go/install Install cli go/lint Lint code go/test Run tests go/vet Vet code helm/chart/build Build chart $CHART_NAME from $SOURCE_CHART_TPL helm/chart/build-all Alias for helm/chart/build/all. Depricated. helm/chart/build/all Build chart $CHART_NAME from $SOURCE_CHART_TPL for all available $SEMVERSIONS helm/chart/clean Clean chart packages helm/chart/create Create chart $CHART from starter scaffold helm/chart/promote/local Promote $SOURCE_CHART_FILE to $TARGET_VERSION helm/chart/promote/remote Promote $CHART_NAME from $SOURCE_VERSION to $TARGET_VERSION. ($SOURCE_CHART_REPO_ENDPOINT required) helm/chart/publish Alias for helm/chart/publish/all. WARNING: Eventually will became functional equal to helm/chart/publish/one helm/chart/publish/all Publish chart $CHART_NAME to $TARGET_CHART_REPO_ENDPOINT helm/chart/publish/package Publish chart $SOURCE_CHART_FILE to $REPO_GATEWAY_ENDPOINT helm/chart/starter/fetch Fetch starter helm/chart/starter/remove Remove starter helm/chart/starter/update Update starter helm/delete/failed Delete all failed releases in a `NAMESPACE` subject to `FILTER` helm/delete/namespace Delete all releases in a `NAMEPSACE` as well as the namespace helm/delete/namespace/empty Delete `NAMESPACE` if there are no releases in it helm/install Install helm helm/repo/add Add $REPO_NAME from $REPO_ENDPOINT helm/repo/add-current Add helm remote dev repos helm/repo/add-remote Add helm remote repos helm/repo/build Build repo helm/repo/clean Clean helm repo helm/repo/fix-perms Fix repo filesystem permissions helm/repo/info Show repo info helm/repo/lint Lint charts helm/repo/update Update repo info helm/serve/index Build index for serve helm charts helm/toolbox/upsert Install or upgrade helm tiller helmfile/install Install helmfile help Help screen help/all Display help for all targets help/short This help short screen init Init build-harness jenkins/run-job-with-tag Run a Jenkins Job with $(TAG) make/lint Lint all makefiles packages/delete Delete local copy of packages repository packages/install Download packages repository packages/install/% Install package (e.g. helm, helmfile, kubectl) packages/reinstall Reinstall local copy of packages repository packages/reinstall/% Reinstall package (e.g. helm, helmfile, kubectl) packages/uninstall/% Uninstall package (e.g. helm, helmfile, kubectl) readme Alias for readme/build readme/build Create README.md by building it from README.yaml readme/init Create basic minimalistic .README.md template file readme/lint Verify the `README.md` is up to date semver/export Export semver vars slack/notify Send webhook notification to slack slack/notify/build Send notification to slack using "build" template slack/notify/deploy Send notification to slack using "deploy" template template/build Create $OUT file by building it from $IN template file template/deps Install dependencies terraform/bump-tf-12-min-version Rewrite versions.tf to bump modules with minimum core version of '0.12.x' to '>= 0.12.26' terraform/fmt Format terraform terraform/get-modules (Obsolete) Ensure all modules can be fetched terraform/get-plugins (Obsolete) Ensure all plugins can be fetched terraform/install Install terraform terraform/lint Format check terraform terraform/loosen-constraints and convert "~>" constraints to ">=". terraform/precommit Terraform pull-request routine check/update terraform/rewrite-required-providers Rewrite versions.tf to update existing configuration to add an explicit source attribute for each provider terraform/tflint Lint terraform (with tflint) terraform/upgrade-modules This target has not been upgraded to handle registry format terraform/validate Basic terraform sanity check travis/docker-login Login into docker hub travis/docker-tag-and-push Tag & Push according Travis environment variables
build-harness
with targets from another repoIt is possible to extend the build-harness
with targets and entire modules of your own, without having to fork or modify build-harness
itself.
This 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.
This 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.
Modules will be combined and available with a unified make
command.
Typically, 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.
Alternatively, 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.
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.
BUILD_HARNESS_AUTO_INIT = true -include $(shell curl -sSL -o .build-harness "https://cloudposse.tools/build-harness"; echo .build-harness)
The "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:
BUILD_HARNESS_AUTO_INIT = true BUILD_HARNESS_BRANCH = {TAG} -include $(shell curl -sSL -o .build-harness "https://cloudposse.tools/build-harness"; echo .build-harness)
Now when you run make
the project will update itself to use the version specified by the BUILD_HARNESS_BRANCH
value:
<!-- markdownlint-restore -->$ make help Removing existing build-harness Cloning https://github.com/cloudposse/build-harness.git#{TAG}... Cloning into 'build-harness'... remote: Enumerating objects: 143, done. remote: Counting objects: 100% (143/143), done. remote: Compressing objects: 100% (118/118), done. remote: Total 143 (delta 7), reused 71 (delta 3), pack-reused 0 Receiving objects: 100% (143/143), 85.57 KiB | 2.09 MiB/s, done. Resolving deltas: 100% (7/7), done. Available targets: aws/install Install aws cli bundle
Check out these related projects.
For additional context, refer to some of these links.
build-harness
is similar in concept to a "Test Harness"This project is under active development, and we encourage contributions from our community.
Many thanks to our outstanding contributors:
<a href="https://github.com/cloudposse/build-harness/graphs/contributors"> <img src="https://contrib.rocks/image?repo=cloudposse/build-harness&max=24" /> </a>For 🐛 bug reports & feature requests, please use the issue tracker.
In general, PRs are welcome. We follow the typical "fork-and-pull" Git workflow.
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件 和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完 成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。