diff --git a/configprops.groovy b/configprops.groovy index e70ab6e6..d9991092 100644 --- a/configprops.groovy +++ b/configprops.groovy @@ -5,19 +5,22 @@ * */ +@GrabResolver(name='milestone', root='http://repo.spring.io/milestone/') @Grab('org.codehaus.groovy:groovy-json:2.4.3') -@Grab('org.springframework.cloud:spring-cloud-starter-eureka:1.1.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-starter-sleuth:1.0.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-netflix-eureka-server:1.1.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-starter-config:1.1.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-starter-bus-amqp:1.1.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-starter-stream-rabbit:1.0.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-starter-consul-all:1.0.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-starter-zookeeper-all:1.0.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-starter-security:1.1.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-starter-cloudfoundry:1.0.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-cloudfoundry-discovery:1.0.0.BUILD-SNAPSHOT') -@Grab('org.springframework.cloud:spring-cloud-cluster-autoconfigure:1.0.0.BUILD-SNAPSHOT') +@Grab('org.springframework.cloud:spring-cloud-stream:1.1.0.M1') +@Grab('org.springframework.cloud:spring-cloud-starter-bus-amqp:1.2.0.M1') +@Grab('org.springframework.cloud:spring-cloud-starter-config:1.2.0.M1') +@Grab('org.springframework.cloud:spring-cloud-netflix-eureka-server:1.2.0.M1') +@Grab('org.springframework.cloud:spring-cloud-starter-eureka:1.2.0.M1') +@Grab('org.springframework.cloud:spring-cloud-starter-aws:1.1.0.RELEASE') +@Grab('org.springframework.cloud:spring-cloud-starter-security:1.1.1.RELEASE') +@Grab('org.springframework.cloud:spring-cloud-starter-consul-all:1.1.0.M1') +@Grab('org.springframework.cloud:spring-cloud-starter-zookeeper-all:1.0.2.RELEASE') +@Grab('org.springframework.cloud:spring-cloud-starter-sleuth:1.0.6.RELEASE') +@Grab('org.springframework.cloud:spring-cloud-starter-cloudfoundry:1.0.0.RELEASE') +@Grab('org.springframework.cloud:spring-cloud-cloudfoundry-discovery:1.0.0.RELEASE') +@Grab('org.springframework.cloud:spring-cloud-cluster-autoconfigure:1.0.0.RELEASE') +@Grab('org.springframework.cloud:spring-cloud-contract-spec:1.0.0.M2') import org.springframework.core.io.support.PathMatchingResourcePatternResolver import org.springframework.core.io.Resource @@ -61,4 +64,3 @@ class ConfigValue { "|${name} | ${value} | ${description?:''}" } } - diff --git a/ghpages.sh b/ghpages.sh index 407f6481..e0e69be3 100644 --- a/ghpages.sh +++ b/ghpages.sh @@ -1,46 +1,348 @@ #!/bin/bash -x -git remote | grep docs || git remote add docs https://github.com/spring-cloud/spring-cloud-static +set -e -if ! (git fetch docs && git checkout --track docs/gh-pages || git checkout gh-pages); then - echo "No gh-pages, error" - exit 1 -fi +# Set default props like MAVEN_PATH, ROOT_FOLDER etc. +function set_default_props() { + # The script should be executed from the root folder + ROOT_FOLDER=`pwd` + echo "Current folder is ${ROOT_FOLDER}" -if ! [ -d target/generated-docs ]; then - echo "No gh-pages sources in target/generated-docs, so not syncing" - exit 0 -fi + if [[ ! -e "${ROOT_FOLDER}/.git" ]]; then + echo "You're not in the root folder of the project!" + exit 1 + fi + + # Prop that will let commit the changes + COMMIT_CHANGES="no" + MAVEN_PATH=${MAVEN_PATH:-} + echo "Path to Maven is [${MAVEN_PATH}]" + REPO_NAME=${PWD##*/} + echo "Repo name is [${REPO_NAME}]" + SPRING_CLOUD_STATIC_REPO=${SPRING_CLOUD_STATIC_REPO:-git@github.com:spring-cloud/spring-cloud-static.git} + echo "Spring Cloud Static repo is [${SPRING_CLOUD_STATIC_REPO}" +} + +# Check if gh-pages exists and docs have been built +function check_if_anything_to_sync() { + git remote set-url --push origin `git config remote.origin.url | sed -e 's/^git:/https:/'` + + if ! (git remote set-branches --add origin gh-pages && git fetch -q) && [[ "${RELEASE_TRAIN}" != "yes" ]] ; then + echo "No gh-pages, so not syncing" + exit 0 + fi + + if ! [ -d docs/target/generated-docs ] && ! [ "${BUILD}" == "yes" ]; then + echo "No gh-pages sources in docs/target/generated-docs, so not syncing" + exit 0 + fi +} + +function retrieve_current_branch() { + # Code getting the name of the current branch. For master we want to publish as we did until now + # http://stackoverflow.com/questions/1593051/how-to-programmatically-determine-the-current-checked-out-git-branch + # If there is a branch already passed will reuse it - otherwise will try to find it + CURRENT_BRANCH=${BRANCH} + if [[ -z "${CURRENT_BRANCH}" ]] ; then + CURRENT_BRANCH=$(git symbolic-ref -q HEAD) + CURRENT_BRANCH=${CURRENT_BRANCH##refs/heads/} + CURRENT_BRANCH=${CURRENT_BRANCH:-HEAD} + fi + echo "Current branch is [${CURRENT_BRANCH}]" + git checkout ${CURRENT_BRANCH} || echo "Failed to check the branch... continuing with the script" +} + +# Switches to the provided value of the release version. We always prefix it with `v` +function switch_to_tag() { + if [[ "${RELEASE_TRAIN}" != "yes" ]] ; then + git checkout v${VERSION} + fi +} + +# Build the docs if switch is on +function build_docs_if_applicable() { + if [[ "${BUILD}" == "yes" ]] ; then + ./mvnw clean install -P docs -pl docs -DskipTests + fi +} + +# Get the name of the `docs.main` property +# Get whitelisted branches - assumes that a `docs` module is available under `docs` profile +function retrieve_doc_properties() { + MAIN_ADOC_VALUE=$("${MAVEN_PATH}"mvn -q \ + -Dexec.executable="echo" \ + -Dexec.args='${docs.main}' \ + org.codehaus.mojo:exec-maven-plugin:1.3.1:exec \ + -P docs \ + -pl docs) + echo "Extracted 'main.adoc' from Maven build [${MAIN_ADOC_VALUE}]" + + + WHITELIST_PROPERTY=${WHITELIST_PROPERTY:-"docs.whitelisted.branches"} + WHITELISTED_BRANCHES_VALUE=$("${MAVEN_PATH}"mvn -q \ + -Dexec.executable="echo" \ + -Dexec.args="\${${WHITELIST_PROPERTY}}" \ + org.codehaus.mojo:exec-maven-plugin:1.3.1:exec \ + -P docs \ + -pl docs) + echo "Extracted '${WHITELIST_PROPERTY}' from Maven build [${WHITELISTED_BRANCHES_VALUE}]" +} # Stash any outstanding changes -################################################################### -git diff-index --quiet HEAD -dirty=$? -if [ "$dirty" != "0" ]; then git stash; fi +function stash_changes() { + git diff-index --quiet HEAD && dirty=$? || (echo "Failed to check if the current repo is dirty. Assuming that it is." && dirty="1") + if [ "$dirty" != "0" ]; then git stash; fi +} -# Switch to gh-pages branch to sync it with master -################################################################### -git checkout gh-pages - -for f in target/generated-docs/*; do - file=${f#target/generated-docs/*} - if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then - # Not ignored... - cp -rf $f . - git add -A $file +# Switch to gh-pages branch to sync it with current branch +function add_docs_from_target() { + local DESTINATION_REPO_FOLDER + if [[ -z "${DESTINATION}" && -z "${CLONE}" ]] ; then + DESTINATION_REPO_FOLDER=${ROOT_FOLDER} + elif [[ "${CLONE}" == "yes" ]]; then + mkdir -p ${ROOT_FOLDER}/target + local clonedStatic=${ROOT_FOLDER}/target/spring-cloud-static + if [[ ! -e "${clonedStatic}/.git" ]]; then + echo "Cloning Spring Cloud Static to target" + git clone ${SPRING_CLOUD_STATIC_REPO} ${clonedStatic} && cd ${clonedStatic} && git checkout gh-pages + else + echo "Spring Cloud Static already cloned - will pull changes" + cd ${clonedStatic} && git checkout gh-pages && git pull origin gh-pages + fi + if [[ -z "${RELEASE_TRAIN}" ]] ; then + DESTINATION_REPO_FOLDER=${clonedStatic}/${REPO_NAME} + else + DESTINATION_REPO_FOLDER=${clonedStatic} + fi + mkdir -p ${DESTINATION_REPO_FOLDER} + else + if [[ ! -e "${DESTINATION}/.git" ]]; then + echo "[${DESTINATION}] is not a git repository" + exit 1 + fi + if [[ -z "${RELEASE_TRAIN}" ]] ; then + DESTINATION_REPO_FOLDER=${DESTINATION}/${REPO_NAME} + else + DESTINATION_REPO_FOLDER=${DESTINATION} + fi + mkdir -p ${DESTINATION_REPO_FOLDER} + echo "Destination was provided [${DESTINATION}]" fi + cd ${DESTINATION_REPO_FOLDER} + git checkout gh-pages + git pull origin gh-pages + + # Add git branches + ################################################################### + if [[ -z "${VERSION}" && -z "${RELEASE_TRAIN}" ]] ; then + copy_docs_for_current_version + else + copy_docs_for_provided_version + fi + commit_changes_if_applicable +} + + +# Copies the docs by using the retrieved properties from Maven build +function copy_docs_for_current_version() { + if [[ "${CURRENT_BRANCH}" == "master" ]] ; then + echo -e "Current branch is master - will copy the current docs only to the root folder" + for f in docs/target/generated-docs/*; do + file=${f#docs/target/generated-docs/*} + if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then + # Not ignored... + cp -rf $f ${ROOT_FOLDER}/ + git add -A ${ROOT_FOLDER}/$file + fi + done + COMMIT_CHANGES="yes" + else + echo -e "Current branch is [${CURRENT_BRANCH}]" + # http://stackoverflow.com/questions/29300806/a-bash-script-to-check-if-a-string-is-present-in-a-comma-separated-list-of-strin + if [[ ",${WHITELISTED_BRANCHES_VALUE}," = *",${CURRENT_BRANCH},"* ]] ; then + mkdir -p ${ROOT_FOLDER}/${CURRENT_BRANCH} + echo -e "Branch [${CURRENT_BRANCH}] is whitelisted! Will copy the current docs to the [${CURRENT_BRANCH}] folder" + for f in docs/target/generated-docs/*; do + file=${f#docs/target/generated-docs/*} + if ! git ls-files -i -o --exclude-standard --directory | grep -q ^$file$; then + # Not ignored... + # We want users to access 1.0.0.RELEASE/ instead of 1.0.0.RELEASE/spring-cloud.sleuth.html + if [[ "${file}" == "${MAIN_ADOC_VALUE}.html" ]] ; then + # We don't want to copy the spring-cloud-sleuth.html + # we want it to be converted to index.html + cp -rf $f ${ROOT_FOLDER}/${CURRENT_BRANCH}/index.html + git add -A ${ROOT_FOLDER}/${CURRENT_BRANCH}/index.html + else + cp -rf $f ${ROOT_FOLDER}/${CURRENT_BRANCH} + git add -A ${ROOT_FOLDER}/${CURRENT_BRANCH}/$file + fi + fi + done + COMMIT_CHANGES="yes" + else + echo -e "Branch [${CURRENT_BRANCH}] is not on the white list! Check out the Maven [${WHITELIST_PROPERTY}] property in + [docs] module available under [docs] profile. Won't commit any changes to gh-pages for this branch." + fi + fi +} + +# Copies the docs by using the explicitly provided version +function copy_docs_for_provided_version() { + local FOLDER=${DESTINATION_REPO_FOLDER}/${VERSION} + mkdir -p ${FOLDER} + echo -e "Current tag is [v${VERSION}] Will copy the current docs to the [${FOLDER}] folder" + for f in ${ROOT_FOLDER}/docs/target/generated-docs/*; do + file=${f#${ROOT_FOLDER}/docs/target/generated-docs/*} + copy_docs_for_branch ${file} ${FOLDER} + done + COMMIT_CHANGES="yes" + CURRENT_BRANCH="v${VERSION}" +} + +# Copies the docs from target to the provided destination +# Params: +# $1 - file from target +# $2 - destination to which copy the files +function copy_docs_for_branch() { + local file=$1 + local destination=$2 + if ! git ls-files -i -o --exclude-standard --directory | grep -q ^${file}$; then + # Not ignored... + # We want users to access 1.0.0.RELEASE/ instead of 1.0.0.RELEASE/spring-cloud.sleuth.html + if [[ ("${file}" == "${MAIN_ADOC_VALUE}.html") || ("${file}" == "${REPO_NAME}.html") ]] ; then + # We don't want to copy the spring-cloud-sleuth.html + # we want it to be converted to index.html + cp -rf $f ${destination}/index.html + git add -A ${destination}/index.html + else + cp -rf $f ${destination} + git add -A ${destination}/$file + fi + fi +} + +function commit_changes_if_applicable() { + if [[ "${COMMIT_CHANGES}" == "yes" ]] ; then + COMMIT_SUCCESSFUL="no" + git commit -a -m "Sync docs from ${CURRENT_BRANCH} to gh-pages" && COMMIT_SUCCESSFUL="yes" || echo "Failed to commit changes" + + # Uncomment the following push if you want to auto push to + # the gh-pages branch whenever you commit to master locally. + # This is a little extreme. Use with care! + ################################################################### + if [[ "${COMMIT_SUCCESSFUL}" == "yes" ]] ; then + git push origin gh-pages + fi + fi +} + +# Switch back to the previous branch and exit block +function checkout_previous_branch() { + # If -version was provided we need to come back to root project + cd ${ROOT_FOLDER} + git checkout ${CURRENT_BRANCH} || echo "Failed to check the branch... continuing with the script" + if [ "$dirty" != "0" ]; then git stash pop; fi + exit 0 +} + +# Assert if properties have been properly passed +function assert_properties() { +echo "VERSION [${VERSION}], RELEASE_TRAIN [${RELEASE_TRAIN}], DESTINATION [${DESTINATION}], CLONE [${CLONE}]" +if [[ "${VERSION}" != "" && (-z "${DESTINATION}" && -z "${CLONE}") ]] ; then echo "Version was set but destination / clone was not!"; exit 1;fi +if [[ ("${DESTINATION}" != "" && "${CLONE}" != "") && -z "${VERSION}" ]] ; then echo "Destination / clone was set but version was not!"; exit 1;fi +if [[ "${DESTINATION}" != "" && "${CLONE}" == "yes" ]] ; then echo "Destination and clone was set. Pick one!"; exit 1;fi +if [[ "${RELEASE_TRAIN}" != "" && -z "${VERSION}" ]] ; then echo "Release train was set but no version was passed!"; exit 1;fi +} + +# Prints the usage +function print_usage() { +cat </` +- if the destination switch is passed (-d) then the script will check if the provided dir is a git repo and then will + switch to gh-pages of that repo and copy the generated docs to `docs//` +- if the release train switch is passed (-r) then the script will check if the provided dir is a git repo and then will + switch to gh-pages of that repo and copy the generated docs to `docs/` + +USAGE: + +You can use the following options: + +-v|--version - the script will apply the whole procedure for a particular library version +-r|--releasetrain - instead of nesting the docs under the project_name/version folder the docs will end up in version +-d|--destination - the root of destination folder where the docs should be copied. You have to use the full path. + E.g. point to spring-cloud-static folder. Can't be used with (-c) +-b|--build - will run the standard build process after checking out the branch +-c|--clone - will automatically clone the spring-cloud-static repo instead of providing the destination. + Obviously can't be used with (-d) + +EOF +} + + +# ========================================== +# ____ ____ _____ _____ _____ _______ +# / ____|/ ____| __ \|_ _| __ \__ __| +# | (___ | | | |__) | | | | |__) | | | +# \___ \| | | _ / | | | ___/ | | +# ____) | |____| | \ \ _| |_| | | | +# |_____/ \_____|_| \_\_____|_| |_| +# +# ========================================== + +while [[ $# > 0 ]] +do +key="$1" +case ${key} in + -v|--version) + VERSION="$2" + shift # past argument + ;; + -r|--releasetrain) + RELEASE_TRAIN="yes" + ;; + -d|--destination) + DESTINATION="$2" + shift # past argument + ;; + -b|--build) + BUILD="yes" + ;; + -c|--clone) + CLONE="yes" + ;; + -h|--help) + print_usage + exit 0 + ;; + *) + echo "Invalid option: [$1]" + print_usage + exit 1 + ;; +esac +shift # past argument or value done -git commit -a -m "Sync docs from master to gh-pages" - -# Uncomment the following push if you want to auto push to -# the gh-pages branch whenever you commit to master locally. -# This is a little extreme. Use with care! -################################################################### -git push docs gh-pages || exit 1 - -# Finally, switch back to the master branch and exit block -git checkout master -if [ "$dirty" != "0" ]; then git stash pop; fi - -exit 0 +assert_properties +set_default_props +check_if_anything_to_sync +if [[ -z "${VERSION}" ]] ; then + retrieve_current_branch +else + switch_to_tag +fi +build_docs_if_applicable +retrieve_doc_properties +stash_changes +add_docs_from_target +checkout_previous_branch diff --git a/images/Deps.png b/images/Deps.png new file mode 100644 index 00000000..14268143 Binary files /dev/null and b/images/Deps.png differ diff --git a/images/Stubs1.png b/images/Stubs1.png new file mode 100644 index 00000000..ebadfdb9 Binary files /dev/null and b/images/Stubs1.png differ diff --git a/images/Stubs2.png b/images/Stubs2.png new file mode 100644 index 00000000..e4bad249 Binary files /dev/null and b/images/Stubs2.png differ diff --git a/images/dependencies.png b/images/dependencies.png new file mode 100644 index 00000000..d0eceb6f Binary files /dev/null and b/images/dependencies.png differ diff --git a/images/kibana.png b/images/kibana.png new file mode 100644 index 00000000..bc44a43f Binary files /dev/null and b/images/kibana.png differ diff --git a/images/parents.png b/images/parents.png new file mode 100644 index 00000000..7f868f75 Binary files /dev/null and b/images/parents.png differ diff --git a/images/pws.png b/images/pws.png new file mode 100644 index 00000000..a791bd74 Binary files /dev/null and b/images/pws.png differ diff --git a/images/trace-id.png b/images/trace-id.png new file mode 100644 index 00000000..0603bb08 Binary files /dev/null and b/images/trace-id.png differ diff --git a/images/zipkin-trace-screenshot.png b/images/zipkin-trace-screenshot.png new file mode 100644 index 00000000..f0452f0f Binary files /dev/null and b/images/zipkin-trace-screenshot.png differ diff --git a/images/zipkin-traces.png b/images/zipkin-traces.png new file mode 100644 index 00000000..673ece9a Binary files /dev/null and b/images/zipkin-traces.png differ diff --git a/images/zipkin-ui.png b/images/zipkin-ui.png new file mode 100644 index 00000000..34b0215b Binary files /dev/null and b/images/zipkin-ui.png differ diff --git a/spring-cloud.html b/spring-cloud.html index 1976ad73..61bff37b 100644 --- a/spring-cloud.html +++ b/spring-cloud.html @@ -4,13 +4,13 @@ - + Spring Cloud - +