diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000000..8d5570d9a0 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,63 @@ +version: 2 + +jobs: + build: + machine: + docker_layer_caching: true + + steps: + - checkout + + - run: + name: Update Submodules + command: git submodule sync && git submodule update --init --recursive + + - restore_cache: + keys: + - vendor-{{ checksum "Gopkg.toml" }}-{{ checksum "Gopkg.lock" }} + + - run: + name: Prepare + command: | + git config --global user.name "upbound-bot" + echo "machine github.com login upbound-bot password $GITHUB_UPBOUND_BOT" > ~/.netrc + + - run: + name: Build validation + command: ./build/run make -j$(nproc) build.all + + - run: + name: Unit Tests + command: ./build/run make -j$(nproc) test + + - store_test_results: + path: _output/tests + + - run: + name: Publish + command: | + docker login -u $DOCKER_USER -p $DOCKER_PASS + ./build/run make -j$(nproc) publish BRANCH_NAME=${CIRCLE_BRANCH} AWS_ACCESS_KEY_ID=${AWS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_KEY_SECRET} GIT_API_TOKEN=${GITHUB_UPBOUND_BOT} + if [ "${CIRCLE_BRANCH}" == "master" ]; then + ./build/run make -j$(nproc) promote BRANCH_NAME=master CHANNEL=master AWS_ACCESS_KEY_ID=${AWS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_KEY_SECRET} + crumb="$(curl ${JENKINS_CRUMB_URL} --user ${JENKINS_USER}:${JENKINS_TOKEN})" + curl -H ".crumb:${crumb}" -X POST ${JENKINS_DEPLOY_URL} --user ${JENKINS_USER}:${JENKINS_TOKEN} -d "Content-Length:0" + fi + environment: + JENKINS_CRUMB_URL: https://jenkins.upbound.io/crumbIssuer/api/xml\?xpath\=concat\(//crumbRequestField,%22:%22,//crumb\) + JENKINS_DEPLOY_URL: https://jenkins.upbound.io/job/upbound/job/cloud/job/dev/job/master/buildWithParameters + + - save_cache: + when: on_success + key: vendor-{{ checksum "Gopkg.toml" }}-{{ checksum "Gopkg.lock" }} + paths: + - vendor/ + - ".cache" + + - run: + name: Cleanup + when: always + command: | + make -j$(nproc) clean + make -j$(nproc) prune PRUNE_HOURS=48 PRUNE_KEEP=48 + docker images diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..1db600e86a --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/.cache +/.work +/_output +cover.out +/vendor +PROJECT diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..c2fad47077 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "build"] + path = build + url = https://github.com/upbound/build diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..d5735c4d00 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,173 @@ +## How to Contribute + +The Conductor project is under [Apache 2.0 license](LICENSE). We accept contributions via +GitHub pull requests. This document outlines some of the conventions related to +development workflow, commit message formatting, contact points and other +resources to make it easier to get your contribution accepted. + +## Certificate of Origin + +By contributing to this project you agree to the Developer Certificate of +Origin (DCO). This document was created by the Linux Kernel community and is a +simple statement that you, as a contributor, have the legal right to make the +contribution. See the [DCO](DCO) file for details. + +Contributors sign-off that they adhere to these requirements by adding a +Signed-off-by line to commit messages. For example: + +``` +This is my commit message + +Signed-off-by: Random J Developer +``` + +Git even has a -s command line option to append this automatically to your +commit message: + +``` +``` +$ git commit -s -m 'This is my commit message' + +If you have already made a commit and forgot to include the sign-off, you can amend your last commit +to add the sign-off with the following command, which can then be force pushed. + +``` +git commit --amend -s +``` + +We use a [DCO bot](https://github.com/apps/dco) to enforce the DCO on each pull +request and branch commits. + +## Getting Started + +- Fork the repository on GitHub +- Read the [install](INSTALL.md) for build and test instructions +- Play with the project, submit bugs, submit patches! + +## Contribution Flow + +This is a rough outline of what a contributor's workflow looks like: + +- Create a branch from where you want to base your work (usually master). +- Make your changes and arrange them in readable commits. +- Make sure your commit messages are in the proper format (see below). +- Push your changes to the branch in your fork of the repository. +- Make sure all tests pass, and add any new tests as appropriate. +- Submit a pull request to the original repository. + +## Coding Style + +Conductor projects are written in golang and follows the style guidelines dictated by +the go fmt as well as go vet tools. + +## Comments + +Comments should be added to all new methods and structures as is appropriate for the coding +language. Additionally, if an existing method or structure is modified sufficiently, comments should +be created if they do not yet exist and updated if they do. + +The goal of comments is to make the code more readable and grokkable by future developers. Once you +have made your code as understandable as possible, add comments to make sure future developers can +understand (A) what this piece of code's responsibility is within Conductor's architecture and (B) why it +was written as it was. + +The below blog entry explains more the why's and how's of this guideline. +https://blog.codinghorror.com/code-tells-you-how-comments-tell-you-why/ + +For Go, Conductor follows standard godoc guidelines. +A concise godoc guideline can be found here: https://blog.golang.org/godoc-documenting-go-code + +## Commit Messages + +We follow a rough convention for commit messages that is designed to answer two +questions: what changed and why. The subject line should feature the what and +the body of the commit should describe the why. + +``` +ceph: update MON to use rocksdb + +this enables us to remove leveldb from the codebase. +``` + +The format can be described more formally as follows: + +``` +: + + + +