$ spring jar app.jar app.groovy
+$ cf push -p app.jar
It will show its app name in the home page.
The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
\ No newline at end of file
diff --git a/docs/target/contents/reference/html/multi__single_sign_on.html b/docs/target/contents/reference/html/multi__single_sign_on.html
new file mode 100644
index 0000000..844285c
--- /dev/null
+++ b/docs/target/contents/reference/html/multi__single_sign_on.html
@@ -0,0 +1,11 @@
+
+
+ 2. Single Sign On
All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
\ No newline at end of file
diff --git a/docs/target/contents/reference/html/multi_pr01.html b/docs/target/contents/reference/html/multi_pr01.html
new file mode 100644
index 0000000..53887bd
--- /dev/null
+++ b/docs/target/contents/reference/html/multi_pr01.html
@@ -0,0 +1,19 @@
+
+
+
Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
\ No newline at end of file
diff --git a/docs/target/contents/reference/html/multi_spring-cloud-cloudfoundry.html b/docs/target/contents/reference/html/multi_spring-cloud-cloudfoundry.html
new file mode 100644
index 0000000..e7d193f
--- /dev/null
+++ b/docs/target/contents/reference/html/multi_spring-cloud-cloudfoundry.html
@@ -0,0 +1,3 @@
+
+
+ Spring Cloud for Cloud Foundry
Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
1. Discovery
Here’s a Spring Cloud app with Cloud Foundry discovery:
$ spring jar app.jar app.groovy
+$ cf push -p app.jar
It will show its app name in the home page.
The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
2. Single Sign On
Note
All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
\ No newline at end of file
diff --git a/docs/target/docbook/html/multi__discovery.html b/docs/target/docbook/html/multi__discovery.html
new file mode 100644
index 0000000..4be8818
--- /dev/null
+++ b/docs/target/docbook/html/multi__discovery.html
@@ -0,0 +1,22 @@
+
+
+ 1. Discovery
$ spring jar app.jar app.groovy
+$ cf push -p app.jar
It will show its app name in the home page.
The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
\ No newline at end of file
diff --git a/docs/target/docbook/html/multi__single_sign_on.html b/docs/target/docbook/html/multi__single_sign_on.html
new file mode 100644
index 0000000..844285c
--- /dev/null
+++ b/docs/target/docbook/html/multi__single_sign_on.html
@@ -0,0 +1,11 @@
+
+
+ 2. Single Sign On
All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
\ No newline at end of file
diff --git a/docs/target/docbook/html/multi_pr01.html b/docs/target/docbook/html/multi_pr01.html
new file mode 100644
index 0000000..53887bd
--- /dev/null
+++ b/docs/target/docbook/html/multi_pr01.html
@@ -0,0 +1,19 @@
+
+
+
Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
\ No newline at end of file
diff --git a/docs/target/docbook/html/multi_spring-cloud-cloudfoundry.html b/docs/target/docbook/html/multi_spring-cloud-cloudfoundry.html
new file mode 100644
index 0000000..e7d193f
--- /dev/null
+++ b/docs/target/docbook/html/multi_spring-cloud-cloudfoundry.html
@@ -0,0 +1,3 @@
+
+
+ Spring Cloud for Cloud Foundry
\ No newline at end of file
diff --git a/docs/target/docbook/htmlsingle/spring-cloud-cloudfoundry.html b/docs/target/docbook/htmlsingle/spring-cloud-cloudfoundry.html
new file mode 100644
index 0000000..2622d06
--- /dev/null
+++ b/docs/target/docbook/htmlsingle/spring-cloud-cloudfoundry.html
@@ -0,0 +1,46 @@
+
+
+ Spring Cloud for Cloud Foundry
Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
1. Discovery
Here’s a Spring Cloud app with Cloud Foundry discovery:
$ spring jar app.jar app.groovy
+$ cf push -p app.jar
It will show its app name in the home page.
The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
2. Single Sign On
Note
All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
$ spring jar app.jar app.groovy
+$ cf push -p app.jar
It will show its app name in the home page.
The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
\ No newline at end of file
diff --git a/docs/target/generated-docs/multi/multi__single_sign_on.html b/docs/target/generated-docs/multi/multi__single_sign_on.html
new file mode 100644
index 0000000..844285c
--- /dev/null
+++ b/docs/target/generated-docs/multi/multi__single_sign_on.html
@@ -0,0 +1,11 @@
+
+
+ 2. Single Sign On
All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
\ No newline at end of file
diff --git a/docs/target/generated-docs/multi/multi_pr01.html b/docs/target/generated-docs/multi/multi_pr01.html
new file mode 100644
index 0000000..53887bd
--- /dev/null
+++ b/docs/target/generated-docs/multi/multi_pr01.html
@@ -0,0 +1,19 @@
+
+
+
Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
\ No newline at end of file
diff --git a/docs/target/generated-docs/multi/multi_spring-cloud-cloudfoundry.html b/docs/target/generated-docs/multi/multi_spring-cloud-cloudfoundry.html
new file mode 100644
index 0000000..e7d193f
--- /dev/null
+++ b/docs/target/generated-docs/multi/multi_spring-cloud-cloudfoundry.html
@@ -0,0 +1,3 @@
+
+
+ Spring Cloud for Cloud Foundry
Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
1. Discovery
Here’s a Spring Cloud app with Cloud Foundry discovery:
$ spring jar app.jar app.groovy
+$ cf push -p app.jar
It will show its app name in the home page.
The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
2. Single Sign On
Note
All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
\ No newline at end of file
diff --git a/docs/target/generated-docs/spring-cloud-cloudfoundry.xml b/docs/target/generated-docs/spring-cloud-cloudfoundry.xml
new file mode 100644
index 0000000..9793e38
--- /dev/null
+++ b/docs/target/generated-docs/spring-cloud-cloudfoundry.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+Spring Cloud for Cloud Foundry
+2017-08-29
+
+
+
+Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
+The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
+The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
+The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
+
+
+Discovery
+Here’s a Spring Cloud app with Cloud Foundry discovery:
+
+app.groovy
+
+@Grab('org.springframework.cloud:spring-cloud-cloudfoundry')
+@RestController
+@EnableDiscoveryClient
+class Application {
+
+ @Autowired
+ DiscoveryClient client
+
+ @RequestMapping('/')
+ String home() {
+ 'Hello from ' + client.getLocalServiceInstance()
+ }
+
+}
+
+
+If you run it without any service bindings:
+$ spring jar app.jar app.groovy
+$ cf push -p app.jar
+It will show its app name in the home page.
+The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
+
+
+Single Sign On
+
+All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
+
+This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
+
+
\ No newline at end of file
diff --git a/docs/target/spring-cloud-cloudfoundry.adoc b/docs/target/spring-cloud-cloudfoundry.adoc
new file mode 100644
index 0000000..e06b172
--- /dev/null
+++ b/docs/target/spring-cloud-cloudfoundry.adoc
@@ -0,0 +1,13 @@
+:nofooter:
+:linkcss:
+:stylesdir: css
+:stylesheet: manual-singlepage.css
+
+= {docs-main}
+
+{spring-cloud-version}
+
+== Pick The Documentation Option
+
+- link:single/{docs-main}.html[Single HTML]
+- link:multi/multi_{docs-main}.html[Multi HTML]
\ No newline at end of file
diff --git a/images/background.png b/images/background.png
new file mode 100644
index 0000000..15dca6f
Binary files /dev/null and b/images/background.png differ
diff --git a/images/caution.png b/images/caution.png
new file mode 100644
index 0000000..8a5e4fc
Binary files /dev/null and b/images/caution.png differ
diff --git a/images/important.png b/images/important.png
new file mode 100644
index 0000000..ec54df6
Binary files /dev/null and b/images/important.png differ
diff --git a/images/logo.png b/images/logo.png
new file mode 100644
index 0000000..ade2ce6
Binary files /dev/null and b/images/logo.png differ
diff --git a/images/note.png b/images/note.png
new file mode 100644
index 0000000..88d997b
Binary files /dev/null and b/images/note.png differ
diff --git a/images/sts_exception.png b/images/sts_exception.png
new file mode 100644
index 0000000..8607c38
Binary files /dev/null and b/images/sts_exception.png differ
diff --git a/images/tip.png b/images/tip.png
new file mode 100644
index 0000000..6530abb
Binary files /dev/null and b/images/tip.png differ
diff --git a/images/warning.png b/images/warning.png
new file mode 100644
index 0000000..0d5b524
Binary files /dev/null and b/images/warning.png differ
diff --git a/images/web-selected.png b/images/web-selected.png
new file mode 100644
index 0000000..aa6b2da
Binary files /dev/null and b/images/web-selected.png differ
diff --git a/multi/css/highlight.css b/multi/css/highlight.css
new file mode 100644
index 0000000..ffefef7
--- /dev/null
+++ b/multi/css/highlight.css
@@ -0,0 +1,35 @@
+/*
+ code highlight CSS resemblign the Eclipse IDE default color schema
+ @author Costin Leau
+*/
+
+.hl-keyword {
+ color: #7F0055;
+ font-weight: bold;
+}
+
+.hl-comment {
+ color: #3F5F5F;
+ font-style: italic;
+}
+
+.hl-multiline-comment {
+ color: #3F5FBF;
+ font-style: italic;
+}
+
+.hl-tag {
+ color: #3F7F7F;
+}
+
+.hl-attribute {
+ color: #7F007F;
+}
+
+.hl-value {
+ color: #2A00FF;
+}
+
+.hl-string {
+ color: #2A00FF;
+}
\ No newline at end of file
diff --git a/multi/css/manual-multipage.css b/multi/css/manual-multipage.css
new file mode 100644
index 0000000..0c48453
--- /dev/null
+++ b/multi/css/manual-multipage.css
@@ -0,0 +1,9 @@
+@IMPORT url("manual.css");
+
+body.firstpage {
+ background: url("../images/background.png") no-repeat center top;
+}
+
+div.part h1 {
+ border-top: none;
+}
diff --git a/multi/css/manual-singlepage.css b/multi/css/manual-singlepage.css
new file mode 100644
index 0000000..4a7fd14
--- /dev/null
+++ b/multi/css/manual-singlepage.css
@@ -0,0 +1,6 @@
+@IMPORT url("manual.css");
+
+body {
+ background: url("../images/background.png") no-repeat center top;
+}
+
diff --git a/multi/css/manual.css b/multi/css/manual.css
new file mode 100644
index 0000000..0ecbe2e
--- /dev/null
+++ b/multi/css/manual.css
@@ -0,0 +1,344 @@
+@IMPORT url("highlight.css");
+
+html {
+ padding: 0pt;
+ margin: 0pt;
+}
+
+body {
+ color: #333333;
+ margin: 15px 30px;
+ font-family: Helvetica, Arial, Freesans, Clean, Sans-serif;
+ line-height: 1.6;
+ -webkit-font-smoothing: antialiased;
+}
+
+code {
+ font-size: 16px;
+ font-family: Consolas, "Liberation Mono", Courier, monospace;
+}
+
+:not(a)>code {
+ color: #6D180B;
+}
+
+:not(pre)>code {
+ background-color: #F2F2F2;
+ border: 1px solid #CCCCCC;
+ border-radius: 4px;
+ padding: 1px 3px 0;
+ text-shadow: none;
+ white-space: nowrap;
+}
+
+body>*:first-child {
+ margin-top: 0 !important;
+}
+
+div {
+ margin: 0pt;
+}
+
+hr {
+ border: 1px solid #CCCCCC;
+ background: #CCCCCC;
+}
+
+h1,h2,h3,h4,h5,h6 {
+ color: #000000;
+ cursor: text;
+ font-weight: bold;
+ margin: 30px 0 10px;
+ padding: 0;
+}
+
+h1,h2,h3 {
+ margin: 40px 0 10px;
+}
+
+h1 {
+ margin: 70px 0 30px;
+ padding-top: 20px;
+}
+
+div.part h1 {
+ border-top: 1px dotted #CCCCCC;
+}
+
+h1,h1 code {
+ font-size: 32px;
+}
+
+h2,h2 code {
+ font-size: 24px;
+}
+
+h3,h3 code {
+ font-size: 20px;
+}
+
+h4,h1 code,h5,h5 code,h6,h6 code {
+ font-size: 18px;
+}
+
+div.book,div.chapter,div.appendix,div.part,div.preface {
+ min-width: 300px;
+ max-width: 1200px;
+ margin: 0 auto;
+}
+
+p.releaseinfo {
+ font-weight: bold;
+ margin-bottom: 40px;
+ margin-top: 40px;
+}
+
+div.authorgroup {
+ line-height: 1;
+}
+
+p.copyright {
+ line-height: 1;
+ margin-bottom: -5px;
+}
+
+.legalnotice p {
+ font-style: italic;
+ font-size: 14px;
+ line-height: 1;
+}
+
+div.titlepage+p,div.titlepage+p {
+ margin-top: 0;
+}
+
+pre {
+ line-height: 1.0;
+ color: black;
+}
+
+a {
+ color: #4183C4;
+ text-decoration: none;
+}
+
+p {
+ margin: 15px 0;
+ text-align: left;
+}
+
+ul,ol {
+ padding-left: 30px;
+}
+
+li p {
+ margin: 0;
+}
+
+div.table {
+ margin: 1em;
+ padding: 0.5em;
+ text-align: center;
+}
+
+div.table table,div.informaltable table {
+ display: table;
+ width: 100%;
+}
+
+div.table td {
+ padding-left: 7px;
+ padding-right: 7px;
+}
+
+.sidebar {
+ line-height: 1.4;
+ padding: 0 20px;
+ background-color: #F8F8F8;
+ border: 1px solid #CCCCCC;
+ border-radius: 3px 3px 3px 3px;
+}
+
+.sidebar p.title {
+ color: #6D180B;
+}
+
+pre.programlisting,pre.screen {
+ font-size: 15px;
+ padding: 6px 10px;
+ background-color: #F8F8F8;
+ border: 1px solid #CCCCCC;
+ border-radius: 3px 3px 3px 3px;
+ clear: both;
+ overflow: auto;
+ line-height: 1.4;
+ font-family: Consolas, "Liberation Mono", Courier, monospace;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px solid #DDDDDD !important;
+ border-radius: 4px !important;
+ border-collapse: separate !important;
+ line-height: 1.6;
+}
+
+table thead {
+ background: #F5F5F5;
+}
+
+table tr {
+ border: none;
+ border-bottom: none;
+}
+
+table th {
+ font-weight: bold;
+}
+
+table th,table td {
+ border: none !important;
+ padding: 6px 13px;
+}
+
+table tr:nth-child(2n) {
+ background-color: #F8F8F8;
+}
+
+td p {
+ margin: 0 0 15px 0;
+}
+
+div.table-contents td p {
+ margin: 0;
+}
+
+div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist *
+ {
+ border: none !important;
+ background: none !important;
+ margin: 0;
+}
+
+div.important p,div.note p,div.tip p,div.warning p {
+ color: #6F6F6F;
+ line-height: 1.6;
+}
+
+div.important code,div.note code,div.tip code,div.warning code {
+ background-color: #F2F2F2 !important;
+ border: 1px solid #CCCCCC !important;
+ border-radius: 4px !important;
+ padding: 1px 3px 0 !important;
+ text-shadow: none !important;
+ white-space: nowrap !important;
+}
+
+.note th,.tip th,.warning th {
+ display: none;
+}
+
+.note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td
+ {
+ border-right: 1px solid #CCCCCC !important;
+ padding-top: 10px;
+}
+
+div.calloutlist p,div.calloutlist td {
+ padding: 0;
+ margin: 0;
+}
+
+div.calloutlist>table>tbody>tr>td:first-child {
+ padding-left: 10px;
+ width: 30px !important;
+}
+
+div.important,div.note,div.tip,div.warning {
+ margin-left: 0px !important;
+ margin-right: 20px !important;
+ margin-top: 20px;
+ margin-bottom: 20px;
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+div.toc {
+ line-height: 1.2;
+}
+
+dl,dt {
+ margin-top: 1px;
+ margin-bottom: 0;
+}
+
+div.toc>dl>dt {
+ font-size: 32px;
+ font-weight: bold;
+ margin: 30px 0 10px 0;
+ display: block;
+}
+
+div.toc>dl>dd>dl>dt {
+ font-size: 24px;
+ font-weight: bold;
+ margin: 20px 0 10px 0;
+ display: block;
+}
+
+div.toc>dl>dd>dl>dd>dl>dt {
+ font-weight: bold;
+ font-size: 20px;
+ margin: 10px 0 0 0;
+}
+
+tbody.footnotes * {
+ border: none !important;
+}
+
+div.footnote p {
+ margin: 0;
+ line-height: 1;
+}
+
+div.footnote p sup {
+ margin-right: 6px;
+ vertical-align: middle;
+}
+
+div.navheader {
+ border-bottom: 1px solid #CCCCCC;
+}
+
+div.navfooter {
+ border-top: 1px solid #CCCCCC;
+}
+
+.title {
+ margin-left: -1em;
+ padding-left: 1em;
+}
+
+.title>a {
+ position: absolute;
+ visibility: hidden;
+ display: block;
+ font-size: 0.85em;
+ margin-top: 0.05em;
+ margin-left: -1em;
+ vertical-align: text-top;
+ color: black;
+}
+
+.title>a:before {
+ content: "\00A7";
+}
+
+.title:hover>a,.title>a:hover,.title:hover>a:hover {
+ visibility: visible;
+}
+
+.title:focus>a,.title>a:focus,.title:focus>a:focus {
+ outline: 0;
+}
diff --git a/multi/images/background.png b/multi/images/background.png
new file mode 100644
index 0000000..15dca6f
Binary files /dev/null and b/multi/images/background.png differ
diff --git a/multi/images/caution.png b/multi/images/caution.png
new file mode 100644
index 0000000..8a5e4fc
Binary files /dev/null and b/multi/images/caution.png differ
diff --git a/multi/images/important.png b/multi/images/important.png
new file mode 100644
index 0000000..ec54df6
Binary files /dev/null and b/multi/images/important.png differ
diff --git a/multi/images/logo.png b/multi/images/logo.png
new file mode 100644
index 0000000..ade2ce6
Binary files /dev/null and b/multi/images/logo.png differ
diff --git a/multi/images/note.png b/multi/images/note.png
new file mode 100644
index 0000000..88d997b
Binary files /dev/null and b/multi/images/note.png differ
diff --git a/multi/images/sts_exception.png b/multi/images/sts_exception.png
new file mode 100644
index 0000000..8607c38
Binary files /dev/null and b/multi/images/sts_exception.png differ
diff --git a/multi/images/tip.png b/multi/images/tip.png
new file mode 100644
index 0000000..6530abb
Binary files /dev/null and b/multi/images/tip.png differ
diff --git a/multi/images/warning.png b/multi/images/warning.png
new file mode 100644
index 0000000..0d5b524
Binary files /dev/null and b/multi/images/warning.png differ
diff --git a/multi/images/web-selected.png b/multi/images/web-selected.png
new file mode 100644
index 0000000..aa6b2da
Binary files /dev/null and b/multi/images/web-selected.png differ
diff --git a/multi/multi__discovery.html b/multi/multi__discovery.html
new file mode 100644
index 0000000..4be8818
--- /dev/null
+++ b/multi/multi__discovery.html
@@ -0,0 +1,22 @@
+
+
+ 1. Discovery
$ spring jar app.jar app.groovy
+$ cf push -p app.jar
It will show its app name in the home page.
The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
\ No newline at end of file
diff --git a/multi/multi__single_sign_on.html b/multi/multi__single_sign_on.html
new file mode 100644
index 0000000..844285c
--- /dev/null
+++ b/multi/multi__single_sign_on.html
@@ -0,0 +1,11 @@
+
+
+ 2. Single Sign On
All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
\ No newline at end of file
diff --git a/multi/multi_pr01.html b/multi/multi_pr01.html
new file mode 100644
index 0000000..53887bd
--- /dev/null
+++ b/multi/multi_pr01.html
@@ -0,0 +1,19 @@
+
+
+
Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
\ No newline at end of file
diff --git a/multi/multi_spring-cloud-cloudfoundry.html b/multi/multi_spring-cloud-cloudfoundry.html
new file mode 100644
index 0000000..e7d193f
--- /dev/null
+++ b/multi/multi_spring-cloud-cloudfoundry.html
@@ -0,0 +1,3 @@
+
+
+ Spring Cloud for Cloud Foundry
Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
1. Discovery
Here’s a Spring Cloud app with Cloud Foundry discovery:
$ spring jar app.jar app.groovy
+$ cf push -p app.jar
It will show its app name in the home page.
The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
2. Single Sign On
Note
All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
\ No newline at end of file
diff --git a/spring-cloud-cloudfoundry-dependencies/spring-cloud-cloudfoundry-dependencies.iml b/spring-cloud-cloudfoundry-dependencies/spring-cloud-cloudfoundry-dependencies.iml
new file mode 100644
index 0000000..4fd5057
--- /dev/null
+++ b/spring-cloud-cloudfoundry-dependencies/spring-cloud-cloudfoundry-dependencies.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-cloudfoundry-discovery/spring-cloud-cloudfoundry-discovery.iml b/spring-cloud-cloudfoundry-discovery/spring-cloud-cloudfoundry-discovery.iml
new file mode 100644
index 0000000..54f170b
--- /dev/null
+++ b/spring-cloud-cloudfoundry-discovery/spring-cloud-cloudfoundry-discovery.iml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-cloudfoundry-sample/spring-cloud-cloudfoundry-sample.iml b/spring-cloud-cloudfoundry-sample/spring-cloud-cloudfoundry-sample.iml
new file mode 100644
index 0000000..c645a2a
--- /dev/null
+++ b/spring-cloud-cloudfoundry-sample/spring-cloud-cloudfoundry-sample.iml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-cloudfoundry-web/spring-cloud-cloudfoundry-web.iml b/spring-cloud-cloudfoundry-web/spring-cloud-cloudfoundry-web.iml
new file mode 100644
index 0000000..7042a38
--- /dev/null
+++ b/spring-cloud-cloudfoundry-web/spring-cloud-cloudfoundry-web.iml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-cloudfoundry.iml b/spring-cloud-cloudfoundry.iml
new file mode 100644
index 0000000..c16e738
--- /dev/null
+++ b/spring-cloud-cloudfoundry.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-cloudfoundry.xml b/spring-cloud-cloudfoundry.xml
new file mode 100644
index 0000000..9793e38
--- /dev/null
+++ b/spring-cloud-cloudfoundry.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+Spring Cloud for Cloud Foundry
+2017-08-29
+
+
+
+Spring Cloud for Cloudfoundry makes it easy to run
+Spring Cloud apps in
+Cloud Foundry (the Platform as a
+Service). Cloud Foundry has the notion of a "service", which is
+middlware that you "bind" to an app, essentially providing it with an
+environment variable containing credentials (e.g. the location and
+username to use for the service).
+The spring-cloud-cloudfoundry-web project provides basic support for
+some enhanced features of webapps in Cloud Foundry: binding
+automatically to single-sign-on services and optionally enabling
+sticky routing for discovery.
+The spring-cloud-cloudfoundry-discovery project provides an
+implementation of Spring Cloud Commons DiscoveryClient so you can
+@EnableDiscoveryClient and provide your credentials as
+spring.cloud.cloudfoundry.discovery.[email,password] and then you
+can use the DiscoveryClient directly or via a LoadBalancerClient
+(also *.url if you are not connecting to
+Pivotal Web Services).
+The first time you use it the discovery client might be slow owing to
+the fact that it has to get an access token from Cloud Foundry.
+
+
+Discovery
+Here’s a Spring Cloud app with Cloud Foundry discovery:
+
+app.groovy
+
+@Grab('org.springframework.cloud:spring-cloud-cloudfoundry')
+@RestController
+@EnableDiscoveryClient
+class Application {
+
+ @Autowired
+ DiscoveryClient client
+
+ @RequestMapping('/')
+ String home() {
+ 'Hello from ' + client.getLocalServiceInstance()
+ }
+
+}
+
+
+If you run it without any service bindings:
+$ spring jar app.jar app.groovy
+$ cf push -p app.jar
+It will show its app name in the home page.
+The DiscoveryClient can lists all the apps in a space, according to
+the credentials it is authenticated with, where the space defaults to
+the one the client is running in (if any). If neither org nor space
+are configured, they default per the user’s profile in Cloud Foundry.
+
+
+Single Sign On
+
+All of the OAuth2 SSO and resource server features moved to Spring Boot
+in version 1.3. You can find documentation in the
+Spring Boot user guide.
+
+This project provides automatic binding from CloudFoundry service
+credentials to the Spring Boot features. If you have a CloudFoundry
+service called "sso", for instance, with credentials containing
+"client_id", "client_secret" and "auth_domain", it will bind
+automatically to the Spring OAuth2 client that you enable with
+@EnableOAuth2Sso (from Spring Boot). The name of the service can be
+parameterized using spring.oauth2.sso.serviceId.
+
+
\ No newline at end of file
diff --git a/spring-cloud-starter-cloudfoundry/spring-cloud-starter-cloudfoundry.iml b/spring-cloud-starter-cloudfoundry/spring-cloud-starter-cloudfoundry.iml
new file mode 100644
index 0000000..50fbc66
--- /dev/null
+++ b/spring-cloud-starter-cloudfoundry/spring-cloud-starter-cloudfoundry.iml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/target/gh-pages.sh b/target/gh-pages.sh
new file mode 100755
index 0000000..3c41f8c
--- /dev/null
+++ b/target/gh-pages.sh
@@ -0,0 +1,360 @@
+#!/bin/bash -x
+
+# Usage: (cd ; ghpages.sh -v -b -c)
+
+set -e
+
+# 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 [[ ! -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:-}
+ if [ -e "${ROOT_FOLDER}/mvnw" ]; then
+ MAVEN_EXEC="$ROOT_FOLDER/mvnw"
+ else
+ MAVEN_EXEC="${MAVEN_PATH}mvn"
+ fi
+ echo "Path to Maven is [${MAVEN_EXEC}]"
+ if [ -z $REPO_NAME ]; then
+ REPO_NAME=$(git remote -v | grep origin | head -1 | sed -e 's!.*/!!' -e 's/ .*//' -e 's/\.git.*//')
+ fi
+ 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"
+ PREVIOUS_BRANCH=${CURRENT_BRANCH}
+}
+
+# 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_EXEC}" -q \
+ -Dexec.executable="echo" \
+ -Dexec.args='${docs.main}' \
+ org.codehaus.mojo:exec-maven-plugin:1.3.1:exec \
+ -P docs \
+ -pl docs | tail -1 )
+ echo "Extracted 'main.adoc' from Maven build [${MAIN_ADOC_VALUE}]"
+
+
+ WHITELIST_PROPERTY=${WHITELIST_PROPERTY:-"docs.whitelisted.branches"}
+ WHITELISTED_BRANCHES_VALUE=$("${MAVEN_EXEC}" -q \
+ -Dexec.executable="echo" \
+ -Dexec.args="\${${WHITELIST_PROPERTY}}" \
+ org.codehaus.mojo:exec-maven-plugin:1.3.1:exec \
+ -P docs \
+ -pl docs | tail -1 )
+ echo "Extracted '${WHITELIST_PROPERTY}' from Maven build [${WHITELISTED_BRANCHES_VALUE}]"
+}
+
+# Stash any outstanding changes
+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 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}/
+ fi
+ done
+ git add -A ${ROOT_FOLDER}
+ 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
+ else
+ cp -rf $f ${destination}
+ fi
+ git add -A ${destination}
+ 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 ${PREVIOUS_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
+
+assert_properties
+set_default_props
+check_if_anything_to_sync
+retrieve_current_branch
+if echo $VERSION | egrep -q 'SNAPSHOT' || [[ -z "${VERSION}" ]]; then
+ CLONE=""
+ VERSION=""
+ echo "You've provided a version variable but it's a snapshot one. Due to this will not clone spring-cloud-static and publish docs over there"
+else
+ switch_to_tag
+fi
+build_docs_if_applicable
+retrieve_doc_properties
+stash_changes
+add_docs_from_target
+checkout_previous_branch