diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..339bf98f4
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,8 @@
+Code of Conduct Guidelines
+==========================
+
+Please review the Hyperledger [Code of
+Conduct](https://wiki.hyperledger.org/community/hyperledger-project-code-of-conduct)
+before participating. It is important that we keep things civil.
+
+
This work is licensed under a Creative Commons Attribution 4.0 International License.
\ No newline at end of file
diff --git a/docs/contributing.md b/CONTRIBUTING.md
similarity index 100%
rename from docs/contributing.md
rename to CONTRIBUTING.md
diff --git a/ci/azure-pipelines.yml b/ci/azure-pipelines.yml
new file mode 100644
index 000000000..c570497fc
--- /dev/null
+++ b/ci/azure-pipelines.yml
@@ -0,0 +1,48 @@
+# Starter pipeline
+# Start with a minimal pipeline that you can customize to build and deploy your code.
+# Add steps that build, run tests, deploy, and more:
+# https://aka.ms/yaml
+
+trigger:
+- master
+
+pool:
+ vmImage: 'ubuntu-18.04'
+
+variables:
+ - group: credentials
+
+stages:
+- stage: PreCheck
+ displayName: Check license and documents
+ jobs:
+ - job: CheckLicenseAndDocs
+ steps:
+ - template: ci/check-license-and-docs.yml
+
+- stage: ProcessComponents
+ displayName: ProcessComponents
+ jobs:
+ - template: ci/process-components.yml
+ parameters:
+ param:
+ - name: dashandapi
+ pretest: "dashandapi_pre.yml"
+ posttest: "dashandapi_post.yml"
+ images:
+ - imagename: "hyperledger/cello-api-engine"
+ dockerfile: "build_image/docker/common/api-engine/Dockerfile.in"
+ - imagename: "hyperledger/cello-nginx"
+ dockerfile: "build_image/docker/common/nginx/Dockerfile.in"
+ - imagename: "hyperledger/cello-dashboard"
+ dockerfile: "build_image/docker/common/dashboard/Dockerfile.in"
+ - name: ansibleagent
+ images:
+ - imagename: "hyperledger/cello-ansible-agent"
+ dockerfile: "build_image/docker/agent/ansible/Dockerfile.in"
+# - name: fabricoperator
+# images:
+# - imagename: "hyperledger/cello-k8s-operator-agent"
+# dockerfile: "src/agent/fabric-operator/agent/Dockerfile"
+# - imagename: "hyperledger/cello-k8s-operator-controller"
+# dockerfile: "src/agent/fabric-operator/Dockerfile"
diff --git a/repolint.json b/repolint.json
new file mode 100644
index 000000000..8a9f95f47
--- /dev/null
+++ b/repolint.json
@@ -0,0 +1,87 @@
+{
+ "axioms": {
+ "linguist":"language",
+ "licensee":"license",
+ "packagers":"packager"
+ },
+ "rules": {
+ "all": {
+ "license-file-exists:file-existence": ["error", {"files": ["LICENSE*", "COPYING*"], "nocase": true}],
+ "readme-file-exists:file-existence": ["error", {"files": ["README*"], "nocase": true}],
+
+ "contributing-file-exists:file-existence": ["error", {"files": ["CONTRIB*", ".github/CONTRIB*"]}],
+ "code-of-conduct-file-exists:file-existence": ["error", {"files": [
+ "CODEOFCONDUCT*", "CODE-OF-CONDUCT*", "CODE_OF_CONDUCT*",
+ ".github/CODEOFCONDUCT*", ".github/CODE-OF-CONDUCT*", ".github/CODE_OF_CONDUCT*"
+ ]}],
+ "changelog-file-exists:file-existence": ["error", {"files": ["CHANGELOG*"], "nocase": true}],
+ "security-file-exists:file-existence": ["error", {"files": ["SECURITY.md"]}],
+ "support-file-exists:file-existence": ["warning", {"files": ["{docs/,.github/,}SUPPORT*"], "nocase": true}],
+ "readme-references-license:file-contents": ["error", {"files": ["README*"], "content": "license", "flags": "i"}],
+ "binaries-not-present:file-type-exclusion": ["error", {"type": ["**/*.exe", "**/*.dll", "!node_modules/**"]}],
+ "test-directory-exists:directory-existence": ["error", {"directories": ["**/test*", "**/specs"], "nocase": true}],
+ "integrates-with-ci:file-existence": [
+ "error",
+ {
+ "files": [
+ ".gitlab-ci.yml",
+ ".travis.yml",
+ "appveyor.yml",
+ ".appveyor.yml",
+ "circle.yml",
+ ".circleci/config.yml",
+ "Jenkinsfile",
+ ".drone.yml",
+ ".github/workflows/*",
+ "ci/azure-pipelines.yml"
+ ]
+ }
+ ],
+ "code-of-conduct-file-contains-email:file-contents": [
+ "warning",
+ {
+ "files": [
+ "CODEOFCONDUCT*", "CODE-OF-CONDUCT*", "CODE_OF_CONDUCT*",
+ ".github/CODEOFCONDUCT*", ".github/CODE-OF-CONDUCT*", ".github/CODE_OF_CONDUCT*"
+ ],
+ "content": ".+@.+\\..+",
+ "flags": "i",
+ "human-readable-content": "email address"
+ }
+ ],
+ "source-license-headers-exist:file-starts-with": ["warning", {"files": ["**/*.js", "!node_modules/**"], "lineCount": 5, "patterns": ["Copyright", "License"], "flags": "i"}],
+ "github-issue-template-exists:file-existence": ["warning", {"files": ["ISSUE_TEMPLATE*", ".github/ISSUE_TEMPLATE*"]}],
+ "github-pull-request-template-exists:file-existence": ["warning", {"files": ["PULL_REQUEST_TEMPLATE*", ".github/PULL_REQUEST_TEMPLATE*"]}]
+ },
+ "language=javascript": {
+ "package-metadata-exists:file-existence": ["error", {"files": ["package.json"]}]
+ },
+ "language=ruby": {
+ "package-metadata-exists:file-existence": ["error", {"files": ["Gemfile"]}]
+ },
+ "language=java": {
+ "package-metadata-exists:file-existence": ["error", {"files": ["pom.xml", "build.xml", "build.gradle"]}]
+ },
+ "license=*": {
+ "license-detectable-by-licensee": ["error"]
+ },
+ "license=Apache-2.0": {
+ "notice-file-exists:apache-notice": ["error"]
+ },
+ "language=python": {
+ "package-metadata-exists:file-existence": ["error", {"files": ["setup.py", "requirements.txt"]}]
+ },
+ "language=objective-c": {
+ "package-metadata-exists:file-existence": ["error", {"files": ["Cartfile", "Podfile", "*.podspec"]}]
+ },
+ "language=swift": {
+ "package-metadata-exists:file-existence": ["error", {"files": ["Package.swift"]}]
+ },
+ "language=erlang": {
+ "package-metadata-exists:file-existence": ["error", {"files": ["rebar.config"]}]
+ },
+ "language=elixir": {
+ "package-metadata-exists:file-existence": ["error", {"files": ["mix.exs"]}]
+ }
+ }
+ }
\ No newline at end of file