forked from crossplane-contrib/provider-aws
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial Project Scaffolding (crossplane-contrib#13)
Initial Project Scaffolding
- Loading branch information
Illya Chekrygin
authored
Sep 14, 2018
1 parent
bd1c1ed
commit 83dc670
Showing
41 changed files
with
2,832 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
/.cache | ||
/.work | ||
/_output | ||
cover.out | ||
/vendor | ||
PROJECT |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[submodule "build"] | ||
path = build | ||
url = https://github.com/upbound/build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 <random@developer.example.org> | ||
``` | ||
|
||
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: | ||
|
||
``` | ||
<subsystem>: <what changed> | ||
<BLANK LINE> | ||
<why this change was made> | ||
<BLANK LINE> | ||
<footer> | ||
``` | ||
|
||
The first line is the subject and should be no longer than 70 characters, the | ||
second line is always blank, and other lines should be wrapped at 80 characters. | ||
This allows the message to be easier to read on GitHub as well as in various | ||
git tools. | ||
|
||
|
||
## Adding New Resources | ||
|
||
### Project Organization | ||
The Conductor project is based on and intially created by using [Kubebuilder is a framework for building Kubernetes APIs](https://github.com/kubernetes-sigs/kubebuilder). | ||
|
||
The Conductor project organizes resources (api types and controllers) by grouping them by Cloud Provider with further sub-group by resource type | ||
|
||
The Kubebuilder framework does not provide good support for projects with multiple groups and group tiers which contain resources with overlapping names. | ||
For example: | ||
``` | ||
pkg | ||
├── apis | ||
│ ├── aws | ||
│ │ ├── apis.go | ||
│ │ └── database | ||
│ │ ├── group.go | ||
│ │ └── v1alpha1 | ||
│ │ ├── doc.go | ||
│ │ ├── rds_instance_types.go | ||
│ │ ├── rds_instance_types_test.go | ||
│ │ ├── register.go | ||
│ │ ├── v1alpha1_suite_test.go | ||
│ │ └── zz_generated.deepcopy.go | ||
│ └── gcp | ||
│ ├── apis.go | ||
│ └── database | ||
│ ├── group.go | ||
│ └── v1alpha1 | ||
│ ├── cloudsql_instance_types.go | ||
│ ├── cloudsql_instance_types_test.go | ||
│ ├── doc.go | ||
│ ├── register.go | ||
│ ├── v1alpha1_suite_test.go | ||
│ └── zz_generated.deepcopy.go | ||
└── controller | ||
├── aws | ||
│ ├── controller.go | ||
│ └── database | ||
│ ├── database_suite_test.go | ||
│ ├── rds_instance.go | ||
│ └── rds_instance_test.go | ||
└── gcp | ||
├── controller.go | ||
└── database | ||
├── cloudsql_instance.go | ||
├── cloudsql_instance_test.go | ||
└── database_suite_test.go | ||
``` | ||
In above example we have two groups with sub-group (tiers): | ||
- aws/rds | ||
- gcp/cloudsql | ||
In addition both groups contain types with the same name: `Instance` | ||
|
||
### Creating New Resource | ||
There are several different ways you can approach the creation of the new resources: | ||
#### Manual | ||
Good ol' copy & paste of existing resource for both apis and controller (if new controller is needed) and update to tailor your needs. | ||
|
||
#### Kubebuilder With New Project | ||
Create and Initialize a new (temporary) kubebuilder project and create new resources: apis and controller(s), then copy them into Conductor project following the established project organization. | ||
|
||
To verify that new artifacts run: | ||
```bash | ||
make build test | ||
``` | ||
To locally test new types/controllers please refer to [Local Build](/cluster/local/README.md) instructions. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
Developer Certificate of Origin | ||
Version 1.1 | ||
|
||
Copyright (C) 2004, 2006 The Linux Foundation and its contributors. | ||
660 York Street, Suite 102, | ||
San Francisco, CA 94110 USA | ||
|
||
Everyone is permitted to copy and distribute verbatim copies of this | ||
license document, but changing it is not allowed. | ||
|
||
|
||
Developer's Certificate of Origin 1.1 | ||
|
||
By making a contribution to this project, I certify that: | ||
|
||
(a) The contribution was created in whole or in part by me and I | ||
have the right to submit it under the open source license | ||
indicated in the file; or | ||
|
||
(b) The contribution is based upon previous work that, to the best | ||
of my knowledge, is covered under an appropriate open source | ||
license and I have the right under that license to submit that | ||
work with modifications, whether created in whole or in part | ||
by me, under the same open source license (unless I am | ||
permitted to submit under a different license), as indicated | ||
in the file; or | ||
|
||
(c) The contribution was provided directly to me by some other | ||
person who certified (a), (b) or (c) and I have not modified | ||
it. | ||
|
||
(d) I understand and agree that this project and the contribution | ||
are public and that a record of the contribution (including all | ||
personal information I submit with it, including my sign-off) is | ||
maintained indefinitely and may be redistributed consistent with | ||
this project or the open source license(s) involved. |
Oops, something went wrong.