main 63e5946b4adb cached
332 files
136.8 MB
625.6k tokens
3737 symbols
1 requests
Download .txt
Showing preview only (2,511K chars total). Download the full file or copy to clipboard to get everything.
Repository: spring-cloud/spring-cloud-deployer
Branch: main
Commit: 63e5946b4adb
Files: 332
Total size: 136.8 MB

Directory structure:
gitextract_rlk86ief/

├── .editorconfig
├── .github/
│   ├── actions/
│   │   └── trivy-scan/
│   │       └── action.yml
│   ├── dco.yml
│   ├── settings.xml
│   └── workflows/
│       ├── build-snapshot-worker.yml
│       ├── ci-it.yml
│       ├── ci-pr.yml
│       ├── ci.yml
│       ├── common-ci.yml
│       ├── issue-handler.yml
│       ├── k8s-versions.json
│       ├── milestone-worker.yml
│       ├── next-dev-version-worker.yml
│       └── release-worker.yml
├── .gitignore
├── .mvn/
│   ├── jvm.config
│   ├── maven.config
│   └── wrapper/
│       ├── maven-wrapper.jar
│       └── maven-wrapper.properties
├── .settings.xml
├── .trivyignore
├── CONTRIBUTING.adoc
├── LICENSE
├── NOTICE
├── README.adoc
├── SECURITY.md
├── mvnw
├── mvnw.cmd
├── pom.xml
├── spring-cloud-deployer-autoconfigure/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── springframework/
│       │   │           └── cloud/
│       │   │               └── deployer/
│       │   │                   └── autoconfigure/
│       │   │                       ├── DelegatingResourceLoaderBuilder.java
│       │   │                       ├── DelegatingResourceLoaderBuilderCustomizer.java
│       │   │                       ├── MavenConfigurationProperties.java
│       │   │                       └── ResourceLoadingAutoConfiguration.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── spring/
│       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       │           └── spring.factories
│       └── test/
│           └── java/
│               └── org/
│                   └── springframework/
│                       └── cloud/
│                           └── deployer/
│                               └── autoconfigure/
│                                   └── ResourceLoadingAutoConfigurationTests.java
├── spring-cloud-deployer-cloudfoundry/
│   ├── README.adoc
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── springframework/
│       │   │           └── cloud/
│       │   │               └── deployer/
│       │   │                   └── spi/
│       │   │                       ├── cloudfoundry/
│       │   │                       │   ├── AbstractCloudFoundryDeployer.java
│       │   │                       │   ├── AbstractCloudFoundryTaskLauncher.java
│       │   │                       │   ├── AppNameGenerator.java
│       │   │                       │   ├── ApplicationLogAccessor.java
│       │   │                       │   ├── CfEnvAwareAppDeploymentRequest.java
│       │   │                       │   ├── CfEnvAwareResource.java
│       │   │                       │   ├── CfEnvConfigurer.java
│       │   │                       │   ├── CloudFoundryActuatorTemplate.java
│       │   │                       │   ├── CloudFoundryAppDeployer.java
│       │   │                       │   ├── CloudFoundryAppInstanceStatus.java
│       │   │                       │   ├── CloudFoundryAppNameGenerator.java
│       │   │                       │   ├── CloudFoundryConnectionProperties.java
│       │   │                       │   ├── CloudFoundryDeployerAutoConfiguration.java
│       │   │                       │   ├── CloudFoundryDeploymentProperties.java
│       │   │                       │   ├── CloudFoundryPlatformSpecificInfo.java
│       │   │                       │   ├── CloudFoundryTaskLauncher.java
│       │   │                       │   ├── DurationConverter.java
│       │   │                       │   ├── ServiceParser.java
│       │   │                       │   └── UnsupportedVersionTaskLauncher.java
│       │   │                       └── scheduler/
│       │   │                           └── cloudfoundry/
│       │   │                               ├── CloudFoundryAppScheduler.java
│       │   │                               ├── CloudFoundryScheduleSSLException.java
│       │   │                               ├── CloudFoundrySchedulerProperties.java
│       │   │                               └── expression/
│       │   │                                   └── QuartzCronExpression.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── additional-spring-configuration-metadata.json
│       │           ├── spring/
│       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       │           └── spring.factories
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       ├── cloudfoundry/
│           │                       │   ├── AbstractAppDeployerTestSupport.java
│           │                       │   ├── ApplicationLogAccessorTests.java
│           │                       │   ├── CfEnvAwareResourceTests.java
│           │                       │   ├── CfEnvConfigurerTests.java
│           │                       │   ├── CloudFoundryActuatorTemplateTests.java
│           │                       │   ├── CloudFoundryAppDeployerIntegrationIT.java
│           │                       │   ├── CloudFoundryAppDeployerTests.java
│           │                       │   ├── CloudFoundryAppNameGeneratorTest.java
│           │                       │   ├── CloudFoundryConnectionPropertiesTests.java
│           │                       │   ├── CloudFoundryDeployerTests.java
│           │                       │   ├── CloudFoundryTaskLauncherCachingTests.java
│           │                       │   ├── CloudFoundryTaskLauncherIntegrationIT.java
│           │                       │   ├── CloudFoundryTaskLauncherTests.java
│           │                       │   └── ServiceParserTests.java
│           │                       └── scheduler/
│           │                           └── cloudfoundry/
│           │                               ├── CloudFoundryAppSchedulerTests.java
│           │                               ├── CloudFoundryScheduleSSLExceptionTests.java
│           │                               ├── CloudFoundrySchedulerPropertiesTest.java
│           │                               ├── SpringCloudSchedulerIntegrationIT.java
│           │                               └── expression/
│           │                                   └── QuartzCronExpressionTests.java
│           └── resources/
│               ├── batch-job-1.0.0.BUILD-SNAPSHOT.jar
│               ├── demo-0.0.1-SNAPSHOT.jar
│               ├── http-source-rabbit-2.1.5.RELEASE.jar
│               ├── log-sink-rabbit-3.0.0.BUILD-SNAPSHOT.jar
│               ├── logback-test.xml
│               ├── long-running-task-1.0.0.BUILD-SNAPSHOT.jar
│               ├── timestamp-task-1.0.0.BUILD-SNAPSHOT-exec-2.jar
│               ├── timestamp-task-1.0.0.BUILD-SNAPSHOT-exec-3.jar
│               ├── timestamp-task-1.0.0.BUILD-SNAPSHOT-exec.jar
│               └── timestamp-task-3.1.2-SNAPSHOT.jar
├── spring-cloud-deployer-dependencies/
│   └── pom.xml
├── spring-cloud-deployer-kubernetes/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── springframework/
│       │   │           └── cloud/
│       │   │               └── deployer/
│       │   │                   └── spi/
│       │   │                       └── kubernetes/
│       │   │                           ├── AbstractKubernetesDeployer.java
│       │   │                           ├── CommandProbeCreator.java
│       │   │                           ├── CompositeDeploymentStateResolver.java
│       │   │                           ├── ContainerConfiguration.java
│       │   │                           ├── ContainerFactory.java
│       │   │                           ├── DefaultContainerFactory.java
│       │   │                           ├── DefaultRunningPhaseDeploymentStateResolver.java
│       │   │                           ├── DeploymentPropertiesResolver.java
│       │   │                           ├── EntryPointStyle.java
│       │   │                           ├── HttpProbeCreator.java
│       │   │                           ├── ImagePullPolicy.java
│       │   │                           ├── KubernetesActuatorTemplate.java
│       │   │                           ├── KubernetesAppDeployer.java
│       │   │                           ├── KubernetesAppInstanceStatus.java
│       │   │                           ├── KubernetesAutoConfiguration.java
│       │   │                           ├── KubernetesClientFactory.java
│       │   │                           ├── KubernetesDeployerProperties.java
│       │   │                           ├── KubernetesScheduler.java
│       │   │                           ├── KubernetesSchedulerProperties.java
│       │   │                           ├── KubernetesTaskLauncher.java
│       │   │                           ├── KubernetesTaskLauncherProperties.java
│       │   │                           ├── LivenessCommandProbeCreator.java
│       │   │                           ├── LivenessHttpProbeCreator.java
│       │   │                           ├── LivenessTcpProbeCreator.java
│       │   │                           ├── PredicateRunningPhaseDeploymentStateResolver.java
│       │   │                           ├── ProbeAuthenticationType.java
│       │   │                           ├── ProbeCreator.java
│       │   │                           ├── ProbeCreatorFactory.java
│       │   │                           ├── ProbeType.java
│       │   │                           ├── ReadinessCommandProbeCreator.java
│       │   │                           ├── ReadinessHttpProbeCreator.java
│       │   │                           ├── ReadinessTcpProbeCreator.java
│       │   │                           ├── RestartPolicy.java
│       │   │                           ├── RunningPhaseDeploymentStateResolver.java
│       │   │                           ├── StartupCommandProbeCreator.java
│       │   │                           ├── StartupHttpProbeCreator.java
│       │   │                           ├── StartupTcpProbeCreator.java
│       │   │                           ├── TcpProbeCreator.java
│       │   │                           └── support/
│       │   │                               ├── ArgumentSanitizer.java
│       │   │                               ├── PropertyParserUtils.java
│       │   │                               └── RelaxedNames.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── spring/
│       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       │           └── spring.factories
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       └── kubernetes/
│           │                           ├── AbstractKubernetesTaskLauncherIntegrationTests.java
│           │                           ├── DefaultContainerFactoryTests.java
│           │                           ├── DeploymentPropertiesResolverTests.java
│           │                           ├── EntryPointStyleTests.java
│           │                           ├── ImagePullPolicyTests.java
│           │                           ├── KubernetesActuatorTemplateTests.java
│           │                           ├── KubernetesAppDeployerIntegrationIT.java
│           │                           ├── KubernetesAppDeployerTests.java
│           │                           ├── KubernetesConfigurationPropertiesTests.java
│           │                           ├── KubernetesDeployerPropertiesTests.java
│           │                           ├── KubernetesSchedulerIT.java
│           │                           ├── KubernetesSchedulerPropertiesTests.java
│           │                           ├── KubernetesTaskLauncherIntegrationIT.java
│           │                           ├── KubernetesTaskLauncherMaximumConcurrentTasksTests.java
│           │                           ├── KubernetesTaskLauncherWithJobIntegrationIT.java
│           │                           ├── PropertyParserUtilsTests.java
│           │                           └── RunAbstractKubernetesDeployerTests.java
│           └── resources/
│               ├── dataflow-server-configMapKeyRef.yml
│               ├── dataflow-server-containerSecurityContext.yml
│               ├── dataflow-server-nodeAffinity.yml
│               ├── dataflow-server-podAffinity.yml
│               ├── dataflow-server-podAntiAffinity.yml
│               ├── dataflow-server-podsecuritycontext.yml
│               ├── dataflow-server-secretKeyRef.yml
│               ├── dataflow-server-tolerations.yml
│               └── dataflow-server.yml
├── spring-cloud-deployer-local/
│   ├── README.adoc
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── springframework/
│       │   │           └── cloud/
│       │   │               └── deployer/
│       │   │                   └── spi/
│       │   │                       └── local/
│       │   │                           ├── AbstractLocalDeployerSupport.java
│       │   │                           ├── CommandBuilder.java
│       │   │                           ├── DebugAddress.java
│       │   │                           ├── DeployerSocketUtils.java
│       │   │                           ├── DockerCommandBuilder.java
│       │   │                           ├── HttpProbeExecutor.java
│       │   │                           ├── JavaCommandBuilder.java
│       │   │                           ├── LocalActuatorTemplate.java
│       │   │                           ├── LocalAppDeployer.java
│       │   │                           ├── LocalDeployerAutoConfiguration.java
│       │   │                           ├── LocalDeployerProperties.java
│       │   │                           ├── LocalDeployerUtils.java
│       │   │                           └── LocalTaskLauncher.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── spring/
│       │               └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       └── local/
│           │                           ├── DebugAddressTests.java
│           │                           ├── DeployerSocketUtilsTests.java
│           │                           ├── DockerCommandBuilderTests.java
│           │                           ├── JavaExecutionCommandBuilderTests.java
│           │                           ├── LocalAppDeployerEnvironmentIntegrationTests.java
│           │                           ├── LocalAppDeployerIntegrationTests.java
│           │                           ├── LocalDeployerPropertiesTests.java
│           │                           ├── LocalDeployerSupportTests.java
│           │                           ├── LocalTaskLauncherIntegrationTests.java
│           │                           ├── RandomPortRangeContextTests.java
│           │                           ├── RandomPortRangeTests.java
│           │                           └── RandomPortTests.java
│           └── resources/
│               └── testResource.txt
├── spring-cloud-deployer-resource-docker/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── springframework/
│       │               └── cloud/
│       │                   └── deployer/
│       │                       └── resource/
│       │                           └── docker/
│       │                               ├── DockerResource.java
│       │                               └── DockerResourceLoader.java
│       └── test/
│           └── java/
│               └── org/
│                   └── springframework/
│                       └── cloud/
│                           └── deployer/
│                               └── resource/
│                                   └── docker/
│                                       ├── DockerResourceLoaderTests.java
│                                       └── DockerResourceTests.java
├── spring-cloud-deployer-resource-maven/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── springframework/
│       │               └── cloud/
│       │                   └── deployer/
│       │                       └── resource/
│       │                           └── maven/
│       │                               ├── LoggingRepositoryListener.java
│       │                               ├── MavenArtifactResolver.java
│       │                               ├── MavenProperties.java
│       │                               ├── MavenResource.java
│       │                               ├── MavenResourceLoader.java
│       │                               ├── StaticWagonConfigurator.java
│       │                               └── StaticWagonProvider.java
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── resource/
│           │                       └── maven/
│           │                           ├── MavenArtifactResolverTests.java
│           │                           ├── MavenExtension.java
│           │                           ├── MavenPropertiesTests.java
│           │                           ├── MavenResourceLoaderTests.java
│           │                           ├── MavenResourceTests.java
│           │                           └── WagonHttpTests.java
│           └── resources/
│               └── application.properties
├── spring-cloud-deployer-resource-support/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── springframework/
│       │               └── cloud/
│       │                   └── deployer/
│       │                       └── resource/
│       │                           ├── registry/
│       │                           │   ├── InMemoryUriRegistry.java
│       │                           │   ├── UriRegistry.java
│       │                           │   └── UriRegistryPopulator.java
│       │                           └── support/
│       │                               ├── DelegatingResourceLoader.java
│       │                               ├── DownloadingUrlResource.java
│       │                               ├── DownloadingUrlResourceLoader.java
│       │                               ├── ResourceNotResolvedException.java
│       │                               └── ShaUtils.java
│       └── test/
│           └── java/
│               └── org/
│                   └── springframework/
│                       └── cloud/
│                           └── deployer/
│                               └── resource/
│                                   ├── StubResourceLoader.java
│                                   ├── registry/
│                                   │   └── UriRegistryPopulatorTests.java
│                                   └── support/
│                                       ├── DelegatingResourceLoaderIntegrationTests.java
│                                       ├── DelegatingResourceLoaderTests.java
│                                       ├── DownloadingUrlResourceTests.java
│                                       └── ShaUtilsTests.java
├── spring-cloud-deployer-spi/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── springframework/
│       │               └── cloud/
│       │                   └── deployer/
│       │                       └── spi/
│       │                           ├── app/
│       │                           │   ├── AbstractActuatorTemplate.java
│       │                           │   ├── ActuatorOperations.java
│       │                           │   ├── AppAdmin.java
│       │                           │   ├── AppDeployer.java
│       │                           │   ├── AppInstanceStatus.java
│       │                           │   ├── AppScaleRequest.java
│       │                           │   ├── AppStatus.java
│       │                           │   ├── DeploymentState.java
│       │                           │   └── MultiStateAppDeployer.java
│       │                           ├── core/
│       │                           │   ├── AppDefinition.java
│       │                           │   ├── AppDeploymentRequest.java
│       │                           │   └── RuntimeEnvironmentInfo.java
│       │                           ├── scheduler/
│       │                           │   ├── CreateScheduleException.java
│       │                           │   ├── ScheduleInfo.java
│       │                           │   ├── ScheduleRequest.java
│       │                           │   ├── Scheduler.java
│       │                           │   ├── SchedulerException.java
│       │                           │   ├── SchedulerPropertyKeys.java
│       │                           │   └── UnScheduleException.java
│       │                           ├── task/
│       │                           │   ├── LaunchState.java
│       │                           │   ├── TaskLauncher.java
│       │                           │   └── TaskStatus.java
│       │                           └── util/
│       │                               ├── ByteSizeUtils.java
│       │                               ├── CommandLineTokenizer.java
│       │                               └── RuntimeVersionUtils.java
│       └── test/
│           └── java/
│               └── org/
│                   └── springframework/
│                       └── cloud/
│                           └── deployer/
│                               └── spi/
│                                   ├── app/
│                                   │   ├── AppDeployerTests.java
│                                   │   └── RuntimeEnvironmentInfoBuilderTests.java
│                                   ├── task/
│                                   │   └── TaskLauncherTests.java
│                                   └── util/
│                                       ├── ByteSizeUtilsTests.java
│                                       └── CommandLineTokenizerTests.java
├── spring-cloud-deployer-spi-scheduler-test-app/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       └── scheduler/
│           │                           └── test/
│           │                               └── app/
│           │                                   ├── SchedulerIntegrationTest.java
│           │                                   ├── SchedulerIntegrationTestApplication.java
│           │                                   └── SchedulerIntegrationTestProperties.java
│           └── resources/
│               └── application.properties
├── spring-cloud-deployer-spi-test/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       ├── scheduler/
│           │                       │   └── test/
│           │                       │       └── AbstractSchedulerIntegrationJUnit5Tests.java
│           │                       └── test/
│           │                           ├── AbstractAppDeployerIntegrationJUnit5Tests.java
│           │                           ├── AbstractIntegrationJUnit5Tests.java
│           │                           ├── AbstractTaskLauncherIntegrationJUnit5Tests.java
│           │                           └── Timeout.java
│           └── resources/
│               └── integration-test-app.properties
├── spring-cloud-deployer-spi-test-app/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       └── test/
│           │                           └── app/
│           │                               ├── DeployerIntegrationTest.java
│           │                               ├── DeployerIntegrationTestApplication.java
│           │                               └── DeployerIntegrationTestProperties.java
│           └── resources/
│               └── application.properties
└── src/
    ├── main/
    │   ├── java/
    │   │   └── org/
    │   │       └── springframework/
    │   │           └── cloud/
    │   │               └── deployer/
    │   │                   └── spi/
    │   │                       ├── kubernetes/
    │   │                       │   ├── DefaultContainerFactory.java
    │   │                       │   ├── HttpProbeCreator.java
    │   │                       │   ├── KubernetesAppDeployer.java
    │   │                       │   ├── KubernetesAppInstanceStatus.java
    │   │                       │   ├── KubernetesDeployerProperties.java
    │   │                       │   ├── LivenessCommandProbeCreator.java
    │   │                       │   ├── LivenessHttpProbeCreator.java
    │   │                       │   ├── LivenessTcpProbeCreator.java
    │   │                       │   ├── ProbeCreator.java
    │   │                       │   ├── ProbeCreatorFactory.java
    │   │                       │   ├── ReadinessCommandProbeCreator.java
    │   │                       │   ├── ReadinessHttpProbeCreator.java
    │   │                       │   └── ReadinessTcpProbeCreator.java
    │   │                       └── local/
    │   │                           ├── AbstractLocalDeployerSupport.java
    │   │                           ├── CommandBuilder.java
    │   │                           ├── DebugAddress.java
    │   │                           ├── DeployerSocketUtils.java
    │   │                           ├── DockerCommandBuilder.java
    │   │                           ├── HttpProbeExecutor.java
    │   │                           ├── JavaCommandBuilder.java
    │   │                           ├── LocalActuatorTemplate.java
    │   │                           ├── LocalAppDeployer.java
    │   │                           ├── LocalDeployerAutoConfiguration.java
    │   │                           ├── LocalDeployerProperties.java
    │   │                           ├── LocalDeployerUtils.java
    │   │                           └── LocalTaskLauncher.java
    │   └── resources/
    │       └── META-INF/
    │           ├── additional-spring-configuration-metadata.json
    │           ├── spring/
    │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
    │           └── spring.factories
    ├── scripts/
    │   ├── next-minor-parent-snapshot-version
    │   ├── next-minor-snapshot-version
    │   ├── next-parent-snapshot-version
    │   └── next-snapshot-version
    └── test/
        ├── java/
        │   └── org/
        │       └── springframework/
        │           └── cloud/
        │               └── deployer/
        │                   └── spi/
        │                       ├── kubernetes/
        │                       │   ├── DefaultContainerFactoryTests.java
        │                       │   ├── KubernetesAppDeployerIntegrationIT.java
        │                       │   ├── KubernetesAppDeployerTests.java
        │                       │   ├── KubernetesTaskLauncherIntegrationIT.java
        │                       │   └── KubernetesTaskLauncherWithJobIntegrationIT.java
        │                       └── local/
        │                           ├── DebugAddressTests.java
        │                           ├── DeployerSocketUtilsTests.java
        │                           ├── DockerCommandBuilderTests.java
        │                           ├── JavaExecutionCommandBuilderTests.java
        │                           ├── LocalAppDeployerEnvironmentIntegrationTests.java
        │                           ├── LocalAppDeployerIntegrationTests.java
        │                           ├── LocalDeployerPropertiesTests.java
        │                           ├── LocalDeployerSupportTests.java
        │                           ├── LocalTaskLauncherIntegrationTests.java
        │                           ├── RandomPortRangeContextTests.java
        │                           ├── RandomPortRangeTests.java
        │                           └── RandomPortTests.java
        └── resources/
            ├── dataflow-server-podsecuritycontext.yml
            └── testResource.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*.java]
indent_style = tab
indent_size = 4

[*.adoc]
indent_style = tab
indent_size = 4

[*.groovy]
indent_style = tab
indent_size = 4

[*.xml]
indent_style = tab
indent_size = 4

[*.yml]
indent_style = space
indent_size = 2

[*.yaml]
indent_style = space
indent_size = 2

[*.sh]
indent_style = space
indent_size = 4
end_of_line = lf


================================================
FILE: .github/actions/trivy-scan/action.yml
================================================
name: 'Trivy Scan'
description: 'Run Trivy Scan on repository'
runs:
  using: "composite"
  steps:
    - uses: actions/checkout@v4
    - name: Run Trivy vulnerability scanner in repo mode
      env:
        TRIVY_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-db,aquasec/trivy-db,ghcr.io/aquasecurity/trivy-db
        TRIVY_JAVA_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-java-db,aquasec/trivy-java-db,ghcr.io/aquasecurity/trivy-java-db
      uses: aquasecurity/trivy-action@master
      with:
        scan-type: 'fs'
        scanners: 'vuln'
        ignore-unfixed: true
        severity: 'CRITICAL,HIGH'
        exit-code: 1
        trivyignores: .trivyignore

================================================
FILE: .github/dco.yml
================================================
require:
  members: false


================================================
FILE: .github/settings.xml
================================================
<settings>
	<profiles>
		<profile>
			<id>stagingmilestone</id>
			<repositories>
				<repository>
					<id>maven-central</id>
					<name>Maven Central</name>
					<url>https://repo.maven.apache.org/maven2</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</repository>
				<repository>
					<id>spring-staging</id>
					<name>Spring Staging</name>
					<url>https://repo.spring.io/libs-staging</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</repository>
				<repository>
					<id>spring-milestones</id>
					<name>Spring Milestones</name>
					<url>https://repo.spring.io/libs-milestone</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</repository>
			</repositories>
			<pluginRepositories>
				<pluginRepository>
					<id>maven-central</id>
					<name>Maven Central</name>
					<url>https://repo.maven.apache.org/maven2</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</pluginRepository>
				<pluginRepository>
					<id>spring-staging</id>
					<name>Spring Staging</name>
					<url>https://repo.spring.io/libs-staging</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</pluginRepository>
				<pluginRepository>
					<id>spring-milestones</id>
					<name>Spring Milestones</name>
					<url>https://repo.spring.io/libs-milestone</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</pluginRepository>
			</pluginRepositories>
		</profile>
		<profile>
			<id>stagingrelease</id>
			<repositories>
				<repository>
					<id>maven-central</id>
					<name>Maven Central</name>
					<url>https://repo.maven.apache.org/maven2</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</repository>
				<repository>
					<id>spring-staging</id>
					<name>Spring Staging</name>
					<url>https://repo.spring.io/libs-staging</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</repository>
			</repositories>
			<pluginRepositories>
				<pluginRepository>
					<id>maven-central</id>
					<name>Maven Central</name>
					<url>https://repo.maven.apache.org/maven2</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</pluginRepository>
				<pluginRepository>
					<id>spring-staging</id>
					<name>Spring Staging</name>
					<url>https://repo.spring.io/libs-staging</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</pluginRepository>
			</pluginRepositories>
		</profile>
	</profiles>
</settings>


================================================
FILE: .github/workflows/build-snapshot-worker.yml
================================================
# Worker which is dispatched from build-snapshot-controller workflow.
name: Build Snapshot Worker

on:
  workflow_dispatch:
    inputs:
      build-zoo-handler:
        description: 'Build Zoo Handler Payload'
        required: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'liberica'
    - uses: jfrog/setup-jfrog-cli@v3
      env:
        JF_URL: 'https://repo.spring.io'
        JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }}

    # cache maven .m2
    - uses: actions/cache@v3
      with:
        path: ~/.m2/repository
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: |
          ${{ runner.os }}-m2-

    # target deploy repos
    - name: Configure JFrog Cli
      run: |
        jfrog rt mvnc --use-wrapper \
          --server-id-resolve=${{ vars.JF_SERVER_ID }} \
          --server-id-deploy=${{ vars.JF_SERVER_ID }} \
          --repo-resolve-releases=libs-milestone \
          --repo-resolve-snapshots=libs-snapshot \
          --repo-deploy-releases=libs-release-local \
          --repo-deploy-snapshots=libs-snapshot-local
        echo JFROG_CLI_BUILD_NAME=spring-cloud-deployer-main >> $GITHUB_ENV
        echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV

    # zoo extract and ensure
    - name: Extract Zoo Context Properties
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-extract-context-properties: true

    # build and publish to configured target
    - name: Build and Publish
      run: |
        jfrog rt mvn -U -B clean install -T 0.5C
        jfrog rt build-publish
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_version=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout) >> $GITHUB_ENV
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_buildname=spring-cloud-deployer-main >> $GITHUB_ENV
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_buildnumber=$GITHUB_RUN_NUMBER >> $GITHUB_ENV
    - name: Test Report
      uses: dorny/test-reporter@v1
      if: ${{ success() || failure() }}
      with:
        name: Unit Test - Report
        path: '**/surefire-reports/*.xml'
        reporter: java-junit
        list-tests: 'failed'
    # zoo success
    - name: Notify Build Success Zoo Handler Controller
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-token: ${{ secrets.SCDF_ACCESS_TOKEN }}
        dispatch-handler-client-payload-data: >
          {
            "event": "build-succeed"
          }

    # zoo failure
    - name: Notify Build Failure Zoo Handler Controller
      if: ${{ failure() }}
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-token: ${{ secrets.SCDF_ACCESS_TOKEN }}
        dispatch-handler-client-payload-data: >
          {
            "event": "build-failed",
            "message": "spring-cloud-deployer failed"
          }
    # clean m2 cache
    - name: Clean cache
      run: |
        find ~/.m2/repository -type d -name '*SNAPSHOT' | xargs rm -fr
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Trivy vulnerability scanner in repo mode
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          ignore-unfixed: true
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'
      - name: Upload Trivy scan results to GitHub Security tab
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'
      - name: 'Scanned'
        shell: bash
        run: echo "::info ::Scanned"
  done:
    runs-on: ubuntu-latest
    needs: [ scan, build ]
    steps:
      - name: 'Done'
        shell: bash
        run: echo "::info ::Done"


================================================
FILE: .github/workflows/ci-it.yml
================================================
name: CI IT

on:
  workflow_dispatch:

jobs:
  prepare:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 'Load Matrix'
        id: matrix
        shell: bash
        run: |
          MATRIX=$(jq -c . .github/workflows/k8s-versions.json)
          echo "MATRIX=$MATRIX" >> $GITHUB_OUTPUT
    outputs:
      matrix: ${{ steps.matrix.outputs.MATRIX }}
  k8s-it:
    runs-on: ubuntu-latest
    needs: [ prepare ]
    strategy:
      fail-fast: false
      matrix:
        include: ${{ fromJson(needs.prepare.outputs.matrix) }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/cache@v3
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-m2it-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-m2-
      - uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'liberica'
      - name: 'Install minikube ${{ matrix.patch && matrix.patch || matrix.k8s_version }}'
        shell: bash
        run: |
          MINIKUBE_VERSION="v1.34.0"
          curl -LO "https://storage.googleapis.com/minikube/releases/$MINIKUBE_VERSION/minikube-linux-amd64"
          sudo install minikube-linux-amd64 /usr/local/bin/minikube
          minikube start "--kubernetes-version=${{ matrix.patch && matrix.patch || matrix.k8s_version }}"
      # build
      - name: Build
        run: |
          ./mvnw -B -Pfailsafe verify -pl spring-cloud-deployer-kubernetes
      - name: Test Report
        uses: dorny/test-reporter@v1
        if: ${{ success() || failure() }}
        with:
          name: "Integration Test - Report for ${{ matrix.k8s_version }}"
          path: '**/failsafe-reports/*IT.xml'
          reporter: java-junit
          list-tests: 'failed'
      # clean m2 cache
      - name: Clean cache
        run: |
          find ~/.m2/repository -type d -name '*SNAPSHOT' | xargs rm -fr


================================================
FILE: .github/workflows/ci-pr.yml
================================================
name: CI PRs

on:
  workflow_dispatch:
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'liberica'
      - name: Build
        run: |
          ./mvnw -U -B -s .settings.xml -Pspring clean install -T 0.5C
      - name: Scan
        uses: ./.github/actions/trivy-scan
        if: always()


================================================
FILE: .github/workflows/ci.yml
================================================
name: CI

on:
  workflow_dispatch:
  push:
    branches:
      - 'main'
      - '2.9.x'
      - '2.8.x'
      - '2.7.x'
    paths-ignore:
      - '.github/**'

jobs:
  build:
    uses: ./.github/workflows/common-ci.yml
    with:
      artifactoryServerId: ${{ vars.JF_SERVER_ID }}
    secrets: inherit


================================================
FILE: .github/workflows/common-ci.yml
================================================
name: common-ci

on:
  workflow_call:
    inputs:
      artifactoryServerId:
        type: string
        required: true
        description: 'Artifactory Server Id (typically from vars.JF_SERVER_ID)'
    secrets:
      JF_ARTIFACTORY_SPRING:

env:
  ARTIFACTORY_KEY: ${{ secrets.JF_ARTIFACTORY_SPRING }}
  ARTIFACTORY_SERVER_ID: ${{ inputs.artifactoryServerId }}

jobs:
  build_publish_scan:
    name: Build / Publish / Scan
    if: github.repository_owner == 'spring-cloud'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'liberica'
      - uses: jfrog/setup-jfrog-cli@v4
        env:
          JF_URL: 'https://repo.spring.io'
          JF_ENV_SPRING: ${{ env.ARTIFACTORY_KEY }}
        # setup frog cli
      - name: Configure JFrog Cli
        run: |
          jfrog mvnc --use-wrapper \
          --server-id-deploy=${{ env.ARTIFACTORY_SERVER_ID }} \
          --repo-deploy-releases=libs-release-local \
          --repo-deploy-snapshots=libs-snapshot-local
          echo JFROG_CLI_BUILD_NAME=spring-cloud-deployer-main >> $GITHUB_ENV
          echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV
      - name: Build and Publish
        run: |
          jfrog mvn -U -B -s .settings.xml clean install -T 0.5C
          jfrog rt build-publish
      - name: Scan
        uses: ./.github/actions/trivy-scan
        if: always()


================================================
FILE: .github/workflows/issue-handler.yml
================================================
name: Issue Handler

on:
  workflow_dispatch:
  issues:
    types: [opened, labeled, unlabeled]
  issue_comment:
    types: [created]

jobs:
  labeler:
    runs-on: ubuntu-latest
    steps:

    - name: Handle Issues
      uses: jvalkeal/issue-handler@v0.0.4
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        config: >
          {
            "data": {
              "team": [
                "jvalkeal",
                "oodamien",
                "ilayaperumalg",
                "sabbyanandan",
                "tzolov",
                "chrisjs",
                "cppwfs",
                "mminella",
                "dturanski",
                "onobc",
                "claudiahub",
                "sobychacko",
                "corneil"
              ]
            },
            "recipes": [
              {
                "name": "Mark new issue to get triaged",
                "type": "ifThen",
                "if": "isAction('opened') && !dataInArray('team', actor)",
                "then": "labelIssue(['status/need-triage'])"
              },
              {
                "name": "Switch to team if user comments",
                "type": "ifThen",
                "if": "isEvent('issue_comment') && isAction('created') && actor == context.payload.issue.user.login && labelsContainsAny('status/need-feedback')",
                "then": "[labelIssue('for/team-attention'), removeLabel('status/need-feedback')]"
              },
              {
                "name": "Switch to user if team comments",
                "type": "ifThen",
                "if": "isEvent('issue_comment') && isAction('created') && dataInArray('team', actor) && labelsContainsAny('for/team-attention') ",
                "then": "[labelIssue('status/need-feedback', removeLabel('for/team-attention'))]"
              },
              {
                "name": "Manage backport issues",
                "type": "manageBackportIssues",
                "whenLabeled": "labeledStartsWith(['branch/'])",
                "whenUnlabeled": "labeledStartsWith(['branch/'])",
                "whenLabels": "labelsContainsAny(['for/backport'])",
                "fromLabels": "labeledStartsWith(['branch/'])",
                "additionalLabels": "'type/backport'",
                "body": "'Backport #' + number"
              }
            ]
          }


================================================
FILE: .github/workflows/k8s-versions.json
================================================
[
  {
    "k8s_version": "v1.23",
    "patch": null
  },
  {
    "k8s_version": "v1.24",
    "patch": null
  },
  {
    "k8s_version": "v1.25",
    "patch": null
  },
  {
    "k8s_version": "v1.26",
    "patch": null
  },
  {
    "k8s_version": "v1.27",
    "patch": null
  },
  {
    "k8s_version": "v1.28",
    "patch": null
  },
  {
    "k8s_version": "v1.29",
    "patch": null
  },
  {
    "k8s_version": "v1.30",
    "patch": null
  }
]

================================================
FILE: .github/workflows/milestone-worker.yml
================================================
name: Milestone Worker

on:
  workflow_dispatch:
    inputs:
      build-zoo-handler:
        description: 'Build Zoo Handler Payload'
        required: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:

    - uses: actions/checkout@v4
    - uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'liberica'
    - uses: jfrog/setup-jfrog-cli@v3
      env:
        JF_URL: 'https://repo.spring.io'
        JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }}
    - uses: actions/cache@v3
      with:
        path: ~/.m2/repository
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: |
          ${{ runner.os }}-m2-

    # target deploy repos
    - name: Configure JFrog Cli
      run: |
        jfrog rt mvnc --use-wrapper \
          --server-id-resolve=${{ vars.JF_SERVER_ID }} \
          --server-id-deploy=${{ vars.JF_SERVER_ID }} \
          --repo-resolve-releases=libs-milestone \
          --repo-resolve-snapshots=libs-snapshot \
          --repo-deploy-releases=libs-milestone-local \
          --repo-deploy-snapshots=libs-snapshot-local
        echo JFROG_CLI_BUILD_NAME=spring-cloud-deployer-main-milestone >> $GITHUB_ENV
        echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV

    # zoo extract and ensure
    - name: Extract Zoo Context Properties
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-extract-context-properties: true
        ensure-env: |
          BUILD_ZOO_HANDLER_milestone_version

    # build and publish to configured target
    - name: Build and Publish
      run: |
        jfrog rt mvn build-helper:parse-version versions:set \
          -gs .github/settings.xml \
          -Pstagingmilestone \
          -DprocessAllModules=true \
          -DgenerateBackupPoms=false \
          -Dartifactory.publish.artifacts=false \
          -DnewVersion='${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}-'${BUILD_ZOO_HANDLER_milestone_version} \
          -B
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_version=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout) >> $GITHUB_ENV
        jfrog rt build-clean
        jfrog rt mvn clean install \
          -gs .github/settings.xml \
          -P-spring,stagingmilestone \
          -DskipTests -U -B -T 0.5C
        jfrog rt build-publish
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_buildname=spring-cloud-deployer-main-milestone >> $GITHUB_ENV
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_buildnumber=$GITHUB_RUN_NUMBER >> $GITHUB_ENV
    # zoo tag
    - name: Tag Release
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        tag-release-branch: ${{ env.BUILD_ZOO_HANDLER_spring_cloud_deployer_version }}
        tag-release-tag: ${{ env.BUILD_ZOO_HANDLER_spring_cloud_deployer_version }}
        tag-release-tag-prefix: v

    # zoo success
    - name: Notify Build Success Zoo Handler Controller
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-token: ${{ secrets.SCDF_ACCESS_TOKEN }}
        dispatch-handler-client-payload-data: >
          {
            "event": "build-succeed"
          }

    # zoo failure
    - name: Notify Build Failure Zoo Handler Controller
      if: ${{ failure() }}
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-token: ${{ secrets.SCDF_ACCESS_TOKEN }}
        dispatch-handler-client-payload-data: >
          {
            "event": "build-failed",
            "message": "spring-cloud-deployer failed"
          }
    # clean m2 cache
    - name: Clean cache
      run: |
        find ~/.m2/repository -type d -name '*SNAPSHOT' | xargs rm -fr
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Trivy vulnerability scanner in repo mode
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          ignore-unfixed: true
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'
      - name: Upload Trivy scan results to GitHub Security tab
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'
      - name: 'Scanned'
        shell: bash
        run: echo "::info ::Scanned"
  done:
    runs-on: ubuntu-latest
    needs: [ scan, build ]
    steps:
      - name: 'Done'
        shell: bash
        run: echo "::info ::Done"


================================================
FILE: .github/workflows/next-dev-version-worker.yml
================================================
name: Next Dev Version Worker

on:
  workflow_dispatch:
    inputs:
      build-zoo-handler:
        description: 'Build Zoo Handler Payload'
        required: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:

    - uses: actions/checkout@v4
    - uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'liberica'
    - uses: jfrog/setup-jfrog-cli@v3
      env:
        JF_URL: 'https://repo.spring.io'
        JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }}

    # cache maven .m2
    - uses: actions/cache@v3
      with:
        path: ~/.m2/repository
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: |
          ${{ runner.os }}-m2-

    # target deploy repos
    - name: Configure JFrog Cli
      run: |
        jfrog rt mvnc --use-wrapper \
          --server-id-resolve=${{ vars.JF_SERVER_ID }} \
          --server-id-deploy=${{ vars.JF_SERVER_ID }} \
          --repo-resolve-releases=libs-milestone \
          --repo-resolve-snapshots=libs-snapshot \
          --repo-deploy-releases=libs-release-local \
          --repo-deploy-snapshots=libs-snapshot-local
        echo JFROG_CLI_BUILD_NAME=spring-cloud-deployer-main-ndv >> $GITHUB_ENV
        echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV

    # zoo extract and ensure
    - name: Extract Zoo Context Properties
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-extract-context-properties: true

    # build and publish to configured target
    - name: Build and Publish
      run: |
        jfrog rt mvn build-helper:parse-version versions:set \
          -DprocessAllModules=true \
          -DgenerateBackupPoms=false \
          -Dartifactory.publish.artifacts=false \
          -DnewVersion='${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}-SNAPSHOT' \
          -B
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_version=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout) >> $GITHUB_ENV
        jfrog rt build-clean
        jfrog rt mvn clean install -DskipTests -B -T 0.5C
        jfrog rt build-publish
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_buildname=spring-cloud-deployer-main-ndv >> $GITHUB_ENV
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_buildnumber=$GITHUB_RUN_NUMBER >> $GITHUB_ENV

    # zoo commit
    - name: Commit Next Dev Changes
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        commit-changes-branch: main
        commit-changes-message: Next development version

    # zoo success
    - name: Notify Build Success Zoo Handler Controller
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-token: ${{ secrets.SCDF_ACCESS_TOKEN }}
        dispatch-handler-client-payload-data: >
          {
            "event": "next-dev-version-succeed"
          }

    # zoo failure
    - name: Notify Build Failure Zoo Handler Controller
      if: ${{ failure() }}
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-token: ${{ secrets.SCDF_ACCESS_TOKEN }}
        dispatch-handler-client-payload-data: >
          {
            "event": "next-dev-version-failed",
            "message": "spring-cloud-dataflow-build next version failed"
          }

    # clean m2 cache
    - name: Clean cache
      run: |
        find ~/.m2/repository -type d -name '*SNAPSHOT' | xargs rm -fr
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Trivy vulnerability scanner in repo mode
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          ignore-unfixed: true
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'
      - name: Upload Trivy scan results to GitHub Security tab
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'
      - name: 'Scanned'
        shell: bash
        run: echo "::info ::Scanned"
  done:
    runs-on: ubuntu-latest
    needs: [ scan, build ]
    steps:
      - name: 'Done'
        shell: bash
        run: echo "::info ::Done"


================================================
FILE: .github/workflows/release-worker.yml
================================================
name: Release Worker

on:
  workflow_dispatch:
    inputs:
      build-zoo-handler:
        description: 'Build Zoo Handler Payload'
        required: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:

    - uses: actions/checkout@v4
    - uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'liberica'
    - uses: jfrog/setup-jfrog-cli@v3
      env:
        JF_URL: 'https://repo.spring.io'
        JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }}
    - uses: actions/cache@v3
      with:
        path: ~/.m2/repository
        key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
        restore-keys: |
          ${{ runner.os }}-m2-

    # target deploy repos
    - name: Configure JFrog Cli
      run: |
        jfrog rt mvnc --use-wrapper \
          --server-id-resolve=${{ vars.JF_SERVER_ID }} \
          --server-id-deploy=${{ vars.JF_SERVER_ID }} \
          --repo-resolve-releases=libs-release-staging \
          --repo-resolve-snapshots=libs-snapshot \
          --repo-deploy-releases=libs-staging-local \
          --repo-deploy-snapshots=libs-snapshot-local
        echo JFROG_CLI_BUILD_NAME=spring-cloud-deployer-main-release >> $GITHUB_ENV
        echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV

    # zoo extract and ensure
    - name: Extract Zoo Context Properties
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-extract-context-properties: true

    # build and publish to configured target
    - name: Build and Publish
      run: |
        jfrog rt mvn build-helper:parse-version versions:set \
          -gs .github/settings.xml \
          -Pstagingrelease \
          -DprocessAllModules=true \
          -DgenerateBackupPoms=false \
          -Dartifactory.publish.artifacts=false \
          -DnewVersion='${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}' \
          -B
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_version=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout) >> $GITHUB_ENV
        jfrog rt build-clean
        jfrog rt mvn clean install \
          -gs .github/settings.xml \
          -P-spring,stagingrelease \
          -DskipTests -U -B -T 0.5C
        jfrog rt build-publish
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_buildname=spring-cloud-deployer-main-release >> $GITHUB_ENV
        echo BUILD_ZOO_HANDLER_spring_cloud_deployer_buildnumber=$GITHUB_RUN_NUMBER >> $GITHUB_ENV
    # zoo tag
    - name: Tag Release
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        tag-release-branch: ${{ env.BUILD_ZOO_HANDLER_spring_cloud_deployer_version }}
        tag-release-tag: ${{ env.BUILD_ZOO_HANDLER_spring_cloud_deployer_version }}
        tag-release-tag-prefix: v

    # zoo success
    - name: Notify Build Success Zoo Handler Controller
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-token: ${{ secrets.SCDF_ACCESS_TOKEN }}
        dispatch-handler-client-payload-data: >
          {
            "event": "build-succeed"
          }

    # zoo failure
    - name: Notify Build Failure Zoo Handler Controller
      if: ${{ failure() }}
      uses: jvalkeal/build-zoo-handler@v0.0.4
      with:
        dispatch-handler-token: ${{ secrets.SCDF_ACCESS_TOKEN }}
        dispatch-handler-client-payload-data: >
          {
            "event": "build-failed",
            "message": "spring-cloud-deployer failed"
          }
    # clean m2 cache
    - name: Clean cache
      run: |
        find ~/.m2/repository -type d -name '*SNAPSHOT' | xargs rm -fr
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Trivy vulnerability scanner in repo mode
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          ignore-unfixed: true
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'
      - name: Upload Trivy scan results to GitHub Security tab
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'
      - name: 'Scanned'
        shell: bash
        run: echo "::info ::Scanned"
  done:
    runs-on: ubuntu-latest
    needs: [ scan, build ]
    steps:
      - name: 'Done'
        shell: bash
        run: echo "::info ::Done"


================================================
FILE: .gitignore
================================================
*~
.#*
*#
*.sw*
_site/
.factorypath
.gradletasknamecache
.DS_Store
.checkstyle
/application.yml
/application.properties
asciidoctor.css
atlassian-ide-plugin.xml
bin/
build/
dump.rdb
out
spring-shell.log
target/
test-output
.jfrog/

# Eclipse artifacts, including WTP generated manifests
.classpath
.project
.settings/
.springBeans
spring-*/src/main/java/META-INF/MANIFEST.MF

# IDEA artifacts and output dirs
*.iml
*.ipr
*.iws
.idea/
rebel.xml

# Visual Studio Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json


================================================
FILE: .mvn/jvm.config
================================================
-Xmx1024m -XX:CICompilerCount=1 -XX:TieredStopAtLevel=1 -Djava.security.egd=file:/dev/./urandom

================================================
FILE: .mvn/maven.config
================================================
-DaltSnapshotDeploymentRepository=repo.spring.io::default::https://repo.spring.io/libs-snapshot-local -P spring


================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.8/apache-maven-3.8.8-bin.zip


================================================
FILE: .settings.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<settings>
  <servers>
	<server>
	  <id>repo.spring.io</id>
	  <username>${env.CI_DEPLOY_USERNAME}</username>
	  <password>${env.CI_DEPLOY_PASSWORD}</password>
	</server>
  </servers>
  <profiles>
	<profile>
	  <id>spring</id>
	  <activation><activeByDefault>true</activeByDefault></activation>
	  <repositories>
		  <repository>
			  <id>maven-central</id>
			  <name>Maven Central</name>
			  <url>https://repo.maven.apache.org/maven2</url>
			  <snapshots>
				  <enabled>false</enabled>
			  </snapshots>
		  </repository>
		  <repository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/libs-snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
		  <repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	  </repositories>
	  <pluginRepositories>
		  <pluginRepository>
			  <id>maven-central</id>
			  <name>Maven Central</name>
			  <url>https://repo.maven.apache.org/maven2</url>
			  <snapshots>
				  <enabled>false</enabled>
			  </snapshots>
		  </pluginRepository>
		  <pluginRepository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/libs-snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
		  <pluginRepository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	  </pluginRepositories>
    </profile>
  </profiles>
</settings>


================================================
FILE: .trivyignore
================================================
CVE-2022-1471
CVE-2016-1000027

================================================
FILE: CONTRIBUTING.adoc
================================================
= Contributing to Spring Cloud Deployer

:github: https://github.com/spring-cloud/spring-cloud-deployer

Spring Cloud Deployer is released under the Apache 2.0 license. If you would like to contribute something, or want to hack on the code this document should help you get started.


== Using GitHub Issues
We use GitHub issues to track bugs and enhancements.
If you have a general usage question please ask on https://stackoverflow.com[Stack Overflow].
The Spring Cloud Deployer team and the broader community monitor the https://stackoverflow.com/tags/spring-cloud-deployer[`spring-cloud-deployer`] tag.

If you are reporting a bug, please help to speed up problem diagnosis by providing as much information as possible.
Ideally, that would include a small sample project that reproduces the problem.



== Reporting Security Vulnerabilities
If you think you have found a security vulnerability in Spring Cloud Deployer please *DO NOT* disclose it publicly until we've had a chance to fix it.
Please don't report security vulnerabilities using GitHub issues, instead head over to https://spring.io/security-policy and learn how to disclose them responsibly.



== Developer Certificate of Origin
All commits must include a **Signed-off-by** trailer at the end of each commit message to indicate that the contributor agrees to the Developer Certificate of Origin.
For additional details, please refer to the blog post https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring[Hello DCO, Goodbye CLA: Simplifying Contributions to Spring].


=== Code Conventions and Housekeeping

None of the following guidelines is essential for a pull request, but they all help your fellow developers understand and work with your code.
They can also be added after the original pull request but before a merge.

* Use the Spring Framework code format conventions. If you use Eclipse, you can import formatter settings by using the `eclipse-code-formatter.xml` file from the https://github.com/spring-cloud/spring-cloud-build/blob/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring Cloud Build] project.
If you use IntelliJ, you can use the https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter Plugin] to import the same file.
* Make sure all new `.java` files have a simple Javadoc class comment with at least an  `@author` tag identifying you, and preferably at least a paragraph describing the class's purpose.
* Add the ASF license header comment to all new `.java` files (to do so, copy it from existing files in the project).
* Add yourself as an `@author` to the .java files that you modify substantially (more than cosmetic changes).
* Add some Javadocs and, if you change the namespace, some XSD doc elements.
* A few unit tests would help a lot as well. Someone has to do it, and your fellow developers appreciate the effort.
* If no one else uses your branch, rebase it against the current master (or other target branch in the main project).
* When writing a commit message, follow https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[these conventions].
If you fix an existing issue, add `Fixes gh-XXXX` (where XXXX is the issue number) at the end of the commit message.


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        https://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.



================================================
FILE: NOTICE
================================================
spring-cloud-deployer

Copyright (c) 2016-Present Pivotal Software, Inc. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

  https://www.apache.org/licenses/LICENSE-2.0
 
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

================================================
FILE: README.adoc
================================================
# Spring Cloud Data Flow is no longer maintained as an open-source project by Broadcom, Inc.

## For information about extended support or enterprise options for Spring Cloud Data Flow, please read the official blog post [here](https://spring.io/blog/2025/04/21/spring-cloud-data-flow-commercial).

== Spring Cloud Deployer

[frame=none, grid=none, caption=, width="75%", cols="^2,^2"]
.Build Status by Branches
|===
| *Main* | *2.9.x*
|===

The Spring Cloud Deployer project defines a Service Provider Interface (SPI) for deploying long lived applications and short lived tasks.

== Components

The https://github.com/spring-cloud/spring-cloud-deployer/tree/master/spring-cloud-deployer-spi[SPI] project
defines the core interfaces, including https://github.com/spring-cloud/spring-cloud-deployer/blob/master/spring-cloud-deployer-spi/src/main/java/org/springframework/cloud/deployer/spi/app/AppDeployer.java[AppDeployer]
and https://github.com/spring-cloud/spring-cloud-deployer/blob/master/spring-cloud-deployer-spi/src/main/java/org/springframework/cloud/deployer/spi/task/TaskLauncher.java[TaskLauncher]
as well as the core domain model.

The https://github.com/spring-cloud/spring-cloud-deployer/tree/master/spring-cloud-deployer-spi-test[SPI Test] project provides
the basic test framework that any SPI implementation should use to verify its functionality.

The https://github.com/spring-cloud/spring-cloud-deployer/tree/master/spring-cloud-deployer-resource-maven[spring-cloud-deployer-resource-maven]
project provides support for referencing Maven artifacts via Spring's `Resource` abstraction.

The https://github.com/spring-cloud/spring-cloud-deployer/tree/master/spring-cloud-deployer-resource-docker[spring-cloud-deployer-resource-docker]
project provides support for referencing Docker artifacts via Spring's `Resource` abstraction.

The https://github.com/spring-cloud/spring-cloud-deployer/tree/master/spring-cloud-deployer-resource-support[spring-cloud-deployer-resource-support]
project provides various common support classes for working with `Resources`, such as the
https://github.com/spring-cloud/spring-cloud-deployer/blob/master/spring-cloud-deployer-resource-support/src/main/java/org/springframework/cloud/deployer/resource/registry/UriRegistry.java[UriRegistry]
for maintaining the locations of app artifacts, and the
https://github.com/spring-cloud/spring-cloud-deployer/blob/master/spring-cloud-deployer-resource-support/src/main/java/org/springframework/cloud/deployer/resource/support/DelegatingResourceLoader.java[DelegatingResourceLoader]
for working with multiple `ResourceLoader` implementations in a map with URI schemes as keys.

There is also an implementation of the SPI for running apps locally. That link is provided below along with other SPI implementations.

== Implementations

This deployer SPI has been implemented for several runtime environments. Here are the github locations:

* https://github.com/spring-cloud/spring-cloud-deployer/blob/master/spring-cloud-deployer-local[Local]
* https://github.com/spring-cloud/spring-cloud-deployer/blob/master/spring-cloud-deployer-cloudfoundry[Cloud Foundry]
* https://github.com/spring-cloud/spring-cloud-deployer/blob/master/spring-cloud-deployer-kubernetes[Kubernetes]

=== Building

Clone the repo and type 

----
$ ./mvnw clean install 
----

## Contributing

We welcome contributions! See the link:./CONTRIBUTING.adoc[CONTRIBUTING] guide for details.


================================================
FILE: SECURITY.md
================================================
# Security Policy
## Reporting a Vulnerability

If you think you have found a security vulnerability, please **DO NOT** disclose it publicly until we’ve had a chance to fix it.
Please don’t report security vulnerabilities using GitHub issues, instead head over to https://spring.io/security-policy and learn how to disclose them responsibly.


================================================
FILE: mvnw
================================================
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------

# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
#   JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
#   M2_HOME - location of maven2's installed home dir
#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
#     e.g. to debug Maven itself, use
#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------

if [ -z "$MAVEN_SKIP_RC" ] ; then

  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi

  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi

fi

# OS specific support.  $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
  CYGWIN*) cygwin=true ;;
  MINGW*) mingw=true;;
  Darwin*) darwin=true
           #
           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
           # for the new JDKs provided by Oracle.
           # 
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
           fi
           
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
             
           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
             #
             # Oracle JDKs
             #
             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi           

           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=`/usr/libexec/java_home`
           fi
           ;;
esac

if [ -z "$JAVA_HOME" ] ; then
  if [ -r /etc/gentoo-release ] ; then
    JAVA_HOME=`java-config --jre-home`
  fi
fi

if [ -z "$M2_HOME" ] ; then
  ## resolve links - $0 may be a link to maven's home
  PRG="$0"

  # need this for relative symlinks
  while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
      PRG="$link"
    else
      PRG="`dirname "$PRG"`/$link"
    fi
  done

  saveddir=`pwd`

  M2_HOME=`dirname "$PRG"`/..

  # make it fully qualified
  M2_HOME=`cd "$M2_HOME" && pwd`

  cd "$saveddir"
  # echo Using m2 at $M2_HOME
fi

# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --unix "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi

# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME="`(cd "$M2_HOME"; pwd)`"
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
  # TODO classpath?
fi

if [ -z "$JAVA_HOME" ]; then
  javaExecutable="`which javac`"
  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
    # readlink(1) is not available as standard on Solaris 10.
    readLink=`which readlink`
    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
      if $darwin ; then
        javaHome="`dirname \"$javaExecutable\"`"
        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
      else
        javaExecutable="`readlink -f \"$javaExecutable\"`"
      fi
      javaHome="`dirname \"$javaExecutable\"`"
      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
      JAVA_HOME="$javaHome"
      export JAVA_HOME
    fi
  fi
fi

if [ -z "$JAVACMD" ] ; then
  if [ -n "$JAVA_HOME"  ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
      # IBM's JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
    else
      JAVACMD="$JAVA_HOME/bin/java"
    fi
  else
    JAVACMD="`which java`"
  fi
fi

if [ ! -x "$JAVACMD" ] ; then
  echo "Error: JAVA_HOME is not defined correctly." >&2
  echo "  We cannot execute $JAVACMD" >&2
  exit 1
fi

if [ -z "$JAVA_HOME" ] ; then
  echo "Warning: JAVA_HOME environment variable is not set."
fi

CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher

# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --path --windows "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
fi

# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
  local basedir=$(pwd)
  local wdir=$(pwd)
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=$(cd "$wdir/.."; pwd)
  done
  echo "${basedir}"
}

# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "$(tr -s '\n' ' ' < "$1")"
  fi
}

export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"

# Provide a "standardized" way to retrieve the CLI args that will 
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS

WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain

exec "$JAVACMD" \
  $MAVEN_OPTS \
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${WRAPPER_LAUNCHER} "$@"



================================================
FILE: mvnw.cmd
================================================
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements.  See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership.  The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License.  You may obtain a copy of the License at
@REM
@REM    https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied.  See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------

@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM     e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------

@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%

@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")

@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre

@setlocal

set ERROR_CODE=0

@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal

@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome

echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error

:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init

echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error

@REM ==== END VALIDATION ====

:init

set MAVEN_CMD_LINE_ARGS=%*

@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.

set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir

set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir

:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir

:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"

:endDetectBaseDir

IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig

@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%

:endReadAdditionalConfig

SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"

set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain

%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
if ERRORLEVEL 1 goto error
goto end

:error
set ERROR_CODE=1

:end
@endlocal & set ERROR_CODE=%ERROR_CODE%

if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost

@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause

if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%

exit /B %ERROR_CODE%


================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<artifactId>spring-cloud-deployer-parent</artifactId>
	<version>3.0.0-SNAPSHOT</version>
	<groupId>org.springframework.cloud</groupId>
	<packaging>pom</packaging>

	<name>Spring Cloud Deployer</name>
	<description>Spring Cloud Deployer</description>
	<organization>
		<name>Pivotal Software, Inc.</name>
		<url>https://www.spring.io</url>
	</organization>
	<url>https://github.com/spring-cloud/spring-cloud-deployer</url>
	<licenses>
		<license>
			<name>Apache License, Version 2.0</name>
			<url>https://www.apache.org/licenses/LICENSE-2.0</url>
			<comments>
				Copyright 2014-2021 the original author or authors.

				Licensed under the Apache License, Version 2.0 (the "License");
				you may not use this file except in compliance with the License.
				You may obtain a copy of the License at

				https://www.apache.org/licenses/LICENSE-2.0

				Unless required by applicable law or agreed to in writing, software
				distributed under the License is distributed on an "AS IS" BASIS,
				WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
				implied.

				See the License for the specific language governing permissions and
				limitations under the License.
			</comments>
		</license>
	</licenses>
	<scm>
		<url>https://github.com/spring-cloud/spring-cloud-deployer</url>
		<connection>scm:git:git://github.com/spring-cloud/spring-cloud-deployer.git</connection>
		<developerConnection>scm:git:ssh://git@github.com/spring-cloud/spring-cloud-deployer.git</developerConnection>
		<tag>HEAD</tag>
	</scm>
	<developers>
		<developer>
			<id>scdf-team</id>
			<name>Data Flow Team</name>
			<organizationUrl>https://github.com/spring-cloud/spring-cloud-deployer/graphs/contributors</organizationUrl>
		</developer>
	</developers>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>17</java.version>

		<!-- ==================== -->
		<!-- Dependency Versions  -->
		<!-- ==================== -->
		<spring-boot.version>3.4.5</spring-boot.version>
		<commons-compress.version>1.26.2</commons-compress.version>
		<commons-io.version>2.16.1</commons-io.version>

		<!-- Kubernetes Deployer -->
		<kubernetes-fabric8-client.version>6.13.5</kubernetes-fabric8-client.version>
		<hashids.version>1.0.1</hashids.version>

		<!-- Cloudfoundry Deployer -->
		<!-- @TODO boot3 updates need for jakarta ee -->
		<cloudfoundry-java-lib.version>5.12.1.RELEASE</cloudfoundry-java-lib.version>
		<pivotal-cf-client-reactor.version>2.2.0.RELEASE</pivotal-cf-client-reactor.version>

		<!-- ==================== -->
		<!-- Plugin Versions      -->
		<!-- ==================== -->
		<!-- @TODO boot3 waiting for 4.x to support jakarta ee -->
		<maven.version>3.9.6</maven.version>
		<!-- @TODO boot3 waiting for 4.x to support jakarta ee -->
		<maven-resolver.version>1.9.18</maven-resolver.version>
		<maven-wagon.version>3.5.3</maven-wagon.version>
	</properties>

	<modules>
		<module>spring-cloud-deployer-spi</module>
		<module>spring-cloud-deployer-resource-docker</module>
		<module>spring-cloud-deployer-resource-maven</module>
		<module>spring-cloud-deployer-spi-test</module>
		<module>spring-cloud-deployer-resource-support</module>
		<module>spring-cloud-deployer-spi-test-app</module>
		<module>spring-cloud-deployer-spi-scheduler-test-app</module>
		<module>spring-cloud-deployer-autoconfigure</module>
		<module>spring-cloud-deployer-dependencies</module>
		<module>spring-cloud-deployer-local</module>
		<module>spring-cloud-deployer-kubernetes</module>
		<module>spring-cloud-deployer-cloudfoundry</module>
	</modules>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>io.fabric8</groupId>
				<artifactId>kubernetes-client-bom</artifactId>
				<version>${kubernetes-fabric8-client.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-compress</artifactId>
				<version>${commons-compress.version}</version>
			</dependency>
			<dependency>
				<groupId>commons-io</groupId>
				<artifactId>commons-io</artifactId>
				<version>${commons-io.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-dependencies</artifactId>
				<version>${spring-boot.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-deployer-dependencies</artifactId>
				<version>${project.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.apache.maven.wagon</groupId>
				<artifactId>wagon-http</artifactId>
				<version>${maven-wagon.version}</version>
			</dependency>
			<dependency>
				<groupId>org.cloudfoundry</groupId>
				<artifactId>cloudfoundry-client-reactor</artifactId>
				<version>${cloudfoundry-java-lib.version}</version>
			</dependency>
			<dependency>
				<groupId>org.cloudfoundry</groupId>
				<artifactId>cloudfoundry-operations</artifactId>
				<version>${cloudfoundry-java-lib.version}</version>
			</dependency>
			<dependency>
				<groupId>io.pivotal</groupId>
				<artifactId>pivotal-cloudfoundry-client-reactor</artifactId>
				<version>${pivotal-cf-client-reactor.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<profiles>
		<profile>
			<id>spring</id>
			<activation><activeByDefault>true</activeByDefault></activation>
			<repositories>
				<repository>
					<id>maven-central</id>
					<name>Maven Central</name>
					<url>https://repo.maven.apache.org/maven2</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</repository>
				<repository>
					<id>spring-snapshots</id>
					<name>Spring Snapshots</name>
					<url>https://repo.spring.io/libs-snapshot</url>
					<snapshots>
						<enabled>true</enabled>
					</snapshots>
				</repository>
				<repository>
					<id>spring-milestones</id>
					<name>Spring Milestones</name>
					<url>https://repo.spring.io/libs-milestone</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</repository>
			</repositories>
			<pluginRepositories>
				<pluginRepository>
					<id>maven-central</id>
					<name>Maven Central</name>
					<url>https://repo.maven.apache.org/maven2</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</pluginRepository>
				<pluginRepository>
					<id>spring-snapshots</id>
					<name>Spring Snapshots</name>
					<url>https://repo.spring.io/libs-snapshot</url>
					<snapshots>
						<enabled>true</enabled>
					</snapshots>
				</pluginRepository>
				<pluginRepository>
					<id>spring-milestones</id>
					<name>Spring Milestones</name>
					<url>https://repo.spring.io/libs-milestone</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</pluginRepository>
			</pluginRepositories>
		</profile>
		<profile>
			<id>coverage</id>
			<activation>
				<property>
					<name>env.TRAVIS</name>
					<value>true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.jacoco</groupId>
						<artifactId>jacoco-maven-plugin</artifactId>
						<version>0.7.9</version>
						<executions>
							<execution>
								<id>agent</id>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
							</execution>
							<execution>
								<id>report</id>
								<phase>test</phase>
								<goals>
									<goal>report</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-checkstyle-plugin</artifactId>
				<version>3.2.1</version>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.0</version>
				<configuration>
					<source>${java.version}</source>
					<target>${java.version}</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>3.1.2</version>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
				<version>3.4.1</version>
				<executions>
					<execution>
						<id>javadoc</id>
						<goals>
							<goal>jar</goal>
						</goals>
						<phase>package</phase>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<version>3.3.0</version>
				<executions>
					<execution>
						<id>source</id>
						<goals>
							<goal>jar</goal>
						</goals>
						<phase>package</phase>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

</project>


================================================
FILE: spring-cloud-deployer-autoconfigure/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<artifactId>spring-cloud-deployer-autoconfigure</artifactId>
	<packaging>jar</packaging>
	<name>Spring Cloud Deployer Autoconfigure</name>
	<parent>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-deployer-parent</artifactId>
		<version>3.0.0-SNAPSHOT</version>
		<relativePath>..</relativePath>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-autoconfigure</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-deployer-resource-maven</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-deployer-resource-support</artifactId>
			<optional>true</optional>
		</dependency>
	</dependencies>

	<build>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>META-INF/spring.factories</include>
					<include>META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports</include>
				</includes>
			</resource>
		</resources>
	</build>

</project>


================================================
FILE: spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/DelegatingResourceLoaderBuilder.java
================================================
/*
 * Copyright 2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.cloud.deployer.autoconfigure;

import java.util.HashMap;
import java.util.Map;

import org.springframework.cloud.deployer.resource.support.DelegatingResourceLoader;
import org.springframework.core.io.ResourceLoader;

/**
 * Builder implementation for a {@link DelegatingResourceLoader} which allows to
 * register resource loaders with schemes before actual instance of a
 * {@link DelegatingResourceLoader} is created.
 *
 * @author Janne Valkealahti
 *
 */
public class DelegatingResourceLoaderBuilder {

	private final Map<String, ResourceLoader> loaders = new HashMap<>();

	/**
	 * Register a map of resource loaders.
	 *
	 * @param loaders the resource loaders to register
	 * @return builder instance for chaining
	 */
	public DelegatingResourceLoaderBuilder loaders(Map<String, ResourceLoader> loaders) {
		this.loaders.putAll(loaders);
		return this;
	}

	/**
	 * register a loader with a scheme.
	 *
	 * @param scheme the scheme
	 * @param loader the resource loader
	 * @return builder instance for chaining
	 */
	public DelegatingResourceLoaderBuilder loader(String scheme, ResourceLoader loader) {
		this.loaders.put(scheme, loader);
		return this;
	}

	/**
	 * Builds a {@link DelegatingResourceLoader}.
	 *
	 * @return the built delegating resource loader
	 */
	public DelegatingResourceLoader build() {
		return new DelegatingResourceLoader(this.loaders);
	}
}


================================================
FILE: spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/DelegatingResourceLoaderBuilderCustomizer.java
================================================
/*
 * Copyright 2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.cloud.deployer.autoconfigure;

import org.springframework.cloud.deployer.resource.support.DelegatingResourceLoader;

/**
 * Callback interface that can be used to customize resource loaders for a
 * {@link DelegatingResourceLoader}.
 *
 * @author Janne Valkealahti
 *
 */
@FunctionalInterface
public interface DelegatingResourceLoaderBuilderCustomizer {

	/**
	 * Callback to customize a {@link DelegatingResourceLoaderBuilder} instance.
	 *
	 * @param builder the loader builder
	 */
	void customize(DelegatingResourceLoaderBuilder builder);
}


================================================
FILE: spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/MavenConfigurationProperties.java
================================================
/*
 * Copyright 2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.cloud.deployer.autoconfigure;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.deployer.resource.maven.MavenProperties;

/**
 * Configuration properties for a {@link MavenProperties}.
 *
 * @author Janne Valkealahti
 *
 */
@ConfigurationProperties(prefix = "maven")
public class MavenConfigurationProperties extends MavenProperties {
}


================================================
FILE: spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/ResourceLoadingAutoConfiguration.java
================================================
/*
 * Copyright 2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.cloud.deployer.autoconfigure;

import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.deployer.resource.maven.MavenProperties;
import org.springframework.cloud.deployer.resource.maven.MavenResourceLoader;
import org.springframework.cloud.deployer.resource.support.DelegatingResourceLoader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.ResourceLoader;

/**
 * Autoconfiguration of a file or Maven based {@link ResourceLoader}.
 *
 * @author Michael Minella
 * @author Janne Valkealahti
 */
@Configuration
public class ResourceLoadingAutoConfiguration {

	@Configuration
	@ConditionalOnClass(MavenResourceLoader.class)
	@EnableConfigurationProperties(MavenConfigurationProperties.class)
	public static class MavenResourceLoaderConfig {

		@Bean
		@Order(0)
		public DelegatingResourceLoaderBuilderCustomizer mavenDelegatingResourceLoaderBuilderCustomizer(MavenProperties mavenProperties) {
			return customizer -> customizer.loader("maven", new MavenResourceLoader(mavenProperties));
		}
	}

	@Configuration
	@ConditionalOnMissingBean(DelegatingResourceLoader.class)
	public static class DelegatingResourceLoaderConfig {

		private final ObjectProvider<DelegatingResourceLoaderBuilderCustomizer> loaderBuilderCustomizers;

		public DelegatingResourceLoaderConfig(
				ObjectProvider<DelegatingResourceLoaderBuilderCustomizer> loaderBuilderCustomizers) {
			this.loaderBuilderCustomizers = loaderBuilderCustomizers;
		}

		@Bean
		public DelegatingResourceLoader delegatingResourceLoader() {
			DelegatingResourceLoaderBuilder builder = new DelegatingResourceLoaderBuilder();
			this.loaderBuilderCustomizers.orderedStream().forEach(customizer -> customizer.customize(builder));
			return builder.build();
		}
	}
}


================================================
FILE: spring-cloud-deployer-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
================================================
org.springframework.cloud.deployer.autoconfigure.ResourceLoadingAutoConfiguration


================================================
FILE: spring-cloud-deployer-autoconfigure/src/main/resources/META-INF/spring.factories
================================================
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  org.springframework.cloud.deployer.autoconfigure.ResourceLoadingAutoConfiguration


================================================
FILE: spring-cloud-deployer-autoconfigure/src/test/java/org/springframework/cloud/deployer/autoconfigure/ResourceLoadingAutoConfigurationTests.java
================================================
/*
 * Copyright 2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.cloud.deployer.autoconfigure;

import org.assertj.core.api.Condition;
import org.junit.jupiter.api.Test;

import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.cloud.deployer.resource.maven.MavenProperties;
import org.springframework.cloud.deployer.resource.support.DelegatingResourceLoader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * Tests for {@link ResourceLoadingAutoConfiguration}.
 *
 * @author Janne Valkealahti
 *
 */
public class ResourceLoadingAutoConfigurationTests {

	private final static ResourceLoader mockResourceLoader = new ResourceLoader() {

		@Override
		public Resource getResource(String location) {
			return null;
		}

		@Override
		public ClassLoader getClassLoader() {
			return null;
		}
	};

	private final static Condition<DelegatingResourceLoader> mavenCondition = new Condition<>(
			l -> l.getLoaders().containsKey("maven"), "maven loader");

	private final static Condition<DelegatingResourceLoader> mavenReplacedCondition = new Condition<>(
			l -> l.getLoaders().get("maven").equals(mockResourceLoader), "maven loader replaced");

	private final static Condition<DelegatingResourceLoader> foobarCondition = new Condition<>(
			l -> l.getLoaders().containsKey("foobar"), "foobar mock loader");

	private final static Condition<MavenProperties> offlineCondition = new Condition<>(
			p -> p.isOffline(), "offline");

	private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
			.withConfiguration(AutoConfigurations.of(ResourceLoadingAutoConfiguration.class));


	@Test
	public void testAutoConfigNoProperties() {
		this.contextRunner
				.run((context) -> {
					assertThat(context).hasSingleBean(DelegatingResourceLoader.class);
					assertThat(context).getBean(DelegatingResourceLoader.class).has(mavenCondition);
				});
	}

	@Test
	public void testMavenProperties() {
		this.contextRunner
				.withPropertyValues("maven.offline=true")
				.run((context) ->
					assertThat(context).getBean(MavenProperties.class).has(offlineCondition));
	}

	@Test
	public void testBuilderRegistration() {
		this.contextRunner
				.withUserConfiguration(CustomBuilderCustomizerConfig.class)
				.run((context) ->
					assertThat(context).getBean(DelegatingResourceLoader.class).has(foobarCondition));
	}

	@Test
	public void testBuilderOrderRegistration() {
		this.contextRunner
				.withUserConfiguration(MavenReplacingBuilderCustomizerConfig.class)
				.run((context) ->
					assertThat(context).getBean(DelegatingResourceLoader.class).has(mavenReplacedCondition));
	}

	@Configuration
	static class CustomBuilderCustomizerConfig {

		@Bean
		public DelegatingResourceLoaderBuilderCustomizer foobarDelegatingResourceLoaderBuilderCustomizer() {
			return customizer -> customizer.loader("foobar", mockResourceLoader);
		}
	}

	@Configuration
	static class MavenReplacingBuilderCustomizerConfig {

		@Bean
		@Order(Ordered.LOWEST_PRECEDENCE)
		public DelegatingResourceLoaderBuilderCustomizer foobarDelegatingResourceLoaderBuilderCustomizer() {
			return customizer -> customizer.loader("maven", mockResourceLoader);
		}
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/README.adoc
================================================
= Spring Cloud Deployer for Cloud Foundry

This project provides a common means to deploy applications to Cloud Foundry based on the Spring Cloud Deployer SPI.

== Building

Clone the repo and type

----
$ ./mvnw clean install
----

The project includes a set of integration tests that can be run against a Cloud Foundry installation, provided that
connection information is correctly set. If credentials are not set correctly, those tests will be silently skipped.
Below is a short list of common Spring Boot `@ConfigurationProperties` (in environment variable format) that you will
need to set in order to deploy applications to Cloud Foundry:

----
# url of the CF API (used when using cf login -a for example)
SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_URL

# name of the space into which modules will be deployed
SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SPACE

# name of the organization that owns the space above
SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_ORG

# the root domain to use when mapping routes
SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_DOMAIN

# Comma separated set of service instance names to bind to the deployed app
SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SERVICES

# username and password of the user to use to create apps
SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_USERNAME
SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_PASSWORD

# the identity provider to be used when accessing the Cloud Foundry API (optional)
# the passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider.
SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_LOGIN_HINT

# whether to allow self-signed certificates during SSL validation
SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SKIP_SSL_VALIDATION
----

Refer to `CloudFoundryDeploymentProperties.java` and `CloudFoundryConnectionProperties.java` for a complete listing.

== Services, Disk and Memory Settings for Applications

The deployer also supports setting the properties `spring.cloud.deployer.cloudfoundry.services`,
`spring.cloud.deployer.cloudfoundry.memory`, and `spring.cloud.deployer.cloudfoundry.disk` as part of an individual
deployment request.

== Application Name Settings and Deployments

To help avoid clashes with routes across spaces on Cloud Foundry, a naming strategy to provide a random prefix to a
deployed application is available and is enabled by default.  There are two configuration properties,
`enableRandomAppNamePrefix` and `appNamePrefix`.  The `appNamePrefix` property defaults to `spring.application.name`
if present, otherwise defaults to an empty string.

An application can have four possible "name" combinations. For instance, the `time` application can have name
combinations as shown in the table below. The name of the deployed application is defined via deployer's high level API,
 in this case it is 'time'.

.Application Name
|===
|appNamePrefix | enableRandomAppNamePrefix | application name

|server
|true
|server-u7r9fhm-time

|<empty string>
|true
|u7r9fhm-time

|server
|false
|server-time

|<emtpy string>
|false
|time
|===

== Disable Push Task Applications

If an application does not exist when the `TaskLauncher` `launch` method is invoked, the TaskLauncher by default pushes a task application using the `AppDeploymentRequest` `resource` property.

The default behavior is disabled by setting `spring.cloud.deployer.cloudfoundry.push-task-apps-enabled` to `false`.
In this case, the application must have already been pushed to CloudFoundry via an external process and the TaskLauncher simply starts it, providing any command line arguments defined in the deployment request.

This is useful in cases in which the Cloud Foundry foundation is isolated from external code repositories.

== Set Additional Environment Variables

By default, the deployer adds global and application configuration properties to a single `SPRING_APPLICATION_JSON` environment variable entry in the application manifest.
You can configure additional top-level environment variables in the manifest by setting `spring.cloud.deployer.cloudfoundry.env.<key>=<value>`.
This is useful for adding https://github.com/cloudfoundry/java-buildpack[Java build pack configuration properties] to the application manifest since the Java build pack does not recognize `SPRING_APPLICATION_JSON`.







================================================
FILE: spring-cloud-deployer-cloudfoundry/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<artifactId>spring-cloud-deployer-cloudfoundry</artifactId>
	<version>3.0.0-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>Spring Cloud Deployer CloudFoundry</name>
	<parent>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-deployer-parent</artifactId>
		<version>3.0.0-SNAPSHOT</version>
		<relativePath>..</relativePath>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-deployer-spi</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-loader-classic</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-validation</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.cloudfoundry</groupId>
			<artifactId>cloudfoundry-client-reactor</artifactId>
			<!-- @TODO boot3 remove when updated -->
			<exclusions>
				<exclusion>
					<groupId>javax.annotation</groupId>
					<artifactId>javax.annotation-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.cloudfoundry</groupId>
			<artifactId>cloudfoundry-operations</artifactId>
		</dependency>
		<dependency>
			<groupId>io.pivotal</groupId>
			<artifactId>pivotal-cloudfoundry-client-reactor</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-compress</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.ben-manes.caffeine</groupId>
			<artifactId>caffeine</artifactId>
		</dependency>
		<dependency>
			<groupId>io.projectreactor.addons</groupId>
			<artifactId>reactor-extra</artifactId>
		</dependency>
		<dependency>
			<groupId>org.yaml</groupId>
			<artifactId>snakeyaml</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.retry</groupId>
			<artifactId>spring-retry</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-deployer-spi-test</artifactId>
			<version>${project.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-deployer-resource-docker</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-deployer-resource-support</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-deployer-autoconfigure</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<profiles>
		<profile>
			<id>spring</id>
			<activation><activeByDefault>true</activeByDefault></activation>
			<repositories>
				<repository>
					<id>spring-snapshots</id>
					<name>Spring Snapshots</name>
					<url>https://repo.spring.io/snapshot</url>
					<snapshots>
						<enabled>true</enabled>
					</snapshots>
				</repository>
				<repository>
					<id>spring-milestones</id>
					<name>Spring Milestones</name>
					<url>https://repo.spring.io/milestone</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</repository>
				<repository>
					<id>maven-central</id>
					<name>Maven Central</name>
					<url>https://repo.maven.apache.org/maven2</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</repository>
			</repositories>
			<pluginRepositories>
				<pluginRepository>
					<id>spring-snapshots</id>
					<name>Spring Snapshots</name>
					<url>https://repo.spring.io/snapshot</url>
					<snapshots>
						<enabled>true</enabled>
					</snapshots>
				</pluginRepository>
				<pluginRepository>
					<id>spring-milestones</id>
					<name>Spring Milestones</name>
					<url>https://repo.spring.io/milestone</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</pluginRepository>
				<pluginRepository>
					<id>maven-central</id>
					<name>Maven Central</name>
					<url>https://repo.maven.apache.org/maven2</url>
					<snapshots>
						<enabled>false</enabled>
					</snapshots>
				</pluginRepository>
			</pluginRepositories>
		</profile>
	</profiles>

</project>


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/AbstractCloudFoundryDeployer.java
================================================
/*
 * Copyright 2016-2020 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeoutException;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.cloudfoundry.AbstractCloudFoundryException;
import org.cloudfoundry.UnknownCloudFoundryException;
import org.cloudfoundry.operations.services.BindServiceInstanceRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.Exceptions;
import reactor.core.publisher.Mono;
import reactor.retry.Retry;

import org.springframework.cloud.deployer.spi.app.AppDeployer;
import org.springframework.cloud.deployer.spi.app.AppScaleRequest;
import org.springframework.cloud.deployer.spi.core.AppDeploymentRequest;
import org.springframework.cloud.deployer.spi.core.RuntimeEnvironmentInfo;
import org.springframework.cloud.deployer.spi.util.ByteSizeUtils;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.util.FileSystemUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

/**
 * Base class dealing with configuration overrides on a per-deployment basis, as well as common code for apps and tasks.
 *
 * @author Eric Bottard
 * @author Ilayaperumal Gopinathan
 * @author David Turanski
 */
class AbstractCloudFoundryDeployer {

	protected static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

	protected final RuntimeEnvironmentInfo runtimeEnvironmentInfo;

	final CloudFoundryDeploymentProperties deploymentProperties;

	private final Logger logger = LoggerFactory.getLogger(AbstractCloudFoundryDeployer.class);


	AbstractCloudFoundryDeployer(CloudFoundryDeploymentProperties deploymentProperties, RuntimeEnvironmentInfo runtimeEnvironmentInfo) {
		this.deploymentProperties = deploymentProperties;
		this.runtimeEnvironmentInfo = runtimeEnvironmentInfo;
	}

	int memory(AppDeploymentRequest request) {
		String withUnit = request.getDeploymentProperties()
			.getOrDefault(AppDeployer.MEMORY_PROPERTY_KEY, this.deploymentProperties.getMemory());
		return (int) ByteSizeUtils.parseToMebibytes(withUnit);
	}

	int memory(AppScaleRequest request) {
		if (request.getProperties().isPresent() && request.getProperties().get() != null) {
			return (int) ByteSizeUtils.parseToMebibytes(request.getProperties().get().getOrDefault(AppDeployer.MEMORY_PROPERTY_KEY,
					this.deploymentProperties.getMemory()));
		}
		return (int) ByteSizeUtils.parseToMebibytes(this.deploymentProperties.getMemory());
	}

	int diskQuota(AppScaleRequest request) {
		if (request.getProperties().isPresent() && request.getProperties().get() != null) {
			return (int) ByteSizeUtils.parseToMebibytes(request.getProperties().get().getOrDefault(AppDeployer.DISK_PROPERTY_KEY,
					this.deploymentProperties.getDisk()));
		}
		return (int) ByteSizeUtils.parseToMebibytes(this.deploymentProperties.getDisk());
	}

	Set<String> servicesToBind(AppDeploymentRequest request) {

		Set<String> services = this.deploymentProperties.getServices().stream().filter(s->!ServiceParser
			.getServiceParameters(s).isPresent())
			.collect(Collectors.toSet());

		Set<String> requestServices = ServiceParser.splitServiceProperties(request.getDeploymentProperties().get
			(CloudFoundryDeploymentProperties.SERVICES_PROPERTY_KEY))
			.stream()
			.filter(s-> !ServiceParser.getServiceParameters(s).isPresent())
			.collect(Collectors.toSet());

		services.addAll(requestServices);
		return services;
	}

	boolean includesServiceParameters(AppDeploymentRequest request) {
		return this.deploymentProperties.getServices().stream()
				.anyMatch(s -> ServiceParser.getServiceParameters(s).isPresent())
				|| ServiceParser
						.splitServiceProperties(request.getDeploymentProperties()
								.get(CloudFoundryDeploymentProperties.SERVICES_PROPERTY_KEY))
						.stream().anyMatch(s -> ServiceParser.getServiceParameters(s).isPresent());
	}

	Stream<BindServiceInstanceRequest> bindParameterizedServiceInstanceRequests(AppDeploymentRequest request,
		String deploymentId) {
		return ServiceParser.splitServiceProperties(request.getDeploymentProperties().get
			(CloudFoundryDeploymentProperties.SERVICES_PROPERTY_KEY)).stream()
			.filter(s-> ServiceParser.getServiceParameters(s).isPresent())
			.map(s->
				BindServiceInstanceRequest.builder()
					.applicationName(deploymentId)
					.serviceInstanceName(ServiceParser.getServiceInstanceName(s))
					.parameters(ServiceParser.getServiceParameters(s).get())
					.build()
			);
	}

	int diskQuota(AppDeploymentRequest request) {
		String withUnit = request.getDeploymentProperties()
			.getOrDefault(AppDeployer.DISK_PROPERTY_KEY, this.deploymentProperties.getDisk());
		return (int) ByteSizeUtils.parseToMebibytes(withUnit);
	}

	Set<String> buildpacks(AppDeploymentRequest request) {
		// TODO: When 'buildpack' setting gets removed due to deprecation,
		//       change this logic not ot fallback to it if 'buildpacks'
		//       is used.
		String buidpacksValue = request.getDeploymentProperties()
				.get(CloudFoundryDeploymentProperties.BUILDPACKS_PROPERTY_KEY);
		String buidpackValue = request.getDeploymentProperties()
				.get(CloudFoundryDeploymentProperties.BUILDPACK_PROPERTY_KEY);
		if (buidpacksValue != null) {
			return StringUtils.commaDelimitedListToSet(buidpacksValue);
		}
		else if (buidpackValue != null) {
			return new HashSet<>(Arrays.asList(buidpackValue));
		}
		else if (!ObjectUtils.isEmpty((this.deploymentProperties.getBuildpacks()))) {
			return this.deploymentProperties.getBuildpacks();
		}
		else {
			return new HashSet<>(Arrays.asList(this.deploymentProperties.getBuildpack()));
		}
	}

	String javaOpts(AppDeploymentRequest request) {
		return Optional
				.ofNullable(
						request.getDeploymentProperties().get(CloudFoundryDeploymentProperties.JAVA_OPTS_PROPERTY_KEY))
				.orElse(this.deploymentProperties.getJavaOpts());
	}

	Predicate<Throwable> isNotFoundError() {
		return t -> t instanceof AbstractCloudFoundryException && ((AbstractCloudFoundryException) t).getStatusCode() == HttpStatus.NOT_FOUND.value();
	}

	/**
	 * Return a Docker image identifier if the application Resource is for a Docker image, or {@literal null} otherwise.
	 *
	 * @see #getApplication(AppDeploymentRequest)
	 */
	String getDockerImage(AppDeploymentRequest request) {
		try {
			String uri = request.getResource().getURI().toString();
			if (uri.startsWith("docker:")) {
				return uri.substring("docker:".length());
			} else {
				return null;
			}
		} catch (IOException e) {
			throw Exceptions.propagate(e);
		}
	}

	/**
	 * Return a Path to the application Resource or {@literal null} if the request is for a Docker image.
	 *
	 * @see #getDockerImage(AppDeploymentRequest)
	 */
	Path getApplication(AppDeploymentRequest request) {
		try {
			logger.info(
				"Preparing to push an application from {}" +
					". This may take some time if the artifact must be downloaded from a remote host.",
				request.getResource());
			if (!request.getResource().getURI().toString().startsWith("docker:")) {
				return request.getResource().getFile().toPath();
			} else {
				return null;
			}
		} catch (IOException e) {
			throw Exceptions.propagate(e);
		}
	}

	/**
	 * Return a function usable in {@literal doOnError} constructs that will unwrap unrecognized Cloud Foundry Exceptions
	 * and log the text payload.
	 */
	protected Consumer<Throwable> logError(String msg) {
		return e -> {
			if (e instanceof UnknownCloudFoundryException) {
				logger.error(msg + "\nUnknownCloudFoundryException encountered, whose payload follows:\n" + ((UnknownCloudFoundryException)e).getPayload(), e);
			} else {
				logger.error(msg, e);
			}
		};
	}

	/**
	 * To be used in order to retry the status operation for an application or task.
	 * @param id The application id or the task id
	 * @param <T> The type of status object being queried for, usually AppStatus or TaskStatus
	 * @return The function that executes the retry logic around for determining App or Task Status
	 */
	<T> Function<Mono<T>, Mono<T>> statusRetry(String id) {
		long statusTimeout = this.deploymentProperties.getStatusTimeout();
		long requestTimeout = Math.round(statusTimeout * 0.40); // wait 500ms with default status timeout of 2000ms
		long initialRetryDelay = Math.round(statusTimeout * 0.10); // wait 200ms with status timeout of 2000ms

		if (requestTimeout < 500L) {
			logger.info("Computed statusRetry Request timeout = {} ms is below 500ms minimum value.  Setting to 500ms", requestTimeout);
			requestTimeout = 500L;
		}
		final long requestTimeoutToUse = requestTimeout;
		return m -> m.timeout(Duration.ofMillis(requestTimeoutToUse))
			.doOnError(e -> {
				// show real exception if it wasn't timeout
				if (e instanceof TimeoutException) {
					logger.warn("Error getting status for {} within {}ms, Retrying operation.", id, requestTimeoutToUse);
				}
				else if (e instanceof UnknownCloudFoundryException) {
					logger.warn("Received UnknownCloudFoundryException from cf with payload={}",
							((UnknownCloudFoundryException) e).getPayload());
				}
				else {
					logger.warn("Received error from cf", e);
				}
			})
			// let all other than timeout exception to propagate back to caller
			.retryWhen(reactor.util.retry.Retry.withThrowable(Retry.onlyIf(c -> {
					logger.debug("RetryContext for id {} iteration {} backoff {}", id,  c.iteration(), c.backoff());
					if (c.iteration() > 5) {
						logger.info("Stopping retry for id {} after {} iterations", id, c.iteration());
						return false;
					}
					if (c.exception().getClass().getName().contains("org.cloudfoundry.client")) {
						// most likely real error which is not worth to retry
						return false;
					}
					// might be some netty error for not connected client, etc, retry
					return true;
				})
				.exponentialBackoff(Duration.ofMillis(initialRetryDelay), Duration.ofMillis(statusTimeout))
				.doOnRetry(c -> logger.debug("Retrying cf call for {}", id))))
			.doOnError(TimeoutException.class, e -> {
				logger.error("Retry operation on getStatus failed for {}. Max retry time {}ms", id, statusTimeout);
			});
	}

	/**
	 * Always delete downloaded files for static http resources. Conditionally delete maven resources.
	 * @param appDeploymentRequest
	 */
	protected void deleteLocalApplicationResourceFile(AppDeploymentRequest appDeploymentRequest) {

		try {

			Optional<File> fileToDelete = fileToDelete(appDeploymentRequest.getResource());
			if (fileToDelete.isPresent()) {
				File applicationFile = fileToDelete.get();

				logger.info("Free Disk Space = {} bytes, Total Disk Space = {} bytes",
						applicationFile.getFreeSpace(),
						applicationFile.getTotalSpace());


				boolean deleted = deleteFileOrDirectory(applicationFile);
				logger.info((deleted) ? "Successfully deleted the application resource: " + applicationFile.getCanonicalPath() :
						"Could not delete the application resource: " + applicationFile.getCanonicalPath());
			}

		} catch(IOException e){
			logger.warn("Exception deleting the application resource after successful CF push request."
					+ " This could cause increase in disk space usage. Exception message: " + e.getMessage());
		}
	}

	/*
	 * Always delete files downloaded from http/s url.
	 * Delete maven resources if property is set.
	 */
	private Optional<File> fileToDelete(Resource resource) throws IOException {
		String scheme = resource.getURI().getScheme().toLowerCase(Locale.ROOT);
		if (scheme.startsWith("http")) {
			return Optional.of(resource.getFile());
		}
		if (scheme.equals("maven") && deploymentProperties.isAutoDeleteMavenArtifacts()) {
			return Optional.of(resource.getFile().getParentFile());
		}
		return Optional.empty();
	}

	private boolean deleteFileOrDirectory(File fileToDelete) {
		boolean deleted;
		if (fileToDelete.isDirectory())
			deleted  = FileSystemUtils.deleteRecursively(fileToDelete);
		else {
			deleted = fileToDelete.delete();
		}
		return deleted;
	}

	/*
	 * Merge environment variables from global DeploymentProperties, application properties, and
	 * environment variables declared in ApplicationDeploymentRequest
	 */
	protected Map<String, String> mergeEnvironmentVariables(String deploymentId, AppDeploymentRequest request) {
		Map<String, String> envVariables = new HashMap<>(deploymentProperties.getEnv());
		envVariables.putAll(getApplicationProperties(deploymentId, request));
		envVariables.putAll(getDeclaredEnvironmentVariables(request));
		String javaOpts = javaOpts(request);
		if (StringUtils.hasText(javaOpts)) {
			envVariables.put("JAVA_OPTS", javaOpts(request));
		}

		if (hasCfEnv(request.getResource())) {
			Map<String, String> env =
					CfEnvConfigurer.disableJavaBuildPackAutoReconfiguration(envVariables);
			//Only append to existing spring profiles active
			env.putAll(CfEnvConfigurer.activateCloudProfile(env, null));
			envVariables.putAll(env);
		}
		return envVariables;
	}

	private Map<? extends String,? extends String> getDeclaredEnvironmentVariables(AppDeploymentRequest request) {
		Map<String, String> env = new LinkedHashMap<>();
		request.getDeploymentProperties().entrySet().stream()
				.filter(e -> e.getKey().startsWith(CloudFoundryDeploymentProperties.ENV_KEY + "."))
				.forEach(e -> env.put(e.getKey().substring(CloudFoundryDeploymentProperties.ENV_KEY.length() + 1),
						e.getValue()));
		return env;
	}

	protected boolean hasCfEnv(Resource resource) {
		if (resource instanceof CfEnvAwareResource) {
			return ((CfEnvAwareResource)resource).hasCfEnv();
		}
		return CfEnvAwareResource.of(resource).hasCfEnv();
	}

	private Map<String, String> getApplicationProperties(String deploymentId, AppDeploymentRequest request) {
		Map<String, String> applicationProperties = getSanitizedApplicationProperties(deploymentId, request);

		if (!useSpringApplicationJson(request)) {
			return applicationProperties;
		}

		try {
			return Collections.singletonMap("SPRING_APPLICATION_JSON", OBJECT_MAPPER.writeValueAsString(applicationProperties));
		} catch (JsonProcessingException e) {
			throw new RuntimeException(e);
		}
	}

	private Map<String, String> getSanitizedApplicationProperties(String deploymentId, AppDeploymentRequest request) {
		Map<String, String> applicationProperties = new HashMap<>(request.getDefinition().getProperties());

		// Remove server.port as CF assigns a port for us, and we don't want to override that
		Optional.ofNullable(applicationProperties.remove("server.port"))
				.ifPresent(port -> logger.warn("Ignoring 'server.port={}' for app {}, as Cloud Foundry will assign a local dynamic port. Route to the app will use port 80.", port, deploymentId));

		// Update active Spring Profiles given in application properties. Create a new entry with the given key if necessary
		if (hasCfEnv(request.getResource())) {
			applicationProperties = CfEnvConfigurer
					.activateCloudProfile(applicationProperties, CfEnvConfigurer.SPRING_PROFILES_ACTIVE_FQN);
		}
		return applicationProperties;
	}

	private boolean useSpringApplicationJson(AppDeploymentRequest request) {
		return Optional
				.ofNullable(request.getDeploymentProperties()
						.get(CloudFoundryDeploymentProperties.USE_SPRING_APPLICATION_JSON_KEY))
				.map(Boolean::valueOf).orElse(this.deploymentProperties.isUseSpringApplicationJson());
	}



	public RuntimeEnvironmentInfo environmentInfo() {
		return runtimeEnvironmentInfo;
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/AbstractCloudFoundryTaskLauncher.java
================================================
/*
 * Copyright 2016-2023 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.time.Duration;
import java.util.HashMap;
import java.util.Map;

import io.jsonwebtoken.lang.Assert;
import org.cloudfoundry.client.CloudFoundryClient;
import org.cloudfoundry.client.v2.organizations.ListOrganizationsRequest;
import org.cloudfoundry.client.v2.spaces.ListSpacesRequest;
import org.cloudfoundry.client.v3.tasks.CancelTaskRequest;
import org.cloudfoundry.client.v3.tasks.CancelTaskResponse;
import org.cloudfoundry.client.v3.tasks.GetTaskRequest;
import org.cloudfoundry.client.v3.tasks.GetTaskResponse;
import org.cloudfoundry.client.v3.tasks.ListTasksRequest;
import org.cloudfoundry.client.v3.tasks.TaskState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
import reactor.util.function.Tuple2;

import org.springframework.cloud.deployer.spi.core.AppDeploymentRequest;
import org.springframework.cloud.deployer.spi.core.RuntimeEnvironmentInfo;
import org.springframework.cloud.deployer.spi.task.LaunchState;
import org.springframework.cloud.deployer.spi.task.TaskLauncher;
import org.springframework.cloud.deployer.spi.task.TaskStatus;

/**
 * Abstract class to provide base functionality for launching Tasks on Cloud Foundry. This
 * class provides the base SPI for the {@link CloudFoundryTaskLauncher}.
 *
 * Does not override the default no-op implementation for
 * {@link TaskLauncher#cleanup(String)} and {@link TaskLauncher#destroy(String)}.
 */
abstract class AbstractCloudFoundryTaskLauncher extends AbstractCloudFoundryDeployer implements TaskLauncher {

	private static final Logger logger = LoggerFactory.getLogger(AbstractCloudFoundryTaskLauncher.class);

	private final CloudFoundryClient client;

	private final Mono<String> organizationId;

	private final Mono<String> spaceId;

	AbstractCloudFoundryTaskLauncher(CloudFoundryClient client,
			CloudFoundryDeploymentProperties deploymentProperties,
			RuntimeEnvironmentInfo runtimeEnvironmentInfo) {
		super(deploymentProperties, runtimeEnvironmentInfo);
		this.client = client;
		organizationId = organizationId();
		spaceId = spaceId();
	}

	/**
	 * Setup a reactor flow to cancel a running task. This implementation opts to be
	 * asynchronous.
	 *
	 * @param id the task's id to be canceled as returned from the
	 *     {@link TaskLauncher#launch(AppDeploymentRequest)}
	 */
	@Override
	public void cancel(String id) {
		requestCancelTask(id)
				.timeout(Duration.ofSeconds(this.deploymentProperties.getApiTimeout()))
				.doOnSuccess(r -> logger.info("Task {} cancellation successful", id))
				.doOnError(logError(String.format("Task %s cancellation failed", id)))
				.subscribe();
	}

	/**
	 * Lookup the current status based on task id.
	 *
	 * @param id taskId as returned from the {@link TaskLauncher#launch(AppDeploymentRequest)}
	 * @return the current task status
	 */
	@Override
	public TaskStatus status(String id) {
		try {
			return getStatus(id)
					.doOnSuccess(v -> logger.info("Successfully computed status [{}] for id={}", v, id))
					.doOnError(logError(String.format("Failed to compute status for %s", id)))
					.block(Duration.ofMillis(this.deploymentProperties.getStatusTimeout()));
		}
		catch (Exception timeoutDueToBlock) {
			logger.error("Caught exception while querying for status of id={}", id, timeoutDueToBlock);
			return createErrorTaskStatus(id);
		}
	}

	@Override
	public int getRunningTaskExecutionCount() {

		Mono<Tuple2<String,String>> orgAndSpace = Mono.zip(organizationId, spaceId);

		Mono<ListTasksRequest> listTasksRequest = orgAndSpace.map(tuple->
				ListTasksRequest.builder()
				.state(TaskState.RUNNING)
				.organizationId(tuple.getT1())
				.spaceId(tuple.getT2())
				.build());

		return listTasksRequest.flatMap(request-> this.client.tasks().list(request))
				.map(listTasksResponse -> listTasksResponse.getPagination().getTotalResults())
				.doOnError(logError("Failed to list running tasks"))
				.doOnSuccess(count -> logger.info(String.format("There are %d running tasks", count)))
				.block(Duration.ofMillis(this.deploymentProperties.getStatusTimeout()));
	}

	@Override
	public int getMaximumConcurrentTasks() {
		return this.deploymentProperties.getMaximumConcurrentTasks();
	}

	protected boolean maxConcurrentExecutionsReached() {
		return this.getRunningTaskExecutionCount() >= this.getMaximumConcurrentTasks();
	}

	private Mono<TaskStatus> getStatus(String id) {
		return requestGetTask(id)
				.map(this::toTaskStatus)
				.onErrorResume(isNotFoundError(), t -> {
					logger.debug("Task for id={} does not exist", id);
					return Mono.just(new TaskStatus(id, LaunchState.unknown, null));
				})
				.transform(statusRetry(id))
				.onErrorReturn(createErrorTaskStatus(id));
	}

	private TaskStatus createErrorTaskStatus(String id) {
		return new TaskStatus(id, LaunchState.error, null);
	}

	protected TaskStatus toTaskStatus(GetTaskResponse response) {
		Map<String, String> attributes = new HashMap<>();
		//retrieve CF-GUID for retrieving logs
		Assert.notNull(response.getTaskRelationships(), "response must contain task relationships.");
		Assert.notNull(response.getTaskRelationships().getApp(), "app in the taskRelationships of the response must not be null");
		Assert.notNull(response.getTaskRelationships().getApp().getData(), "data in the app of the task relationships within the response must not be null");
		attributes.put("app-cf-guid", response.getTaskRelationships().getApp().getData().getId());
		switch (response.getState()) {
		case SUCCEEDED:
			return new TaskStatus(response.getId(), LaunchState.complete, attributes);
		case RUNNING:
			return new TaskStatus(response.getId(), LaunchState.running, attributes);
		case PENDING:
			return new TaskStatus(response.getId(), LaunchState.launching, attributes);
		case CANCELING:
			return new TaskStatus(response.getId(), LaunchState.cancelled, attributes);
		case FAILED:
			return new TaskStatus(response.getId(), LaunchState.failed, attributes);
		default:
			throw new IllegalStateException(String.format("Unsupported CF task state %s", response.getState()));
		}
	}

	private Mono<CancelTaskResponse> requestCancelTask(String taskId) {
		return this.client.tasks()
				.cancel(CancelTaskRequest.builder()
						.taskId(taskId)
						.build());
	}

	private Mono<GetTaskResponse> requestGetTask(String taskId) {
		return this.client.tasks()
				.get(GetTaskRequest.builder()
						.taskId(taskId)
						.build());
	}

	private Mono<String> organizationId() {
		String org = this.runtimeEnvironmentInfo.getPlatformSpecificInfo().get(CloudFoundryPlatformSpecificInfo.ORG);
		Assert.hasText(org,"Missing runtimeEnvironmentInfo : 'org' required.");
		ListOrganizationsRequest listOrganizationsRequest =  ListOrganizationsRequest.builder()
				.name(org).build();
		return this.client.organizations().list(listOrganizationsRequest)
				.doOnError(logError("Failed to list organizations"))
				.map(listOrganizationsResponse -> listOrganizationsResponse.getResources().get(0).getMetadata().getId())
				.cache(aValue -> Duration.ofMillis(Long.MAX_VALUE), aValue -> Duration.ZERO, () -> Duration.ZERO);
	}

	private Mono<String> spaceId() {
		String space = this.runtimeEnvironmentInfo.getPlatformSpecificInfo().get(CloudFoundryPlatformSpecificInfo.SPACE);
		Assert.hasText(space,"Missing runtimeEnvironmentInfo : 'space' required.");
		ListSpacesRequest listSpacesRequest = ListSpacesRequest.builder()
				.name(space).build();
		return this.client.spaces().list(listSpacesRequest)
				.doOnError(logError("Failed to list spaces"))
				.map(listSpacesResponse -> listSpacesResponse.getResources().get(0).getMetadata().getId())
				.cache(aValue -> Duration.ofMillis(Long.MAX_VALUE), aValue -> Duration.ZERO, () -> Duration.ZERO);
	}

	@Override
	public void cleanup(String id) {

	}

	@Override
	public void destroy(String appName) {

	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/AppNameGenerator.java
================================================
/*
 * Copyright 2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

/**
 * Strategy interface for generating the names of deployed applications. *
 *
 * @author Soby Chacko
 */
public interface AppNameGenerator {

	/**
	 * Generate an application name given a base name as the starting point.
	 *
	 * @param appName base application name
	 * @return the generated app name
	 */
	String generateAppName(String appName);

}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/ApplicationLogAccessor.java
================================================
/*
 * Copyright 2023 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;


import org.cloudfoundry.logcache.v1.Envelope;
import org.cloudfoundry.logcache.v1.Log;
import org.cloudfoundry.logcache.v1.LogCacheClient;
import org.cloudfoundry.logcache.v1.ReadRequest;
import org.cloudfoundry.logcache.v1.ReadResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;
import reactor.core.publisher.Flux;

import java.time.Duration;
import java.util.List;

/**
 * Provide api access to retrieve logs for applications.
 *
 * @author Glenn Renfro
 * @author Chris Bono
 *
 * @since 2.9.3
 */
public class ApplicationLogAccessor {

    private final static int MAX_LOG_LIMIT = 1000;

    private final static Logger logger = LoggerFactory.getLogger(ApplicationLogAccessor.class);
    private final LogCacheClient logCacheClient;

    public ApplicationLogAccessor(LogCacheClient logCacheClient) {
        Assert.notNull(logCacheClient, "logCacheClient must not be null");
        this.logCacheClient = logCacheClient;
    }

    /**
     * Retrieve logs for specified deployment id.
     * @param deploymentId the deployment id of the application.
     * @param apiTimeout specify duration of the timeout for the api.
     * @return String containing the log information or empty string if no entries are available.
     */
    public String getLog(String deploymentId, Duration apiTimeout) {
        logger.debug("Retrieving log for deploymentId:{} with apiTimeout:{}", deploymentId, apiTimeout);
        Assert.hasText(deploymentId, "id must have text and not null");
        Assert.notNull(apiTimeout, "apiTimeout must not be null");
        StringBuilder stringBuilder = new StringBuilder();
        ReadRequest request = ReadRequest.builder().sourceId(deploymentId).limit(MAX_LOG_LIMIT).descending(true).build();
        List<Log> logs = this.logCacheClient
                .read(request)
                .flatMapMany(this::responseToEnvelope)
                .collectList()
                .block(apiTimeout);
        // if no log exists the result set is null.
        if(logs == null) {
            return "";
        }
        logs.forEach((log) -> {
            stringBuilder.append(log.getPayloadAsText());
            stringBuilder.append(System.lineSeparator());
        });
        String [] lines = stringBuilder.toString().split("\n");
        StringBuilder stringBuilderReconstruct = new StringBuilder();
        for(int i = lines.length -1  ; i >= 0  ; i--) {
            stringBuilderReconstruct.append(lines[i]);
            if ( i > 0 ) {
                stringBuilderReconstruct.append("\n");
            }
        }
        return stringBuilderReconstruct.toString();
    }

    private Flux<Log> responseToEnvelope(ReadResponse response) {
        return Flux.fromIterable(response.getEnvelopes().getBatch())
                .filter(envelope -> envelope.getLog() != null)
                .map(Envelope::getLog);
    }
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvAwareAppDeploymentRequest.java
================================================
/*
 * Copyright 2020-2021 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import org.springframework.cloud.deployer.spi.core.AppDeploymentRequest;

/**
 * Copies an {@link AppDeploymentRequest} using a {@link CfEnvAwareResource}.
 *
 * @author David Turanski
 * @since 2.4
 */
class CfEnvAwareAppDeploymentRequest extends AppDeploymentRequest {

	static CfEnvAwareAppDeploymentRequest of(AppDeploymentRequest appDeploymentRequest) {
		return new CfEnvAwareAppDeploymentRequest(appDeploymentRequest);
	}

	private CfEnvAwareAppDeploymentRequest(AppDeploymentRequest appDeploymentRequest) {
		super(appDeploymentRequest.getDefinition(),
				CfEnvAwareResource.of(appDeploymentRequest.getResource()),
				appDeploymentRequest.getDeploymentProperties(),
				appDeploymentRequest.getCommandlineArguments());
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvAwareResource.java
================================================
/*
 * Copyright 2020-2024 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Optional;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.boot.loader.archive.JarFileArchive;
import org.springframework.core.io.Resource;

/**
 * A {@link Resource} implementation that delegates to a resource and keeps the state of a CfEnv dependency
 * as an {@link Optional} which may be empty, true, or false.
 *
 * @author David Turanski
 * @since 2.4
 */
class CfEnvAwareResource implements Resource {
	private final Resource resource;

	private final boolean hasCfEnv;

	static CfEnvAwareResource of(Resource resource) {
		return new CfEnvAwareResource(resource);
	}
	private CfEnvAwareResource(Resource resource) {
		this.resource = resource;
		this.hasCfEnv = CfEnvResolver.hasCfEnv(this);
	}

	@Override
	public boolean exists() {
		return resource.exists();
	}

	@Override
	public URL getURL() throws IOException {
		return resource.getURL();
	}

	@Override
	public URI getURI() throws IOException {
		return resource.getURI();
	}

	@Override
	public File getFile() throws IOException {
		return resource.getFile();
	}

	@Override
	public long contentLength() throws IOException {
		return resource.contentLength();
	}

	@Override
	public long lastModified() throws IOException {
		return resource.lastModified();
	}

	@Override
	public Resource createRelative(String s) throws IOException {
		return resource.createRelative(s);
	}

	@Override
	public String getFilename() {
		return resource.getFilename();
	}

	@Override
	public String getDescription() {
		return resource.getDescription();
	}

	@Override
	public InputStream getInputStream() throws IOException {
		return resource.getInputStream();
	}

	boolean hasCfEnv() {
		return this.hasCfEnv;
	}

	/**
	 * Inspect the {@link CfEnvAwareResource} to determine if it contains a dependency on <i>io.pivotal.cfenv.core.CfEnv</i>.
	 * Cache the result in the resource.
	 */
	static class CfEnvResolver {

		private static Log logger = LogFactory.getLog(CfEnvResolver.class);

		private static final String CF_ENV = "io.pivotal.cfenv.core.CfEnv";

		static boolean hasCfEnv(CfEnvAwareResource app
		) {
			try {
				String scheme = app.getURI().getScheme().toLowerCase(Locale.ROOT);
				if (scheme.equals("docker")) {
					return false;
				}
			}
			catch (IOException e) {
				throw new IllegalArgumentException(e.getMessage(), e);
			}

			try {
				JarFileArchive archive = new JarFileArchive(app.getFile());
				List<URL> urls = new ArrayList<>();
				archive.getNestedArchives(entry -> entry.getName().endsWith(".jar"), null).forEachRemaining(a -> {
					try {
						urls.add(a.getUrl());
					}
					catch (MalformedURLException e) {
						logger.error("Unable to process nested archive " +  e.getMessage());
					}
				});
				URLClassLoader classLoader = new URLClassLoader(urls.toArray(new URL[urls.size()]), null);
				try {
					logger.info("Attempting to load class CFEnv");
					Class.forName(CF_ENV, false, classLoader);
					return true;
				}
				catch (UnsupportedClassVersionError err) {
					logger.debug(app.getFilename() + " contains " + CF_ENV);
					// class found but can't load it i.e. because it's newer class version
					return true;
				}
				catch (ClassNotFoundException e) {
					logger.debug(app.getFilename() + " doesn't contain " + CF_ENV);
					return false;
				}
			}
			catch (Exception e) {
				logger.warn("Unable to determine dependencies for file " + app.getFilename());
			}
			return false;
		}
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvConfigurer.java
================================================
/*
 * Copyright 2020-2021 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.util.StringUtils;

/**
 * Provides methods to configure environment, application properties, and command line
 * args if the deployed artifact uses java-cfenv.
 *
 * @author David Turanski
 * @since 2.4
 */
class CfEnvConfigurer {

	private static final Log log = LogFactory.getLog(CfEnvConfigurer.class);

	static final String SPRING_PROFILES_ACTIVE = "SPRING_PROFILES_ACTIVE";

	static final String SPRING_PROFILES_ACTIVE_FQN = "spring.profiles.active";

	static final String SPRING_PROFILES_ACTIVE_HYPHENATED = "spring-profiles-active";

	static final String CLOUD_PROFILE_NAME = "cloud";

	static final String JBP_CONFIG_SPRING_AUTO_RECONFIGURATION = "JBP_CONFIG_SPRING_AUTO_RECONFIGURATION";

	static final String ENABLED_FALSE = "{ enabled: false }";

	/**
	 * Disable Java Buildpack Spring Auto-reconfiguration.
	 *
	 * @param environment a map containing environment variables
	 * @return an copy of the map setting the environment variable needed to disable
	 * auto-reconfiguration
	 */
	static Map<String, String> disableJavaBuildPackAutoReconfiguration(Map<String, String> environment) {
		log.debug("Disabling 'JBP_CONFIG_SPRING_AUTO_RECONFIGURATION'");
		Map<String, String> updatedEnvironment = new HashMap<>(environment);
		updatedEnvironment.putIfAbsent(JBP_CONFIG_SPRING_AUTO_RECONFIGURATION, ENABLED_FALSE);
		return updatedEnvironment;
	}

	/**
	 * Activate the <i>cloud</i> profile. Add to a key that binds to
	 * <i>spring.profiles.active</i> if one exists.
	 * @param environment a map containing environment variables or application properties
	 * @param keyToCreate create a new entry using a preferred key if none exists.
	 * @return the updated map
	 */
	static Map<String, String> activateCloudProfile(Map<String, String> environment, String keyToCreate) {
		log.debug("Activating cloud profile");
		Map<String, String> updatedEnvironment = new HashMap<>(environment);

		if (appendToExistingEntry(updatedEnvironment, SPRING_PROFILES_ACTIVE, CLOUD_PROFILE_NAME)) {
			return updatedEnvironment;
		}
		else if (appendToExistingEntry(updatedEnvironment, SPRING_PROFILES_ACTIVE_FQN, CLOUD_PROFILE_NAME)) {
			return updatedEnvironment;
		}
		else if (appendToExistingEntry(updatedEnvironment, SPRING_PROFILES_ACTIVE_HYPHENATED, CLOUD_PROFILE_NAME)) {
			return updatedEnvironment;
		}
		// If Key provided, create new spring profiles active entry.
		if (StringUtils.hasText(keyToCreate)) {
			updatedEnvironment.put(keyToCreate, CLOUD_PROFILE_NAME);
		}

		return updatedEnvironment;
	}

	/**
	 * Process a command line argument to append the <i>cloud</i> profile if it binds to
	 * <i>spring.profiles.active</i>.
	 *
	 * @param arg the current value
	 * @return the updated value
	 */
	static String appendCloudProfileToSpringProfilesActiveArg(String arg) {
		if ((arg.contains(SPRING_PROFILES_ACTIVE_FQN) ||
				arg.contains(SPRING_PROFILES_ACTIVE_HYPHENATED) ||
				arg.contains(SPRING_PROFILES_ACTIVE)) && arg.contains("=")) {
			String[] tokens = arg.split("=");
			arg = String.join("=", tokens[0], appendToValueIfPresent(tokens[1], CLOUD_PROFILE_NAME));
		}
		return arg;
	}

	private static boolean appendToExistingEntry(Map<String, String> environment, String key, String value) {
		if (environment.containsKey(key)) {
			String current = environment.get(key);
			environment.put(key, appendToValueIfPresent(current, value));
			return true;
		}
		return false;
	}

	private static String appendToValueIfPresent(String current, String value) {
		if (StringUtils.hasText(current)) {
			if (!Stream.of(current.split(",")).filter(s -> s.trim().equals(value)).findFirst().isPresent()) {
				return current.join(",", current, value);
			}
			return current;
		}
		return value;
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryActuatorTemplate.java
================================================
/*
 * Copyright 2022 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.util.Optional;

import org.springframework.cloud.deployer.spi.app.AbstractActuatorTemplate;
import org.springframework.cloud.deployer.spi.app.AppAdmin;
import org.springframework.cloud.deployer.spi.app.AppDeployer;
import org.springframework.cloud.deployer.spi.app.AppInstanceStatus;
import org.springframework.http.HttpHeaders;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

/**
 * Access the actuator endpoint for an app instance deployed to Cloud Foundry.
 *
 * @author David Turanski
 */
public class CloudFoundryActuatorTemplate extends AbstractActuatorTemplate {

	public CloudFoundryActuatorTemplate(RestTemplate restTemplate, AppDeployer appDeployer, AppAdmin appAdmin) {
		super(restTemplate, appDeployer, appAdmin);
	}

	@Override
	protected String actuatorUrlForInstance(AppInstanceStatus appInstanceStatus) {
		return UriComponentsBuilder.fromHttpUrl(appInstanceStatus.getAttributes().get("url"))
				.path("/actuator").toUriString();
	}

	@Override
	public Optional<HttpHeaders> httpHeadersForInstance(AppInstanceStatus appInstanceStatus) {
		HttpHeaders headers = new HttpHeaders();
		headers.add("X-Cf-App-Instance", String.format("%s:%d", appInstanceStatus.getAttributes()
				.get(CloudFoundryAppInstanceStatus.CF_GUID),
				Integer.valueOf(appInstanceStatus.getAttributes().get(CloudFoundryAppInstanceStatus.INDEX))));
		return Optional.of(headers);
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppDeployer.java
================================================
/*
 * Copyright 2016-2023 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.time.Duration;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.cloudfoundry.client.v2.ClientV2Exception;
import org.cloudfoundry.operations.CloudFoundryOperations;
import org.cloudfoundry.operations.applications.ApplicationDetail;
import org.cloudfoundry.operations.applications.ApplicationHealthCheck;
import org.cloudfoundry.operations.applications.ApplicationManifest;
import org.cloudfoundry.operations.applications.ApplicationSummary;
import org.cloudfoundry.operations.applications.DeleteApplicationRequest;
import org.cloudfoundry.operations.applications.Docker;
import org.cloudfoundry.operations.applications.GetApplicationRequest;
import org.cloudfoundry.operations.applications.InstanceDetail;
import org.cloudfoundry.operations.applications.PushApplicationManifestRequest;
import org.cloudfoundry.operations.applications.Route;
import org.cloudfoundry.operations.applications.ScaleApplicationRequest;
import org.cloudfoundry.operations.applications.StartApplicationRequest;
import org.cloudfoundry.operations.services.BindServiceInstanceRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.Yaml;
import reactor.cache.CacheMono;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Signal;
import reactor.util.retry.Retry;

import org.springframework.cloud.deployer.spi.app.AppDeployer;
import org.springframework.cloud.deployer.spi.app.AppScaleRequest;
import org.springframework.cloud.deployer.spi.app.AppStatus;
import org.springframework.cloud.deployer.spi.app.DeploymentState;
import org.springframework.cloud.deployer.spi.app.MultiStateAppDeployer;
import org.springframework.cloud.deployer.spi.core.AppDeploymentRequest;
import org.springframework.cloud.deployer.spi.core.RuntimeEnvironmentInfo;
import org.springframework.util.StringUtils;

/**
 * A deployer that targets Cloud Foundry using the public API.
 *
 * @author Eric Bottard
 * @author Greg Turnquist
 * @author Ben Hale
 * @author Ilayaperumal Gopinathan
 * @author David Turanski
 */
public class CloudFoundryAppDeployer extends AbstractCloudFoundryDeployer implements MultiStateAppDeployer {

	private static final Logger logger = LoggerFactory.getLogger(CloudFoundryAppDeployer.class);

	private static final String CF_GUID_ID = "cf-guid";

	private final AppNameGenerator applicationNameGenerator;

	private final CloudFoundryOperations operations;

	private final Cache<String, ApplicationDetail> cache = Caffeine.newBuilder().expireAfterWrite(5, TimeUnit.SECONDS)
		.build();

	private final ApplicationLogAccessor applicationLogAccessor;

	public CloudFoundryAppDeployer(
		AppNameGenerator applicationNameGenerator,
		CloudFoundryDeploymentProperties deploymentProperties,
		CloudFoundryOperations operations,
		RuntimeEnvironmentInfo runtimeEnvironmentInfo,
		ApplicationLogAccessor applicationLogAccessor
	) {
		super(deploymentProperties, runtimeEnvironmentInfo);
		this.operations = operations;
		this.applicationNameGenerator = applicationNameGenerator;
		this.applicationLogAccessor = applicationLogAccessor;
	}

	@Override
	public String deploy(AppDeploymentRequest appDeploymentRequest) {
		final AppDeploymentRequest request = CfEnvAwareAppDeploymentRequest.of(appDeploymentRequest);
		logger.trace("Entered deploy: Deploying AppDeploymentRequest: AppDefinition = {}, Resource = {}, Deployment Properties = {}",
			request.getDefinition(), request.getResource(), request.getDeploymentProperties());
		String deploymentId = deploymentId(request);

		logger.trace("deploy: Getting Status for Deployment Id = {}", deploymentId);
		getStatus(deploymentId)
			.doOnNext(status -> assertApplicationDoesNotExist(deploymentId, status))
			// Need to block here to be able to throw exception early
			.block(Duration.ofSeconds(this.deploymentProperties.getApiTimeout()));

		logger.trace("deploy: Pushing application");
		pushApplication(deploymentId, request)
			.timeout(Duration.ofSeconds(this.deploymentProperties.getApiTimeout()))
			.doOnSuccess(item -> {
				logger.info("Successfully deployed {}", deploymentId);
			})
			.doOnError(error -> {
				if (isNotFoundError().test(error)) {
					logger.warn("Unable to deploy application. It may have been destroyed before start completed: " + error.getMessage());
				} else {
					logError(String.format("Failed to deploy %s", deploymentId)).accept(error);
				}
			})
				.doOnSuccess((c) -> {
					deleteLocalApplicationResourceFile(request);
				}).doOnError((c) -> {
					deleteLocalApplicationResourceFile(request);
				})
			.subscribe();

		logger.trace("Exiting deploy().  Deployment Id = {}", deploymentId);
		return deploymentId;
	}

	@Override
	public Map<String, DeploymentState> states(String... ids) {
		return requestSummary()
			.collect(Collectors.toMap(ApplicationSummary::getName, this::mapShallowAppState))
			.block();
	}

	@Override
	public Mono<Map<String, DeploymentState>> statesReactive(String... ids) {
		return requestSummary()
			.collect(Collectors.toMap(ApplicationSummary::getName, this::mapShallowAppState));
	}

	private DeploymentState mapShallowAppState(ApplicationSummary applicationSummary) {
		if (applicationSummary.getRunningInstances().equals(applicationSummary.getInstances())) {
			return DeploymentState.deployed;
		} else if (applicationSummary.getInstances() > 0) {
			return DeploymentState.partial;
		} else {
			return DeploymentState.undeployed;
		}
	}

	@Override
	protected Map<String, String> mergeEnvironmentVariables(String deploymentId, AppDeploymentRequest request) {
		Map<String, String> envVariables = super.mergeEnvironmentVariables(deploymentId, request);
		envVariables.putAll(getCommandLineArguments(request));
		String group = request.getDeploymentProperties().get(AppDeployer.GROUP_PROPERTY_KEY);
		if (StringUtils.hasText(group)) {
			envVariables.put("SPRING_CLOUD_APPLICATION_GROUP", group);
		}
		envVariables.put("SPRING_CLOUD_APPLICATION_GUID", "${vcap.application.name}:${vcap.application.instance_index}");
		envVariables.put("SPRING_APPLICATION_INDEX", "${vcap.application.instance_index}");
		this.deploymentProperties.getAppAdmin().addCredentialsToAppEnvironment(envVariables);
		return envVariables;
	}

	private Map<String, String> getCommandLineArguments(AppDeploymentRequest request) {
		if (request.getCommandlineArguments().isEmpty()) {
			return Collections.emptyMap();
		}

		String argumentsAsString = request.getCommandlineArguments().stream()
			.collect(Collectors.joining(" "));
		String yaml = new Yaml().dump(Collections.singletonMap("arguments", argumentsAsString));

		return Collections.singletonMap("JBP_CONFIG_JAVA_MAIN", yaml);
	}

	@Override
	public AppStatus status(String id) {
		try {
			return getStatus(id)
				.doOnSuccess(v -> logger.info("Successfully computed status [{}] for {}", v, id))
				.doOnError(logError(String.format("Failed to compute status for %s", id)))
				.block(Duration.ofMillis(this.deploymentProperties.getStatusTimeout()));
		} catch (Exception timeoutDueToBlock) {
			logger.error("Caught exception while querying for status of {}", id, timeoutDueToBlock);
			return createErrorAppStatus(id);
		}
	}

	@Override
	public Mono<AppStatus> statusReactive(String id) {
		return getStatus(id);
	}

	@Override
	public void undeploy(String id) {
		getStatus(id)
			.doOnNext(status -> assertApplicationExists(id, status))
			// Need to block here to be able to throw exception early
			.block(Duration.ofSeconds(this.deploymentProperties.getApiTimeout()));
		requestDeleteApplication(id)
			.timeout(Duration.ofSeconds(this.deploymentProperties.getApiTimeout()))
			.doOnSuccess(v -> logger.info("Successfully undeployed app {}", id))
			.doOnError(logError(String.format("Failed to undeploy app %s", id)))
			.subscribe();
	}

	@Override
	public String getLog(String id) {
		AppStatus status = status(id);
		String cfGuid = status.getInstances().values().stream()
				.map((appInstanceStatus) -> appInstanceStatus.getAttributes().get(CF_GUID_ID))
				.filter(Objects::nonNull)
				.findFirst()
				.orElseThrow(() -> new IllegalArgumentException("Unable to find " + CF_GUID_ID));
		return applicationLogAccessor.getLog(cfGuid, Duration.ofSeconds(this.deploymentProperties.getApiTimeout()));
	}

	@Override
	public void scale(AppScaleRequest appScaleRequest) {
		logger.info("Scaling the application instance using {}", appScaleRequest);
		ScaleApplicationRequest scaleApplicationRequest = ScaleApplicationRequest.builder()
			.name(appScaleRequest.getDeploymentId())
			.instances(appScaleRequest.getCount())
			.memoryLimit(memory(appScaleRequest))
			.diskLimit(diskQuota(appScaleRequest))
			.stagingTimeout(this.deploymentProperties.getStagingTimeout())
			.startupTimeout(this.deploymentProperties.getStartupTimeout())
			.build();
		this.operations.applications().scale(scaleApplicationRequest)
			.timeout(Duration.ofSeconds(this.deploymentProperties.getApiTimeout()))
			.doOnSuccess(v -> logger.info("Scaled the application with deploymentId = {}",
				appScaleRequest.getDeploymentId()))
			.doOnError(e -> logger.error("Error: {} scaling the app instance {}", e.getMessage(),
				appScaleRequest.getDeploymentId()))
			.subscribe();
	}


	private void assertApplicationDoesNotExist(String deploymentId, AppStatus status) {
		DeploymentState state = status.getState();
		if (state != DeploymentState.unknown && state != DeploymentState.error) {
			throw new IllegalStateException(String.format("App %s is already deployed with state %s", deploymentId, state));
		}
	}

	private void assertApplicationExists(String deploymentId, AppStatus status) {
		DeploymentState state = status.getState();
		if (state == DeploymentState.unknown) {
			throw new IllegalStateException(String.format("App %s is not in a deployed state", deploymentId));
		}
	}

	private AppStatus createAppStatus(ApplicationDetail applicationDetail, String deploymentId) {
		logger.trace("Gathering instances for " + applicationDetail);
		logger.trace("InstanceDetails: " + applicationDetail.getInstanceDetails());

		AppStatus.Builder builder = AppStatus.of(deploymentId);

		int i = 0;
		for (InstanceDetail instanceDetail : applicationDetail.getInstanceDetails()) {
			builder.with(new CloudFoundryAppInstanceStatus(applicationDetail, instanceDetail, i++));
		}
		for (; i < applicationDetail.getInstances(); i++) {
			builder.with(new CloudFoundryAppInstanceStatus(applicationDetail, null, i));
		}

		return builder.build();
	}

	private AppStatus createEmptyAppStatus(String deploymentId) {
		return AppStatus.of(deploymentId)
			.build();
	}

	private AppStatus createErrorAppStatus(String deploymentId) {
		return AppStatus.of(deploymentId)
			.generalState(DeploymentState.error)
			.build();
	}

	private String deploymentId(AppDeploymentRequest request) {
		String prefix = Optional.ofNullable(request.getDeploymentProperties().get(GROUP_PROPERTY_KEY))
			.map(group -> String.format("%s-", group))
			.orElse("");

		String appName = String.format("%s%s", prefix, request.getDefinition().getName());

		return this.applicationNameGenerator.generateAppName(appName);
	}

	private String domain(AppDeploymentRequest request) {
		return Optional
			.ofNullable(request.getDeploymentProperties().get(CloudFoundryDeploymentProperties.DOMAIN_PROPERTY))
			.orElse(this.deploymentProperties.getDomain());
	}


	private Mono<AppStatus> getStatus(String deploymentId) {
		return requestGetApplication(deploymentId)
			.map(applicationDetail -> createAppStatus(applicationDetail, deploymentId))
			.onErrorResume(IllegalArgumentException.class, t -> {
				logger.debug("Application for {} does not exist.", deploymentId);
				return Mono.just(createEmptyAppStatus(deploymentId));
			})
			.transform(statusRetry(deploymentId))
			.onErrorReturn(createErrorAppStatus(deploymentId));
	}

	private ApplicationHealthCheck healthCheck(AppDeploymentRequest request) {
		return Optional
			.ofNullable(request.getDeploymentProperties()
				.get(CloudFoundryDeploymentProperties.HEALTHCHECK_PROPERTY_KEY))
			.map(this::toApplicationHealthCheck).orElse(this.deploymentProperties.getHealthCheck());
	}

	private String healthCheckEndpoint(AppDeploymentRequest request) {
		return Optional
			.ofNullable(request.getDeploymentProperties()
				.get(CloudFoundryDeploymentProperties.HEALTHCHECK_HTTP_ENDPOINT_PROPERTY_KEY))
			.orElse(this.deploymentProperties.getHealthCheckHttpEndpoint());
	}

	private Integer healthCheckTimeout(AppDeploymentRequest request) {
		String timeoutString = request.getDeploymentProperties().getOrDefault(
			CloudFoundryDeploymentProperties.HEALTHCHECK_TIMEOUT_PROPERTY_KEY,
			this.deploymentProperties.getHealthCheckTimeout());
		return Integer.parseInt(timeoutString);
	}

	private String host(AppDeploymentRequest request) {
		return Optional
			.ofNullable(request.getDeploymentProperties().get(CloudFoundryDeploymentProperties.HOST_PROPERTY))
			.orElse(this.deploymentProperties.getHost());
	}

	private int instances(AppDeploymentRequest request) {
		return Optional.ofNullable(request.getDeploymentProperties().get(AppDeployer.COUNT_PROPERTY_KEY))
			.map(Integer::parseInt)
			.orElse(this.deploymentProperties.getInstances());
	}

	private Mono<Void> pushApplication(String deploymentId, AppDeploymentRequest request) {
		ApplicationManifest.Builder manifest = ApplicationManifest.builder()
			.path(getApplication(request)) // Only one of the two is non-null
			.disk(diskQuota(request))
			.environmentVariables(mergeEnvironmentVariables(deploymentId, request))
			.healthCheckType(healthCheck(request))
			.healthCheckHttpEndpoint(healthCheckEndpoint(request))
			.timeout(healthCheckTimeout(request))
			.instances(instances(request))
			.memory(memory(request))
			.name(deploymentId)
			.noRoute(toggleNoRoute(request))
			.services(servicesToBind(request));

		Optional.ofNullable(host(request)).ifPresent(manifest::host);
		Optional.ofNullable(domain(request)).ifPresent(manifest::domain);
		Optional.ofNullable(routePath(request)).ifPresent(manifest::routePath);
		if (route(request) != null) {
			manifest.route(Route.builder().route(route(request)).build());
		}
		if (!routes(request).isEmpty()) {
			Set<Route> routes = routes(request).stream()
				.map(r -> Route.builder().route(r).build())
				.collect(Collectors.toSet());
			manifest.routes(routes);
		}
		if (getDockerImage(request) != null) {
			logger.info("Preparing to run a container from {}. This may take some time if the image must be downloaded from a remote container registry.", request.getResource());
			manifest.docker(Docker.builder().image(getDockerImage(request)).build());
		} else {
			manifest.buildpacks(buildpacks(request));
		}

		if (!includesServiceParameters(request)) {
			return pushApplicationWithNoServiceParameters(manifest.build(), deploymentId);
		} else {
			return pushApplicationWithServiceParameters(manifest.build(), request, deploymentId);
		}
	}

	private Mono<Void> pushApplicationWithNoServiceParameters(ApplicationManifest manifest, String deploymentId) {
		logger.debug("Pushing application manifest");
		return requestPushApplication(PushApplicationManifestRequest.builder()
			.manifest(manifest)
			.stagingTimeout(this.deploymentProperties.getStagingTimeout())
			.startupTimeout(this.deploymentProperties.getStartupTimeout())
			.build())
			.doOnSuccess(v -> logger.info("Done uploading bits for {}", deploymentId))
			.doOnError(e -> logger.error("Error: {} creating app {}", e.getMessage(), deploymentId));
	}

	private Mono<Void> requestBind(BindServiceInstanceRequest bindRequest) {
		// defer so that new reques gets created when retry does re-sub
		return Mono.defer(() -> this.operations.services().bind(bindRequest))
			.doOnError(e -> {
				if (e instanceof ClientV2Exception) {
					ClientV2Exception ce = (ClientV2Exception) e;
					if (ce.getCode() == 10001) {
						logger.warn("Retry service bind due to concurrency error");
					} else {
						logger.warn("Received ClientV2Exception error from cf", ce);
					}
				} else {
					logger.warn("Received error from cf", e);
				}
			})
			// check expected code indicating concurrency error, aka
			// CF-ConcurrencyError(10001): The service broker could not perform this operation in parallel with other running operations
			// and retry those and let other errors to pass and fail fast
			.retryWhen(Retry.withThrowable(reactor.retry.Retry.onlyIf(c -> {
						if (c.exception() instanceof ClientV2Exception) {
							ClientV2Exception e = (ClientV2Exception) c.exception();
							if (e.getCode() == 10001) {
								return true;
							}
						}
						return false;
					})
					// for now try 30 seconds and do some jitter to limit concurrency issues
					.timeout(Duration.ofSeconds(30))
					.randomBackoff(Duration.ofSeconds(1), Duration.ofSeconds(5))
					.doOnRetry(c -> logger.debug("Retrying cf call for {}", bindRequest))
			));
	}

	private Mono<Void> pushApplicationWithServiceParameters(
		ApplicationManifest manifest,
		AppDeploymentRequest request, String deploymentId
	) {

		logger.debug("Pushing application manifest with no start");

		return requestPushApplication(PushApplicationManifestRequest.builder()
			.manifest(manifest)
			.noStart(true)
			.build())
			.doOnSuccess(v -> logger.info("Done uploading bits for {}", deploymentId))
			.doOnError(e -> logger.error(String.format("Error creating app %s.  Exception Message %s", deploymentId, e.getMessage())))

			.thenMany(Flux.fromStream(bindParameterizedServiceInstanceRequests(request, deploymentId)))
			.flatMap(bindRequest -> this.requestBind(bindRequest)
				.doOnSuccess(bv -> logger.info("Done binding service {} for {}", bindRequest.getServiceInstanceName(), deploymentId))
				.doOnError(e -> logger.error("Error: {} binding service {}", e.getMessage(), bindRequest.getServiceInstanceName())))

			.then(this.operations.applications()
				.start(StartApplicationRequest.builder()
					.name(deploymentId)
					.stagingTimeout(this.deploymentProperties.getStagingTimeout())
					.startupTimeout(this.deploymentProperties.getStartupTimeout())
					.build())
				.doOnSuccess(sv -> logger.info("Started app for {} ", deploymentId))
				.doOnError(e -> logger.error("Error: {} starting app for {}.", e.getMessage(), deploymentId)))

			.doOnError(e -> logger.error(String.format("Error: %s creating app %s", e.getMessage(), deploymentId), e));
	}

	private Mono<Void> requestDeleteApplication(String id) {
		return this.operations.applications()
			.delete(DeleteApplicationRequest.builder()
				.deleteRoutes(deploymentProperties.isDeleteRoutes())
				.name(id)
				.build());
	}

	private Mono<ApplicationDetail> requestGetApplication(String id) {
		return CacheMono
			.lookup(k -> Mono.defer(() -> {
				ApplicationDetail ifPresent = cache.getIfPresent(id);
				logger.debug("Cache get {}", ifPresent);
				return Mono.justOrEmpty(ifPresent).map(Signal::next);
			}), id)
			.onCacheMissResume(Mono.defer(() -> {
				logger.debug("Cache miss {}", id);
				return getApplicationDetail(id);
			}))
			.andWriteWith((k, sig) -> Mono.fromRunnable(() -> {
				ApplicationDetail ap = sig.get();
				if (ap != null) {
					logger.debug("Cache put {} {}", k, ap);
					cache.put(k, ap);
				}
			}));
	}

	private Mono<ApplicationDetail> getApplicationDetail(String id) {
		return this.operations.applications()
			.get(GetApplicationRequest.builder()
				.name(id)
				.build());
	}

	private Mono<Void> requestPushApplication(PushApplicationManifestRequest request) {
		return this.operations.applications()
			.pushManifest(request);
	}

	private Flux<ApplicationSummary> requestSummary() {
		return this.operations.applications().list();
	}

	private String routePath(AppDeploymentRequest request) {
		String routePath = request.getDeploymentProperties().get(CloudFoundryDeploymentProperties.ROUTE_PATH_PROPERTY);
		if (StringUtils.hasText(routePath) && !routePath.startsWith("/")) {
			throw new IllegalArgumentException(
				"Cloud Foundry routes must start with \"/\". Route passed = [" + routePath + "].");
		}
		return routePath;
	}

	private String route(AppDeploymentRequest request) {
		return request.getDeploymentProperties().get(CloudFoundryDeploymentProperties.ROUTE_PROPERTY);
	}

	private Set<String> routes(AppDeploymentRequest request) {
		Set<String> routes = new HashSet<>();
		routes.addAll(this.deploymentProperties.getRoutes());
		routes.addAll(StringUtils.commaDelimitedListToSet(
			request.getDeploymentProperties().get(CloudFoundryDeploymentProperties.ROUTES_PROPERTY)));
		return routes;
	}

	private ApplicationHealthCheck toApplicationHealthCheck(String raw) {
		try {
			return ApplicationHealthCheck.from(raw);
		} catch (IllegalArgumentException e) {
			throw new IllegalArgumentException(String.format("Unsupported health-check value '%s'. Available values are %s", raw,
				StringUtils.arrayToCommaDelimitedString(ApplicationHealthCheck.values())), e);
		}
	}

	private Boolean toggleNoRoute(AppDeploymentRequest request) {
		return Optional
			.ofNullable(request.getDeploymentProperties().get(CloudFoundryDeploymentProperties.NO_ROUTE_PROPERTY))
			.map(Boolean::valueOf).orElse(null);
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppInstanceStatus.java
================================================
/*
 * Copyright 2016-2022 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.cloudfoundry.operations.applications.ApplicationDetail;
import org.cloudfoundry.operations.applications.InstanceDetail;

import org.springframework.cloud.deployer.spi.app.AppInstanceStatus;
import org.springframework.cloud.deployer.spi.app.DeploymentState;

/**
 * Maps status returned by the Cloud Foundry API to {@link AppInstanceStatus}.
 *
 * @author Eric Bottard
 * @author David Turanski
 */
public class CloudFoundryAppInstanceStatus implements AppInstanceStatus {

	private final InstanceDetail instanceDetail;

	private final ApplicationDetail applicationDetail;

	private final int index;

	private final Map<String, String> attributes = new TreeMap<>();

	/**
	 * The deployer assigned unique id for each app instance.
	 */
	static final String GUID = "guid";

	/**
	 * The platform assigned guid - common among app instances with replicas
	 */
	static final String CF_GUID = "cf-guid";

	/**
	 * The app index.
	 */
	static final String INDEX = "index";

	public CloudFoundryAppInstanceStatus(ApplicationDetail applicationDetail, InstanceDetail instanceDetail, int index) {
		this.applicationDetail = applicationDetail;
		this.instanceDetail = instanceDetail;
		this.index = index;
	}

	@Override
	public String getId() {
		return applicationDetail.getName() + "-" + index;
	}

	@Override
	public DeploymentState getState() {
		if (instanceDetail == null) {
			return DeploymentState.failed;
		}
		switch (instanceDetail.getState()) {
			case "STARTING":
			case "DOWN":
				return DeploymentState.deploying;
			case "CRASHED":
				return DeploymentState.failed;
			// Seems the client incorrectly reports apps as FLAPPING when they are
			// obviously fine. Mapping as RUNNING for now
			case "FLAPPING":
			case "RUNNING":
				return DeploymentState.deployed;
			case "UNKNOWN":
				return DeploymentState.unknown;
			default:
				throw new IllegalStateException("Unsupported CF state: " + instanceDetail.getState());
		}
	}

	@Override
	public Map<String, String> getAttributes() {
		if (instanceDetail != null) {
			if (instanceDetail.getCpu() != null) {
				attributes.put("metrics.machine.cpu", String.format("%.1f%%", instanceDetail.getCpu() * 100d));
			}
			if (instanceDetail.getDiskQuota() != null && instanceDetail.getDiskUsage() != null) {
				attributes.put("metrics.machine.disk", String.format("%.1f%%", 100d * instanceDetail.getDiskUsage() / instanceDetail.getDiskQuota()));
			}
			if (instanceDetail.getMemoryQuota() != null && instanceDetail.getMemoryUsage() != null) {
				attributes.put("metrics.machine.memory", String.format("%.1f%%", 100d * instanceDetail.getMemoryUsage() / instanceDetail.getMemoryQuota()));
			}
		}
		List<String> urls = applicationDetail.getUrls();
		if (!urls.isEmpty()) {
			attributes.put("url", "http://" + urls.get(0));
			for (int i = 0; i < urls.size() ; i++) {
				attributes.put("url." + i, "http://" + urls.get(i));
			}
		}
		// TODO cf-java-client versions > 2.8 will have an index formally added ot InstanceDetail
		/*
		 The deployer GUID must be unique for each app instance, the CloudFoundry GUID is common to all instances of
		 the same app.
		 */
		attributes.put(GUID, applicationDetail.getName() + ":" + index);
		attributes.put(CF_GUID, applicationDetail.getId());
		attributes.put(INDEX, String.valueOf(index));
		return attributes;
	}

	@Override
	public String toString() {
		return String.format("%s[%s : %s]" , getClass().getSimpleName(), getId(), getState());
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppNameGenerator.java
================================================
/*
 * Copyright 2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.util.Random;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.StringUtils;

/**
 * CloudFoundry specific implementation of {@link AppNameGenerator}.  This takes into account the
 * configuration properties {@code enableRandomAppNamePrefix} and {@code appNamePrefix}.
 *
 * If {@code enableRandomAppNamePrefix} a random short string is prefixed to the base name.
 * It is true by default. If {@code appNamePrefix} is set, it is also prefixed before the random string.
 * By default the {@code appNamePrefix} is the value of {@code spring.application.name} if available,
 * otherwise the empty string.
 *
 * As an example, if {@code enableRandomAppNamePrefix=true}, {@code spring.application.name=server},
 * and we are deploying an application whose base name is {@code time}, then the deployed name on Cloud Foundry
 * may be {@code server-ug54dh5-time}
 *
 * @author Soby Chacko
 * @author Mark Pollack
 */
public class CloudFoundryAppNameGenerator implements AppNameGenerator, InitializingBean {

	private static final Log logger = LogFactory.getLog(CloudFoundryAppNameGenerator.class);

	/* Given that appnames are by default part of a hostname, limit to 63 chars max. */
	private static final int MAX_APPNAME_LENGTH = 63;

	private String prefixToUse = "";

	private final CloudFoundryDeploymentProperties properties;

	public CloudFoundryAppNameGenerator(CloudFoundryDeploymentProperties cloudFoundryDeploymentProperties) {
		this.properties = cloudFoundryDeploymentProperties;
	}

	@Override
	public void afterPropertiesSet() throws Exception {
		if (properties.isEnableRandomAppNamePrefix()) {
			prefixToUse = createUniquePrefix();
			if (!StringUtils.isEmpty(properties.getAppNamePrefix())) {
				prefixToUse = String.format("%s-%s", properties.getAppNamePrefix(), prefixToUse);
			}
		} else {
			if (!StringUtils.isEmpty(properties.getAppNamePrefix())) {
				prefixToUse = properties.getAppNamePrefix();
			}
		}
		logger.info(String.format("Prefix to be used for deploying apps: %s", prefixToUse));
	}


	@Override
	public String generateAppName(String appName) {
		if (StringUtils.isEmpty(prefixToUse)) {
			return appName.substring(0, Math.min(MAX_APPNAME_LENGTH, appName.length()));
		} else {
			String string = String.format("%s-%s", prefixToUse, appName);
			return string.substring(0, Math.min(MAX_APPNAME_LENGTH, string.length()));
		}
	}

	private String createUniquePrefix() {
		String alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
		char[] result = new char[7];
		Random random = new Random();
		for (int i = 0 ; i < result.length ; i++) {
			result[i] = alphabet.charAt(random.nextInt(alphabet.length()));
		}
		return new String(result);
	}


}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryConnectionProperties.java
================================================
/*
 * Copyright 2016-2020 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.net.URL;

import jakarta.validation.constraints.NotNull;

import org.springframework.validation.annotation.Validated;

/**
 * Holds configuration properties for connecting to a Cloud Foundry runtime.
 *
 * @author Eric Bottard
 * @author Greg Turnquist
 */
@Validated
public class CloudFoundryConnectionProperties {

	/**
	 * Top level prefix for Cloud Foundry related configuration properties.
	 */
	public static final String CLOUDFOUNDRY_PROPERTIES = "spring.cloud.deployer.cloudfoundry";

	/**
	 * The organization to use when registering new applications.
	 */
	@NotNull
	private String org;

	/**
	 * The space to use when registering new applications.
	 */
	@NotNull
	private String space;

	/**
	 * Location of the CloudFoundry REST API endpoint to use.
	 */
	@NotNull
	private URL url;

	/**
	 * Username to use to authenticate against the Cloud Foundry API.
	 */
	@NotNull
	private String username;

	/**
	 * Password to use to authenticate against the Cloud Foundry API.
	 */
	@NotNull
	private String password;

	/**
	 * ClientId to use with token providers, effectively defaults to "cf" in
	 * cloudfroundry client.
	 */
	private String clientId;

	/**
	 * ClientSecret to use with token providers, effectively defaults to empty in
	 * cloudfroundry client.
	 */
	private String clientSecret;

	/**
	 * Indicates the identity provider to be used when accessing the Cloud Foundry API.
	 * The passed string has to be a URL-Encoded JSON Object, containing the field origin with value as origin_key of an identity provider.
	 */
	private String loginHint;

	/**
	 * Allow operation using self-signed certificates.
	 */
	private boolean skipSslValidation = false;

	public String getOrg() {
		return org;
	}

	public void setOrg(String org) {
		this.org = org;
	}

	public String getSpace() {
		return space;
	}

	public void setSpace(String space) {
		this.space = space;
	}

	public URL getUrl() {
		return url;
	}

	public void setUrl(URL url) {
		this.url = url;
	}

	public String getClientId() {
		return clientId;
	}

	public void setClientId(String clientId) {
		this.clientId = clientId;
	}

	public String getClientSecret() {
		return clientSecret;
	}

	public void setClientSecret(String clientSecret) {
		this.clientSecret = clientSecret;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public boolean isSkipSslValidation() {
		return skipSslValidation;
	}

	public void setSkipSslValidation(boolean skipSslValidation) {
		this.skipSslValidation = skipSslValidation;
	}

	public String getLoginHint() {
		return loginHint;
	}

	public void setLoginHint(String loginHint) {
		this.loginHint = loginHint;
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryDeployerAutoConfiguration.java
================================================
/*
 * Copyright 2016-2021 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.time.Duration;

import com.github.zafarkhaja.semver.Version;
import org.cloudfoundry.client.CloudFoundryClient;
import org.cloudfoundry.client.v2.info.GetInfoRequest;
import org.cloudfoundry.logcache.v1.LogCacheClient;
import org.cloudfoundry.operations.CloudFoundryOperations;
import org.cloudfoundry.operations.DefaultCloudFoundryOperations;
import org.cloudfoundry.reactor.ConnectionContext;
import org.cloudfoundry.reactor.DefaultConnectionContext;
import org.cloudfoundry.reactor.TokenProvider;
import org.cloudfoundry.reactor.client.ReactorCloudFoundryClient;
import org.cloudfoundry.reactor.logcache.v1.ReactorLogCacheClient;
import org.cloudfoundry.reactor.tokenprovider.PasswordGrantTokenProvider;
import org.cloudfoundry.reactor.tokenprovider.PasswordGrantTokenProvider.Builder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.deployer.spi.app.AppDeployer;
import org.springframework.cloud.deployer.spi.core.RuntimeEnvironmentInfo;
import org.springframework.cloud.deployer.spi.task.TaskLauncher;
import org.springframework.cloud.deployer.spi.util.RuntimeVersionUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;


/**
 * Creates a {@link CloudFoundryAppDeployer}
 *
 * @author Eric Bottard
 * @author Ben Hale
 * @author David Turanski
 */
@Configuration
@EnableConfigurationProperties
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
public class CloudFoundryDeployerAutoConfiguration {

	private static final Logger logger = LoggerFactory.getLogger(CloudFoundryDeployerAutoConfiguration.class);

	@Autowired
	private EarlyConnectionConfiguration connectionConfiguration;

	@Bean
	@ConditionalOnMissingBean
	public CloudFoundryOperations cloudFoundryOperations(CloudFoundryClient cloudFoundryClient, CloudFoundryConnectionProperties properties) {
		return DefaultCloudFoundryOperations.builder()
			.cloudFoundryClient(cloudFoundryClient)
			.organization(properties.getOrg())
			.space(properties.getSpace())
			.build();
	}

	private RuntimeEnvironmentInfo runtimeEnvironmentInfo(Class spiClass, Class implementationClass, CloudFoundryConnectionProperties cloudFoundryConnectionProperties) {
		CloudFoundryClient client = connectionConfiguration.cloudFoundryClient(
			connectionConfiguration.connectionContext(cloudFoundryConnectionProperties),
			connectionConfiguration.tokenProvider(cloudFoundryConnectionProperties));
		Version version = connectionConfiguration.version(client);

		return new CloudFoundryPlatformSpecificInfo(new RuntimeEnvironmentInfo.Builder())
			.apiEndpoint(cloudFoundryConnectionProperties.getUrl().toString())
			.org(cloudFoundryConnectionProperties.getOrg())
			.space(cloudFoundryConnectionProperties.getSpace())
			.builder()
				.implementationName(implementationClass.getSimpleName())
				.spiClass(spiClass)
				.implementationVersion(RuntimeVersionUtils.getVersion(CloudFoundryAppDeployer.class))
				.platformType("Cloud Foundry")
				.platformClientVersion(RuntimeVersionUtils.getVersion(client.getClass()))
				.platformApiVersion(version.toString())
				.platformHostVersion("unknown")
				.build();
	}

	@Bean
	@ConditionalOnMissingBean(AppDeployer.class)
	public AppDeployer appDeployer(
		CloudFoundryOperations operations,
		AppNameGenerator applicationNameGenerator,
		ApplicationLogAccessor applicationLogAccessor
	) {
		return new CloudFoundryAppDeployer(
			applicationNameGenerator,
			connectionConfiguration.appDeploymentProperties(),
			operations,
			runtimeEnvironmentInfo(AppDeployer.class, CloudFoundryAppDeployer.class, connectionConfiguration.cloudFoundryConnectionProperties()),
				applicationLogAccessor);
	}

	@Bean
	CloudFoundryActuatorTemplate actuatorOperations(RestTemplate actuatorRestTemplate, AppDeployer appDeployer) {
		return new CloudFoundryActuatorTemplate(actuatorRestTemplate, appDeployer,
				connectionConfiguration.appDeploymentProperties().getAppAdmin());
	}

	@Bean
	RestTemplate actuatorRestTemplate() {
		return new RestTemplate();
	}

	@Bean
	@ConditionalOnMissingBean(AppNameGenerator.class)
	public AppNameGenerator appDeploymentCustomizer() {
		return new CloudFoundryAppNameGenerator(connectionConfiguration.appDeploymentProperties());
	}

	@Bean
	@ConditionalOnMissingBean(TaskLauncher.class)
	public TaskLauncher taskLauncher(
		CloudFoundryClient client,
		CloudFoundryOperations operations,
		Version version,
		ApplicationLogAccessor applicationLogAccessor
	) {

		if (version.greaterThanOrEqualTo(UnsupportedVersionTaskLauncher.MINIMUM_SUPPORTED_VERSION)) {
			RuntimeEnvironmentInfo runtimeEnvironmentInfo = runtimeEnvironmentInfo(TaskLauncher.class, CloudFoundryTaskLauncher.class,
				connectionConfiguration.cloudFoundryConnectionProperties());
			return new CloudFoundryTaskLauncher(
				client,
				connectionConfiguration.taskDeploymentProperties(),
				operations,
				runtimeEnvironmentInfo,
					applicationLogAccessor);
		} else {
			RuntimeEnvironmentInfo runtimeEnvironmentInfo = runtimeEnvironmentInfo(TaskLauncher.class, UnsupportedVersionTaskLauncher.class,
				connectionConfiguration.cloudFoundryConnectionProperties());
			return new UnsupportedVersionTaskLauncher(version, runtimeEnvironmentInfo);
		}
	}

	@Bean
	@ConditionalOnMissingBean(ApplicationLogAccessor.class)
	public ApplicationLogAccessor logHelper(LogCacheClient logCacheClient) {
		return new ApplicationLogAccessor(logCacheClient);
	}

	@Bean
	@ConfigurationPropertiesBinding
	public DurationConverter durationConverter() {
		return new DurationConverter();
	}

	/**
	 * A subset of configuration beans that can be used on its own to connect to the Cloud Controller API
	 * and query it for its version. Automatically applied in CloudFoundryDeployerAutoConfiguration by virtue
	 * of being a static inner class of it.
	 *
	 * @author Eric Bottard
	 */
	@Configuration
	@EnableConfigurationProperties
	public static class EarlyConnectionConfiguration {

		@Bean
		@ConditionalOnMissingBean(name = "appDeploymentProperties")
		public CloudFoundryDeploymentProperties appDeploymentProperties() {
			return defaultSharedDeploymentProperties();
		}


		@Bean
		@ConditionalOnMissingBean(name = "taskDeploymentProperties")
		public CloudFoundryDeploymentProperties taskDeploymentProperties() {
			return defaultSharedDeploymentProperties();
		}

		@Bean
		@ConfigurationProperties(prefix = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES)
		public CloudFoundryDeploymentProperties defaultSharedDeploymentProperties() {
			return new CloudFoundryDeploymentProperties();
		}

		@Bean
		@ConditionalOnMissingBean
		public Version version(CloudFoundryClient client) {
			return client.info()
				.get(GetInfoRequest.builder()
					.build())
				.map(response -> Version.valueOf(response.getApiVersion()))
				.doOnError(e -> {
					throw new RuntimeException("Bad credentials connecting to Cloud Foundry.", e);
				})
				.doOnNext(version -> logger.info("Connecting to Cloud Foundry with API Version {}", version))
				.block(Duration.ofSeconds(appDeploymentProperties().getApiTimeout()));
		}

		@Bean
		@ConditionalOnMissingBean
		public CloudFoundryClient cloudFoundryClient(ConnectionContext connectionContext, TokenProvider tokenProvider) {
			return ReactorCloudFoundryClient.builder()
				.connectionContext(connectionContext)
				.tokenProvider(tokenProvider)
				.build();
		}

		@Bean
		@ConditionalOnMissingBean
		public LogCacheClient logCacheClient(ConnectionContext connectionContext, TokenProvider tokenProvider) {
			return ReactorLogCacheClient.builder()
				.connectionContext(connectionContext)
				.tokenProvider(tokenProvider)
				.build();
		}

		@Bean
		@ConditionalOnMissingBean
		public TokenProvider tokenProvider(CloudFoundryConnectionProperties properties) {
			Builder tokenProviderBuilder = PasswordGrantTokenProvider.builder()
					.username(properties.getUsername())
					.password(properties.getPassword())
					.loginHint(properties.getLoginHint());
			if (StringUtils.hasText(properties.getClientId())) {
				tokenProviderBuilder.clientId(properties.getClientId());
			}
			if (StringUtils.hasText(properties.getClientSecret())) {
				tokenProviderBuilder.clientSecret(properties.getClientSecret());
			}
			return tokenProviderBuilder.build();
		}

		@Bean
		@ConditionalOnMissingBean
		@ConfigurationProperties(prefix = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES)
		public CloudFoundryConnectionProperties cloudFoundryConnectionProperties() {
			return new CloudFoundryConnectionProperties();
		}

		@Bean
		@ConditionalOnMissingBean
		public ConnectionContext connectionContext(CloudFoundryConnectionProperties properties) {
			return DefaultConnectionContext.builder()
				.apiHost(properties.getUrl().getHost())
				.skipSslValidation(properties.isSkipSslValidation())
				.build();
		}
	}
}


================================================
FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryDeploymentProperties.java
================================================
/*
 * Copyright 2016-2021 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.cloud.deployer.spi.cloudfoundry;

import java.time.Duration;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.cloudfoundry.operations.applications.ApplicationHealthCheck;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.deployer.spi.app.AppAdmin;
import org.springframework.validation.annotation.Validated;


/**
 * Holds configuration properties for specifying what resources and services an app
 * deployed to a Cloud Foundry runtime will get.
 *
 * @author Eric Bottard
 * @author Greg Turnquist
 * @author Ilayaperumal Gopinathan
 * @author David Turanski
 */
@Validated
public class CloudFoundryDeploymentProperties {

	private static final Log log = LogFactory.getLog(CloudFoundryDeploymentProperties.class);

	public static final String SERVICES_PROPERTY_KEY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".services";

	public static final String HEALTHCHECK_PROPERTY_KEY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".health-check";

	public static final String HEALTHCHECK_HTTP_ENDPOINT_PROPERTY_KEY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES
			+ ".health-check-http-endpoint";

	public static final String HEALTHCHECK_TIMEOUT_PROPERTY_KEY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".health-check-timeout";

	public static final String ROUTE_PATH_PROPERTY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".route-path";

	public static final String ROUTE_PROPERTY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".route";

	public static final String ROUTES_PROPERTY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".routes";

	public static final String NO_ROUTE_PROPERTY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".no-route";

	public static final String HOST_PROPERTY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".host";

	public static final String DOMAIN_PROPERTY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".domain";

	public static final String BUILDPACK_PROPERTY_KEY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".buildpack";

	public static final String BUILDPACKS_PROPERTY_KEY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".buildpacks";

	public static final String JAVA_OPTS_PROPERTY_KEY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".javaOpts";

	public static final String USE_SPRING_APPLICATION_JSON_KEY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES
			+ ".use-spring-application-json";

	public static final String ENV_KEY = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".env";

	private static final String DEFAULT_BUILDPACK = "https://github.com/cloudfoundry/java-buildpack.git#v4.29.1";

	/**
	 * The names of services to bind to all applications deployed as a module. This should
	 * typically contain a service capable of playing the role of a binding transport.
	 */
	private Set<String> services = new HashSet<>();

	/**
	 * The host name to use as part of the route. Defaults to hostname derived by Cloud
	 * Foundry.
	 */
	private String host = null;

	/**
	 * The domain to use when mapping routes for applications.
	 */
	private String domain;

	/**
	 * The routes that the application should be bound to. Mutually exclusive with host and
	 * domain.
	 */
	private Set<String> routes = new HashSet<>();

	/**
	 * The buildpack to use for deploying the application.
	 */
	@Deprecated
	private String buildpack = DEFAULT_BUILDPACK;

	/**
	 * The buildpacks to use for deploying the application.
	 */
	private Set<String> buildpacks = new HashSet<>();

	/**
	 * The amount of memory to allocate, if not overridden per-app. Default unit is mebibytes,
	 * 'M' and 'G" suffixes supported.
	 */
	private String memory = "1024m";

	/**
	 * The amount of disk space to allocate, if not overridden per-app. Default unit is
	 * mebibytes, 'M' and 'G" suffixes supported.
	 */
	private String disk = "1024m";

	/**
	 * The type of health check to perform on deployed application, if not overridden per-app.
	 * Defaults to PORT
	 */
	private ApplicationHealthCheck healthCheck = ApplicationHealthCheck.PORT;

	/**
	 * The path that the http health check will use, defaults to @{code /health}
	 */
	private String healthCheckHttpEndpoint = "/health";

	/**
	 * The timeout value for health checks in seconds. Defaults to 120 seconds.
	 */
	private String healthCheckTimeout = "120";

	/**
	 * The number of instances to run.
	 */
	private int instances = 1;

	/**
	 * Flag to enable prefixing the app name with a random prefix.
	 */
	private boolean enableRandomAppNamePrefix = true;

	/**
	 * Timeout for blocking API calls, in seconds.
	 */
	private long apiTimeout = 360L;

	/**
	 * Timeout for status API operations in milliseconds
	 */
	private long statusTimeout = 30_000L;

	/**
	 * Flag to indicate whether application properties are fed into SPRING_APPLICATION_JSON or
	 * ENVIRONMENT VARIABLES.
	 */
	private boolean useSpringApplicationJson = true;

	/**
	 * If set, override the timeout allocated for staging the app by the client.
	 */
	private Duration stagingTimeout = Duration.ofMinutes(15L);

	/**
	 * If set, override the timeout allocated for starting the app by the client.
	 */
	private Duration startupTimeout = Duration.ofMinutes(5L);

	/**
	 * String to use as prefix for name of deployed app. Defaults to spring.application.name.
	 */
	@Value("${spring.application.name:}")
	private String appNamePrefix;

	/**
	 * Whether to also delete routes when un-deploying an application.
	 */
	private boolean deleteRoutes = true;

	/**
	 * Whether to push task apps
	 */
	private boolean pushTaskAppsEnabled = true;

	/**
	 * Whether to automatically delete cached Maven artifacts after deployment.
	 */
	private boolean autoDeleteMavenArtifacts = true;

	/**
	 * The maximum concurrent tasks allowed.
	 */
	@Min(1)
	private int maximumConcurrentTasks = 20;

	private String javaOpts;

	private Optional<Map<String, String>> env = Optional.empty();
	
	/**
	 * Location of the PCF scheduler REST API enpoint ot use.
	 */
	private String schedulerUrl;

	/**
	 * The number of retries allowed when scheduling a task if an {@link javax.net.ssl.SSLException} is thrown.
	 */
	private int scheduleSSLRetryCount = 5;

	/**
	 * The number of seconds to wait for a unSchedule to complete.
	 */
	private int unScheduleTimeoutInSeconds = 30;

	/**
	 * The number of seconds to wait for a schedule to complete.
	 * This excludes the time it takes to stage the application on Cloud Foundry.
	 */
	private int scheduleTimeoutInSeconds = 30;

	/**
	 * The number of seconds to wait for a list of schedules to be returned.
	 */
	private int listTimeoutInSeconds = 60;

	private AppAdmin appAdmin = new AppAdmin();

	public Set<String> getServices() {
		return services;
	}

	public void setServices(Set<String> services) {
		this.services = services;
	}

	@Deprecated
	public String getBuildpack() {
		return buildpack;
	}

	@Deprecated
	public void setBuildpack(String buildpack) {
		this.buildpack = buildpack;
	}

	public Set<String> getBuildpacks() {
		return buildpacks;
	}

	public void setBuildpacks(Set<String> buildpacks) {
		this.buildpacks = buildpacks;
	}

	public String getMemory() {
		return memory;
	}

	public void setMemory(String memory) {
		this.memory = memory;
	}

	public String getDisk() {
		return disk;
	}

	public void setDisk(String disk) {
		this.disk = disk;
	}

	public int getInstances() {
		return instances;
	}

	public void setInstances(int instances) {
		this.instances = instances;
	}

	public boolean isEnableRandomAppNamePrefix() {
		return enableRandomAppNamePrefix;
	}

	public void setEnableRandomAppNamePrefix(boolean enableRandomAppNamePrefix) {
		this.enableRandomAppNamePrefix = enableRandomAppNamePrefix;
	}

	public String getAppNamePrefix() {
		return appNamePrefix;
	}

	public void setAppNamePrefix(String appNamePrefix) {
		this.appNamePrefix = appNamePrefix;
	}

	public long getApiTimeout() {
		return apiTimeout;
	}

	public void setApiTimeout(long apiTimeout) {
		this.apiTimeout = apiTimeout;
	}

	public boolean isUseSpringApplicationJson() {
		return useSpringApplicationJson;
	}

	public void setUseSpringApplicationJson(boolean useSpringApplicationJson) {
		this.useSpringApplicationJson = useSpringApplicationJson;
	}

	public ApplicationHealthCheck getHealthCheck() {
		return healthCheck;
	}

	public void setHealthCheck(ApplicationHealthCheck healthCheck) {
		this.healthCheck = healthCheck;
	}

	public String getHealthCheckHttpEndpoint() {
		return healthCheckHttpEndpoint;
	}

	public void setHealthCheckHttpEndpoint(String healthCheckHttpEndpoint) {
		this.healthCheckHttpEndpoint = healthCheckHttpEndpoint;
	}

	public String getHealthCheckTimeout() {
		return healthCheckTimeout;
	}

	public void setHealthCheckTimeout(String healthCheckTimeout) {
		this.healthCheckTimeout = healthCheckTimeout;
	}

	public String getDomain() {
		return domain;
	}

	public void setDomain(String domain) {
		this.domain = domain;
	}

	public String getHost() {
		return host;
	}

	public void setHost(String host) {
		this.host = host;
	}

	public Set<String> getRoutes() {
		return routes;
	}

	public void setRoutes(Set<String> routes) {
		this.routes = routes;
	}

	public Duration getStagingTimeout() {
		return stagingTimeout;
	}

	public void setStagingTimeout(Duration stagingTimeout) {
		this.stagingTimeout = stagingTimeout;
	}

	public Duration getStartupTimeout() {
		return startupTimeout;
	}

	public void setStartupTimeout(Duration startupTimeout) {
		this.startupTimeout = startupTimeout;
	}

	public long getStatusTimeout() {
		return statusTimeout;
	}

	public void setStatusTimeout(long statusTimeout) {
		this.statusTimeout = statusTimeout;
	}

	public boolean isDeleteRoutes() {
		return deleteRoutes;
	}

	public void setDeleteRoutes(boolean deleteRoutes) {
		this.deleteRoutes = deleteRoutes;
	}

	public String getJavaOpts() {
		return javaOpts;
	}

	public void setJavaOpts(String javaOpts) {
		this.javaOpts = javaOpts;
	}

	public int getMaximumConcurrentTasks() {
		return maximumConcurrentTasks;
	}

	public void setMaximumConcurrentTasks(int maximumConcurrentTasks) {
		this.maximumConcurrentTasks = maximumConcurrentTasks;
	}

	public boolean isPushTaskAppsEnabled() {
		return pushTaskAppsEnabled;
	}

	public void setPushTaskAppsEnabled(boolean pushTaskAppsEnabled) {
		this.pushTaskAppsEnabled = pushTaskAppsEnabled;
	}

	public boolean isAutoDeleteMavenArtifacts() {
		return autoDeleteMavenArtifacts;
	}

	public void setAutoDeleteMavenArtifacts(boolean autoDeleteMavenArtifacts) {
		this.autoDeleteMavenArtifacts = autoDeleteMavenArtifacts;
	}

	public Map<String, String> getEnv() {
		return env.orElseGet(Collections::emptyMap);
	}

	public void setEnv(@NotNull Map<String, String> env) {
		this.env.map(e -> {
					log.error("Environment is immutable. New entries have not been applied");
					return this.env;
				}
		).orElse(this.env = Optional.of(Collections.unmodifiableMap(env)));
	}

	public String getSchedulerUrl() {
		return schedulerUrl;
	}

	public void setSchedulerUrl(String schedulerUrl) {
		thi
Download .txt
gitextract_rlk86ief/

├── .editorconfig
├── .github/
│   ├── actions/
│   │   └── trivy-scan/
│   │       └── action.yml
│   ├── dco.yml
│   ├── settings.xml
│   └── workflows/
│       ├── build-snapshot-worker.yml
│       ├── ci-it.yml
│       ├── ci-pr.yml
│       ├── ci.yml
│       ├── common-ci.yml
│       ├── issue-handler.yml
│       ├── k8s-versions.json
│       ├── milestone-worker.yml
│       ├── next-dev-version-worker.yml
│       └── release-worker.yml
├── .gitignore
├── .mvn/
│   ├── jvm.config
│   ├── maven.config
│   └── wrapper/
│       ├── maven-wrapper.jar
│       └── maven-wrapper.properties
├── .settings.xml
├── .trivyignore
├── CONTRIBUTING.adoc
├── LICENSE
├── NOTICE
├── README.adoc
├── SECURITY.md
├── mvnw
├── mvnw.cmd
├── pom.xml
├── spring-cloud-deployer-autoconfigure/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── springframework/
│       │   │           └── cloud/
│       │   │               └── deployer/
│       │   │                   └── autoconfigure/
│       │   │                       ├── DelegatingResourceLoaderBuilder.java
│       │   │                       ├── DelegatingResourceLoaderBuilderCustomizer.java
│       │   │                       ├── MavenConfigurationProperties.java
│       │   │                       └── ResourceLoadingAutoConfiguration.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── spring/
│       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       │           └── spring.factories
│       └── test/
│           └── java/
│               └── org/
│                   └── springframework/
│                       └── cloud/
│                           └── deployer/
│                               └── autoconfigure/
│                                   └── ResourceLoadingAutoConfigurationTests.java
├── spring-cloud-deployer-cloudfoundry/
│   ├── README.adoc
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── springframework/
│       │   │           └── cloud/
│       │   │               └── deployer/
│       │   │                   └── spi/
│       │   │                       ├── cloudfoundry/
│       │   │                       │   ├── AbstractCloudFoundryDeployer.java
│       │   │                       │   ├── AbstractCloudFoundryTaskLauncher.java
│       │   │                       │   ├── AppNameGenerator.java
│       │   │                       │   ├── ApplicationLogAccessor.java
│       │   │                       │   ├── CfEnvAwareAppDeploymentRequest.java
│       │   │                       │   ├── CfEnvAwareResource.java
│       │   │                       │   ├── CfEnvConfigurer.java
│       │   │                       │   ├── CloudFoundryActuatorTemplate.java
│       │   │                       │   ├── CloudFoundryAppDeployer.java
│       │   │                       │   ├── CloudFoundryAppInstanceStatus.java
│       │   │                       │   ├── CloudFoundryAppNameGenerator.java
│       │   │                       │   ├── CloudFoundryConnectionProperties.java
│       │   │                       │   ├── CloudFoundryDeployerAutoConfiguration.java
│       │   │                       │   ├── CloudFoundryDeploymentProperties.java
│       │   │                       │   ├── CloudFoundryPlatformSpecificInfo.java
│       │   │                       │   ├── CloudFoundryTaskLauncher.java
│       │   │                       │   ├── DurationConverter.java
│       │   │                       │   ├── ServiceParser.java
│       │   │                       │   └── UnsupportedVersionTaskLauncher.java
│       │   │                       └── scheduler/
│       │   │                           └── cloudfoundry/
│       │   │                               ├── CloudFoundryAppScheduler.java
│       │   │                               ├── CloudFoundryScheduleSSLException.java
│       │   │                               ├── CloudFoundrySchedulerProperties.java
│       │   │                               └── expression/
│       │   │                                   └── QuartzCronExpression.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── additional-spring-configuration-metadata.json
│       │           ├── spring/
│       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       │           └── spring.factories
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       ├── cloudfoundry/
│           │                       │   ├── AbstractAppDeployerTestSupport.java
│           │                       │   ├── ApplicationLogAccessorTests.java
│           │                       │   ├── CfEnvAwareResourceTests.java
│           │                       │   ├── CfEnvConfigurerTests.java
│           │                       │   ├── CloudFoundryActuatorTemplateTests.java
│           │                       │   ├── CloudFoundryAppDeployerIntegrationIT.java
│           │                       │   ├── CloudFoundryAppDeployerTests.java
│           │                       │   ├── CloudFoundryAppNameGeneratorTest.java
│           │                       │   ├── CloudFoundryConnectionPropertiesTests.java
│           │                       │   ├── CloudFoundryDeployerTests.java
│           │                       │   ├── CloudFoundryTaskLauncherCachingTests.java
│           │                       │   ├── CloudFoundryTaskLauncherIntegrationIT.java
│           │                       │   ├── CloudFoundryTaskLauncherTests.java
│           │                       │   └── ServiceParserTests.java
│           │                       └── scheduler/
│           │                           └── cloudfoundry/
│           │                               ├── CloudFoundryAppSchedulerTests.java
│           │                               ├── CloudFoundryScheduleSSLExceptionTests.java
│           │                               ├── CloudFoundrySchedulerPropertiesTest.java
│           │                               ├── SpringCloudSchedulerIntegrationIT.java
│           │                               └── expression/
│           │                                   └── QuartzCronExpressionTests.java
│           └── resources/
│               ├── batch-job-1.0.0.BUILD-SNAPSHOT.jar
│               ├── demo-0.0.1-SNAPSHOT.jar
│               ├── http-source-rabbit-2.1.5.RELEASE.jar
│               ├── log-sink-rabbit-3.0.0.BUILD-SNAPSHOT.jar
│               ├── logback-test.xml
│               ├── long-running-task-1.0.0.BUILD-SNAPSHOT.jar
│               ├── timestamp-task-1.0.0.BUILD-SNAPSHOT-exec-2.jar
│               ├── timestamp-task-1.0.0.BUILD-SNAPSHOT-exec-3.jar
│               ├── timestamp-task-1.0.0.BUILD-SNAPSHOT-exec.jar
│               └── timestamp-task-3.1.2-SNAPSHOT.jar
├── spring-cloud-deployer-dependencies/
│   └── pom.xml
├── spring-cloud-deployer-kubernetes/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── springframework/
│       │   │           └── cloud/
│       │   │               └── deployer/
│       │   │                   └── spi/
│       │   │                       └── kubernetes/
│       │   │                           ├── AbstractKubernetesDeployer.java
│       │   │                           ├── CommandProbeCreator.java
│       │   │                           ├── CompositeDeploymentStateResolver.java
│       │   │                           ├── ContainerConfiguration.java
│       │   │                           ├── ContainerFactory.java
│       │   │                           ├── DefaultContainerFactory.java
│       │   │                           ├── DefaultRunningPhaseDeploymentStateResolver.java
│       │   │                           ├── DeploymentPropertiesResolver.java
│       │   │                           ├── EntryPointStyle.java
│       │   │                           ├── HttpProbeCreator.java
│       │   │                           ├── ImagePullPolicy.java
│       │   │                           ├── KubernetesActuatorTemplate.java
│       │   │                           ├── KubernetesAppDeployer.java
│       │   │                           ├── KubernetesAppInstanceStatus.java
│       │   │                           ├── KubernetesAutoConfiguration.java
│       │   │                           ├── KubernetesClientFactory.java
│       │   │                           ├── KubernetesDeployerProperties.java
│       │   │                           ├── KubernetesScheduler.java
│       │   │                           ├── KubernetesSchedulerProperties.java
│       │   │                           ├── KubernetesTaskLauncher.java
│       │   │                           ├── KubernetesTaskLauncherProperties.java
│       │   │                           ├── LivenessCommandProbeCreator.java
│       │   │                           ├── LivenessHttpProbeCreator.java
│       │   │                           ├── LivenessTcpProbeCreator.java
│       │   │                           ├── PredicateRunningPhaseDeploymentStateResolver.java
│       │   │                           ├── ProbeAuthenticationType.java
│       │   │                           ├── ProbeCreator.java
│       │   │                           ├── ProbeCreatorFactory.java
│       │   │                           ├── ProbeType.java
│       │   │                           ├── ReadinessCommandProbeCreator.java
│       │   │                           ├── ReadinessHttpProbeCreator.java
│       │   │                           ├── ReadinessTcpProbeCreator.java
│       │   │                           ├── RestartPolicy.java
│       │   │                           ├── RunningPhaseDeploymentStateResolver.java
│       │   │                           ├── StartupCommandProbeCreator.java
│       │   │                           ├── StartupHttpProbeCreator.java
│       │   │                           ├── StartupTcpProbeCreator.java
│       │   │                           ├── TcpProbeCreator.java
│       │   │                           └── support/
│       │   │                               ├── ArgumentSanitizer.java
│       │   │                               ├── PropertyParserUtils.java
│       │   │                               └── RelaxedNames.java
│       │   └── resources/
│       │       └── META-INF/
│       │           ├── spring/
│       │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       │           └── spring.factories
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       └── kubernetes/
│           │                           ├── AbstractKubernetesTaskLauncherIntegrationTests.java
│           │                           ├── DefaultContainerFactoryTests.java
│           │                           ├── DeploymentPropertiesResolverTests.java
│           │                           ├── EntryPointStyleTests.java
│           │                           ├── ImagePullPolicyTests.java
│           │                           ├── KubernetesActuatorTemplateTests.java
│           │                           ├── KubernetesAppDeployerIntegrationIT.java
│           │                           ├── KubernetesAppDeployerTests.java
│           │                           ├── KubernetesConfigurationPropertiesTests.java
│           │                           ├── KubernetesDeployerPropertiesTests.java
│           │                           ├── KubernetesSchedulerIT.java
│           │                           ├── KubernetesSchedulerPropertiesTests.java
│           │                           ├── KubernetesTaskLauncherIntegrationIT.java
│           │                           ├── KubernetesTaskLauncherMaximumConcurrentTasksTests.java
│           │                           ├── KubernetesTaskLauncherWithJobIntegrationIT.java
│           │                           ├── PropertyParserUtilsTests.java
│           │                           └── RunAbstractKubernetesDeployerTests.java
│           └── resources/
│               ├── dataflow-server-configMapKeyRef.yml
│               ├── dataflow-server-containerSecurityContext.yml
│               ├── dataflow-server-nodeAffinity.yml
│               ├── dataflow-server-podAffinity.yml
│               ├── dataflow-server-podAntiAffinity.yml
│               ├── dataflow-server-podsecuritycontext.yml
│               ├── dataflow-server-secretKeyRef.yml
│               ├── dataflow-server-tolerations.yml
│               └── dataflow-server.yml
├── spring-cloud-deployer-local/
│   ├── README.adoc
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── org/
│       │   │       └── springframework/
│       │   │           └── cloud/
│       │   │               └── deployer/
│       │   │                   └── spi/
│       │   │                       └── local/
│       │   │                           ├── AbstractLocalDeployerSupport.java
│       │   │                           ├── CommandBuilder.java
│       │   │                           ├── DebugAddress.java
│       │   │                           ├── DeployerSocketUtils.java
│       │   │                           ├── DockerCommandBuilder.java
│       │   │                           ├── HttpProbeExecutor.java
│       │   │                           ├── JavaCommandBuilder.java
│       │   │                           ├── LocalActuatorTemplate.java
│       │   │                           ├── LocalAppDeployer.java
│       │   │                           ├── LocalDeployerAutoConfiguration.java
│       │   │                           ├── LocalDeployerProperties.java
│       │   │                           ├── LocalDeployerUtils.java
│       │   │                           └── LocalTaskLauncher.java
│       │   └── resources/
│       │       └── META-INF/
│       │           └── spring/
│       │               └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       └── local/
│           │                           ├── DebugAddressTests.java
│           │                           ├── DeployerSocketUtilsTests.java
│           │                           ├── DockerCommandBuilderTests.java
│           │                           ├── JavaExecutionCommandBuilderTests.java
│           │                           ├── LocalAppDeployerEnvironmentIntegrationTests.java
│           │                           ├── LocalAppDeployerIntegrationTests.java
│           │                           ├── LocalDeployerPropertiesTests.java
│           │                           ├── LocalDeployerSupportTests.java
│           │                           ├── LocalTaskLauncherIntegrationTests.java
│           │                           ├── RandomPortRangeContextTests.java
│           │                           ├── RandomPortRangeTests.java
│           │                           └── RandomPortTests.java
│           └── resources/
│               └── testResource.txt
├── spring-cloud-deployer-resource-docker/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── springframework/
│       │               └── cloud/
│       │                   └── deployer/
│       │                       └── resource/
│       │                           └── docker/
│       │                               ├── DockerResource.java
│       │                               └── DockerResourceLoader.java
│       └── test/
│           └── java/
│               └── org/
│                   └── springframework/
│                       └── cloud/
│                           └── deployer/
│                               └── resource/
│                                   └── docker/
│                                       ├── DockerResourceLoaderTests.java
│                                       └── DockerResourceTests.java
├── spring-cloud-deployer-resource-maven/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── springframework/
│       │               └── cloud/
│       │                   └── deployer/
│       │                       └── resource/
│       │                           └── maven/
│       │                               ├── LoggingRepositoryListener.java
│       │                               ├── MavenArtifactResolver.java
│       │                               ├── MavenProperties.java
│       │                               ├── MavenResource.java
│       │                               ├── MavenResourceLoader.java
│       │                               ├── StaticWagonConfigurator.java
│       │                               └── StaticWagonProvider.java
│       └── test/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── resource/
│           │                       └── maven/
│           │                           ├── MavenArtifactResolverTests.java
│           │                           ├── MavenExtension.java
│           │                           ├── MavenPropertiesTests.java
│           │                           ├── MavenResourceLoaderTests.java
│           │                           ├── MavenResourceTests.java
│           │                           └── WagonHttpTests.java
│           └── resources/
│               └── application.properties
├── spring-cloud-deployer-resource-support/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── springframework/
│       │               └── cloud/
│       │                   └── deployer/
│       │                       └── resource/
│       │                           ├── registry/
│       │                           │   ├── InMemoryUriRegistry.java
│       │                           │   ├── UriRegistry.java
│       │                           │   └── UriRegistryPopulator.java
│       │                           └── support/
│       │                               ├── DelegatingResourceLoader.java
│       │                               ├── DownloadingUrlResource.java
│       │                               ├── DownloadingUrlResourceLoader.java
│       │                               ├── ResourceNotResolvedException.java
│       │                               └── ShaUtils.java
│       └── test/
│           └── java/
│               └── org/
│                   └── springframework/
│                       └── cloud/
│                           └── deployer/
│                               └── resource/
│                                   ├── StubResourceLoader.java
│                                   ├── registry/
│                                   │   └── UriRegistryPopulatorTests.java
│                                   └── support/
│                                       ├── DelegatingResourceLoaderIntegrationTests.java
│                                       ├── DelegatingResourceLoaderTests.java
│                                       ├── DownloadingUrlResourceTests.java
│                                       └── ShaUtilsTests.java
├── spring-cloud-deployer-spi/
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── org/
│       │           └── springframework/
│       │               └── cloud/
│       │                   └── deployer/
│       │                       └── spi/
│       │                           ├── app/
│       │                           │   ├── AbstractActuatorTemplate.java
│       │                           │   ├── ActuatorOperations.java
│       │                           │   ├── AppAdmin.java
│       │                           │   ├── AppDeployer.java
│       │                           │   ├── AppInstanceStatus.java
│       │                           │   ├── AppScaleRequest.java
│       │                           │   ├── AppStatus.java
│       │                           │   ├── DeploymentState.java
│       │                           │   └── MultiStateAppDeployer.java
│       │                           ├── core/
│       │                           │   ├── AppDefinition.java
│       │                           │   ├── AppDeploymentRequest.java
│       │                           │   └── RuntimeEnvironmentInfo.java
│       │                           ├── scheduler/
│       │                           │   ├── CreateScheduleException.java
│       │                           │   ├── ScheduleInfo.java
│       │                           │   ├── ScheduleRequest.java
│       │                           │   ├── Scheduler.java
│       │                           │   ├── SchedulerException.java
│       │                           │   ├── SchedulerPropertyKeys.java
│       │                           │   └── UnScheduleException.java
│       │                           ├── task/
│       │                           │   ├── LaunchState.java
│       │                           │   ├── TaskLauncher.java
│       │                           │   └── TaskStatus.java
│       │                           └── util/
│       │                               ├── ByteSizeUtils.java
│       │                               ├── CommandLineTokenizer.java
│       │                               └── RuntimeVersionUtils.java
│       └── test/
│           └── java/
│               └── org/
│                   └── springframework/
│                       └── cloud/
│                           └── deployer/
│                               └── spi/
│                                   ├── app/
│                                   │   ├── AppDeployerTests.java
│                                   │   └── RuntimeEnvironmentInfoBuilderTests.java
│                                   ├── task/
│                                   │   └── TaskLauncherTests.java
│                                   └── util/
│                                       ├── ByteSizeUtilsTests.java
│                                       └── CommandLineTokenizerTests.java
├── spring-cloud-deployer-spi-scheduler-test-app/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       └── scheduler/
│           │                           └── test/
│           │                               └── app/
│           │                                   ├── SchedulerIntegrationTest.java
│           │                                   ├── SchedulerIntegrationTestApplication.java
│           │                                   └── SchedulerIntegrationTestProperties.java
│           └── resources/
│               └── application.properties
├── spring-cloud-deployer-spi-test/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       ├── scheduler/
│           │                       │   └── test/
│           │                       │       └── AbstractSchedulerIntegrationJUnit5Tests.java
│           │                       └── test/
│           │                           ├── AbstractAppDeployerIntegrationJUnit5Tests.java
│           │                           ├── AbstractIntegrationJUnit5Tests.java
│           │                           ├── AbstractTaskLauncherIntegrationJUnit5Tests.java
│           │                           └── Timeout.java
│           └── resources/
│               └── integration-test-app.properties
├── spring-cloud-deployer-spi-test-app/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── org/
│           │       └── springframework/
│           │           └── cloud/
│           │               └── deployer/
│           │                   └── spi/
│           │                       └── test/
│           │                           └── app/
│           │                               ├── DeployerIntegrationTest.java
│           │                               ├── DeployerIntegrationTestApplication.java
│           │                               └── DeployerIntegrationTestProperties.java
│           └── resources/
│               └── application.properties
└── src/
    ├── main/
    │   ├── java/
    │   │   └── org/
    │   │       └── springframework/
    │   │           └── cloud/
    │   │               └── deployer/
    │   │                   └── spi/
    │   │                       ├── kubernetes/
    │   │                       │   ├── DefaultContainerFactory.java
    │   │                       │   ├── HttpProbeCreator.java
    │   │                       │   ├── KubernetesAppDeployer.java
    │   │                       │   ├── KubernetesAppInstanceStatus.java
    │   │                       │   ├── KubernetesDeployerProperties.java
    │   │                       │   ├── LivenessCommandProbeCreator.java
    │   │                       │   ├── LivenessHttpProbeCreator.java
    │   │                       │   ├── LivenessTcpProbeCreator.java
    │   │                       │   ├── ProbeCreator.java
    │   │                       │   ├── ProbeCreatorFactory.java
    │   │                       │   ├── ReadinessCommandProbeCreator.java
    │   │                       │   ├── ReadinessHttpProbeCreator.java
    │   │                       │   └── ReadinessTcpProbeCreator.java
    │   │                       └── local/
    │   │                           ├── AbstractLocalDeployerSupport.java
    │   │                           ├── CommandBuilder.java
    │   │                           ├── DebugAddress.java
    │   │                           ├── DeployerSocketUtils.java
    │   │                           ├── DockerCommandBuilder.java
    │   │                           ├── HttpProbeExecutor.java
    │   │                           ├── JavaCommandBuilder.java
    │   │                           ├── LocalActuatorTemplate.java
    │   │                           ├── LocalAppDeployer.java
    │   │                           ├── LocalDeployerAutoConfiguration.java
    │   │                           ├── LocalDeployerProperties.java
    │   │                           ├── LocalDeployerUtils.java
    │   │                           └── LocalTaskLauncher.java
    │   └── resources/
    │       └── META-INF/
    │           ├── additional-spring-configuration-metadata.json
    │           ├── spring/
    │           │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
    │           └── spring.factories
    ├── scripts/
    │   ├── next-minor-parent-snapshot-version
    │   ├── next-minor-snapshot-version
    │   ├── next-parent-snapshot-version
    │   └── next-snapshot-version
    └── test/
        ├── java/
        │   └── org/
        │       └── springframework/
        │           └── cloud/
        │               └── deployer/
        │                   └── spi/
        │                       ├── kubernetes/
        │                       │   ├── DefaultContainerFactoryTests.java
        │                       │   ├── KubernetesAppDeployerIntegrationIT.java
        │                       │   ├── KubernetesAppDeployerTests.java
        │                       │   ├── KubernetesTaskLauncherIntegrationIT.java
        │                       │   └── KubernetesTaskLauncherWithJobIntegrationIT.java
        │                       └── local/
        │                           ├── DebugAddressTests.java
        │                           ├── DeployerSocketUtilsTests.java
        │                           ├── DockerCommandBuilderTests.java
        │                           ├── JavaExecutionCommandBuilderTests.java
        │                           ├── LocalAppDeployerEnvironmentIntegrationTests.java
        │                           ├── LocalAppDeployerIntegrationTests.java
        │                           ├── LocalDeployerPropertiesTests.java
        │                           ├── LocalDeployerSupportTests.java
        │                           ├── LocalTaskLauncherIntegrationTests.java
        │                           ├── RandomPortRangeContextTests.java
        │                           ├── RandomPortRangeTests.java
        │                           └── RandomPortTests.java
        └── resources/
            ├── dataflow-server-podsecuritycontext.yml
            └── testResource.txt
Download .txt
Showing preview only (336K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3737 symbols across 245 files)

FILE: spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/DelegatingResourceLoaderBuilder.java
  class DelegatingResourceLoaderBuilder (line 32) | public class DelegatingResourceLoaderBuilder {
    method loaders (line 42) | public DelegatingResourceLoaderBuilder loaders(Map<String, ResourceLoa...
    method loader (line 54) | public DelegatingResourceLoaderBuilder loader(String scheme, ResourceL...
    method build (line 64) | public DelegatingResourceLoader build() {

FILE: spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/DelegatingResourceLoaderBuilderCustomizer.java
  type DelegatingResourceLoaderBuilderCustomizer (line 27) | @FunctionalInterface
    method customize (line 35) | void customize(DelegatingResourceLoaderBuilder builder);

FILE: spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/MavenConfigurationProperties.java
  class MavenConfigurationProperties (line 27) | @ConfigurationProperties(prefix = "maven")

FILE: spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/ResourceLoadingAutoConfiguration.java
  class ResourceLoadingAutoConfiguration (line 36) | @Configuration
    class MavenResourceLoaderConfig (line 39) | @Configuration
      method mavenDelegatingResourceLoaderBuilderCustomizer (line 44) | @Bean
    class DelegatingResourceLoaderConfig (line 51) | @Configuration
      method DelegatingResourceLoaderConfig (line 57) | public DelegatingResourceLoaderConfig(
      method delegatingResourceLoader (line 62) | @Bean

FILE: spring-cloud-deployer-autoconfigure/src/test/java/org/springframework/cloud/deployer/autoconfigure/ResourceLoadingAutoConfigurationTests.java
  class ResourceLoadingAutoConfigurationTests (line 40) | public class ResourceLoadingAutoConfigurationTests {
    method getResource (line 44) | @Override
    method getClassLoader (line 49) | @Override
    method testAutoConfigNoProperties (line 71) | @Test
    method testMavenProperties (line 80) | @Test
    method testBuilderRegistration (line 88) | @Test
    method testBuilderOrderRegistration (line 96) | @Test
    class CustomBuilderCustomizerConfig (line 104) | @Configuration
      method foobarDelegatingResourceLoaderBuilderCustomizer (line 107) | @Bean
    class MavenReplacingBuilderCustomizerConfig (line 113) | @Configuration
      method foobarDelegatingResourceLoaderBuilderCustomizer (line 116) | @Bean

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/AbstractCloudFoundryDeployer.java
  class AbstractCloudFoundryDeployer (line 68) | class AbstractCloudFoundryDeployer {
    method AbstractCloudFoundryDeployer (line 79) | AbstractCloudFoundryDeployer(CloudFoundryDeploymentProperties deployme...
    method memory (line 84) | int memory(AppDeploymentRequest request) {
    method memory (line 90) | int memory(AppScaleRequest request) {
    method diskQuota (line 98) | int diskQuota(AppScaleRequest request) {
    method servicesToBind (line 106) | Set<String> servicesToBind(AppDeploymentRequest request) {
    method includesServiceParameters (line 122) | boolean includesServiceParameters(AppDeploymentRequest request) {
    method bindParameterizedServiceInstanceRequests (line 131) | Stream<BindServiceInstanceRequest> bindParameterizedServiceInstanceReq...
    method diskQuota (line 145) | int diskQuota(AppDeploymentRequest request) {
    method buildpacks (line 151) | Set<String> buildpacks(AppDeploymentRequest request) {
    method javaOpts (line 173) | String javaOpts(AppDeploymentRequest request) {
    method isNotFoundError (line 180) | Predicate<Throwable> isNotFoundError() {
    method getDockerImage (line 189) | String getDockerImage(AppDeploymentRequest request) {
    method getApplication (line 207) | Path getApplication(AppDeploymentRequest request) {
    method logError (line 227) | protected Consumer<Throwable> logError(String msg) {
    method statusRetry (line 243) | <T> Function<Mono<T>, Mono<T>> statusRetry(String id) {
    method deleteLocalApplicationResourceFile (line 292) | protected void deleteLocalApplicationResourceFile(AppDeploymentRequest...
    method fileToDelete (line 320) | private Optional<File> fileToDelete(Resource resource) throws IOExcept...
    method deleteFileOrDirectory (line 331) | private boolean deleteFileOrDirectory(File fileToDelete) {
    method mergeEnvironmentVariables (line 345) | protected Map<String, String> mergeEnvironmentVariables(String deploym...
    method getDeclaredEnvironmentVariables (line 364) | private Map<? extends String,? extends String> getDeclaredEnvironmentV...
    method hasCfEnv (line 373) | protected boolean hasCfEnv(Resource resource) {
    method getApplicationProperties (line 380) | private Map<String, String> getApplicationProperties(String deployment...
    method getSanitizedApplicationProperties (line 394) | private Map<String, String> getSanitizedApplicationProperties(String d...
    method useSpringApplicationJson (line 409) | private boolean useSpringApplicationJson(AppDeploymentRequest request) {
    method environmentInfo (line 418) | public RuntimeEnvironmentInfo environmentInfo() {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/AbstractCloudFoundryTaskLauncher.java
  class AbstractCloudFoundryTaskLauncher (line 51) | abstract class AbstractCloudFoundryTaskLauncher extends AbstractCloudFou...
    method AbstractCloudFoundryTaskLauncher (line 61) | AbstractCloudFoundryTaskLauncher(CloudFoundryClient client,
    method cancel (line 77) | @Override
    method status (line 92) | @Override
    method getRunningTaskExecutionCount (line 106) | @Override
    method getMaximumConcurrentTasks (line 125) | @Override
    method maxConcurrentExecutionsReached (line 130) | protected boolean maxConcurrentExecutionsReached() {
    method getStatus (line 134) | private Mono<TaskStatus> getStatus(String id) {
    method createErrorTaskStatus (line 145) | private TaskStatus createErrorTaskStatus(String id) {
    method toTaskStatus (line 149) | protected TaskStatus toTaskStatus(GetTaskResponse response) {
    method requestCancelTask (line 172) | private Mono<CancelTaskResponse> requestCancelTask(String taskId) {
    method requestGetTask (line 179) | private Mono<GetTaskResponse> requestGetTask(String taskId) {
    method organizationId (line 186) | private Mono<String> organizationId() {
    method spaceId (line 197) | private Mono<String> spaceId() {
    method cleanup (line 208) | @Override
    method destroy (line 213) | @Override

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/AppNameGenerator.java
  type AppNameGenerator (line 24) | public interface AppNameGenerator {
    method generateAppName (line 32) | String generateAppName(String appName);

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/ApplicationLogAccessor.java
  class ApplicationLogAccessor (line 41) | public class ApplicationLogAccessor {
    method ApplicationLogAccessor (line 48) | public ApplicationLogAccessor(LogCacheClient logCacheClient) {
    method getLog (line 59) | public String getLog(String deploymentId, Duration apiTimeout) {
    method responseToEnvelope (line 89) | private Flux<Log> responseToEnvelope(ReadResponse response) {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvAwareAppDeploymentRequest.java
  class CfEnvAwareAppDeploymentRequest (line 27) | class CfEnvAwareAppDeploymentRequest extends AppDeploymentRequest {
    method of (line 29) | static CfEnvAwareAppDeploymentRequest of(AppDeploymentRequest appDeplo...
    method CfEnvAwareAppDeploymentRequest (line 33) | private CfEnvAwareAppDeploymentRequest(AppDeploymentRequest appDeploym...

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvAwareResource.java
  class CfEnvAwareResource (line 44) | class CfEnvAwareResource implements Resource {
    method of (line 49) | static CfEnvAwareResource of(Resource resource) {
    method CfEnvAwareResource (line 52) | private CfEnvAwareResource(Resource resource) {
    method exists (line 57) | @Override
    method getURL (line 62) | @Override
    method getURI (line 67) | @Override
    method getFile (line 72) | @Override
    method contentLength (line 77) | @Override
    method lastModified (line 82) | @Override
    method createRelative (line 87) | @Override
    method getFilename (line 92) | @Override
    method getDescription (line 97) | @Override
    method getInputStream (line 102) | @Override
    method hasCfEnv (line 107) | boolean hasCfEnv() {
    class CfEnvResolver (line 115) | static class CfEnvResolver {
      method hasCfEnv (line 121) | static boolean hasCfEnv(CfEnvAwareResource app

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvConfigurer.java
  class CfEnvConfigurer (line 35) | class CfEnvConfigurer {
    method disableJavaBuildPackAutoReconfiguration (line 58) | static Map<String, String> disableJavaBuildPackAutoReconfiguration(Map...
    method activateCloudProfile (line 72) | static Map<String, String> activateCloudProfile(Map<String, String> en...
    method appendCloudProfileToSpringProfilesActiveArg (line 100) | static String appendCloudProfileToSpringProfilesActiveArg(String arg) {
    method appendToExistingEntry (line 110) | private static boolean appendToExistingEntry(Map<String, String> envir...
    method appendToValueIfPresent (line 119) | private static String appendToValueIfPresent(String current, String va...

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryActuatorTemplate.java
  class CloudFoundryActuatorTemplate (line 34) | public class CloudFoundryActuatorTemplate extends AbstractActuatorTempla...
    method CloudFoundryActuatorTemplate (line 36) | public CloudFoundryActuatorTemplate(RestTemplate restTemplate, AppDepl...
    method actuatorUrlForInstance (line 40) | @Override
    method httpHeadersForInstance (line 46) | @Override

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppDeployer.java
  class CloudFoundryAppDeployer (line 73) | public class CloudFoundryAppDeployer extends AbstractCloudFoundryDeploye...
    method CloudFoundryAppDeployer (line 88) | public CloudFoundryAppDeployer(
    method deploy (line 101) | @Override
    method states (line 138) | @Override
    method statesReactive (line 145) | @Override
    method mapShallowAppState (line 151) | private DeploymentState mapShallowAppState(ApplicationSummary applicat...
    method mergeEnvironmentVariables (line 161) | @Override
    method getCommandLineArguments (line 175) | private Map<String, String> getCommandLineArguments(AppDeploymentReque...
    method status (line 187) | @Override
    method statusReactive (line 200) | @Override
    method undeploy (line 205) | @Override
    method getLog (line 218) | @Override
    method scale (line 229) | @Override
    method assertApplicationDoesNotExist (line 250) | private void assertApplicationDoesNotExist(String deploymentId, AppSta...
    method assertApplicationExists (line 257) | private void assertApplicationExists(String deploymentId, AppStatus st...
    method createAppStatus (line 264) | private AppStatus createAppStatus(ApplicationDetail applicationDetail,...
    method createEmptyAppStatus (line 281) | private AppStatus createEmptyAppStatus(String deploymentId) {
    method createErrorAppStatus (line 286) | private AppStatus createErrorAppStatus(String deploymentId) {
    method deploymentId (line 292) | private String deploymentId(AppDeploymentRequest request) {
    method domain (line 302) | private String domain(AppDeploymentRequest request) {
    method getStatus (line 309) | private Mono<AppStatus> getStatus(String deploymentId) {
    method healthCheck (line 320) | private ApplicationHealthCheck healthCheck(AppDeploymentRequest reques...
    method healthCheckEndpoint (line 327) | private String healthCheckEndpoint(AppDeploymentRequest request) {
    method healthCheckTimeout (line 334) | private Integer healthCheckTimeout(AppDeploymentRequest request) {
    method host (line 341) | private String host(AppDeploymentRequest request) {
    method instances (line 347) | private int instances(AppDeploymentRequest request) {
    method pushApplication (line 353) | private Mono<Void> pushApplication(String deploymentId, AppDeploymentR...
    method pushApplicationWithNoServiceParameters (line 393) | private Mono<Void> pushApplicationWithNoServiceParameters(ApplicationM...
    method requestBind (line 404) | private Mono<Void> requestBind(BindServiceInstanceRequest bindRequest) {
    method pushApplicationWithServiceParameters (line 438) | private Mono<Void> pushApplicationWithServiceParameters(
    method requestDeleteApplication (line 469) | private Mono<Void> requestDeleteApplication(String id) {
    method requestGetApplication (line 477) | private Mono<ApplicationDetail> requestGetApplication(String id) {
    method getApplicationDetail (line 497) | private Mono<ApplicationDetail> getApplicationDetail(String id) {
    method requestPushApplication (line 504) | private Mono<Void> requestPushApplication(PushApplicationManifestReque...
    method requestSummary (line 509) | private Flux<ApplicationSummary> requestSummary() {
    method routePath (line 513) | private String routePath(AppDeploymentRequest request) {
    method route (line 522) | private String route(AppDeploymentRequest request) {
    method routes (line 526) | private Set<String> routes(AppDeploymentRequest request) {
    method toApplicationHealthCheck (line 534) | private ApplicationHealthCheck toApplicationHealthCheck(String raw) {
    method toggleNoRoute (line 543) | private Boolean toggleNoRoute(AppDeploymentRequest request) {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppInstanceStatus.java
  class CloudFoundryAppInstanceStatus (line 35) | public class CloudFoundryAppInstanceStatus implements AppInstanceStatus {
    method CloudFoundryAppInstanceStatus (line 60) | public CloudFoundryAppInstanceStatus(ApplicationDetail applicationDeta...
    method getId (line 66) | @Override
    method getState (line 71) | @Override
    method getAttributes (line 94) | @Override
    method toString (line 125) | @Override

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppNameGenerator.java
  class CloudFoundryAppNameGenerator (line 43) | public class CloudFoundryAppNameGenerator implements AppNameGenerator, I...
    method CloudFoundryAppNameGenerator (line 54) | public CloudFoundryAppNameGenerator(CloudFoundryDeploymentProperties c...
    method afterPropertiesSet (line 58) | @Override
    method generateAppName (line 74) | @Override
    method createUniquePrefix (line 84) | private String createUniquePrefix() {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryConnectionProperties.java
  class CloudFoundryConnectionProperties (line 31) | @Validated
    method getOrg (line 92) | public String getOrg() {
    method setOrg (line 96) | public void setOrg(String org) {
    method getSpace (line 100) | public String getSpace() {
    method setSpace (line 104) | public void setSpace(String space) {
    method getUrl (line 108) | public URL getUrl() {
    method setUrl (line 112) | public void setUrl(URL url) {
    method getClientId (line 116) | public String getClientId() {
    method setClientId (line 120) | public void setClientId(String clientId) {
    method getClientSecret (line 124) | public String getClientSecret() {
    method setClientSecret (line 128) | public void setClientSecret(String clientSecret) {
    method getUsername (line 132) | public String getUsername() {
    method setUsername (line 136) | public void setUsername(String username) {
    method getPassword (line 140) | public String getPassword() {
    method setPassword (line 144) | public void setPassword(String password) {
    method isSkipSslValidation (line 148) | public boolean isSkipSslValidation() {
    method setSkipSslValidation (line 152) | public void setSkipSslValidation(boolean skipSslValidation) {
    method getLoginHint (line 156) | public String getLoginHint() {
    method setLoginHint (line 160) | public void setLoginHint(String loginHint) {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryDeployerAutoConfiguration.java
  class CloudFoundryDeployerAutoConfiguration (line 61) | @Configuration
    method cloudFoundryOperations (line 71) | @Bean
    method runtimeEnvironmentInfo (line 81) | private RuntimeEnvironmentInfo runtimeEnvironmentInfo(Class spiClass, ...
    method appDeployer (line 102) | @Bean
    method actuatorOperations (line 117) | @Bean
    method actuatorRestTemplate (line 123) | @Bean
    method appDeploymentCustomizer (line 128) | @Bean
    method taskLauncher (line 134) | @Bean
    method logHelper (line 159) | @Bean
    method durationConverter (line 165) | @Bean
    class EarlyConnectionConfiguration (line 178) | @Configuration
      method appDeploymentProperties (line 182) | @Bean
      method taskDeploymentProperties (line 189) | @Bean
      method defaultSharedDeploymentProperties (line 195) | @Bean
      method version (line 201) | @Bean
      method cloudFoundryClient (line 215) | @Bean
      method logCacheClient (line 224) | @Bean
      method tokenProvider (line 233) | @Bean
      method cloudFoundryConnectionProperties (line 249) | @Bean
      method connectionContext (line 256) | @Bean

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryDeploymentProperties.java
  class CloudFoundryDeploymentProperties (line 47) | @Validated
    method getServices (line 243) | public Set<String> getServices() {
    method setServices (line 247) | public void setServices(Set<String> services) {
    method getBuildpack (line 251) | @Deprecated
    method setBuildpack (line 256) | @Deprecated
    method getBuildpacks (line 261) | public Set<String> getBuildpacks() {
    method setBuildpacks (line 265) | public void setBuildpacks(Set<String> buildpacks) {
    method getMemory (line 269) | public String getMemory() {
    method setMemory (line 273) | public void setMemory(String memory) {
    method getDisk (line 277) | public String getDisk() {
    method setDisk (line 281) | public void setDisk(String disk) {
    method getInstances (line 285) | public int getInstances() {
    method setInstances (line 289) | public void setInstances(int instances) {
    method isEnableRandomAppNamePrefix (line 293) | public boolean isEnableRandomAppNamePrefix() {
    method setEnableRandomAppNamePrefix (line 297) | public void setEnableRandomAppNamePrefix(boolean enableRandomAppNamePr...
    method getAppNamePrefix (line 301) | public String getAppNamePrefix() {
    method setAppNamePrefix (line 305) | public void setAppNamePrefix(String appNamePrefix) {
    method getApiTimeout (line 309) | public long getApiTimeout() {
    method setApiTimeout (line 313) | public void setApiTimeout(long apiTimeout) {
    method isUseSpringApplicationJson (line 317) | public boolean isUseSpringApplicationJson() {
    method setUseSpringApplicationJson (line 321) | public void setUseSpringApplicationJson(boolean useSpringApplicationJs...
    method getHealthCheck (line 325) | public ApplicationHealthCheck getHealthCheck() {
    method setHealthCheck (line 329) | public void setHealthCheck(ApplicationHealthCheck healthCheck) {
    method getHealthCheckHttpEndpoint (line 333) | public String getHealthCheckHttpEndpoint() {
    method setHealthCheckHttpEndpoint (line 337) | public void setHealthCheckHttpEndpoint(String healthCheckHttpEndpoint) {
    method getHealthCheckTimeout (line 341) | public String getHealthCheckTimeout() {
    method setHealthCheckTimeout (line 345) | public void setHealthCheckTimeout(String healthCheckTimeout) {
    method getDomain (line 349) | public String getDomain() {
    method setDomain (line 353) | public void setDomain(String domain) {
    method getHost (line 357) | public String getHost() {
    method setHost (line 361) | public void setHost(String host) {
    method getRoutes (line 365) | public Set<String> getRoutes() {
    method setRoutes (line 369) | public void setRoutes(Set<String> routes) {
    method getStagingTimeout (line 373) | public Duration getStagingTimeout() {
    method setStagingTimeout (line 377) | public void setStagingTimeout(Duration stagingTimeout) {
    method getStartupTimeout (line 381) | public Duration getStartupTimeout() {
    method setStartupTimeout (line 385) | public void setStartupTimeout(Duration startupTimeout) {
    method getStatusTimeout (line 389) | public long getStatusTimeout() {
    method setStatusTimeout (line 393) | public void setStatusTimeout(long statusTimeout) {
    method isDeleteRoutes (line 397) | public boolean isDeleteRoutes() {
    method setDeleteRoutes (line 401) | public void setDeleteRoutes(boolean deleteRoutes) {
    method getJavaOpts (line 405) | public String getJavaOpts() {
    method setJavaOpts (line 409) | public void setJavaOpts(String javaOpts) {
    method getMaximumConcurrentTasks (line 413) | public int getMaximumConcurrentTasks() {
    method setMaximumConcurrentTasks (line 417) | public void setMaximumConcurrentTasks(int maximumConcurrentTasks) {
    method isPushTaskAppsEnabled (line 421) | public boolean isPushTaskAppsEnabled() {
    method setPushTaskAppsEnabled (line 425) | public void setPushTaskAppsEnabled(boolean pushTaskAppsEnabled) {
    method isAutoDeleteMavenArtifacts (line 429) | public boolean isAutoDeleteMavenArtifacts() {
    method setAutoDeleteMavenArtifacts (line 433) | public void setAutoDeleteMavenArtifacts(boolean autoDeleteMavenArtifac...
    method getEnv (line 437) | public Map<String, String> getEnv() {
    method setEnv (line 441) | public void setEnv(@NotNull Map<String, String> env) {
    method getSchedulerUrl (line 449) | public String getSchedulerUrl() {
    method setSchedulerUrl (line 453) | public void setSchedulerUrl(String schedulerUrl) {
    method getScheduleSSLRetryCount (line 457) | public int getScheduleSSLRetryCount() {
    method setScheduleSSLRetryCount (line 461) | public void setScheduleSSLRetryCount(int scheduleSSLRetryCount) {
    method getUnScheduleTimeoutInSeconds (line 465) | public int getUnScheduleTimeoutInSeconds() {
    method setUnScheduleTimeoutInSeconds (line 469) | public void setUnScheduleTimeoutInSeconds(int unScheduleTimeoutInSecon...
    method getScheduleTimeoutInSeconds (line 473) | public int getScheduleTimeoutInSeconds() {
    method setScheduleTimeoutInSeconds (line 477) | public void setScheduleTimeoutInSeconds(int scheduleTimeoutInSeconds) {
    method getListTimeoutInSeconds (line 481) | public int getListTimeoutInSeconds() {
    method setListTimeoutInSeconds (line 485) | public void setListTimeoutInSeconds(int listTimeoutInSeconds) {
    method getAppAdmin (line 489) | public AppAdmin getAppAdmin() {
    method setAppAdmin (line 493) | public void setAppAdmin(AppAdmin appAdmin) {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryPlatformSpecificInfo.java
  class CloudFoundryPlatformSpecificInfo (line 27) | public class CloudFoundryPlatformSpecificInfo {
    method CloudFoundryPlatformSpecificInfo (line 42) | public CloudFoundryPlatformSpecificInfo(RuntimeEnvironmentInfo.Builder...
    method apiEndpoint (line 46) | public CloudFoundryPlatformSpecificInfo apiEndpoint(String apiEndpoint) {
    method org (line 51) | public CloudFoundryPlatformSpecificInfo org(String org) {
    method space (line 56) | public CloudFoundryPlatformSpecificInfo space(String space) {
    method builder (line 61) | public RuntimeEnvironmentInfo.Builder builder() {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryTaskLauncher.java
  class CloudFoundryTaskLauncher (line 63) | public class CloudFoundryTaskLauncher extends AbstractCloudFoundryTaskLa...
    method CloudFoundryTaskLauncher (line 75) | public CloudFoundryTaskLauncher(CloudFoundryClient client,
    method launch (line 94) | @Override
    method destroy (line 118) | @Override
    method getLog (line 132) | @Override
    method stage (line 149) | public SummaryApplicationResponse stage(AppDeploymentRequest request) {
    method getCommand (line 162) | public String getCommand(SummaryApplicationResponse application, AppDe...
    method escapeChar (line 179) | private String escapeChar(String value, String character) {
    method pushTaskAppsEnabled (line 186) | private boolean pushTaskAppsEnabled() {
    method deployApplication (line 190) | private Mono<AbstractApplicationSummary> deployApplication(AppDeployme...
    method getOptionalApplication (line 201) | private Mono<AbstractApplicationSummary> getOptionalApplication(AppDep...
    method getOrDeployApplication (line 221) | private Mono<SummaryApplicationResponse> getOrDeployApplication(AppDep...
    method launchTask (line 227) | private Mono<String> launchTask(SummaryApplicationResponse application...
    method pushApplication (line 236) | private Mono<Void> pushApplication(String name, AppDeploymentRequest r...
    method requestCreateTask (line 260) | private Mono<CreateTaskResponse> requestCreateTask(String applicationI...
    method requestDeleteApplication (line 271) | private Mono<Void> requestDeleteApplication(String name) {
    method requestGetApplication (line 279) | private Mono<ApplicationDetail> requestGetApplication(String name) {
    method requestGetApplicationSummary (line 286) | private Mono<SummaryApplicationResponse> requestGetApplicationSummary(...
    method requestListApplications (line 293) | private Flux<ApplicationSummary> requestListApplications() {
    method requestPushApplication (line 298) | private Mono<Void> requestPushApplication(PushApplicationManifestReque...
    method requestStopApplication (line 303) | private Mono<Void> requestStopApplication(String name) {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/DurationConverter.java
  class DurationConverter (line 30) | public class DurationConverter implements Converter <String, Duration> {
    method convert (line 32) | @Override

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/ServiceParser.java
  class ServiceParser (line 37) | abstract class ServiceParser {
    method getServiceParameters (line 47) | static Optional<Map<String, String>> getServiceParameters(String servi...
    method getServiceInstanceName (line 63) | static String getServiceInstanceName(String serviceSpec) {
    method splitServiceProperties (line 72) | static List<String> splitServiceProperties(String serviceProperties) {
    method parseParameters (line 96) | private static Optional<Map<String, String>> parseParameters(

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/UnsupportedVersionTaskLauncher.java
  class UnsupportedVersionTaskLauncher (line 35) | public class UnsupportedVersionTaskLauncher implements TaskLauncher {
    method UnsupportedVersionTaskLauncher (line 43) | public UnsupportedVersionTaskLauncher(Version actualVersion, RuntimeEn...
    method launch (line 48) | @Override
    method cancel (line 53) | @Override
    method status (line 58) | @Override
    method cleanup (line 63) | @Override
    method destroy (line 68) | @Override
    method environmentInfo (line 73) | @Override
    method getMaximumConcurrentTasks (line 77) | @Override
    method getRunningTaskExecutionCount (line 81) | @Override
    method getLog (line 86) | @Override
    method failure (line 91) | private UnsupportedOperationException failure() {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundryAppScheduler.java
  class CloudFoundryAppScheduler (line 72) | public class CloudFoundryAppScheduler implements Scheduler {
    method CloudFoundryAppScheduler (line 90) | @Deprecated
    method CloudFoundryAppScheduler (line 113) | public CloudFoundryAppScheduler(SchedulerClient client, CloudFoundryOp...
    method schedule (line 130) | @Override
    method unschedule (line 194) | @Override
    method list (line 203) | @Override
    method list (line 210) | @Override
    method scheduleTask (line 232) | private void scheduleTask(String appName, String scheduleName,
    method stageTask (line 271) | private String stageTask(ScheduleRequest scheduleRequest) {
    method getApplicationByAppName (line 287) | private Mono<AbstractApplicationSummary> getApplicationByAppName(Strin...
    method requestListApplications (line 297) | private Flux<ApplicationSummary> requestListApplications() {
    method cacheAppSummaries (line 305) | private Flux<ApplicationSummary> cacheAppSummaries() {
    method requestSpaces (line 314) | private Flux<SpaceSummary> requestSpaces() {
    method getSpace (line 324) | private Mono<SpaceSummary> getSpace(String spaceName) {
    method getApplication (line 337) | private Mono<ApplicationSummary> getApplication(Flux<ApplicationSummar...
    method getSchedules (line 353) | private Flux<ScheduleInfo> getSchedules(int pageNumber) {
    method getJobPageCount (line 385) | private int getJobPageCount() {
    method getJobMono (line 403) | private Mono<Job> getJobMono(String jobName, int page) {
    method getJob (line 421) | private String getJob(String jobName) {
    method retryTemplate (line 437) | private RetryTemplate retryTemplate() {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundryScheduleSSLException.java
  class CloudFoundryScheduleSSLException (line 24) | public class CloudFoundryScheduleSSLException extends RuntimeException {
    method CloudFoundryScheduleSSLException (line 26) | public CloudFoundryScheduleSSLException(String message, Throwable t) {
    method CloudFoundryScheduleSSLException (line 30) | public CloudFoundryScheduleSSLException(String t) {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundrySchedulerProperties.java
  class CloudFoundrySchedulerProperties (line 29) | @Validated
    method getSchedulerUrl (line 67) | public String getSchedulerUrl() {
    method setSchedulerUrl (line 71) | public void setSchedulerUrl(String schedulerUrl) {
    method getScheduleSSLRetryCount (line 75) | public int getScheduleSSLRetryCount() {
    method setScheduleSSLRetryCount (line 79) | public void setScheduleSSLRetryCount(int scheduleSSLRetryCount) {
    method getUnScheduleTimeoutInSeconds (line 83) | public int getUnScheduleTimeoutInSeconds() {
    method setUnScheduleTimeoutInSeconds (line 87) | public void setUnScheduleTimeoutInSeconds(int unScheduleTimeoutInSecon...
    method getScheduleTimeoutInSeconds (line 91) | public int getScheduleTimeoutInSeconds() {
    method setScheduleTimeoutInSeconds (line 95) | public void setScheduleTimeoutInSeconds(int scheduleTimeoutInSeconds) {
    method getListTimeoutInSeconds (line 99) | public int getListTimeoutInSeconds() {
    method setListTimeoutInSeconds (line 103) | public void setListTimeoutInSeconds(int listTimeoutInSeconds) {

FILE: spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/expression/QuartzCronExpression.java
  class QuartzCronExpression (line 40) | public final class QuartzCronExpression {
    method QuartzCronExpression (line 104) | public QuartzCronExpression(String cronExpression) throws ParseExcepti...
    method toString (line 119) | @Override
    method buildExpression (line 131) | protected void buildExpression(String expression) throws ParseException {
    method checkIncrementRange (line 216) | private void checkIncrementRange(int incr, int type, int idxPos) throw...
    method checkNext (line 230) | protected int checkNext(int pos, String s, int val, int type)
    method skipWhiteSpace (line 365) | protected int skipWhiteSpace(int i, String s) {
    method findNextWhiteSpace (line 373) | protected int findNextWhiteSpace(int i, String s) {
    method addToSet (line 381) | protected void addToSet(int val, int end, int incr, int type)
    method getSet (line 528) | TreeSet<Integer> getSet(int type) {
    method getValue (line 549) | protected ValueSet getValue(int v, String s, int i) {
    method getNumericValue (line 567) | protected int getNumericValue(String s, int i) {
    method getMonthNumber (line 573) | protected int getMonthNumber(String s) {
    method getDayOfWeekNumber (line 583) | protected int getDayOfWeekNumber(String s) {
    method storeExpressionVals (line 594) | protected int storeExpressionVals(int pos, String s, int type)
    class ValueSet (line 772) | public static class ValueSet {

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/AbstractAppDeployerTestSupport.java
  class AbstractAppDeployerTestSupport (line 48) | public abstract class AbstractAppDeployerTestSupport {
    method setUp (line 78) | @BeforeEach
    method postSetUp (line 88) | protected abstract void postSetUp();
    method givenRequestScaleApplication (line 90) | protected void givenRequestScaleApplication(String id, Integer count, ...
    method givenRequestDeleteApplication (line 99) | protected void givenRequestDeleteApplication(String id, Mono<Void> res...
    method givenRequestGetApplication (line 104) | @SuppressWarnings("unchecked")
    method givenRequestPushApplication (line 111) | protected void givenRequestPushApplication(PushApplicationManifestRequ...
    method defaultEnvironmentVariables (line 117) | protected Map<String, String> defaultEnvironmentVariables() {
    method addGuidAndIndex (line 124) | protected void addGuidAndIndex(Map<String, String> environmentVariable...

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/ApplicationLogAccessorTests.java
  class ApplicationLogAccessorTests (line 37) | @ExtendWith(MockitoExtension.class)
    method testDefaultCase (line 43) | @Test
    method getSampleResponse (line 52) | private Mono<ReadResponse> getSampleResponse(String sampleData) {
    method getSampleLog (line 58) | private Log getSampleLog(String sampleData) {

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvAwareResourceTests.java
  class CfEnvAwareResourceTests (line 36) | public class CfEnvAwareResourceTests {
    method testCfEnvResolverWithCfEnvJava17 (line 38) | @Test
    method testCfEnvResolverWithCfEnv (line 46) | @Test
    method testCfEnvResolverWithNoCfEnv (line 52) | @Test
    method testDoesNothingWithDocker (line 58) | @Test

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvConfigurerTests.java
  class CfEnvConfigurerTests (line 27) | public class CfEnvConfigurerTests {
    method testCfEnvConfigurerActivateCloudProfile (line 29) | @Test
    method testCfEnvConfigurerDoNotActivateCloudProfileIfNoneExists (line 40) | @Test
    method testCfEnvConfigurerActivateCloudProfileWithEmptyValue (line 49) | @Test
    method testCfEnvConfigurerAppendToActiveProfiles (line 62) | @Test
    method testCfEnvConfigurerDoesNotAppendCloudProfileIfAlreadyThere (line 73) | @Test
    method testCloudProfileAppendedToCommandLineArgs (line 88) | @Test

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryActuatorTemplateTests.java
  class CloudFoundryActuatorTemplateTests (line 42) | public class CloudFoundryActuatorTemplateTests extends AbstractAppDeploy...
    method postSetUp (line 49) | @Override
    method actuatorInfo (line 82) | @Test
    method actuatorBindings (line 89) | @Test
    method actuatorBindingInput (line 97) | @Test
    method actuatorPostBindingInput (line 104) | @Test
    method getUrl (line 112) | public static String getUrl(int port) {
    method findRandomOpenPort (line 115) | public static int findRandomOpenPort() {

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppDeployerIntegrationIT.java
  class CloudFoundryAppDeployerIntegrationIT (line 41) | @SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.NONE,
    method provideAppDeployer (line 49) | @Override
    method init (line 62) | @BeforeEach
    method testCommandLineArgumentsPassing (line 70) | @Override
    method randomName (line 76) | @Override
    method deploymentTimeout (line 83) | @Override
    method undeploymentTimeout (line 88) | @Override
    class Config (line 98) | @Configuration

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppDeployerTests.java
  class CloudFoundryAppDeployerTests (line 83) | public class CloudFoundryAppDeployerTests extends AbstractAppDeployerTes...
    method postSetUp (line 88) | @Override
    method deploy (line 96) | @SuppressWarnings("unchecked")
    method getLog (line 138) | @Test
    method getLogWithNoResult (line 150) | @Test
    method deployMavenArtifactShouldDeleteByDefault (line 162) | @Test
    method deployMavenArtifactShouldNotDeleteIfConfigured (line 177) | @Test
    method deployHttpArtifactShouldDelete (line 197) | @Test
    method deployResource (line 213) | @SuppressWarnings("unchecked")
    method deployWithServiceParameters (line 248) | @SuppressWarnings("unchecked")
    method deployWithServiceParametersAndBindingError (line 296) | @SuppressWarnings("unchecked")
    method deployWithAdditionalProperties (line 359) | @SuppressWarnings("unchecked")
    method deployWithAdditionalPropertiesInSpringApplicationJson (line 407) | @SuppressWarnings("unchecked")
    method deployWithDeployerEnvironmentVariables (line 453) | @Test
    method applicationDetailRunningApp (line 506) | private Mono<ApplicationDetail> applicationDetailRunningApp() {
    method automaticallyConfigureForCfEnv (line 520) | @Test
    method deployWithApplicationDeploymentProperties (line 541) | @SuppressWarnings("unchecked")
    method deployWithInvalidRoutePathProperty (line 597) | @SuppressWarnings("unchecked")
    method deployWithCustomDeploymentProperties (line 661) | @SuppressWarnings("unchecked")
    method deployWithMultipleRoutes (line 714) | @SuppressWarnings("unchecked")
    method deployWithMultipleRoutesAndHostOrDomainMutuallyExclusive (line 769) | @SuppressWarnings("unchecked")
    method deployWithGroup (line 797) | @SuppressWarnings("unchecked")
    method deployDockerResource (line 844) | @SuppressWarnings("unchecked")
    method statusOfCrashedApplicationIsFailed (line 885) | @SuppressWarnings("unchecked")
    method statusOfDownApplicationIsDeploying (line 905) | @SuppressWarnings("unchecked")
    method statusOfFlappingApplicationIsDeployed (line 925) | @SuppressWarnings("unchecked")
    method statusOfRunningApplicationIsDeployed (line 945) | @SuppressWarnings("unchecked")
    method statusOfStartingApplicationIsDeploying (line 972) | @SuppressWarnings("unchecked")
    method statusOfUnknownApplicationIsUnknown (line 992) | @SuppressWarnings("unchecked")
    method statusWithAbnormalInstanceStateThrowsException (line 1012) | @SuppressWarnings("unchecked")
    method statusWithFailingCAPICallRetries (line 1032) | @SuppressWarnings("unchecked")
    method statusWithFailingCAPICallRetriesEventualError (line 1060) | @SuppressWarnings("unchecked")
    method statusWithErrorThrownOnBlocking (line 1089) | @SuppressWarnings("unchecked")
    method undeploy (line 1115) | @SuppressWarnings("unchecked")
    method scale (line 1135) | @SuppressWarnings("unchecked")

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppNameGeneratorTest.java
  class CloudFoundryAppNameGeneratorTest (line 27) | public class CloudFoundryAppNameGeneratorTest {
    method testDeploymentIdWithAppNamePrefixAndRandomAppNamePrefixFalse (line 29) | @Test
    method testDeploymentIdWithAppNamePrefixAndRandomAppNamePrefixTrue (line 41) | @Test
    method testDeploymentIdWithoutAppNamePrefixAndRandomAppNamePrefixTrue (line 58) | @Test
    method testDeploymentIdWithoutAppNamePrefixAndRandomAppNamePrefixFalse (line 71) | @Test

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryConnectionPropertiesTests.java
  class CloudFoundryConnectionPropertiesTests (line 33) | public class CloudFoundryConnectionPropertiesTests {
    method setAllProperties (line 37) | @Test
    class Config1 (line 69) | @EnableConfigurationProperties
      method testCloudFoundryConnectionProperties (line 72) | @Bean
    class TestCloudFoundryConnectionProperties (line 79) | private static class TestCloudFoundryConnectionProperties extends Clou...

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryDeployerTests.java
  class CloudFoundryDeployerTests (line 37) | public class CloudFoundryDeployerTests {
    method testBuildpacksDefault (line 45) | @Test
    method testBuildpacksSingleMultiLogic (line 55) | @Test
    class TestCloudFoundryDeployer (line 84) | private static class TestCloudFoundryDeployer extends AbstractCloudFou...
      method TestCloudFoundryDeployer (line 86) | TestCloudFoundryDeployer(CloudFoundryDeploymentProperties deployment...

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryTaskLauncherCachingTests.java
  class CloudFoundryTaskLauncherCachingTests (line 55) | public class CloudFoundryTaskLauncherCachingTests {
    method testOrgSpaceCachingRetries (line 57) | @Test
    method listOrganizationsResponse (line 109) | private Mono<ListOrganizationsResponse> listOrganizationsResponse(Atom...
    method listSpacesResponse (line 125) | private Mono<ListSpacesResponse> listSpacesResponse(AtomicBoolean erro...
    method runningTasksResponse (line 141) | private Mono<ListTasksResponse> runningTasksResponse() {

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryTaskLauncherIntegrationIT.java
  class CloudFoundryTaskLauncherIntegrationIT (line 46) | @ContextConfiguration(classes=CloudFoundryTaskLauncherIntegrationIT.Conf...
    method init (line 63) | @BeforeEach
    method provideTaskLauncher (line 74) | @Override
    method pause (line 83) | @AfterEach
    method testSimpleCancel (line 88) | @Test
    method deploymentTimeout (line 95) | @Override
    method undeploymentTimeout (line 100) | @Override
    class Config (line 112) | @Configuration

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryTaskLauncherTests.java
  class CloudFoundryTaskLauncherTests (line 106) | public class CloudFoundryTaskLauncherTests {
    method setUp (line 141) | @BeforeEach
    method getCloudFoundryTaskLauncher (line 170) | private CloudFoundryTaskLauncher getCloudFoundryTaskLauncher(Applicati...
    method cancel (line 188) | @Test
    method currentExecutionCount (line 205) | @Test
    method launchTaskApplicationExists (line 210) | @Test
    method stageTaskApplicationExists (line 235) | @Test
    method launchTaskWithNonExistentApplication (line 261) | @Test
    method launchExistingTaskApplicationWithPushDisabled (line 268) | @Test
    method launchNonExistingTaskApplicationWithPushDisabled (line 276) | @Test
    method stageTaskWithNonExistentApplication (line 285) | @Test
    method automaticallyConfigureForCfEnv (line 294) | @Test
    method launchTaskWithNonExistentApplicationAndApplicationListingFails (line 314) | @Test
    method stageTaskWithNonExistentApplicationAndApplicationListingFails (line 324) | @Test
    method launchTaskWithNonExistentApplicationAndPushFails (line 334) | @Test
    method stageTaskWithNonExistentApplicationAndPushFails (line 343) | @Test
    method launchTaskWithNonExistentApplicationAndRetrievingApplicationSummaryFails (line 352) | @Test
    method stageTaskWithNonExistentApplicationAndRetrievingApplicationSummaryFails (line 361) | @Test
    method launchTaskWithNonExistentApplicationAndStoppingApplicationFails (line 370) | @Test
    method stageTaskWithNonExistentApplicationAndStoppingApplicationFails (line 379) | @Test
    method launchTaskWithNonExistentApplicationAndTaskCreationFails (line 388) | @Test
    method launchTaskWithNonExistentApplicationBindingOneService (line 440) | @Test
    method stageTaskWithNonExistentApplicationBindingOneService (line 450) | @Test
    method launchTaskWithNonExistentApplicationBindingThreeServices (line 461) | @Test
    method stageTaskWithNonExistentApplicationBindingThreeServices (line 472) | @Test
    method launchTaskWithNonExistentApplicationRetrievalFails (line 484) | @Test
    method stageTaskWithNonExistentApplicationRetrievalFails (line 493) | @Test
    method status (line 502) | @Test
    method getDefaultGetTaskResponse (line 514) | private Mono<GetTaskResponse> getDefaultGetTaskResponse() {
    method statusTimeout (line 532) | @Test
    method destroyApp (line 554) | @Test
    method commandProperlyConfigured (line 561) | @Test
    method getLog (line 595) | @Test
    method getLogForUnknownId (line 599) | @Test
    method getLogWithUnknownTaskAppGuid (line 613) | @Test
    method givenRequestCancelTask (line 636) | private void givenRequestCancelTask(String taskId, Mono<CancelTaskResp...
    method givenRequestCreateTask (line 644) | private void givenRequestCreateTask(String applicationId,
    method givenRequestDeleteApplication (line 662) | private void givenRequestDeleteApplication(String appName) {
    method givenRequestGetApplication (line 671) | private void givenRequestGetApplication(String name, Mono<ApplicationD...
    method givenRequestGetApplicationSummary (line 679) | private void givenRequestGetApplicationSummary(String applicationId, M...
    method givenRequestGetTask (line 687) | private void givenRequestGetTask(String taskId, Mono<GetTaskResponse> ...
    method givenRequestListApplications (line 695) | private void givenRequestListApplications(Flux<ApplicationSummary> res...
    method givenRequestPushApplication (line 701) | private void givenRequestPushApplication(PushApplicationManifestReques...
    method givenRequestStopApplication (line 707) | private void givenRequestStopApplication(String name, Mono<Void> respo...
    method setupExistingAppSuccessful (line 715) | private void setupExistingAppSuccessful() {
    method setupTaskWithNonExistentApplication (line 749) | private void setupTaskWithNonExistentApplication(Resource resource) th...
    method setupFailedPush (line 806) | private void setupFailedPush(Resource resource) throws IOException{
    method setupTaskWithNonExistentApplicationAndRetrievingApplicationSummaryFails (line 828) | private void setupTaskWithNonExistentApplicationAndRetrievingApplicati...
    method setupTaskWithNonExistentApplicationAndStoppingApplicationFails (line 866) | private void setupTaskWithNonExistentApplicationAndStoppingApplication...
    method setupTaskWithNonExistentApplicationBindingOneService (line 902) | private void setupTaskWithNonExistentApplicationBindingOneService(Reso...
    method setupTaskWithNonExistentApplicationBindingThreeServices (line 959) | private void setupTaskWithNonExistentApplicationBindingThreeServices(R...
    method setupTaskWithNonExistentApplicationRetrievalFails (line 1017) | public void setupTaskWithNonExistentApplicationRetrievalFails(Resource...
    method defaultRequest (line 1042) | private AppDeploymentRequest defaultRequest() {
    method deploymentRequest (line 1045) | private AppDeploymentRequest deploymentRequest(Resource resource, Map<...
    method runningTasksResponse (line 1050) | private Mono<ListTasksResponse> runningTasksResponse() {
    method listOrganizationsResponse (line 1070) | private Mono<ListOrganizationsResponse> listOrganizationsResponse() {
    method listSpacesResponse (line 1079) | private Mono<ListSpacesResponse> listSpacesResponse() {

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/ServiceParserTests.java
  class ServiceParserTests (line 29) | public class ServiceParserTests {
    method plainService (line 31) | @Test
    method plainServiceWithSpecialCharacters (line 37) | @Test
    method serviceWithParameters (line 42) | @Test
    method getServiceInstanceName (line 49) | @Test
    method serviceWithSpacesParameters (line 55) | @Test
    method serviceWithEqualsInParameters (line 61) | @Test
    method realWorldExample (line 67) | @Test
    method anotherRealWorldExample (line 82) | @Test
    method serviceWithInvalidParameters (line 96) | @Test
    method splitServiceProperties (line 104) | @Test

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundryAppSchedulerTests.java
  class CloudFoundryAppSchedulerTests (line 93) | public class CloudFoundryAppSchedulerTests {
    method setUp (line 140) | @BeforeEach
    method testEmptySchedulerProperties (line 166) | @ParameterizedTest
    method testCreateNoCommandLineArgs (line 178) | @ParameterizedTest
    method testInvalidCron (line 194) | @ParameterizedTest
    method testNameTooLong (line 216) | @ParameterizedTest
    method testSuccessJobCreateFailedSchedule (line 245) | @ParameterizedTest
    method testCreateWithCommandLineArgs (line 265) | @ParameterizedTest
    method testList (line 284) | @ParameterizedTest
    method testListWithJobsNoAssociatedSchedule (line 294) | @ParameterizedTest
    method testListWithNoSchedules (line 304) | @ParameterizedTest
    method testListSchedulesWithAppName (line 314) | @ParameterizedTest
    method testListSchedulesWithInvalidAppName (line 323) | @ParameterizedTest
    method testUnschedule (line 331) | @ParameterizedTest
    method testMissingScheduleDelete (line 344) | @ParameterizedTest
    method testNoServiceList (line 359) | @ParameterizedTest
    method testNoServiceListSchedulesWithAppName (line 368) | @ParameterizedTest
    method testNoServiceCreate (line 377) | @ParameterizedTest
    method givenRequestListApplications (line 393) | private void givenRequestListApplications(Flux<ApplicationSummary> res...
    method verifyScheduleInfo (line 399) | private void verifyScheduleInfo(ScheduleInfo scheduleInfo, String task...
    class TestSchedulerClient (line 411) | private static class TestSchedulerClient implements SchedulerClient {
      method TestSchedulerClient (line 414) | public TestSchedulerClient() {
      method calls (line 418) | @Override
      method jobs (line 423) | @Override
    class NoServiceTestSchedulerClient (line 429) | private static class NoServiceTestSchedulerClient implements Scheduler...
      method NoServiceTestSchedulerClient (line 432) | public NoServiceTestSchedulerClient() {
      method calls (line 436) | @Override
      method jobs (line 441) | @Override
    class NoServiceTestJobs (line 447) | private static class NoServiceTestJobs extends TestJobs {
      method list (line 448) | @Override
      method create (line 453) | @Override
    class TestJobs (line 459) | private static class TestJobs implements Jobs {
      method create (line 466) | @Override
      method delete (line 482) | @Override
      method deleteSchedule (line 493) | @Override
      method execute (line 498) | @Override
      method get (line 503) | @Override
      method list (line 508) | @Override
      method listHistories (line 517) | @Override
      method listScheduleHistories (line 522) | @Override
      method listSchedules (line 527) | @Override
      method schedule (line 536) | @Override
      method getCreateJobResponse (line 549) | public CreateJobResponse getCreateJobResponse() {
    method getTestSpaces (line 557) | private Flux<SpaceSummary> getTestSpaces() {
    method setupMockResults (line 563) | private void setupMockResults() {
    method setupMockResultsNoScheduleForJobs (line 568) | private void setupMockResultsNoScheduleForJobs() {
    method mockAppResultsInAppList (line 573) | private void mockAppResultsInAppList() {
    method mockJobsInJobListNoSchedule (line 594) | private void mockJobsInJobListNoSchedule() {
    method mockJobsInJobList (line 608) | private void mockJobsInJobList() {
    method createJobScheduleList (line 624) | private List<JobSchedule> createJobScheduleList(String jobId, String s...
    method getDefaultScheduleProperties (line 636) | private Map<String, String> getDefaultScheduleProperties() {
    method getDefaultDeploymentProperties (line 642) | private Map<String, String> getDefaultDeploymentProperties() {
    method getCloudFoundryAppScheduler (line 648) | private CloudFoundryAppScheduler getCloudFoundryAppScheduler(boolean i...
    method getNoServiceCloudFoundryAppScheduler (line 652) | private CloudFoundryAppScheduler getNoServiceCloudFoundryAppScheduler(...

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundryScheduleSSLExceptionTests.java
  class CloudFoundryScheduleSSLExceptionTests (line 29) | public class CloudFoundryScheduleSSLExceptionTests {
    method testExceptionMessageOnly (line 31) | @Test
    method testExceptionMessageWithException (line 41) | @Test

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundrySchedulerPropertiesTest.java
  class CloudFoundrySchedulerPropertiesTest (line 28) | public class CloudFoundrySchedulerPropertiesTest {
    method testProperties (line 30) | @Test
    method testEmptyProperties (line 45) | @Test

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/SpringCloudSchedulerIntegrationIT.java
  class SpringCloudSchedulerIntegrationIT (line 58) | @ExtendWith(SpringExtension.class)
    method provideScheduler (line 72) | @Override
    method getCommandLineArgs (line 80) | @Override
    method getSchedulerProperties (line 85) | @Override
    method getDeploymentProperties (line 90) | @Override
    method getAppProperties (line 98) | @Override
    method tearDown (line 106) | @AfterEach
    class Config (line 128) | @Configuration
      method reactorSchedulerClient (line 132) | @Bean
      method scheduler (line 144) | @Bean

FILE: spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/expression/QuartzCronExpressionTests.java
  class QuartzCronExpressionTests (line 26) | public class QuartzCronExpressionTests {
    method testStoreExpressionVal (line 31) | @Test
    method testWildCard (line 39) | @Test
    method testForInvalidLInCronExpression (line 52) | @Test
    method testForLargeWVal (line 68) | @Test
    method testSecRangeIntervalAfterSlash (line 74) | @Test
    method testMinRangeIntervalAfterSlash (line 90) | @Test
    method testHourRangeIntervalAfterSlash (line 106) | @Test
    method testDayOfMonthRangeIntervalAfterSlash (line 122) | @Test
    method testMonthRangeIntervalAfterSlash (line 138) | @Test
    method testDayOfWeekRangeIntervalAfterSlash (line 154) | @Test
    method assertExpression (line 170) | private static void assertExpression(String expression, String message...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/AbstractKubernetesDeployer.java
  class AbstractKubernetesDeployer (line 72) | public class AbstractKubernetesDeployer {
    method createRuntimeEnvironmentInfo (line 101) | protected RuntimeEnvironmentInfo createRuntimeEnvironmentInfo(Class sp...
    method createIdMap (line 122) | Map<String, String> createIdMap(String appId, AppDeploymentRequest req...
    method buildAppStatus (line 141) | protected AppStatus buildAppStatus(String id, PodList podList, Service...
    method logPossibleDownloadResourceMessage (line 173) | protected void logPossibleDownloadResourceMessage(Resource resource) {
    method createPodSpec (line 186) | PodSpec createPodSpec(AppDeploymentRequest appDeploymentRequest) {
    method getExternalPort (line 333) | int getExternalPort(final AppDeploymentRequest request) {
    method createDeploymentId (line 343) | String createDeploymentId(AppDeploymentRequest request) {
    method getProbeCredentialsSecret (line 361) | Secret getProbeCredentialsSecret(Map<String, String> kubernetesDeploye...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/CommandProbeCreator.java
  class CommandProbeCreator (line 30) | abstract class CommandProbeCreator extends ProbeCreator {
    method CommandProbeCreator (line 31) | CommandProbeCreator(KubernetesDeployerProperties kubernetesDeployerPro...
    method getCommand (line 36) | abstract String[] getCommand();
    method create (line 38) | protected Probe create() {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/CompositeDeploymentStateResolver.java
  class CompositeDeploymentStateResolver (line 26) | class CompositeDeploymentStateResolver implements RunningPhaseDeployment...
    method CompositeDeploymentStateResolver (line 29) | CompositeDeploymentStateResolver(RunningPhaseDeploymentStateResolver.....
    method resolve (line 33) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ContainerConfiguration.java
  class ContainerConfiguration (line 28) | public class ContainerConfiguration {
    method ContainerConfiguration (line 35) | public ContainerConfiguration(String appId, AppDeploymentRequest appDe...
    method getAppDeploymentRequest (line 40) | public AppDeploymentRequest getAppDeploymentRequest() {
    method getAppId (line 44) | public String getAppId() {
    method isHostNetwork (line 48) | public boolean isHostNetwork() {
    method withHostNetwork (line 52) | public ContainerConfiguration withHostNetwork(boolean isHostNetwork) {
    method withExternalPort (line 57) | public ContainerConfiguration withExternalPort(Integer externalPort) {
    method getExternalPort (line 62) | public Integer getExternalPort() {
    method withProbeCredentialsSecret (line 66) | public ContainerConfiguration withProbeCredentialsSecret(Secret probeC...
    method getProbeCredentialsSecret (line 71) | public Secret getProbeCredentialsSecret() {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ContainerFactory.java
  type ContainerFactory (line 29) | public interface ContainerFactory {
    method create (line 36) | Container create(ContainerConfiguration containerConfiguration);

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/DefaultContainerFactory.java
  class DefaultContainerFactory (line 61) | public class DefaultContainerFactory implements ContainerFactory {
    method DefaultContainerFactory (line 68) | public DefaultContainerFactory(KubernetesDeployerProperties properties) {
    method create (line 72) | @Override
    method getGUIDEnvVar (line 207) | private EnvVar getGUIDEnvVar() {
    method configureReadinessProbe (line 221) | private void configureReadinessProbe(ContainerConfiguration containerC...
    method configureStartupProbe (line 245) | private void configureStartupProbe(ContainerConfiguration containerCon...
    method configureLivenessProbe (line 269) | private void configureLivenessProbe(ContainerConfiguration containerCo...
    method getProbeType (line 293) | private ProbeType getProbeType(ContainerConfiguration containerConfigu...
    method createCommandArgs (line 307) | List<String> createCommandArgs(AppDeploymentRequest request) {
    method getArgOption (line 335) | private String getArgOption(String arg) {
    method getDeploymentPropertiesResolver (line 341) | private DeploymentPropertiesResolver getDeploymentPropertiesResolver(A...
    method getDeploymentProperties (line 349) | private Map<String, String> getDeploymentProperties(AppDeploymentReque...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/DefaultRunningPhaseDeploymentStateResolver.java
  class DefaultRunningPhaseDeploymentStateResolver (line 24) | public class DefaultRunningPhaseDeploymentStateResolver extends Composit...
    method DefaultRunningPhaseDeploymentStateResolver (line 26) | public DefaultRunningPhaseDeploymentStateResolver(KubernetesDeployerPr...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/DeploymentPropertiesResolver.java
  class DeploymentPropertiesResolver (line 90) | class DeploymentPropertiesResolver {
    method DeploymentPropertiesResolver (line 98) | DeploymentPropertiesResolver(String propertyPrefix, KubernetesDeployer...
    method getPropertyPrefix (line 103) | String getPropertyPrefix() {
    method getTolerations (line 107) | List<Toleration> getTolerations(Map<String, String> kubernetesDeployer...
    method getVolumes (line 142) | List<Volume> getVolumes(Map<String, String> kubernetesDeployerProperti...
    method deduceResourceLimits (line 170) | Map<String, Quantity> deduceResourceLimits(Map<String, String> kuberne...
    method deduceImagePullPolicy (line 214) | ImagePullPolicy deduceImagePullPolicy(Map<String, String> kubernetesDe...
    method deduceResourceRequests (line 242) | Map<String, Quantity> deduceResourceRequests(Map<String, String> kuber...
    method getStatefulSetVolumeClaimTemplateName (line 283) | String getStatefulSetVolumeClaimTemplateName(Map<String, String> kuber...
    method getStatefulSetStorageClassName (line 300) | String getStatefulSetStorageClassName(Map<String, String> kubernetesDe...
    method getStatefulSetStorage (line 317) | String getStatefulSetStorage(Map<String, String> kubernetesDeployerPro...
    method getHostNetwork (line 334) | boolean getHostNetwork(Map<String, String> kubernetesDeployerPropertie...
    method getNodeSelectors (line 357) | Map<String, String> getNodeSelectors(Map<String, String> deploymentPro...
    method getImagePullPolicy (line 387) | String getImagePullPolicy(Map<String, String> kubernetesDeployerProper...
    method getImagePullSecret (line 392) | String getImagePullSecret(Map<String, String> kubernetesDeployerProper...
    method getImagePullSecrets (line 403) | List<String> getImagePullSecrets(Map<String, String> kubernetesDeploye...
    method getDeploymentServiceAccountName (line 415) | String getDeploymentServiceAccountName(Map<String, String> kubernetesD...
    method getShareProcessNamespace (line 426) | Boolean getShareProcessNamespace(Map<String, String> kubernetesDeploye...
    method getPriorityClassName (line 432) | String getPriorityClassName(Map<String, String> kubernetesDeployerProp...
    method getPodSecurityContext (line 438) | PodSecurityContext getPodSecurityContext(Map<String, String> kubernete...
    method buildPodSecurityContext (line 452) | private PodSecurityContext buildPodSecurityContext(KubernetesDeployerP...
    method getContainerSecurityContext (line 489) | SecurityContext getContainerSecurityContext(Map<String, String> kubern...
    method buildContainerSecurityContext (line 503) | private SecurityContext buildContainerSecurityContext(KubernetesDeploy...
    method getAffinityRules (line 541) | Affinity getAffinityRules(Map<String, String> kubernetesDeployerProper...
    method getInitContainers (line 597) | Collection<Container> getInitContainers(Map<String, String> kubernetes...
    method initContainerFromProperties (line 654) | private @Nullable Container initContainerFromProperties(Map<String, St...
    method getFirstProperty (line 673) | public static String getFirstProperty(Map<String, String> kubeProps, S...
    method containerFromProps (line 683) | private Container containerFromProps(InitContainer initContainerProps) {
    method toEnvironmentVariables (line 703) | private List<EnvVar>  toEnvironmentVariables(String[] environmentVaria...
    method toEnvironmentVariablesFromFieldRef (line 720) | private List<EnvVar> toEnvironmentVariablesFromFieldRef(String[] envir...
    method getAdditionalContainers (line 736) | List<Container> getAdditionalContainers(Map<String, String> deployment...
    method getPodAnnotations (line 758) | Map<String, String> getPodAnnotations(Map<String, String> kubernetesDe...
    method getServiceAnnotations (line 769) | Map<String, String> getServiceAnnotations(Map<String, String> kubernet...
    method getDeploymentLabels (line 780) | Map<String, String> getDeploymentLabels(Map<String, String> kubernetes...
    method getRestartPolicy (line 804) | RestartPolicy getRestartPolicy(Map<String, String> kubernetesDeployerP...
    method getTaskServiceAccountName (line 815) | String getTaskServiceAccountName(Map<String, String> kubernetesDeploye...
    method bindProperties (line 833) | private static KubernetesDeployerProperties bindProperties(Map<String,...
    method getStatefulSetInitContainerImageName (line 857) | String getStatefulSetInitContainerImageName(Map<String, String> kubern...
    method getJobAnnotations (line 874) | Map<String, String> getJobAnnotations(Map<String, String> kubernetesDe...
    method getVolumeMounts (line 899) | List<VolumeMount> getVolumeMounts(Map<String, String> deploymentProper...
    method getInitContainerVolumeMounts (line 918) | private List<VolumeMount> getInitContainerVolumeMounts(Map<String, Str...
    method getVolumeMounts (line 925) | private List<VolumeMount> getVolumeMounts(String propertyValue) {
    method getContainerCommand (line 959) | List<String> getContainerCommand(Map<String, String> deploymentPropert...
    method getLifeCycle (line 971) | KubernetesDeployerProperties.Lifecycle getLifeCycle(Map<String,String>...
    method lifecycleHook (line 992) | private KubernetesDeployerProperties.Lifecycle.Hook lifecycleHook(Stri...
    method determineTerminationGracePeriodSeconds (line 1005) | Long determineTerminationGracePeriodSeconds(Map<String, String> deploy...
    method getContainerPorts (line 1018) | List<Integer> getContainerPorts(Map<String, String> deploymentProperti...
    method getAppEnvironmentVariables (line 1039) | Map<String, String> getAppEnvironmentVariables(Map<String, String> dep...
    class NestedCommaDelimitedVariableParser (line 1057) | static class NestedCommaDelimitedVariableParser {
      method parse (line 1061) | String[] parse(String value) {
    method determineEntryPointStyle (line 1084) | EntryPointStyle determineEntryPointStyle(Map<String, String> deploymen...
    method determineProbeType (line 1104) | ProbeType determineProbeType(Map<String, String> deploymentProperties) {
    method getConfigMapKeyRefs (line 1116) | List<EnvVar> getConfigMapKeyRefs(Map<String, String> deploymentPropert...
    method buildConfigMapKeyRefEnvVar (line 1133) | private EnvVar buildConfigMapKeyRefEnvVar(ConfigMapKeyRef configMapKey...
    method getSecretKeyRefs (line 1148) | List<EnvVar> getSecretKeyRefs(Map<String, String> deploymentProperties) {
    method buildSecretKeyRefEnvVar (line 1166) | private EnvVar buildSecretKeyRefEnvVar(SecretKeyRef secretKeyRef) {
    method getConfigMapRefs (line 1181) | List<EnvFromSource> getConfigMapRefs(Map<String, String> deploymentPro...
    method buildConfigMapRefEnvVar (line 1200) | private EnvFromSource buildConfigMapRefEnvVar(String configMapRefName) {
    method getSecretRefs (line 1210) | List<EnvFromSource> getSecretRefs(Map<String, String> deploymentProper...
    method buildSecretRefEnvVar (line 1229) | private EnvFromSource buildSecretRefEnvVar(String secretRefName) {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/EntryPointStyle.java
  type EntryPointStyle (line 32) | public enum EntryPointStyle {
    method relaxedValueOf (line 58) | public static EntryPointStyle relaxedValueOf(String entryPointStyle) {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/HttpProbeCreator.java
  class HttpProbeCreator (line 38) | public abstract class HttpProbeCreator extends ProbeCreator {
    method HttpProbeCreator (line 49) | HttpProbeCreator(KubernetesDeployerProperties kubernetesDeployerProper...
    method getProbePath (line 54) | protected abstract String getProbePath();
    method getPort (line 56) | protected abstract Integer getPort();
    method getScheme (line 58) | protected abstract String getScheme();
    method getTimeout (line 60) | protected abstract int getTimeout();
    method create (line 62) | protected Probe create() {
    method getHttpHeaders (line 85) | private List<HTTPHeader> getHttpHeaders() {
    method getAuthorizationHeader (line 97) | private HTTPHeader getAuthorizationHeader() {
    method getDefaultPort (line 117) | Integer getDefaultPort() {
    method useBoot1ProbePath (line 121) | boolean useBoot1ProbePath() {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ImagePullPolicy.java
  type ImagePullPolicy (line 31) | public enum ImagePullPolicy {
    method relaxedValueOf (line 44) | public static ImagePullPolicy relaxedValueOf(String name) {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesActuatorTemplate.java
  class KubernetesActuatorTemplate (line 29) | public class KubernetesActuatorTemplate extends AbstractActuatorTemplate {
    method KubernetesActuatorTemplate (line 31) | public KubernetesActuatorTemplate(RestTemplate restTemplate, AppDeploy...
    method actuatorUrlForInstance (line 36) | protected String actuatorUrlForInstance(AppInstanceStatus appInstanceS...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAppDeployer.java
  class KubernetesAppDeployer (line 99) | public class KubernetesAppDeployer extends AbstractKubernetesDeployer im...
    method KubernetesAppDeployer (line 103) | public KubernetesAppDeployer(KubernetesDeployerProperties properties, ...
    method KubernetesAppDeployer (line 107) | public KubernetesAppDeployer(KubernetesDeployerProperties properties, ...
    method deploy (line 116) | @Override
    method undeploy (line 150) | @Override
    method status (line 172) | @Override
    method getLog (line 198) | @Override
    method scale (line 226) | @Override
    method environmentInfo (line 252) | @Override
    method createDeployment (line 257) | private Deployment createDeployment(AppDeploymentRequest request) {
    method getCountFromRequest (line 289) | private int getCountFromRequest(AppDeploymentRequest request) {
    method createStatefulSet (line 299) | protected void createStatefulSet(AppDeploymentRequest request) {
    method createService (line 359) | protected void createService(AppDeploymentRequest request) {
    method getServiceName (line 460) | private String getServiceName(AppDeploymentRequest request, String app...
    method formatServiceName (line 487) | private String formatServiceName(AppDeploymentRequest request, String ...
    method addAdditionalServicePorts (line 496) | private Set<ServicePort> addAdditionalServicePorts(String additionalSe...
    method createStatefulSetInitContainer (line 523) | private Container createStatefulSetInitContainer(PodSpec podSpec, Stri...
    method setIndexProperty (line 549) | private String setIndexProperty(String name) {
    method deleteAllObjects (line 555) | private void deleteAllObjects(String appIdToDelete) {
    method deleteService (line 568) | private void deleteService(Map<String, String> labels) {
    method deleteDeployment (line 580) | private void deleteDeployment(Map<String, String> labels) {
    method deleteStatefulSet (line 592) | private void deleteStatefulSet(Map<String, String> labels) {
    method deletePod (line 604) | private void deletePod(Map<String, String> labels) {
    method deletePvc (line 616) | private void deletePvc(Map<String, String> labels) {
    method waitForLoadBalancerReady (line 628) | private void waitForLoadBalancerReady(Map<String, String> labels) {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAppInstanceStatus.java
  class KubernetesAppInstanceStatus (line 44) | public class KubernetesAppInstanceStatus implements AppInstanceStatus {
    method KubernetesAppInstanceStatus (line 58) | @Deprecated
    method KubernetesAppInstanceStatus (line 72) | public KubernetesAppInstanceStatus(Pod pod, Service service, Kubernete...
    method setRunningPhaseDeploymentStateResolver (line 87) | public void setRunningPhaseDeploymentStateResolver(
    method getId (line 92) | @Override
    method getState (line 97) | @Override
    method mapState (line 105) | private DeploymentState mapState() {
    method getAttributes (line 131) | @Override
    method nullSafe (line 200) | private String nullSafe(String value) {
    method determineActuatorPathFromLivenessProbe (line 204) | private String determineActuatorPathFromLivenessProbe(Pod pod) {
    method determineActuatorPortFromLivenessProbe (line 214) | private String determineActuatorPortFromLivenessProbe(Pod pod, String ...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAutoConfiguration.java
  class KubernetesAutoConfiguration (line 41) | @Configuration
    method appDeployer (line 52) | @Bean
    method taskDeployer (line 59) | @Bean
    method kubernetesClient (line 66) | @Bean
    method containerFactory (line 72) | @Bean
    method actuatorOperations (line 77) | @Bean
    method actuatorRestTemplate (line 84) | @Bean

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesClientFactory.java
  class KubernetesClientFactory (line 29) | public class KubernetesClientFactory {
    method getKubernetesClient (line 31) | public static KubernetesClient getKubernetesClient(KubernetesDeployerP...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesDeployerProperties.java
  class KubernetesDeployerProperties (line 47) | @ConfigurationProperties(prefix = KubernetesDeployerProperties.KUBERNETE...
    method getFabric8 (line 72) | public Config getFabric8() {
    method setFabric8 (line 76) | public void setFabric8(Config fabric8) {
    class LimitsResources (line 83) | public static class LimitsResources {
      method LimitsResources (line 124) | public LimitsResources() {
      method LimitsResources (line 136) | public LimitsResources(String cpu, String memory, String ephemeralSt...
      method getCpu (line 146) | public String getCpu() {
      method setCpu (line 150) | public void setCpu(String cpu) {
      method getMemory (line 154) | public String getMemory() {
      method setMemory (line 158) | public void setMemory(String memory) {
      method getEphemeralStorage (line 162) | public String getEphemeralStorage() {
      method setEphemeralStorage (line 166) | public void setEphemeralStorage(String ephemeralStorage) {
      method getHugepages2Mi (line 170) | public String getHugepages2Mi() {
      method setHugepages2Mi (line 174) | public void setHugepages2Mi(String hugepages2Mi) {
      method getHugepages1Gi (line 178) | public String getHugepages1Gi() {
      method setHugepages1Gi (line 182) | public void setHugepages1Gi(String hugepages1Gi) {
      method getGpuVendor (line 186) | public String getGpuVendor() {
      method setGpuVendor (line 190) | public void setGpuVendor(String gpuVendor) {
      method getGpuCount (line 194) | public String getGpuCount() {
      method setGpuCount (line 198) | public void setGpuCount(String gpuCount) {
    class RequestsResources (line 206) | public static class RequestsResources {
      method RequestsResources (line 234) | public RequestsResources() {
      method RequestsResources (line 238) | @Deprecated
      method getCpu (line 247) | public String getCpu() {
      method setCpu (line 251) | public void setCpu(String cpu) {
      method getMemory (line 255) | public String getMemory() {
      method setMemory (line 259) | public void setMemory(String memory) {
      method getEphemeralStorage (line 263) | public String getEphemeralStorage() {
      method setEphemeralStorage (line 267) | public void setEphemeralStorage(String ephemeralStorage) {
      method getHugepages2Mi (line 271) | public String getHugepages2Mi() {
      method setHugepages2Mi (line 275) | public void setHugepages2Mi(String hugepages2Mi) {
      method getHugepages1Gi (line 279) | public String getHugepages1Gi() {
      method setHugepages1Gi (line 283) | public void setHugepages1Gi(String hugepages1Gi) {
    class StatefulSet (line 288) | public static class StatefulSet {
      method getVolumeClaimTemplate (line 292) | public VolumeClaimTemplate getVolumeClaimTemplate() {
      method setVolumeClaimTemplate (line 296) | public void setVolumeClaimTemplate(VolumeClaimTemplate volumeClaimTe...
      class VolumeClaimTemplate (line 300) | public static class VolumeClaimTemplate {
        method getName (line 317) | public String getName() {
        method setName (line 321) | public void setName(String name) {
        method getStorage (line 325) | public String getStorage() {
        method setStorage (line 329) | public void setStorage(String storage) {
        method getStorageClassName (line 333) | public String getStorageClassName() {
        method setStorageClassName (line 337) | public void setStorageClassName(String storageClassName) {
    class Toleration (line 343) | public static class Toleration {
      method getEffect (line 355) | public String getEffect() {
      method setEffect (line 359) | public void setEffect(String effect) {
      method getKey (line 363) | public String getKey() {
      method setKey (line 367) | public void setKey(String key) {
      method getOperator (line 371) | public String getOperator() {
      method setOperator (line 375) | public void setOperator(String operator) {
      method getTolerationSeconds (line 379) | public Long getTolerationSeconds() {
      method setTolerationSeconds (line 383) | public void setTolerationSeconds(Long tolerationSeconds) {
      method getValue (line 387) | public String getValue() {
      method setValue (line 391) | public void setValue(String value) {
    class KeyRef (line 396) | static class KeyRef {
      method setEnvVarName (line 401) | public void setEnvVarName(String envVarName) {
      method getEnvVarName (line 405) | public String getEnvVarName() {
      method setDataKey (line 409) | public void setDataKey(String dataKey) {
      method getDataKey (line 413) | public String getDataKey() {
    class SecretKeyRef (line 418) | public static class SecretKeyRef extends KeyRef {
      method setSecretName (line 421) | public void setSecretName(String secretName) {
      method getSecretName (line 425) | public String getSecretName() {
    class ConfigMapKeyRef (line 430) | public static class ConfigMapKeyRef extends KeyRef {
      method setConfigMapName (line 433) | public void setConfigMapName(String configMapName) {
      method getConfigMapName (line 437) | public String getConfigMapName() {
    class PodSecurityContext (line 442) | public static class PodSecurityContext {
      method setRunAsUser (line 495) | public void setRunAsUser(Long runAsUser) {
      method getRunAsUser (line 499) | public Long getRunAsUser() {
      method getRunAsGroup (line 503) | public Long getRunAsGroup() {
      method setRunAsGroup (line 507) | public void setRunAsGroup(Long runAsGroup) {
      method getRunAsNonRoot (line 511) | public Boolean getRunAsNonRoot() {
      method setRunAsNonRoot (line 515) | public void setRunAsNonRoot(Boolean runAsNonRoot) {
      method setFsGroup (line 519) | public void setFsGroup(Long fsGroup) {
      method getFsGroup (line 523) | public Long getFsGroup() {
      method getFsGroupChangePolicy (line 527) | public String getFsGroupChangePolicy() {
      method setFsGroupChangePolicy (line 531) | public void setFsGroupChangePolicy(String fsGroupChangePolicy) {
      method setSupplementalGroups (line 535) | public void setSupplementalGroups(Long[] supplementalGroups) {
      method getSupplementalGroups (line 539) | public Long[] getSupplementalGroups() {
      method getSeccompProfile (line 543) | public SeccompProfile getSeccompProfile() {
      method setSeccompProfile (line 547) | public void setSeccompProfile(SeccompProfile seccompProfile) {
      method getSeLinuxOptions (line 551) | public SELinuxOptions getSeLinuxOptions() {
      method setSeLinuxOptions (line 555) | public void setSeLinuxOptions(SELinuxOptions seLinuxOptions) {
      method getSysctls (line 559) | public List<SysctlInfo> getSysctls() {
      method setSysctls (line 563) | public void setSysctls(List<SysctlInfo> sysctls) {
      method getWindowsOptions (line 567) | public WindowsSecurityContextOptions getWindowsOptions() {
      method setWindowsOptions (line 571) | public void setWindowsOptions(WindowsSecurityContextOptions windowsO...
    class ContainerSecurityContext (line 576) | public static class ContainerSecurityContext {
      method getAllowPrivilegeEscalation (line 633) | public Boolean getAllowPrivilegeEscalation() {
      method setAllowPrivilegeEscalation (line 637) | public void setAllowPrivilegeEscalation(Boolean allowPrivilegeEscala...
      method getCapabilities (line 641) | public Capabilities getCapabilities() {
      method setCapabilities (line 645) | public void setCapabilities(Capabilities capabilities) {
      method getPrivileged (line 649) | public Boolean getPrivileged() {
      method setPrivileged (line 653) | public void setPrivileged(Boolean privileged) {
      method getProcMount (line 657) | public String getProcMount() {
      method setProcMount (line 661) | public void setProcMount(String procMount) {
      method getReadOnlyRootFilesystem (line 665) | public Boolean getReadOnlyRootFilesystem() {
      method setReadOnlyRootFilesystem (line 669) | public void setReadOnlyRootFilesystem(Boolean readOnlyRootFilesystem) {
      method getRunAsUser (line 673) | public Long getRunAsUser() {
      method setRunAsUser (line 677) | public void setRunAsUser(Long runAsUser) {
      method getRunAsGroup (line 681) | public Long getRunAsGroup() {
      method setRunAsGroup (line 685) | public void setRunAsGroup(Long runAsGroup) {
      method getRunAsNonRoot (line 689) | public Boolean getRunAsNonRoot() {
      method setRunAsNonRoot (line 693) | public void setRunAsNonRoot(Boolean runAsNonRoot) {
      method getSeccompProfile (line 697) | public SeccompProfile getSeccompProfile() {
      method setSeccompProfile (line 701) | public void setSeccompProfile(SeccompProfile seccompProfile) {
      method getSeLinuxOptions (line 705) | public SELinuxOptions getSeLinuxOptions() {
      method setSeLinuxOptions (line 709) | public void setSeLinuxOptions(SELinuxOptions seLinuxOptions) {
      method getWindowsOptions (line 713) | public WindowsSecurityContextOptions getWindowsOptions() {
      method setWindowsOptions (line 717) | public void setWindowsOptions(WindowsSecurityContextOptions windowsO...
    class Capabilities (line 725) | public static class Capabilities {
      method getAdd (line 736) | public List<String> getAdd() {
      method setAdd (line 740) | public void setAdd(List<String> add) {
      method getDrop (line 744) | public List<String> getDrop() {
      method setDrop (line 748) | public void setDrop(List<String> drop) {
    class SeccompProfile (line 756) | public static class SeccompProfile {
      method getType (line 768) | public String getType() {
      method setType (line 772) | public void setType(String type) {
      method getLocalhostProfile (line 776) | public String getLocalhostProfile() {
      method setLocalhostProfile (line 780) | public void setLocalhostProfile(String localhostProfile) {
    class SELinuxOptions (line 788) | public static class SELinuxOptions {
      method getLevel (line 809) | public String getLevel() {
      method setLevel (line 813) | public void setLevel(String level) {
      method getRole (line 817) | public String getRole() {
      method setRole (line 821) | public void setRole(String role) {
      method getType (line 825) | public String getType() {
      method setType (line 829) | public void setType(String type) {
      method getUser (line 833) | public String getUser() {
      method setUser (line 837) | public void setUser(String user) {
    class SysctlInfo (line 845) | public static class SysctlInfo {
      method getName (line 856) | public String getName() {
      method setName (line 860) | public void setName(String name) {
      method getValue (line 864) | public String getValue() {
      method setValue (line 868) | public void setValue(String value) {
    class WindowsSecurityContextOptions (line 876) | public static class WindowsSecurityContextOptions {
      method getGmsaCredentialSpec (line 899) | public String getGmsaCredentialSpec() {
      method setGmsaCredentialSpec (line 903) | public void setGmsaCredentialSpec(String gmsaCredentialSpec) {
      method getGmsaCredentialSpecName (line 907) | public String getGmsaCredentialSpecName() {
      method setGmsaCredentialSpecName (line 911) | public void setGmsaCredentialSpecName(String gmsaCredentialSpecName) {
      method getHostProcess (line 915) | public Boolean getHostProcess() {
      method setHostProcess (line 919) | public void setHostProcess(Boolean hostProcess) {
      method getRunAsUserName (line 923) | public String getRunAsUserName() {
      method setRunAsUserName (line 927) | public void setRunAsUserName(String runAsUserName) {
    class Lifecycle (line 932) | public static class Lifecycle {
      method getPreStop (line 936) | Hook getPreStop() {
      method getPostStart (line 940) | Hook getPostStart() {
      method setPostStart (line 944) | void setPostStart(Hook postStart) {
      method setPreStop (line 948) | void setPreStop(Hook preStop) {
      class Hook (line 953) | public static class Hook {
        method getExec (line 956) | Exec getExec() {
        method setExec (line 960) | void setExec(Exec exec) {
      class Exec (line 965) | public static class Exec {
        method getCommand (line 968) | List<String> getCommand() {
        method setCommand (line 972) | void setCommand(List<String> command) {
    class InitContainer (line 978) | public static class InitContainer extends ContainerProperties {
    class Container (line 981) | static class Container extends io.fabric8.kubernetes.api.model.Contain...
    class ContainerProperties (line 984) | public static class ContainerProperties {
      method getName (line 1005) | public String getName() {
      method setName (line 1009) | public void setName(String name) {
      method getImageName (line 1012) | @Deprecated
      method setImageName (line 1016) | @Deprecated
      method getImage (line 1020) | public String getImage() {
      method setImage (line 1024) | public void setImage(String image) {
      method getContainerName (line 1028) | @Deprecated
      method setContainerName (line 1033) | @Deprecated
      method getCommand (line 1038) | public List<String> getCommand() {
      method setCommand (line 1042) | public void setCommand(List<String> command) {
      method getCommands (line 1045) | @Deprecated
      method setCommands (line 1050) | @Deprecated
      method getArgs (line 1055) | public List<String> getArgs() {
      method setArgs (line 1059) | public void setArgs(List<String> args) {
      method getVolumeMounts (line 1063) | public List<VolumeMount> getVolumeMounts() {
      method setVolumeMounts (line 1067) | public void setVolumeMounts(List<VolumeMount> volumeMounts) {
      method getEnvironmentVariables (line 1071) | public String[] getEnvironmentVariables() {
      method setEnvironmentVariables (line 1075) | public void setEnvironmentVariables(String[] environmentVariables) {
      method getEnvironmentVariablesFromFieldRefs (line 1079) | public String[] getEnvironmentVariablesFromFieldRefs() {
      method setEnvironmentVariablesFromFieldRefs (line 1083) | public void setEnvironmentVariablesFromFieldRefs(String[] environmen...
      method getConfigMapRefEnvVars (line 1087) | public String[] getConfigMapRefEnvVars() {
      method setConfigMapRefEnvVars (line 1091) | public void setConfigMapRefEnvVars(String[] configMapRefEnvVars) {
      method getSecretRefEnvVars (line 1095) | public String[] getSecretRefEnvVars() {
      method setSecretRefEnvVars (line 1099) | public void setSecretRefEnvVars(String[] secretRefEnvVars) {
    method getRestartPolicy (line 1126) | public RestartPolicy getRestartPolicy() {
    method setRestartPolicy (line 1135) | public void setRestartPolicy(RestartPolicy restartPolicy) {
    method getTaskServiceAccountName (line 1144) | public String getTaskServiceAccountName() {
    method setTaskServiceAccountName (line 1153) | public void setTaskServiceAccountName(String taskServiceAccountName) {
    method getNamespace (line 1629) | public String getNamespace() {
    method setNamespace (line 1633) | public void setNamespace(String namespace) {
    method getImagePullSecret (line 1637) | public String getImagePullSecret() {
    method setImagePullSecret (line 1641) | public void setImagePullSecret(String imagePullSecret) {
    method getImagePullSecrets (line 1645) | public List<String> getImagePullSecrets() {
    method setImagePullSecrets (line 1649) | public void setImagePullSecrets(List<String> imagePullSecrets) {
    class CronConfig (line 1653) | public static class CronConfig {
      method getConcurrencyPolicy (line 1660) | public String getConcurrencyPolicy() {
      method setConcurrencyPolicy (line 1664) | public void setConcurrencyPolicy(String concurrencyPolicy) {
      method getTtlSecondsAfterFinished (line 1668) | public Integer getTtlSecondsAfterFinished() {
      method setTtlSecondsAfterFinished (line 1672) | public void setTtlSecondsAfterFinished(Integer ttlSecondsAfterFinish...
      method getBackoffLimit (line 1676) | public Integer getBackoffLimit() {
      method setBackoffLimit (line 1680) | public void setBackoffLimit(Integer backoffLimit) {
    method getShareProcessNamespace (line 1685) | public Boolean getShareProcessNamespace() {
    method setShareProcessNamespace (line 1689) | public void setShareProcessNamespace(Boolean shareProcessNamespace) {
    method getPriorityClassName (line 1693) | public String getPriorityClassName() {
    method setPriorityClassName (line 1697) | public void setPriorityClassName(String priorityClassName) {
    method getLivenessTcpProbeSuccess (line 1701) | public int getLivenessTcpProbeSuccess() {
    method setLivenessTcpProbeSuccess (line 1705) | public void setLivenessTcpProbeSuccess(int livenessTcpProbeSuccess) {
    method getLivenessTcpProbeFailure (line 1709) | public int getLivenessTcpProbeFailure() {
    method setLivenessTcpProbeFailure (line 1713) | public void setLivenessTcpProbeFailure(int livenessTcpProbeFailure) {
    method getLivenessHttpProbeDelay (line 1717) | public int getLivenessHttpProbeDelay() {
    method setLivenessHttpProbeDelay (line 1721) | public void setLivenessHttpProbeDelay(int livenessHttpProbeDelay) {
    method getLivenessTcpProbeTimeout (line 1725) | public int getLivenessTcpProbeTimeout() {
    method setLivenessTcpProbeTimeout (line 1729) | public void setLivenessTcpProbeTimeout(int livenessTcpProbeTimeout) {
    method getLivenessHttpProbePeriod (line 1734) | public int getLivenessHttpProbePeriod() {
    method setLivenessHttpProbePeriod (line 1738) | public void setLivenessHttpProbePeriod(int livenessHttpProbePeriod) {
    method getLivenessHttpProbeTimeout (line 1742) | public int getLivenessHttpProbeTimeout() {
    method setLivenessHttpProbeTimeout (line 1746) | public void setLivenessHttpProbeTimeout(int livenessHttpProbeTimeout) {
    method getLivenessHttpProbePath (line 1750) | public String getLivenessHttpProbePath() {
    method setLivenessHttpProbePath (line 1754) | public void setLivenessHttpProbePath(String livenessHttpProbePath) {
    method getLivenessHttpProbePort (line 1758) | public Integer getLivenessHttpProbePort() {
    method setLivenessHttpProbePort (line 1762) | public void setLivenessHttpProbePort(Integer livenessHttpProbePort) {
    method getStartupHttpProbeTimeout (line 1766) | public int getStartupHttpProbeTimeout() {
    method getStartupHttpProbeFailure (line 1770) | public int getStartupHttpProbeFailure() {
    method setStartupHttpProbeFailure (line 1774) | public void setStartupHttpProbeFailure(int startupHttpProbeFailure) {
    method setStartupProbeFailure (line 1778) | public void setStartupProbeFailure(int startupHttpProbeFailure) {
    method getLivenessHttpProbeFailure (line 1782) | public int getLivenessHttpProbeFailure() {
    method setLivenessHttpProbeFailure (line 1786) | public void setLivenessHttpProbeFailure(int livenessHttpProbeFailure) {
    method setLivenessProbeFailure (line 1790) | public void setLivenessProbeFailure(int livenessHttpProbeFailure) {
    method getLivenessHttpProbeSuccess (line 1794) | public int getLivenessHttpProbeSuccess() {
    method setLivenessHttpProbeSuccess (line 1798) | public void setLivenessHttpProbeSuccess(int livenessHttpProbeSuccess) {
    method setLivenessProbeSuccess (line 1802) | public void setLivenessProbeSuccess(int livenessHttpProbeSuccess) {
    method getStartupHttpProbeSuccess (line 1806) | public int getStartupHttpProbeSuccess() {
    method setStartupHttpProbeSuccess (line 1810) | public void setStartupHttpProbeSuccess(int startupHttpProbeSuccess) {
    method setStartupProbeSuccess (line 1814) | public void setStartupProbeSuccess(int startupHttpProbeSuccess) {
    method getStartupTcpProbeFailure (line 1818) | public int getStartupTcpProbeFailure() {
    method setStartupTcpProbeFailure (line 1822) | public void setStartupTcpProbeFailure(int startupTcpProbeFailure) {
    method getStartupTcpProbeSuccess (line 1826) | public int getStartupTcpProbeSuccess() {
    method setStartupTcpProbeSuccess (line 1830) | public void setStartupTcpProbeSuccess(int startupTcpProbeSuccess) {
    method getStartupCommandProbeFailure (line 1834) | public int getStartupCommandProbeFailure() {
    method setStartupCommandProbeFailure (line 1838) | public void setStartupCommandProbeFailure(int startupCommandProbeFailu...
    method getStartupCommandProbeSuccess (line 1842) | public int getStartupCommandProbeSuccess() {
    method setStartupCommandProbeSuccess (line 1846) | public void setStartupCommandProbeSuccess(int startupCommandProbeSucce...
    method getLivenessCommandProbeFailure (line 1850) | public int getLivenessCommandProbeFailure() {
    method setLivenessCommandProbeFailure (line 1854) | public void setLivenessCommandProbeFailure(int livenessCommandProbeFai...
    method getLivenessCommandProbeSuccess (line 1858) | public int getLivenessCommandProbeSuccess() {
    method setLivenessCommandProbeSuccess (line 1862) | public void setLivenessCommandProbeSuccess(int livenessCommandProbeSuc...
    method getStartupHttpProbeDelay (line 1866) | public int getStartupHttpProbeDelay() {
    method setStartupHttpProbeTimeout (line 1870) | public void setStartupHttpProbeTimeout(int startupHttpProbeTimeout) {
    method setStartupProbeTimeout (line 1874) | public void setStartupProbeTimeout(int startupHttpProbeTimeout) {
    method setStartupHttpProbeDelay (line 1878) | public void setStartupHttpProbeDelay(int startupHttpProbeDelay) {
    method setStartupProbeDelay (line 1882) | public void setStartupProbeDelay(int startupHttpProbeDelay) {
    method getStartupHttpProbePath (line 1886) | public String getStartupHttpProbePath() {
    method setStartupHttpProbePath (line 1890) | public void setStartupHttpProbePath(String startupHttpProbePath) {
    method getStartupHttpProbePort (line 1894) | public Integer getStartupHttpProbePort() {
    method setStartupHttpProbePort (line 1898) | public void setStartupHttpProbePort(Integer startupHttpProbePort) {
    method setStartupProbePort (line 1902) | public void setStartupProbePort(Integer startupHttpProbePort) {
    method getStartupProbeScheme (line 1906) | public String getStartupProbeScheme() {
    method setStartupProbeScheme (line 1910) | public void setStartupProbeScheme(String startupProbeScheme) {
    method getStartupHttpProbePeriod (line 1914) | public int getStartupHttpProbePeriod() {
    method setStartupHttpProbePeriod (line 1918) | public void setStartupHttpProbePeriod(int startupHttpProbePeriod) {
    method getStartupProbePeriod (line 1922) | public int getStartupProbePeriod() {
    method setStartupProbePeriod (line 1926) | public void setStartupProbePeriod(int startupHttpProbePeriod) {
    method getStartupTcpProbeDelay (line 1930) | public int getStartupTcpProbeDelay() {
    method setStartupTcpProbeDelay (line 1934) | public void setStartupTcpProbeDelay(int startupTcpProbeDelay) {
    method getStartupTcpProbeTimeout (line 1938) | public int getStartupTcpProbeTimeout() {
    method setStartupTcpProbeTimeout (line 1942) | public void setStartupTcpProbeTimeout(int startupTcpProbeTimeout) {
    method getStartupTcpProbePeriod (line 1951) | public int getStartupTcpProbePeriod() {
    method setStartupTcpProbePeriod (line 1955) | public void setStartupTcpProbePeriod(int startupTcpProbePeriod) {
    method getStartupTcpProbePort (line 1959) | public Integer getStartupTcpProbePort() {
    method setStartupTcpProbePort (line 1963) | public void setStartupTcpProbePort(Integer startupTcpProbePort) {
    method getStartupCommandProbeDelay (line 1967) | public int getStartupCommandProbeDelay() {
    method setStartupCommandProbeDelay (line 1971) | public void setStartupCommandProbeDelay(int startupCommandProbeDelay) {
    method getStartupCommandProbePeriod (line 1975) | public int getStartupCommandProbePeriod() {
    method setStartupCommandProbePeriod (line 1979) | public void setStartupCommandProbePeriod(int startupCommandProbePeriod) {
    method getStartupCommandProbeCommand (line 1983) | public String getStartupCommandProbeCommand() {
    method setStartupCommandProbeCommand (line 1987) | public void setStartupCommandProbeCommand(String startupCommandProbeCo...
    method getReadinessTcpProbeFailure (line 1991) | public int getReadinessTcpProbeFailure() {
    method setReadinessTcpProbeFailure (line 1995) | public void setReadinessTcpProbeFailure(int readinessTcpProbeFailure) {
    method getReadinessTcpProbeSuccess (line 1999) | public int getReadinessTcpProbeSuccess() {
    method setReadinessTcpProbeSuccess (line 2003) | public void setReadinessTcpProbeSuccess(int readinessTcpProbeSuccess) {
    method getReadinessHttpProbeSuccess (line 2007) | public int getReadinessHttpProbeSuccess() {
    method setReadinessHttpProbeSuccess (line 2011) | public void setReadinessHttpProbeSuccess(int readinessHttpProbeSuccess) {
    method getReadinessHttpProbeFailure (line 2015) | public int getReadinessHttpProbeFailure() {
    method setReadinessHttpProbeFailure (line 2019) | public void setReadinessHttpProbeFailure(int readinessHttpProbeFailure) {
    method setReadinessProbeFailure (line 2023) | public void setReadinessProbeFailure(int readinessHttpProbeFailure) {
    method getReadinessCommandProbeFailure (line 2028) | public int getReadinessCommandProbeFailure() {
    method setReadinessCommandProbeFailure (line 2032) | public void setReadinessCommandProbeFailure(int readinessCommandProbeF...
    method getReadinessCommandProbeSuccess (line 2036) | public int getReadinessCommandProbeSuccess() {
    method setReadinessCommandProbeSuccess (line 2040) | public void setReadinessCommandProbeSuccess(int readinessCommandProbeS...
    method getReadinessHttpProbeDelay (line 2044) | public int getReadinessHttpProbeDelay() {
    method setReadinessHttpProbeDelay (line 2048) | public void setReadinessHttpProbeDelay(int readinessHttpProbeDelay) {
    method getReadinessHttpProbePeriod (line 2052) | public int getReadinessHttpProbePeriod() {
    method setReadinessHttpProbePeriod (line 2056) | public void setReadinessHttpProbePeriod(int readinessHttpProbePeriod) {
    method getReadinessTcpProbeTimeout (line 2060) | public int getReadinessTcpProbeTimeout() {
    method setReadinessTcpProbeTimeout (line 2064) | public void setReadinessTcpProbeTimeout(int readinessTcpProbeTimeout) {
    method getReadinessHttpProbeTimeout (line 2068) | public int getReadinessHttpProbeTimeout() {
    method setReadinessHttpProbeTimeout (line 2072) | public void setReadinessHttpProbeTimeout(int readinessHttpProbeTimeout) {
    method getReadinessHttpProbePath (line 2076) | public String getReadinessHttpProbePath() {
    method setReadinessHttpProbePath (line 2080) | public void setReadinessHttpProbePath(String readinessHttpProbePath) {
    method getReadinessHttpProbePort (line 2084) | public Integer getReadinessHttpProbePort() {
    method setReadinessHttpProbePort (line 2088) | public void setReadinessHttpProbePort(Integer readinessHttpProbePort) {
    method getLivenessTcpProbeDelay (line 2092) | public int getLivenessTcpProbeDelay() {
    method setLivenessTcpProbeDelay (line 2096) | public void setLivenessTcpProbeDelay(int livenessTcpProbeDelay) {
    method getLivenessTcpProbePeriod (line 2100) | public int getLivenessTcpProbePeriod() {
    method setLivenessTcpProbePeriod (line 2104) | public void setLivenessTcpProbePeriod(int livenessTcpProbePeriod) {
    method getLivenessTcpProbePort (line 2108) | public Integer getLivenessTcpProbePort() {
    method setLivenessTcpProbePort (line 2112) | public void setLivenessTcpProbePort(Integer livenessTcpProbePort) {
    method getReadinessTcpProbeDelay (line 2116) | public int getReadinessTcpProbeDelay() {
    method setReadinessTcpProbeDelay (line 2120) | public void setReadinessTcpProbeDelay(int readinessTcpProbeDelay) {
    method getReadinessTcpProbePeriod (line 2124) | public int getReadinessTcpProbePeriod() {
    method setReadinessTcpProbePeriod (line 2128) | public void setReadinessTcpProbePeriod(int readinessTcpProbePeriod) {
    method getReadinessTcpProbePort (line 2132) | public Integer getReadinessTcpProbePort() {
    method setReadinessTcpProbePort (line 2136) | public void setReadinessTcpProbePort(Integer readinessTcpProbePort) {
    method getReadinessCommandProbeDelay (line 2140) | public int getReadinessCommandProbeDelay() {
    method setReadinessCommandProbeDelay (line 2144) | public void setReadinessCommandProbeDelay(int readinessCommandProbeDel...
    method getReadinessCommandProbePeriod (line 2148) | public int getReadinessCommandProbePeriod() {
    method setReadinessCommandProbePeriod (line 2152) | public void setReadinessCommandProbePeriod(int readinessCommandProbePe...
    method getReadinessCommandProbeCommand (line 2156) | public String getReadinessCommandProbeCommand() {
    method setReadinessCommandProbeCommand (line 2160) | public void setReadinessCommandProbeCommand(String readinessCommandPro...
    method getLivenessCommandProbeDelay (line 2164) | public int getLivenessCommandProbeDelay() {
    method setLivenessCommandProbeDelay (line 2168) | public void setLivenessCommandProbeDelay(int livenessCommandProbeDelay) {
    method getLivenessCommandProbePeriod (line 2172) | public int getLivenessCommandProbePeriod() {
    method setLivenessCommandProbePeriod (line 2176) | public void setLivenessCommandProbePeriod(int livenessCommandProbePeri...
    method getLivenessCommandProbeCommand (line 2180) | public String getLivenessCommandProbeCommand() {
    method setLivenessCommandProbeCommand (line 2184) | public void setLivenessCommandProbeCommand(String livenessCommandProbe...
    method getProbeCredentialsSecret (line 2188) | public String getProbeCredentialsSecret() {
    method setProbeCredentialsSecret (line 2192) | public void setProbeCredentialsSecret(String probeCredentialsSecret) {
    method getProbeType (line 2196) | public ProbeType getProbeType() {
    method setProbeType (line 2200) | public void setProbeType(ProbeType probeType) {
    method getStatefulSet (line 2204) | public StatefulSet getStatefulSet() {
    method setStatefulSet (line 2208) | public void setStatefulSet(
    method getTolerations (line 2213) | public List<Toleration> getTolerations() {
    method setTolerations (line 2217) | public void setTolerations(List<Toleration> tolerations) {
    method getSecretKeyRefs (line 2221) | public List<SecretKeyRef> getSecretKeyRefs() {
    method setSecretKeyRefs (line 2225) | public void setSecretKeyRefs(List<SecretKeyRef> secretKeyRefs) {
    method getConfigMapKeyRefs (line 2229) | public List<ConfigMapKeyRef> getConfigMapKeyRefs() {
    method setConfigMapKeyRefs (line 2233) | public void setConfigMapKeyRefs(List<ConfigMapKeyRef> configMapKeyRefs) {
    method getConfigMapRefs (line 2237) | public List<String> getConfigMapRefs() {
    method setConfigMapRefs (line 2241) | public void setConfigMapRefs(List<String> configMapRefs) {
    method getSecretRefs (line 2245) | public List<String> getSecretRefs() {
    method setSecretRefs (line 2249) | public void setSecretRefs(List<String> secretRefs) {
    method getEnvironmentVariables (line 2253) | public String[] getEnvironmentVariables() {
    method setEnvironmentVariables (line 2257) | public void setEnvironmentVariables(String[] environmentVariables) {
    method getEntryPointStyle (line 2261) | public EntryPointStyle getEntryPointStyle() {
    method setEntryPointStyle (line 2265) | public void setEntryPointStyle(EntryPointStyle entryPointStyle) {
    method isCreateLoadBalancer (line 2269) | public boolean isCreateLoadBalancer() {
    method setCreateLoadBalancer (line 2273) | public void setCreateLoadBalancer(boolean createLoadBalancer) {
    method getServiceAnnotations (line 2277) | public String getServiceAnnotations() {
    method setServiceAnnotations (line 2281) | public void setServiceAnnotations(String serviceAnnotations) {
    method getPodAnnotations (line 2285) | public String getPodAnnotations() {
    method setPodAnnotations (line 2289) | public void setPodAnnotations(String podAnnotations) {
    method getJobAnnotations (line 2293) | public String getJobAnnotations() {
    method setJobAnnotations (line 2297) | public void setJobAnnotations(String jobAnnotations) {
    method getMinutesToWaitForLoadBalancer (line 2301) | public int getMinutesToWaitForLoadBalancer() {
    method setMinutesToWaitForLoadBalancer (line 2305) | public void setMinutesToWaitForLoadBalancer(int minutesToWaitForLoadBa...
    method getMaxTerminatedErrorRestarts (line 2309) | public int getMaxTerminatedErrorRestarts() {
    method setMaxTerminatedErrorRestarts (line 2313) | public void setMaxTerminatedErrorRestarts(int maxTerminatedErrorRestar...
    method getMaxCrashLoopBackOffRestarts (line 2317) | public int getMaxCrashLoopBackOffRestarts() {
    method setMaxCrashLoopBackOffRestarts (line 2321) | public void setMaxCrashLoopBackOffRestarts(int maxCrashLoopBackOffRest...
    method getImagePullPolicy (line 2325) | public ImagePullPolicy getImagePullPolicy() {
    method setImagePullPolicy (line 2329) | public void setImagePullPolicy(ImagePullPolicy imagePullPolicy) {
    method getLimits (line 2333) | public LimitsResources getLimits() {
    method setLimits (line 2337) | public void setLimits(LimitsResources limits) {
    method getRequests (line 2341) | public RequestsResources getRequests() {
    method setRequests (line 2345) | public void setRequests(RequestsResources requests) {
    method getVolumeMounts (line 2349) | public List<VolumeMount> getVolumeMounts() {
    method setVolumeMounts (line 2353) | public void setVolumeMounts(List<VolumeMount> volumeMounts) {
    method getVolumes (line 2357) | public List<Volume> getVolumes() {
    method setVolumes (line 2361) | public void setVolumes(List<Volume> volumes) {
    method isHostNetwork (line 2365) | public boolean isHostNetwork() {
    method setHostNetwork (line 2369) | public void setHostNetwork(boolean hostNetwork) {
    method isCreateJob (line 2373) | public boolean isCreateJob() {
    method setCreateJob (line 2377) | public void setCreateJob(boolean createJob) {
    method getDeploymentServiceAccountName (line 2381) | public String getDeploymentServiceAccountName() {
    method setDeploymentServiceAccountName (line 2385) | public void setDeploymentServiceAccountName(String deploymentServiceAc...
    method getMaximumConcurrentTasks (line 2389) | public int getMaximumConcurrentTasks() {
    method setMaximumConcurrentTasks (line 2393) | public void setMaximumConcurrentTasks(int maximumConcurrentTasks) {
    method getTerminationGracePeriodSeconds (line 2397) | public Long getTerminationGracePeriodSeconds() {
    method setTerminationGracePeriodSeconds (line 2401) | public void setTerminationGracePeriodSeconds(Long terminationGracePeri...
    method setNodeSelector (line 2405) | public void setNodeSelector(String nodeSelector) {
    method getNodeSelector (line 2409) | public String getNodeSelector() {
    method setPodSecurityContext (line 2413) | public void setPodSecurityContext(PodSecurityContext podSecurityContex...
    method getPodSecurityContext (line 2417) | public PodSecurityContext getPodSecurityContext() {
    method setContainerSecurityContext (line 2421) | public void setContainerSecurityContext(ContainerSecurityContext conta...
    method getContainerSecurityContext (line 2425) | public ContainerSecurityContext getContainerSecurityContext() {
    method getNodeAffinity (line 2429) | public NodeAffinity getNodeAffinity() {
    method setNodeAffinity (line 2433) | public void setNodeAffinity(NodeAffinity nodeAffinity) {
    method getPodAffinity (line 2437) | public PodAffinity getPodAffinity() {
    method setPodAffinity (line 2441) | public void setPodAffinity(PodAffinity podAffinity) {
    method getPodAntiAffinity (line 2445) | public PodAntiAffinity getPodAntiAffinity() {
    method setPodAntiAffinity (line 2449) | public void setPodAntiAffinity(PodAntiAffinity podAntiAffinity) {
    method getStatefulSetInitContainerImageName (line 2453) | public String getStatefulSetInitContainerImageName() {
    method setStatefulSetInitContainerImageName (line 2457) | public void setStatefulSetInitContainerImageName(String statefulSetIni...
    method getInitContainer (line 2461) | public InitContainer getInitContainer() {
    method setInitContainer (line 2465) | public void setInitContainer(InitContainer initContainer) {
    method getInitContainers (line 2469) | public List<InitContainer> getInitContainers() {
    method setInitContainers (line 2473) | public void setInitContainers(List<InitContainer> initContainers) {
    method getAdditionalContainers (line 2477) | public List<Container> getAdditionalContainers() {
    method setAdditionalContainers (line 2481) | public void setAdditionalContainers(List<Container> additionalContaine...
    method getLivenessHttpProbeScheme (line 2485) | public String getLivenessHttpProbeScheme() {
    method setLivenessHttpProbeScheme (line 2489) | public void setLivenessHttpProbeScheme(String livenessHttpProbeScheme) {
    method getReadinessHttpProbeScheme (line 2493) | public String getReadinessHttpProbeScheme() {
    method setReadinessHttpProbeScheme (line 2497) | public void setReadinessHttpProbeScheme(String readinessHttpProbeSchem...
    method getLifecycle (line 2501) | Lifecycle getLifecycle() {
    method setLifecycle (line 2505) | void setLifecycle(Lifecycle lifecycle) {
    method getDeploymentLabels (line 2509) | public String getDeploymentLabels() {
    method setDeploymentLabels (line 2513) | public void setDeploymentLabels(String deploymentLabels) {
    method getAppAdmin (line 2517) | public AppAdmin getAppAdmin() {
    method setAppAdmin (line 2521) | public void setAppAdmin(AppAdmin appAdmin) {
    method getCron (line 2525) | public CronConfig getCron() {
    method setCron (line 2529) | public void setCron(CronConfig cron) {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesScheduler.java
  class KubernetesScheduler (line 54) | public class KubernetesScheduler extends AbstractKubernetesDeployer impl...
    method KubernetesScheduler (line 65) | public KubernetesScheduler(KubernetesClient client,
    method schedule (line 79) | @Override
    method mergeSchedulerProperties (line 103) | static Map<String, String> mergeSchedulerProperties(ScheduleRequest sc...
    method validateScheduleName (line 149) | public void validateScheduleName(ScheduleRequest request) {
    method unschedule (line 162) | @Override
    method list (line 171) | @Override
    method list (line 179) | @Override
    method createCronJob (line 204) | protected CronJob createCronJob(ScheduleRequest scheduleRequest) {
    method getExceptionMessageForField (line 280) | protected String getExceptionMessageForField(KubernetesClientException...
    method setImagePullSecret (line 298) | private void setImagePullSecret(ScheduleRequest scheduleRequest, CronJ...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesSchedulerProperties.java
  class KubernetesSchedulerProperties (line 26) | @Deprecated
    method getRestartPolicy (line 56) | public RestartPolicy getRestartPolicy() {
    method setRestartPolicy (line 65) | public void setRestartPolicy(RestartPolicy restartPolicy) {
    method getTaskServiceAccountName (line 74) | public String getTaskServiceAccountName() {
    method setTaskServiceAccountName (line 83) | public void setTaskServiceAccountName(String taskServiceAccountName) {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncher.java
  class KubernetesTaskLauncher (line 78) | public class KubernetesTaskLauncher extends AbstractKubernetesDeployer i...
    method KubernetesTaskLauncher (line 81) | public KubernetesTaskLauncher(KubernetesDeployerProperties properties,
    method KubernetesTaskLauncher (line 87) | public KubernetesTaskLauncher(KubernetesDeployerProperties properties,
    method KubernetesTaskLauncher (line 92) | public KubernetesTaskLauncher(KubernetesDeployerProperties deployerPro...
    method KubernetesTaskLauncher (line 97) | public KubernetesTaskLauncher(KubernetesDeployerProperties kubernetesD...
    method launch (line 108) | @Override
    method cancel (line 134) | @Override
    method cleanup (line 141) | @Override
    method destroy (line 155) | @Override
    method environmentInfo (line 162) | @Override
    method status (line 167) | @Override
    method getMaximumConcurrentTasks (line 175) | @Override
    method getRunningTaskExecutionCount (line 180) | @Override
    method getLog (line 194) | @Override
    method getLogFromSelector (line 210) | private String getLogFromSelector(Map<String, String> selector) {
    method maxConcurrentExecutionsReached (line 222) | private boolean maxConcurrentExecutionsReached() {
    method createDeploymentId (line 226) | protected String createDeploymentId(AppDeploymentRequest request) {
    method launch (line 237) | private synchronized void launch(String appId, AppDeploymentRequest re...
    method getIdsForTasks (line 300) | private List<String> getIdsForTasks(Optional<String> taskName, boolean...
    method getTaskResources (line 316) | private KubernetesResourceList<?> getTaskResources(Optional<String> ta...
    method buildTaskStatus (line 336) | TaskStatus buildTaskStatus(String id) {
    method buildPodStatus (line 366) | private TaskStatus buildPodStatus(String id) {
    method deleteJob (line 388) | private void deleteJob(String id) {
    method deletePod (line 403) | private void deletePod(String id) {
    method getJob (line 418) | private Job getJob(String jobName) {
    method getPodByName (line 430) | private Pod getPodByName(String name) {
    method getRestartPolicy (line 441) | protected RestartPolicy getRestartPolicy(AppDeploymentRequest request) {
    method getBackoffLimit (line 459) | protected Integer getBackoffLimit(AppDeploymentRequest request) {
    method getTtlSecondsAfterFinished (line 476) | protected Integer getTtlSecondsAfterFinished(AppDeploymentRequest requ...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncherProperties.java
  class KubernetesTaskLauncherProperties (line 26) | @ConfigurationProperties(prefix = "spring.cloud.deployer.kubernetes")
    method getRestartPolicy (line 51) | public RestartPolicy getRestartPolicy() {
    method setRestartPolicy (line 60) | public void setRestartPolicy(RestartPolicy restartPolicy) {
    method getBackoffLimit (line 68) | public Integer getBackoffLimit() {
    method setBackoffLimit (line 77) | public void setBackoffLimit(Integer backoffLimit) {
    method getTtlSecondsAfterFinished (line 85) | public Integer getTtlSecondsAfterFinished() {
    method setTtlSecondsAfterFinished (line 94) | public void setTtlSecondsAfterFinished(Integer ttlSecondsAfterFinished) {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/LivenessCommandProbeCreator.java
  class LivenessCommandProbeCreator (line 29) | class LivenessCommandProbeCreator extends CommandProbeCreator {
    method LivenessCommandProbeCreator (line 30) | LivenessCommandProbeCreator(KubernetesDeployerProperties kubernetesDep...
    method getInitialDelay (line 34) | @Override
    method getPeriod (line 40) | @Override
    method getFailure (line 46) | @Override
    method getSuccess (line 52) | @Override
    method getCommand (line 58) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/LivenessHttpProbeCreator.java
  class LivenessHttpProbeCreator (line 28) | class LivenessHttpProbeCreator extends HttpProbeCreator {
    method LivenessHttpProbeCreator (line 29) | LivenessHttpProbeCreator(KubernetesDeployerProperties kubernetesDeploy...
    method getPort (line 34) | @Override
    method getProbePath (line 53) | @Override
    method getScheme (line 69) | @Override
    method getTimeout (line 81) | @Override
    method getInitialDelay (line 87) | @Override
    method getPeriod (line 93) | @Override
    method getFailure (line 99) | @Override
    method getSuccess (line 105) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/LivenessTcpProbeCreator.java
  class LivenessTcpProbeCreator (line 28) | class LivenessTcpProbeCreator extends TcpProbeCreator {
    method LivenessTcpProbeCreator (line 29) | LivenessTcpProbeCreator(KubernetesDeployerProperties kubernetesDeploye...
    method getInitialDelay (line 33) | @Override
    method getPeriod (line 39) | @Override
    method getTimeout (line 45) | @Override
    method getPort (line 51) | @Override
    method getFailure (line 70) | @Override
    method getSuccess (line 76) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/PredicateRunningPhaseDeploymentStateResolver.java
  class PredicateRunningPhaseDeploymentStateResolver (line 31) | public class PredicateRunningPhaseDeploymentStateResolver implements Run...
    method PredicateRunningPhaseDeploymentStateResolver (line 37) | PredicateRunningPhaseDeploymentStateResolver(
    method resolve (line 46) | public DeploymentState resolve(ContainerStatus containerStatus) {
    class ContainerStatusCondition (line 73) | static abstract class ContainerStatusCondition implements Predicate<Co...
      method ContainerStatusCondition (line 76) | ContainerStatusCondition(String description) {
      method toString (line 79) | public String toString() {
    class ContainerReady (line 86) | static class ContainerReady extends PredicateRunningPhaseDeploymentSta...
      method ContainerReady (line 87) | ContainerReady(KubernetesDeployerProperties properties) {
    class ContainerCrashed (line 97) | static class ContainerCrashed extends PredicateRunningPhaseDeploymentS...
      method ContainerCrashed (line 98) | ContainerCrashed(KubernetesDeployerProperties properties) {
    class RestartsDueToTheSameError (line 122) | static class RestartsDueToTheSameError extends PredicateRunningPhaseDe...
      method RestartsDueToTheSameError (line 124) | RestartsDueToTheSameError(KubernetesDeployerProperties properties) {
    class CrashLoopBackOffRestarts (line 153) | static class CrashLoopBackOffRestarts extends PredicateRunningPhaseDep...
      method CrashLoopBackOffRestarts (line 154) | CrashLoopBackOffRestarts(KubernetesDeployerProperties properties) {
    class ContainerTerminated (line 176) | static class ContainerTerminated extends PredicateRunningPhaseDeployme...
      method ContainerTerminated (line 178) | ContainerTerminated(KubernetesDeployerProperties properties) {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ProbeAuthenticationType.java
  type ProbeAuthenticationType (line 25) | public enum ProbeAuthenticationType {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ProbeCreator.java
  class ProbeCreator (line 32) | abstract class ProbeCreator {
    method ProbeCreator (line 41) | ProbeCreator(KubernetesDeployerProperties kubernetesDeployerProperties,
    method create (line 47) | abstract Probe create();
    method getInitialDelay (line 49) | abstract int getInitialDelay();
    method getPeriod (line 51) | abstract int getPeriod();
    method getFailure (line 53) | abstract int getFailure();
    method getSuccess (line 55) | abstract int getSuccess();
    method getKubernetesDeployerProperties (line 57) | KubernetesDeployerProperties getKubernetesDeployerProperties() {
    method getDeploymentProperties (line 61) | private Map<String, String> getDeploymentProperties() {
    method getDeploymentPropertyValue (line 65) | protected String getDeploymentPropertyValue(String propertyName) {
    method getDeploymentPropertyValue (line 68) | protected String getDeploymentPropertyValue(String propertyName, Strin...
    method getContainerConfiguration (line 72) | ContainerConfiguration getContainerConfiguration() {
    method getProbeProperty (line 78) | String getProbeProperty(String propertyPrefix, String probeName, Strin...
    method getProbeProperty (line 84) | String getProbeProperty(String propertyPrefix, String probeName, Strin...
    method getProbeIntProperty (line 89) | int getProbeIntProperty(String propertyPrefix, String probeName, Strin...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ProbeCreatorFactory.java
  class ProbeCreatorFactory (line 27) | class ProbeCreatorFactory {
    method createStartupProbe (line 28) | static Probe createStartupProbe(ContainerConfiguration containerConfig...
    method createReadinessProbe (line 42) | static Probe createReadinessProbe(ContainerConfiguration containerConf...
    method createLivenessProbe (line 56) | static Probe createLivenessProbe(ContainerConfiguration containerConfi...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ProbeType.java
  type ProbeType (line 24) | enum ProbeType {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ReadinessCommandProbeCreator.java
  class ReadinessCommandProbeCreator (line 29) | class ReadinessCommandProbeCreator extends CommandProbeCreator {
    method ReadinessCommandProbeCreator (line 30) | ReadinessCommandProbeCreator(KubernetesDeployerProperties kubernetesDe...
    method getInitialDelay (line 34) | @Override
    method getPeriod (line 40) | @Override
    method getFailure (line 46) | @Override
    method getSuccess (line 52) | @Override
    method getCommand (line 58) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ReadinessHttpProbeCreator.java
  class ReadinessHttpProbeCreator (line 28) | class ReadinessHttpProbeCreator extends HttpProbeCreator {
    method ReadinessHttpProbeCreator (line 29) | ReadinessHttpProbeCreator(KubernetesDeployerProperties kubernetesDeplo...
    method getPort (line 34) | @Override
    method getProbePath (line 57) | @Override
    method getScheme (line 76) | @Override
    method getTimeout (line 91) | @Override
    method getInitialDelay (line 97) | @Override
    method getPeriod (line 103) | @Override
    method getFailure (line 109) | @Override
    method getSuccess (line 115) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ReadinessTcpProbeCreator.java
  class ReadinessTcpProbeCreator (line 28) | class ReadinessTcpProbeCreator extends TcpProbeCreator {
    method ReadinessTcpProbeCreator (line 29) | ReadinessTcpProbeCreator(KubernetesDeployerProperties kubernetesDeploy...
    method getInitialDelay (line 33) | @Override
    method getPeriod (line 39) | @Override
    method getTimeout (line 45) | @Override
    method getPort (line 51) | @Override
    method getFailure (line 70) | @Override
    method getSuccess (line 76) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/RestartPolicy.java
  type RestartPolicy (line 24) | public enum RestartPolicy {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/RunningPhaseDeploymentStateResolver.java
  type RunningPhaseDeploymentStateResolver (line 26) | public interface RunningPhaseDeploymentStateResolver {
    method resolve (line 27) | DeploymentState resolve(ContainerStatus containerStatus);

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/StartupCommandProbeCreator.java
  class StartupCommandProbeCreator (line 28) | class StartupCommandProbeCreator extends CommandProbeCreator {
    method StartupCommandProbeCreator (line 29) | StartupCommandProbeCreator(KubernetesDeployerProperties kubernetesDepl...
    method getInitialDelay (line 33) | @Override
    method getPeriod (line 39) | @Override
    method getFailure (line 45) | @Override
    method getSuccess (line 51) | @Override
    method getCommand (line 57) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/StartupHttpProbeCreator.java
  class StartupHttpProbeCreator (line 26) | class StartupHttpProbeCreator extends HttpProbeCreator {
    method StartupHttpProbeCreator (line 27) | StartupHttpProbeCreator(KubernetesDeployerProperties kubernetesDeploye...
    method getPort (line 32) | @Override
    method getProbePath (line 55) | @Override
    method getScheme (line 74) | @Override
    method getTimeout (line 89) | @Override
    method getInitialDelay (line 95) | @Override
    method getPeriod (line 101) | @Override
    method getFailure (line 107) | @Override
    method getSuccess (line 113) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/StartupTcpProbeCreator.java
  class StartupTcpProbeCreator (line 27) | class StartupTcpProbeCreator extends TcpProbeCreator {
    method StartupTcpProbeCreator (line 28) | StartupTcpProbeCreator(KubernetesDeployerProperties kubernetesDeployer...
    method getInitialDelay (line 32) | @Override
    method getPeriod (line 38) | @Override
    method getTimeout (line 44) | @Override
    method getPort (line 50) | @Override
    method getFailure (line 69) | @Override
    method getSuccess (line 75) | @Override

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/TcpProbeCreator.java
  class TcpProbeCreator (line 28) | abstract class TcpProbeCreator extends ProbeCreator {
    method TcpProbeCreator (line 29) | TcpProbeCreator(KubernetesDeployerProperties kubernetesDeployerPropert...
    method getPort (line 34) | abstract Integer getPort();
    method getTimeout (line 36) | protected abstract int getTimeout();
    method create (line 38) | protected Probe create() {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/support/ArgumentSanitizer.java
  class ArgumentSanitizer (line 36) | public class ArgumentSanitizer {
    method ArgumentSanitizer (line 47) | public ArgumentSanitizer() {
    method getPattern (line 54) | private Pattern getPattern(String value) {
    method isRegex (line 61) | private boolean isRegex(String value) {
    method sanitize (line 76) | public String sanitize(String argument) {
    method sanitize (line 96) | public String sanitize(String key, String value) {
    method sanitizeProperties (line 114) | public Map<String, String> sanitizeProperties(Map<String, String> prop...
    method sanitizeArguments (line 131) | public List<String> sanitizeArguments(List<String> arguments) {

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/support/PropertyParserUtils.java
  class PropertyParserUtils (line 33) | public class PropertyParserUtils {
    method getStringPairsToMap (line 40) | public static Map<String, String> getStringPairsToMap(String stringPai...
    method getDeploymentPropertyValue (line 59) | public static String getDeploymentPropertyValue(Map<String, String> de...
    method getDeploymentPropertyValue (line 63) | public static String getDeploymentPropertyValue(Map<String, String> de...

FILE: spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/support/RelaxedNames.java
  class RelaxedNames (line 34) | public final class RelaxedNames implements Iterable<String> {
    method RelaxedNames (line 50) | public RelaxedNames(String name) {
    method iterator (line 55) | @Override
    method initialize (line 60) | private void initialize(String name, Set<String> values) {
    type Variation (line 78) | enum Variation {
      method apply (line 82) | @Override
      method apply (line 91) | @Override
      method apply (line 100) | @Override
      method apply (line 107) | public abstract String apply(String value);
    type Manipulation (line 114) | enum Manipulation {
      method apply (line 118) | @Override
      method apply (line 127) | @Override
      method apply (line 136) | @Override
      method apply (line 145) | @Override
      method apply (line 154) | @Override
      method apply (line 177) | @Override
      method apply (line 200) | @Override
      method apply (line 209) | @Override
      method apply (line 218) | public abstract String apply(String value);
      method separatedToCamelCase (line 220) | private static String separatedToCamelCase(String value,
    method forCamelCase (line 248) | public static RelaxedNames forCamelCase(String name) {

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/AbstractKubernetesTaskLauncherIntegrationTests.java
  class AbstractKubernetesTaskLauncherIntegrationTests (line 47) | abstract class AbstractKubernetesTaskLauncherIntegrationTests extends Ab...
    method provideTaskLauncher (line 57) | @Override
    method randomName (line 62) | @Override
    method testApplication (line 67) | @Override
    method deploymentTimeout (line 72) | @Override
    method testSimpleCancel (line 77) | @Test
    method logTestInfo (line 84) | protected void logTestInfo(TestInfo testInfo) {
    method awaitWithPollAndTimeout (line 90) | protected ConditionFactory awaitWithPollAndTimeout(Timeout timeout) {
    method getPodsForTask (line 95) | protected List<Pod> getPodsForTask(String taskName) {
    method getJobsForTask (line 99) | protected List<Job> getJobsForTask(String taskName) {

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/DefaultContainerFactoryTests.java
  class DefaultContainerFactoryTests (line 63) | @ExtendWith(SpringExtension.class)
    method create (line 67) | @Test
    method createWithContainerCommand (line 94) | @Test
    method createWithPorts (line 114) | @Test
    method createWithInvalidPort (line 139) | @Test
    method createWithPortAndHostNetwork (line 160) | @Test
    method createWithEntryPointStyle (line 189) | @Test
    method createWithVolumeMounts (line 258) | @Test
    method createCustomLivenessPortFromProperties (line 312) | @Test
    method createCustomLivenessHttpPortFromProperties (line 343) | @Test
    method createCustomLivenessHttpProbeSchemeFromProperties (line 374) | @Test
    method createCustomReadinessHttpSchemeFromProperties (line 402) | @Test
    method createCustomLivenessAndReadinessHttpProbeSchemeFromAppRequest (line 430) | @Test
    method createCustomLivenessPortFromAppRequest (line 464) | @Test
    method createCustomLivenessHttpPortFromAppRequest (line 495) | @Test
    method createCustomReadinessPortFromAppRequest (line 528) | @Test
    method createCustomReadinessHttpPortFromAppRequest (line 559) | @Test
    method createCustomReadinessPortFromProperties (line 592) | @Test
    method createCustomReadinessHttpPortFromProperties (line 623) | @Test
    method createDefaultHttpProbePorts (line 653) | @Test
    method createHttpProbesWithDefaultEndpoints (line 681) | @Test
    method createHttpProbesWithBoot1Endpoints (line 709) | @Test
    method createProbesWithOverrides (line 742) | @Test
    method createHttpProbesWithOverrides (line 774) | @Test
    method createProbesWithPropertyOverrides (line 808) | @Test
    method createHttpProbesWithPropertyOverrides (line 838) | @Test
    method testHttpProbeCredentialsSecret (line 867) | @Test
    method testHttpProbeCredentialsInvalidSecret (line 897) | @Test
    method testHttpProbeHeadersWithoutAuth (line 920) | @Test
    method createTcpProbe (line 935) | @Test
    method createTcpProbeMissingLivenessPort (line 986) | @Test
    method createTcpProbeMissingReadinessPort (line 1012) | @Test
    method createReadinessTcpProbeWithNonDigitPort (line 1038) | @Test
    method createLivenessTcpProbeWithNonDigitPort (line 1065) | @Test
    method createTcpProbeGlobalProperties (line 1092) | @Test
    method createTcpProbeGlobalPropertyOverride (line 1156) | @Test
    method createCommandProbe (line 1229) | @Test
    method createCommandProbeMissingCommand (line 1273) | @Test
    method createCommandProbeGlobalProperties (line 1298) | @Test
    method createCommandProbeGlobalPropertyOverride (line 1357) | @Test
    method testCommandLineArgsOverridesExistingProperties (line 1425) | @Test
    method testCommandLineArgsNoAssignment (line 1437) | @Test
    method testCommandLineArgsExcludesMalformedProperties (line 1454) | @Test
    method getResource (line 1468) | private Resource getResource() {
    method randomSecret (line 1473) | private Secret randomSecret() {

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/DeploymentPropertiesResolverTests.java
  class DeploymentPropertiesResolverTests (line 32) | public class DeploymentPropertiesResolverTests {
    method testRestartPolicy (line 34) | @ParameterizedTest
    method testTaskServiceAccountName (line 53) | @ParameterizedTest
    method getDeploymentPropertiesResolver (line 72) | private DeploymentPropertiesResolver getDeploymentPropertiesResolver(b...

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/EntryPointStyleTests.java
  class EntryPointStyleTests (line 27) | public class EntryPointStyleTests {
    method testInvalidEntryPointStyleDefaulting (line 29) | @Test
    method testMatchEntryPointStyle (line 36) | @Test
    method testMixedCaseEntryPointStyle (line 43) | @Test

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/ImagePullPolicyTests.java
  class ImagePullPolicyTests (line 28) | public class ImagePullPolicyTests {
    method relaxedValueOf_ignoresCase (line 30) | @Test
    method relaxedValueOf_parsesValueWithDashesInsteadOfCamelCase (line 36) | @Test
    method relaxedValueOf_returnsNullIfValueNotParseable (line 42) | @Test

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesActuatorTemplateTests.java
  class KubernetesActuatorTemplateTests (line 47) | public class KubernetesActuatorTemplateTests {
    method setUp (line 56) | @BeforeEach
    method actuatorInfo (line 98) | @Test
    method actuatorBindings (line 106) | @Test
    method actuatorBindingInput (line 114) | @Test
    method actuatorPostBindingInput (line 121) | @Test
    method noInstanceDeployed (line 129) | @Test
    method getUrl (line 139) | public static String getUrl(int port) {
    method findRandomOpenPort (line 142) | public static int findRandomOpenPort() {

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAppDeployerIntegrationIT.java
  class KubernetesAppDeployerIntegrationIT (line 117) | @SpringBootTest(classes = {KubernetesAutoConfiguration.class}, propertie...
    method provideAppDeployer (line 128) | @Override
    method setup (line 133) | @BeforeEach
    method testScaleStatefulSet (line 140) | @Test
    method testScaleDeployment (line 195) | @Test
    method testScaleWithNonExistingApps (line 231) | @Test
    method testFailedDeploymentWithLoadBalancer (line 237) | @Test
    method testGoodDeploymentWithLoadBalancer (line 273) | @Test
    method testDeploymentWithLoadBalancerHasUrlAndAnnotation (line 301) | @Test
    method testAttributes (line 349) | @Test
    method testDeploymentWithPodAnnotation (line 390) | @Test
    method testDeploymentWithMountedHostPathVolume (line 432) | @Test
    method verifyAppEnv (line 481) | private void verifyAppEnv(String appId) {
    method testDeploymentWithGroupAndIndex (line 573) | @Test
    method testDeploymentServiceAccountName (line 618) | @Test
    method testCreateStatefulSet (line 655) | @Test
    method testCreateStatefulSetInitContainerImageNamePropOverride (line 733) | @Test
    method createStatefulSetInitContainerImageNameGlobalOverride (line 779) | @Test
    method createStatefulSetWithOverridingRequest (line 826) | @Test
    method createStatefulSetWithPVCDefaultName (line 893) | @Test
    method testStatefulSetPodAnnotations (line 929) | @Test
    method testDeploymentLabels (line 970) | @Test
    method testDeploymentLabelsStatefulSet (line 1008) | @Test
    method testCleanupOnDeployFailure (line 1059) | @Test
    method testMultipleContainersInPod (line 1111) | @Test
    method testDefaultServicePort (line 1148) | @Test
    method testDefaultServicePortOverride (line 1179) | @Test
    method testServiceWithMultiplePorts (line 1210) | @Test
    method testCreateInitContainer (line 1244) | @Test
    method testCreateInitContainerWithEnvVariables (line 1285) | @Test
    method initContainerFromGlobalProps (line 1325) | @Test
    method initContainerFromDeployerProps (line 1353) | @Test
    method initContainerPartialFromDeployerProps (line 1384) | @Test
    method initContainerFromDeployerPropsWithVolumeMounts (line 1414) | @Test
    method deploy (line 1469) | private String deploy(KubernetesAppDeployer kubernetesAppDeployer, App...
    method undeploy (line 1480) | private void undeploy(KubernetesAppDeployer kubernetesAppDeployer, Str...
    method testCreateAdditionalContainers (line 1491) | @Test
    method testCreateAdditionalContainersOverride (line 1565) | @Test
    class SecurityContextITs (line 1664) | @Nested
      method podWithInitContainerAndAdditionalContainers (line 1667) | @Test
      method statefulSetWithInitContainerAndAdditionalContainers (line 1745) | @Test
    method assertThatContainerExistsWithSecurityContext (line 1819) | private void assertThatContainerExistsWithSecurityContext(List<Contain...
    method testUnknownStatusOnPendingResources (line 1825) | @Test
    method testSecretRef (line 1874) | @Test
    method testSecretRefFromDeployerProperty (line 1925) | @Test
    method testSecretRefFromDeployerPropertyOverride (line 1976) | @Test
    method testSecretRefFromPropertyMultiple (line 2035) | @Test
    method testSecretRefFromDeploymentPropertyMultiple (line 2099) | @Test
    method testConfigMapRef (line 2160) | @Test
    method testConfigMapRefFromDeployerProperty (line 2210) | @Test
    method testConfigMapRefFromDeployerPropertyOverride (line 2260) | @Test
    method testConfigMapRefFromPropertyMultiple (line 2318) | @Test
    method testConfigMapRefFromDeploymentPropertyMultiple (line 2381) | @Test
    method randomName (line 2442) | @Override
    method deploymentTimeout (line 2448) | @Override
    method testApplication (line 2453) | @Override
    method getPodEnvironment (line 2458) | private String getPodEnvironment(String deploymentId) throws Interrupt...
    method randomSecret (line 2493) | private Secret randomSecret() {
    method randomConfigMap (line 2515) | private ConfigMap randomConfigMap() {
    method kubernetesAppDeployer (line 2531) | private KubernetesAppDeployer kubernetesAppDeployer() {
    method kubernetesAppDeployer (line 2535) | private KubernetesAppDeployer kubernetesAppDeployer(KubernetesDeployer...

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAppDeployerTests.java
  class KubernetesAppDeployerTests (line 96) | @DisplayName("KubernetesAppDeployer")
    method deployWithVolumesOnly (line 104) | @Test
    method deployWithVolumesAndVolumeMounts (line 116) | @Test
    method deployWithVolumesAndVolumeMountsOnAdditionalContainer (line 154) | @Test
    method deployWithVolumesAndVolumeMountsOnAdditionalContainerAbsentVolumeMount (line 173) | @Test
    method deployWithNodeSelectorGlobalProperty (line 195) | @Test
    method deployWithNodeSelectorDeploymentProperty (line 209) | @Test
    method deployWithNodeSelectorTrainTruckCaseProperty (line 221) | @Test
    method deployWithNodeSelectorDeploymentPropertyGlobalOverride (line 234) | @Test
    method deployWithEnvironmentWithCommaDelimitedValue (line 250) | @Test
    method deployWithEnvironmentWithSingleCommaDelimitedValue (line 272) | @Test
    method deployWithEnvironmentWithMultipleCommaDelimitedValue (line 288) | @Test
    method deployWithImagePullSecretDeploymentProperty (line 306) | @Test
    method deployWithImagePullSecretDeployerProperty (line 322) | @Test
    method deployWithImagePullSecretsDeploymentProperty (line 338) | @Test
    method deployWithImagePullSecretsDeployerProperty (line 355) | @Test
    method deployWithDeploymentServiceAccountNameDeploymentProperties (line 372) | @Test
    method deployWithDeploymentServiceAccountNameDeployerProperty (line 388) | @Test
    method deployWithDeploymentServiceAccountNameDeploymentPropertyOverride (line 404) | @Test
    method deployWithTolerations (line 423) | @Test
    method deployWithGlobalTolerations (line 435) | @Test
    method deployWithTolerationPropertyOverride (line 455) | @Test
    method deployWithDuplicateTolerationKeyPropertyOverride (line 485) | @Test
    method deployWithDuplicateGlobalToleration (line 513) | @Test
    method testInvalidDeploymentLabelDelimiter (line 547) | @Test
    method testInvalidMultipleDeploymentLabelDelimiter (line 560) | @Test
    method testDeploymentLabels (line 573) | @Test
    method testSecretKeyRef (line 591) | @Test
    method testSecretKeyRefMultiple (line 614) | @Test
    method testSecretKeyRefGlobal (line 644) | @Test
    method testSecretKeyRefPropertyOverride (line 670) | @Test
    method testSecretKeyRefGlobalFromYaml (line 727) | @Test
    method testConfigMapKeyRef (line 746) | @Test
    method testConfigMapKeyRefMultiple (line 769) | @Test
    method testConfigMapKeyRefGlobal (line 799) | @Test
    method testConfigMapKeyRefPropertyOverride (line 825) | @Test
    method testConfigMapKeyRefGlobalFromYaml (line 882) | @Test
    method testInitContainerProperties (line 900) | @Test
    method testInitContainerJsonArrayProperties (line 916) | @Test
    method testInitContainerEnvironmentVariables (line 933) | @Test
    method testMultipleInitContainerProperties (line 957) | @Test
    method testNodeAffinityProperty (line 1003) | @Test
    method testPodAffinityProperty (line 1035) | @Test
    method testPodAntiAffinityProperty (line 1070) | @Test
    method testNodeAffinityGlobalProperty (line 1105) | @Test
    method testPodAffinityGlobalProperty (line 1145) | @Test
    method testPodAntiAffinityGlobalProperty (line 1185) | @Test
    method testNodeAffinityFromYaml (line 1225) | @Test
    method testPodAffinityFromYaml (line 1239) | @Test
    method testPodAntiAffinityFromYaml (line 1253) | @Test
    method testNodeAffinityPropertyOverrideGlobal (line 1267) | @Test
    method testPodAffinityPropertyOverrideGlobal (line 1317) | @Test
    method testPodAntiAffinityPropertyOverrideGlobal (line 1369) | @Test
    class CreatePodSpecWithPodSecurityContext (line 1421) | @Nested
      method createdFromDeploymentPropertyWithAllFields (line 1425) | @Test
      method createdFromDeploymentPropertyWithRunAsUserOnly (line 1457) | @Test
      method createdFromDeploymentPropertyWithFsGroupOnly (line 1469) | @Test
      method createdFromDeploymentPropertyWithSupplementalGroupsOnly (line 1481) | @Test
      method createdFromDeploymentPropertyWithSeccompProfileOnly (line 1493) | @Test
      method createdFromGlobalDeployerPropertySourcedFromYaml (line 1505) | @Test
      method createdFromGlobalDeployerProperty (line 1525) | @Test
      method createdFromDeploymentPropertyOverridingGlobalDeployerProperty (line 1548) | @Test
      method assertThatDeployerCreatesPodSpecWithPodSecurityContext (line 1572) | private void assertThatDeployerCreatesPodSpecWithPodSecurityContext(
    class CreatePodSpecWithContainerSecurityContext (line 1585) | @Nested
      method createdFromDeploymentPropertyWithAllFields (line 1589) | @Test
      method createdFromDeploymentPropertyWithAllowPrivilegeEscalationOnly (line 1623) | @Test
      method createdFromDeploymentPropertyWithReadOnlyRootFilesystemOnly (line 1634) | @Test
      method createdFromGlobalDeployerPropertySourcedFromYaml (line 1645) | @Test
      method createdFromGlobalDeployerProperty (line 1666) | @Test
      method createdFromDeploymentPropertyOverridingGlobalDeployerProperty (line 1682) | @Test
      method assertThatDeployerCreatesPodSpecWithContainerSecurityContext (line 1698) | private void assertThatDeployerCreatesPodSpecWithContainerSecurityCo...
    method deployerCreatesPodSpec (line 1711) | private PodSpec deployerCreatesPodSpec(KubernetesDeployerProperties gl...
    method testWithLifecyclePostStart (line 1718) | @Test
    method testWithLifecyclePreStop (line 1732) | @Test
    method testLifecyclePostStartOverridesGlobalPostStart (line 1747) | @Test
    method testLifecyclePrestopOverridesGlobalPrestop (line 1788) | @Test
    method terminationGracePeriodFromDeployerProp (line 1829) | @Test
    method terminationGracePeriodFromGlobalProp (line 1842) | @Test
    method terminationGracePeriodNotSpecified (line 1853) | @Test
    method getResource (line 1863) | private Resource getResource() {
    method bindDeployerProperties (line 1867) | private KubernetesDeployerProperties bindDeployerProperties() throws E...
    method k8sAppDeployer (line 1883) | protected KubernetesAppDeployer k8sAppDeployer() throws Exception {
    method k8sAppDeployer (line 1887) | protected KubernetesAppDeployer k8sAppDeployer(KubernetesDeployerPrope...

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesConfigurationPropertiesTests.java
  class KubernetesConfigurationPropertiesTests (line 31) | public class KubernetesConfigurationPropertiesTests {
    method testFabric8Namespacing (line 33) | @Test
    method testTopLevelNamespacing (line 52) | @Test
    method testTopLevelNamespacingOverride (line 68) | @Test

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesDeployerPropertiesTests.java
  class KubernetesDeployerPropertiesTests (line 31) | public class KubernetesDeployerPropertiesTests {
    method testImagePullPolicyDefault (line 33) | @Test
    method testImagePullPolicyCanBeCustomized (line 42) | @Test
    method testRestartPolicyDefault (line 52) | @Test
    method testRestartPolicyCanBeCustomized (line 61) | @Test
    method testEntryPointStyleDefault (line 71) | @Test
    method testEntryPointStyleCanBeCustomized (line 80) | @Test
    method testNamespaceDefault (line 90) | @Test
    method testNamespaceCanBeCustomized (line 101) | @Test
    method testImagePullSecretDefault (line 109) | @Test
    method testImagePullSecretCanBeCustomized (line 115) | @Test
    method testEnvironmentVariablesDefault (line 124) | @Test
    method testEnvironmentVariablesCanBeCustomized (line 132) | @Test
    method testTaskServiceAccountNameDefault (line 143) | @Test
    method testTaskServiceAccountNameCanBeCustomized (line 152) | @Test

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesSchedulerIT.java
  class KubernetesSchedulerIT (line 84) | @ExtendWith(SpringExtension.class)
    method provideScheduler (line 97) | @Override
    method getCommandLineArgs (line 102) | @Override
    method getSchedulerProperties (line 111) | @Override
    method getSchedulerProperties (line 117) | private Map<String, String> getSchedulerProperties(String concurrencyP...
    method getDeploymentProperties (line 123) | @Override
    method getAppProperties (line 128) | @Override
    method randomName (line 137) | @Override
    method scheduleName (line 144) | @Override
    method testApplication (line 151) | protected Resource testApplication() {
    method test (line 155) | @Test
    method testMissingSchedule (line 160) | @ParameterizedTest
    method testInvalidNameSchedule (line 173) | @ParameterizedTest
    method testSchedulerPropertiesMerge (line 186) | @Test
    method listScheduleWithExternalCronJobs (line 211) | @Test
    method testInvalidCronSyntax (line 257) | @ParameterizedTest
    method testNameTooLong (line 271) | @ParameterizedTest
    method testWithExecEntryPoint (line 293) | @ParameterizedTest
    method testWithShellEntryPoint (line 325) | @ParameterizedTest
    method testWithBootEntryPoint (line 357) | @ParameterizedTest
    method testGetExceptionMessageForExistingField (line 397) | @Test
    method testGetExceptionMessageForNonExistentField (line 416) | @Test
    method testEntryPointStyleOverride (line 434) | @ParameterizedTest
    method testEntryPointStyleDefault (line 475) | @ParameterizedTest
    method testImagePullPolicyOverride (line 504) | @ParameterizedTest
    method testJobAnnotationsAndLabelsFromSchedulerProperties (line 536) | @ParameterizedTest
    method testDefaultLabel (line 570) | @Test
    method testJobAnnotationsAndLabelsFromSchedulerRequest (line 595) | @ParameterizedTest
    method testJobAnnotationsOverride (line 644) | @ParameterizedTest
    method testImagePullPolicyDefault (line 674) | @ParameterizedTest
    method testImagePullSecret (line 701) | @ParameterizedTest
    method testImagePullSecretDefault (line 733) | @ParameterizedTest
    method testImagePullSecretFromSchedulerProperties (line 760) | @ParameterizedTest
    method testCustomEnvironmentVariables (line 790) | @ParameterizedTest
    method testGlobalEnvironmentVariables (line 805) | @ParameterizedTest
    method testCustomEnvironmentVariablesWithNestedComma (line 821) | @ParameterizedTest
    method testGlobalAndCustomEnvironmentVariables (line 836) | @ParameterizedTest
    method testCustomEnvironmentVariablesOverrideGlobal (line 860) | @ParameterizedTest
    method testEnvironmentVariables (line 882) | private void testEnvironmentVariables(KubernetesDeployerProperties kub...
    method testTaskServiceAccountNameOverride (line 907) | @ParameterizedTest
    method testTaskServiceAccountNameDefault (line 940) | @ParameterizedTest
    method testConcurrencyPolicy (line 970) | @ParameterizedTest
    method testConcurrencyPolicyDefault (line 994) | @Test
    method testConcurrencyPolicyFromServerProperties (line 1017) | @Test
    method testTtlSecondsAfterFinished (line 1041) | @ParameterizedTest
    method testInvalidTtlSecondsAfterFinished (line 1068) | @ParameterizedTest
    method testTtlSecondsAfterFinishedDefault (line 1083) | @Test
    method testTtlSecondsAfterFinishedFromServerProperties (line 1107) | @Test
    method testBackoffLimit (line 1131) | @Test
    method testBackoffLimitDefault (line 1153) | @Test
    method testBackoffLimitFromServerProperties (line 1171) | @Test
    method cleanup (line 1190) | @AfterAll
    method safeUnschedule (line 1209) | private static void safeUnschedule(KubernetesScheduler scheduler, Stri...
    class Config (line 1218) | @Configuration
      method scheduler (line 1224) | @Bean
      method kubernetesClient (line 1229) | @Bean

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesSchedulerPropertiesTests.java
  class KubernetesSchedulerPropertiesTests (line 31) | public class KubernetesSchedulerPropertiesTests {
    method testImagePullPolicyDefault (line 33) | @Test
    method testImagePullPolicyCanBeCustomized (line 42) | @Test
    method testRestartPolicyDefault (line 52) | @Test
    method testRestartPolicyCanBeCustomized (line 61) | @Test
    method testEntryPointStyleDefault (line 71) | @Test
    method testEntryPointStyleCanBeCustomized (line 80) | @Test
    method testNamespaceDefault (line 90) | @Test
    method testNamespaceCanBeCustomized (line 101) | @Test
    method testImagePullSecretDefault (line 109) | @Test
    method testImagePullSecretCanBeCustomized (line 115) | @Test
    method testEnvironmentVariablesDefault (line 124) | @Test
    method testEnvironmentVariablesCanBeCustomized (line 132) | @Test
    method testTaskServiceAccountNameDefault (line 143) | @Test
    method testTaskServiceAccountNameCanBeCustomized (line 152) | @Test

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncherIntegrationIT.java
  class KubernetesTaskLauncherIntegrationIT (line 55) | @SpringBootTest(classes = {KubernetesAutoConfiguration.class}, propertie...
    method taskLaunchedWithJobPodAnnotations (line 61) | @Test
    method taskLaunchedWithDeploymentLabels (line 74) | @Test
    method tasksLaunchedWithAdditionalContainers (line 87) | @Test
    method launchTaskPodAndValidateCreatedPodWithCleanup (line 99) | private void launchTaskPodAndValidateCreatedPodWithCleanup(Map<String,...
    method cleanupDeletesTaskPod (line 121) | @Test
    method cleanupForNonExistentTaskThrowsException (line 147) | @Test

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncherMaximumConcurrentTasksTests.java
  class KubernetesTaskLauncherMaximumConcurrentTasksTests (line 51) | @SpringBootTest(classes = { KubernetesAutoConfiguration.class }, propert...
    method getMaximumConcurrentTasksExceeded (line 64) | @Test
    method stubForRunningPods (line 107) | private List<Pod> stubForRunningPods(int numTasks) {

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncherWithJobIntegrationIT.java
  class KubernetesTaskLauncherWithJobIntegrationIT (line 57) | @SpringBootTest(classes = {KubernetesAutoConfiguration.class})
    method setup (line 62) | @BeforeEach
    method taskLaunchedWithJobAnnotations (line 69) | @Test
    method taskLaunchedWithJobSpecProperties (line 80) | @Test
    method launchTaskJobAndValidateCreatedJobAndPodWithCleanup (line 92) | private void launchTaskJobAndValidateCreatedJobAndPodWithCleanup(Map<S...
    method taskLaunchedWithInvalidRestartPolicyThrowsException (line 120) | @Test
    method cleanupDeletesTaskJob (line 136) | @Test
    method cleanupForNonExistentTaskThrowsException (line 161) | @Test
    method deleteJobAfterTtlSecondsOnAfterFinishedExpire (line 168) | @Test

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/PropertyParserUtilsTests.java
  class PropertyParserUtilsTests (line 36) | public class PropertyParserUtilsTests {
    method testAnnotationParseSingle (line 38) | @Test
    method testAnnotationParseMultiple (line 47) | @Test
    method testAnnotationParseMultipleWithCommas (line 58) | @Test
    method testAnnotationWithQuotes (line 83) | @Test
    method testAnnotationMultipleColon (line 94) | @Test
    method testAnnotationParseInvalidValue (line 109) | @Test
    method testDeploymentPropertyParsing (line 116) | @Test

FILE: spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/RunAbstractKubernetesDeployerTests.java
  class RunAbstractKubernetesDeployerTests (line 40) | public class RunAbstractKubernetesDeployerTests {
    method setUp (line 48) | @BeforeEach
    method deduceImagePullPolicy_fallsBackToIfNotPresentIfOverrideNotParseable (line 57) | @Test
    method limitGpu_noDeploymentProperty_incompleteServerProperty1_noGpu (line 64) | @Test
    method limitGpu_noDeploymentProperty_incompleteServerProperty2_noGpu (line 71) | @Test
    method limitGpu_noDeploymentProperty_serverProperty_usesServerProperty (line 78) | @Test
    method limitGpu_deploymentPropertyVendor_usesDeploymentProperty (line 86) | @Test
    method limitGpu_deploymentPropertyCount_usesDeploymentProperty (line 95) | @Test
    method limitGpu_deploymentPropertyBoth_usesDeploymentProperty (line 104) | @Test
    method limitCpu_noDeploymentProperty_serverProperty_usesServerProperty (line 114) | @Test
    method limitMemory_noDeploymentProperty_serverProperty_usesServerProperty (line 121) | @Test
    method limitCpu_deploymentProperty_usesDeploymentProperty (line 128) | @Test
    method limitMemory_deploymentProperty_usesDeploymentProperty (line 136) | @Test
    method requestCpu_noDeploymentProperty_serverProperty_usesServerProperty (line 144) | @Test
    method requestMemory_noDeploymentProperty_serverProperty_usesServerProperty (line 151) | @Test
    method requestCpu_deploymentProperty_usesDeploymentProperty (line 158) | @Test
    method requestMemory_deploymentProperty_usesDeploymentProperty (line 166) | @Test
    method requestEphemeralStorage_deploymentProperty_usesDeploymentProperty (line 173) | @Test
    method limitEphemeralStorage_deploymentProperty_usesDeploymentProperty (line 181) | @Test
    method requestHugepages1Gi_deploymentProperty_usesDeploymentProperty (line 189) | @Test
    method limitHugepages1Gi_deploymentProperty_usesDeploymentProperty (line 197) | @Test
    method requestHugepages2Mi_deploymentProperty_usesDeploymentProperty (line 205) | @Test
    method limitHugepages2Mi_deploymentProperty_usesDeploymentProperty (line 213) | @Test

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/AbstractLocalDeployerSupport.java
  class AbstractLocalDeployerSupport (line 61) | public abstract class AbstractLocalDeployerSupport {
    method removeEldestEntry (line 64) | @Override
    method AbstractLocalDeployerSupport (line 98) | public AbstractLocalDeployerSupport(LocalDeployerProperties localDeplo...
    method buildRestTemplate (line 116) | protected RestTemplate buildRestTemplate(LocalDeployerProperties prope...
    method createRuntimeEnvironmentInfo (line 132) | protected RuntimeEnvironmentInfo createRuntimeEnvironmentInfo(Class<?>...
    method getLocalDeployerProperties (line 146) | final protected LocalDeployerProperties getLocalDeployerProperties() {
    method buildProcessBuilder (line 159) | protected ProcessBuilder buildProcessBuilder(AppDeploymentRequest requ...
    method getCommandBuilder (line 188) | protected CommandBuilder getCommandBuilder(AppDeploymentRequest reques...
    method windowsSupport (line 197) | public static String[] windowsSupport(String[] commands) {
    method bindDeploymentProperties (line 212) | protected LocalDeployerProperties bindDeploymentProperties(Map<String,...
    method formatApplicationProperties (line 219) | protected Map<String, String> formatApplicationProperties(AppDeploymen...
    method shutdownAndWait (line 265) | protected void shutdownAndWait(Instance instance) {
    method isAlive (line 299) | protected boolean isAlive(Process process) {
    method useSpringApplicationJson (line 312) | protected boolean useSpringApplicationJson(AppDeploymentRequest reques...
    method calcServerPort (line 324) | protected int calcServerPort(AppDeploymentRequest request, boolean use...
    method shouldInheritLogging (line 348) | protected boolean shouldInheritLogging(AppDeploymentRequest request) {
    method getRandomPort (line 353) | public synchronized int getRandomPort(AppDeploymentRequest request) {
    method isServerPortKeyPresentOnArgs (line 395) | protected Integer isServerPortKeyPresentOnArgs(AppDeploymentRequest re...
    type Instance (line 403) | protected interface Instance {
      method getBaseUrl (line 405) | URL getBaseUrl();
      method getProcess (line 407) | Process getProcess();

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/CommandBuilder.java
  type CommandBuilder (line 33) | public interface CommandBuilder {
    method buildExecutionCommand (line 44) | ProcessBuilder buildExecutionCommand(AppDeploymentRequest request,
    method getBaseUrl (line 57) | URL getBaseUrl(String deploymentId, int index, int port);
    method getPortSuggestion (line 64) | int getPortSuggestion(LocalDeployerProperties localDeployerProperties);
    method getJdwpOptions (line 72) | default String getJdwpOptions(String suspend, String address) {

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/DebugAddress.java
  class DebugAddress (line 35) | public class DebugAddress {
    method DebugAddress (line 47) | private DebugAddress(String host, int port, String suspend) {
    method getHost (line 54) | public String getHost() {
    method getPort (line 58) | public String getPort() {
    method getSuspend (line 62) | public String getSuspend() {
    method getAddress (line 66) | public String getAddress() {
    method from (line 70) | public static Optional<DebugAddress> from(LocalDeployerProperties depl...

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/DeployerSocketUtils.java
  class DeployerSocketUtils (line 49) | @Deprecated
    method findAvailableTcpPort (line 67) | public static int findAvailableTcpPort(int minPort) {
    method findAvailableTcpPort (line 79) | public static int findAvailableTcpPort(int minPort, int maxPort) {
    method findAvailableTcpPorts (line 93) | public static SortedSet<Integer> findAvailableTcpPorts(int numRequeste...
    type SocketType (line 97) | private enum SocketType {
      method isPortAvailable (line 99) | @Override
      method isPortAvailable (line 117) | protected abstract boolean isPortAvailable(int port);
      method findRandomPort (line 126) | private int findRandomPort(int minPort, int maxPort) {
      method findAvailablePort (line 139) | int findAvailablePort(int minPort, int maxPort) {
      method findAvailablePorts (line 171) | SortedSet<Integer> findAvailablePorts(int numRequested, int minPort,...

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/DockerCommandBuilder.java
  class DockerCommandBuilder (line 52) | public class DockerCommandBuilder implements CommandBuilder {
    method DockerCommandBuilder (line 64) | public DockerCommandBuilder(String dockerNetwork) {
    method getPortSuggestion (line 68) | @Override
    method getBaseUrl (line 74) | @Override
    method buildExecutionCommand (line 84) | @Override
    method addDockerOptions (line 96) | private List<String> addDockerOptions(AppDeploymentRequest request, Ma...
    method applyVolumeMountings (line 170) | private void applyVolumeMountings(List<String> commands, LocalDeployer...
    method applyAdditionalHosts (line 180) | private void applyAdditionalHosts(List<String> commands, LocalDeployer...
    method applyPortMappings (line 190) | private void applyPortMappings(List<String> commands, LocalDeployerPro...
    method getPort (line 200) | private String getPort(Map<String, String> appInstanceEnv) {
    method parseMapping (line 219) | private List<String> parseMapping(String map) {

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/HttpProbeExecutor.java
  class HttpProbeExecutor (line 36) | public class HttpProbeExecutor {
    method HttpProbeExecutor (line 42) | public HttpProbeExecutor(RestTemplate restTemplate, URI uri) {
    method from (line 47) | public static HttpProbeExecutor from(URL baseUrl, HttpProbe httpProbe) {
    method probe (line 62) | public boolean probe() {

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/JavaCommandBuilder.java
  class JavaCommandBuilder (line 52) | public class JavaCommandBuilder implements CommandBuilder {
    method JavaCommandBuilder (line 58) | public JavaCommandBuilder(LocalDeployerProperties properties) {
    method getPortSuggestion (line 62) | @Override
    method getBaseUrl (line 68) | @Override
    method buildExecutionCommand (line 77) | @Override
    method retainEnvVars (line 128) | protected void retainEnvVars(Map<String, String> vars, LocalDeployerPr...
    method addJavaOptions (line 146) | protected void addJavaOptions(
    method addJavaExecutionOptions (line 176) | protected void addJavaExecutionOptions(List<String> commands, AppDeplo...
    method bindDeploymentProperties (line 193) | protected LocalDeployerProperties bindDeploymentProperties(Map<String,...

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalActuatorTemplate.java
  class LocalActuatorTemplate (line 29) | public class LocalActuatorTemplate extends AbstractActuatorTemplate {
    method LocalActuatorTemplate (line 31) | public LocalActuatorTemplate(RestTemplate restTemplate, AppDeployer ap...
    method actuatorUrlForInstance (line 36) | @Override

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalAppDeployer.java
  class LocalAppDeployer (line 71) | public class LocalAppDeployer extends AbstractLocalDeployerSupport imple...
    method LocalAppDeployer (line 83) | public LocalAppDeployer(LocalDeployerProperties properties) {
    method getProcessExitValue (line 93) | private static Integer getProcessExitValue(Process process) {
    method getLocalProcessPid (line 111) | private static synchronized int getLocalProcessPid(Process p) {
    method deploy (line 127) | @Override
    method scale (line 151) | @Override
    method undeploy (line 194) | @Override
    method status (line 212) | @Override
    method getLog (line 227) | @Override
    method environmentInfo (line 249) | @Override
    method shutdown (line 254) | @PreDestroy
    method deployApp (line 261) | private AppInstance deployApp(AppDeploymentRequest request, Path workD...
    method createWorkingDir (line 336) | private Path createWorkingDir(Map<String, String> deploymentProperties...
    method validateStatus (line 348) | private void validateStatus(String deploymentId, DeploymentState expec...
    method toGuid (line 355) | private static String toGuid(String deploymentId, int appIndex) {
    class AppInstance (line 359) | private static class AppInstance implements Instance, AppInstanceStatus {
      method AppInstance (line 377) | private AppInstance(String deploymentId, int instanceNumber, int por...
      method getId (line 390) | @Override
      method getBaseUrl (line 395) | @Override
      method getProcess (line 400) | @Override
      method toString (line 405) | @Override
      method getState (line 410) | @Override
      method getStdOut (line 450) | public String getStdOut() {
      method getStdErr (line 459) | public String getStdErr() {
      method getInstanceNumber (line 468) | public int getInstanceNumber() {
      method getAttributes (line 472) | @Override
      method start (line 481) | private void start(ProcessBuilder builder, Path workDir) throws IOEx...
      method start (line 496) | private void start(ProcessBuilder builder, Path workDir, boolean del...
    class AppInstancesHolder (line 516) | private static class AppInstancesHolder {
      method AppInstancesHolder (line 520) | public AppInstancesHolder(List<AppInstance> instances, AppDeployment...

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalDeployerAutoConfiguration.java
  class LocalDeployerAutoConfiguration (line 36) | @Configuration
    method appDeployer (line 41) | @Bean
    method taskLauncher (line 47) | @Bean
    method actuatorRestTemplate (line 53) | @Bean
    method actuatorOperations (line 59) | @Bean

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalDeployerProperties.java
  class LocalDeployerProperties (line 51) | @Validated
    type DebugSuspendType (line 172) | public enum DebugSuspendType {y, n}
    method LocalDeployerProperties (line 193) | public LocalDeployerProperties() {
    method LocalDeployerProperties (line 201) | public LocalDeployerProperties(LocalDeployerProperties from) {
    class PortRange (line 227) | public static class PortRange {
      method getLow (line 239) | public int getLow() {
      method setLow (line 243) | public void setLow(int low) {
      method getHigh (line 247) | public int getHigh() {
      method setHigh (line 251) | public void setHigh(int high) {
      method toString (line 255) | @Override
      method hashCode (line 260) | @Override
      method equals (line 269) | @Override
    class Docker (line 288) | public static class Docker {
      method getPortRange (line 319) | public PortRange getPortRange() {
      method getNetwork (line 323) | public String getNetwork() {
      method setNetwork (line 327) | public void setNetwork(String network) {
      method isDeleteContainerOnExit (line 331) | public boolean isDeleteContainerOnExit() {
      method setDeleteContainerOnExit (line 335) | public void setDeleteContainerOnExit(boolean deleteContainerOnExit) {
      method getPortMappings (line 339) | public String getPortMappings() {
      method setPortMappings (line 343) | public void setPortMappings(String portMappings) {
      method getVolumeMounts (line 347) | public String getVolumeMounts() {
      method setVolumeMounts (line 351) | public void setVolumeMounts(String volumeMounts) {
      method getAdditionalHosts (line 355) | public String getAdditionalHosts() { return additionalHosts; }
      method setAdditionalHosts (line 357) | public void setAdditionalHosts(String additionalHosts) { this.additi...
      method hashCode (line 359) | @Override
      method equals (line 367) | @Override
    method getDocker (line 385) | public Docker getDocker() {
    method getHostname (line 389) | public String getHostname() {
    method setHostname (line 393) | public void setHostname(String hostname) {
    method getDebugPort (line 397) | public Integer getDebugPort() {
    method getDebugSuspend (line 401) | public DebugSuspendType getDebugSuspend() {
    method setDebugSuspend (line 405) | public void setDebugSuspend(DebugSuspendType debugSuspend) {
    method setDebugPort (line 409) | public void setDebugPort(Integer debugPort) {
    method getDebugAddress (line 415) | public String getDebugAddress() {
    method setDebugAddress (line 419) | public void setDebugAddress(String debugAddress) {
    method isInheritLogging (line 423) | public boolean isInheritLogging() {
    method setInheritLogging (line 427) | public void setInheritLogging(boolean inheritLogging) {
    method getJavaCommand (line 431) | public String getJavaCommand(String bootVersion) {
    method getJavaHomePath (line 438) | public Map<String, String> getJavaHomePath() {
    method setJavaHomePath (line 442) | public void setJavaHomePath(Map<String, String> javaHomePath) {
    method getJavaCmd (line 446) | public String getJavaCmd() {
    method setJavaCmd (line 450) | public void setJavaCmd(String javaCmd) {
    method getWorkingDirectoriesRoot (line 454) | public Path getWorkingDirectoriesRoot() {
    method setWorkingDirectoriesRoot (line 458) | public void setWorkingDirectoriesRoot(String workingDirectoriesRoot) {
    method setWorkingDirectoriesRoot (line 462) | public void setWorkingDirectoriesRoot(Path workingDirectoriesRoot) {
    method isDeleteFilesOnExit (line 466) | public boolean isDeleteFilesOnExit() {
    method setDeleteFilesOnExit (line 470) | public void setDeleteFilesOnExit(boolean deleteFilesOnExit) {
    method getEnvVarsToInherit (line 474) | public String[] getEnvVarsToInherit() {
    method setEnvVarsToInherit (line 478) | public void setEnvVarsToInherit(String[] envVarsToInherit) {
    method getShutdownTimeout (line 482) | public int getShutdownTimeout() {
    method setShutdownTimeout (line 486) | public LocalDeployerProperties setShutdownTimeout(int shutdownTimeout) {
    method getJavaOpts (line 491) | public String getJavaOpts() {
    method setJavaOpts (line 495) | public void setJavaOpts(String javaOpts) {
    method isUseSpringApplicationJson (line 499) | public boolean isUseSpringApplicationJson() {
    method setUseSpringApplicationJson (line 503) | public void setUseSpringApplicationJson(boolean useSpringApplicationJs...
    method getPortRange (line 507) | public PortRange getPortRange() {
    method getMaximumConcurrentTasks (line 511) | public int getMaximumConcurrentTasks() {
    method setMaximumConcurrentTasks (line 515) | public void setMaximumConcurrentTasks(int maximumConcurrentTasks) {
    method getStartupProbe (line 523) | public HttpProbe getStartupProbe() {
    method setStartupProbe (line 527) | public void setStartupProbe(HttpProbe startupProbe) {
    method getHealthProbe (line 531) | public HttpProbe getHealthProbe() {
    method setHealthProbe (line 535) | public void setHealthProbe(HttpProbe healthProbe) {
    method getAppAdmin (line 539) | public AppAdmin getAppAdmin() {
    method setAppAdmin (line 543) | public void setAppAdmin(AppAdmin appAdmin) {
    class HttpProbe (line 547) | public static class HttpProbe {
      method getPath (line 554) | public String getPath() {
      method setPath (line 558) | public void setPath(String path) {
    method deduceJavaCommand (line 563) | private String deduceJavaCommand(String bootVersion) {
    method getJavaHome (line 583) | private String getJavaHome(String bootVersion) {
    method toString (line 588) | @Override
    method equals (line 594) | @Override
    method hashCode (line 623) | @Override

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalDeployerUtils.java
  class LocalDeployerUtils (line 28) | public class LocalDeployerUtils {
    method isWindows (line 35) | protected static boolean isWindows() {

FILE: spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalTaskLauncher.java
  class LocalTaskLauncher (line 64) | public class LocalTaskLauncher extends AbstractLocalDeployerSupport impl...
    method LocalTaskLauncher (line 79) | public LocalTaskLauncher(LocalDeployerProperties properties) {
    method launch (line 83) | @Override
    method pruneTaskInstanceHistory (line 131) | private void pruneTaskInstanceHistory(String taskDefinitionName, Strin...
    method isDynamicPort (line 151) | private boolean isDynamicPort(AppDeploymentRequest request) {
    method cancel (line 157) | @Override
    method status (line 168) | @Override
    method getLog (line 177) | @Override
    method cleanup (line 199) | @Override
    method destroy (line 203) | @Override
    method environmentInfo (line 207) | @Override
    method getMaximumConcurrentTasks (line 212) | @Override
    method getRunningTaskExecutionCount (line 218) | @Override
    method maxConcurrentExecutionsReached (line 230) | private synchronized boolean maxConcurrentExecutionsReached() {
    method shutdown (line 234) | @PreDestroy
    method createWorkingDirectory (line 242) | private Path createWorkingDirectory(Map<String, String> deploymentProp...
    class TaskInstance (line 258) | private static class TaskInstance implements Instance {
      method TaskInstance (line 272) | private TaskInstance(ProcessBuilder builder, Path workDir, int port)...
      method getBaseUrl (line 282) | @Override
      method getProcess (line 287) | @Override
      method getState (line 292) | public LaunchState getState() {
      method getStdOut (line 318) | public String getStdOut() {
      method getStdErr (line 327) | public String getStdErr() {
      method start (line 340) | private void start(ProcessBuilder builder) throws IOException {
      method start (line 348) | private void start(ProcessBuilder builder, boolean deleteOnExit) thr...
      method getAttributes (line 361) | private Map<String, String> getAttributes() {
    method getProcessExitValue (line 382) | private static Integer getProcessExitValue(Process process) {

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/DebugAddressTests.java
  class DebugAddressTests (line 28) | public class DebugAddressTests {
    method testDebugEmptyConfiguration (line 30) | @Test
    method testDebugPort (line 37) | @Test
    method testDebugPortWithInstance (line 49) | @Test
    method testDebugPortInvalidValue (line 61) | @Test
    method testDebugAddressPortOnly (line 70) | @Test
    method testDebugAddressWildcardHost (line 82) | @Test
    method testDebugAddressWithIP (line 95) | @Test
    method testDebugAddressWithHostname (line 107) | @Test
    method testDebugAddressWithInvalidIP (line 119) | @Test

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/DeployerSocketUtilsTests.java
  class DeployerSocketUtilsTests (line 33) | class DeployerSocketUtilsTests {
    method findAvailableTcpPortWithZeroMinPort (line 35) | @Test
    method findAvailableTcpPortWithNegativeMinPort (line 40) | @Test
    method findAvailableTcpPortWithMin (line 45) | @Test
    method find4AvailableTcpPortsInRange (line 51) | @Test
    method find50AvailableTcpPortsInRange (line 56) | @Test
    method findAvailableTcpPortsWithRequestedNumberGreaterThanSizeOfRange (line 61) | @Test
    method findAvailableTcpPorts (line 68) | private void findAvailableTcpPorts(int numRequested, int minPort, int ...
    method assertPortInRange (line 73) | private void assertPortInRange(int port, int minPort, int maxPort) {
    method assertAvailablePorts (line 78) | private void assertAvailablePorts(SortedSet<Integer> ports, int numReq...

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/DockerCommandBuilderTests.java
  class DockerCommandBuilderTests (line 40) | public class DockerCommandBuilderTests {
    method testContainerName (line 42) | @Test
    method testContainerNameWithDockerNetwork (line 56) | @Test
    method testContainerNameWithDockerNetworkAndKeepContainers (line 69) | @Test
    method testUseLocalDeployerPropertiesToKeepStoppedContainer (line 87) | @Test
    method testSpringApplicationJSON (line 105) | @Test
    method testContainerPortMappings (line 122) | @Test
    method testContainerVolumeMount (line 143) | @Test
    method testContainerAdditionalHost (line 164) | @Test

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/JavaExecutionCommandBuilderTests.java
  class JavaExecutionCommandBuilderTests (line 43) | public class JavaExecutionCommandBuilderTests {
    method setUp (line 50) | @BeforeEach
    method testDirectJavaMemoryOption (line 58) | @Test
    method testDirectJavaMemoryOptionWithG (line 66) | @Test
    method testJavaMemoryOption (line 74) | @Test
    method testJavaMemoryOptionWithKebabCase (line 82) | @Test
    method testJavaCmdOption (line 90) | @Test
    method testJavaCmdOptionWithKebabCase (line 102) | @Test
    method testOverrideMemoryOptions (line 114) | @Test
    method testDirectMemoryOptionsWithOtherOptions (line 123) | @Test
    method testMultipleOptions (line 133) | @Test
    method testConfigurationPropertiesOverride (line 142) | @Test
    method testJarExecution (line 151) | @Test
    method testBadResourceExecution (line 163) | @Test
    method testCommandBuilderSpringApplicationJson (line 174) | @Test
    method testCommandBuilderWithSpringApplicationJson (line 190) | @Test
    method testRetainEnv (line 212) | @Test
    method testResource (line 236) | protected Resource testResource() {

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalAppDeployerEnvironmentIntegrationTests.java
  class LocalAppDeployerEnvironmentIntegrationTests (line 70) | @SpringBootTest(classes = { Config.class, AbstractIntegrationJUnit5Tests...
    method provideAppDeployer (line 87) | @Override
    method testApplication (line 92) | @Override
    method randomName (line 101) | @Override
    method testEnvVariablesInheritedViaEnvEndpointNoSaj (line 114) | @Test
    method testFailureToCallShutdownOnUndeploy (line 171) | @Test
    method testNoStdoutStderrOnInheritLoggingAndNoNPEOnGetAttributes (line 201) | @Test
    method testInDebugModeWithSuspended (line 221) | @Test
    method testActuatorOperations (line 251) | @Test
    method getCommandOutput (line 291) | private String getCommandOutput(String cmd) throws IOException {
    class Config (line 297) | @Configuration
      method appDeployer (line 301) | @Bean
      method actuatorOperations (line 306) | @Bean

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalAppDeployerIntegrationTests.java
  class LocalAppDeployerIntegrationTests (line 75) | @SpringBootTest(classes = {
    method provideAppDeployer (line 92) | @Override
    method testApplication (line 97) | @Override
    method randomName (line 106) | @Override
    method testEnvVariablesInheritedViaEnvEndpoint (line 118) | @Test
    method testAppLogRetrieval (line 176) | @Test
    method testScale (line 196) | @Test
    method testScaleWithIndex (line 201) | @Test
    method testFailureToCallShutdownOnUndeploy (line 206) | @Test
    method testNoStdoutStderrOnInheritLoggingAndNoNPEOnGetAttributes (line 237) | @Test
    method testInDebugModeWithSuspended (line 259) | @Test
    method testInDebugModeWithSuspendedUseCamelCase (line 289) | @Test
    method testUseDefaultDeployerProperties (line 321) | @Test
    method testZeroPortReportsDeployed (line 359) | @Test
    method testStartupProbeFail (line 394) | @Test
    method testStartupProbeSucceed (line 426) | @Test
    method testHealthProbeFail (line 458) | @Test
    method testHealthProbeSucceed (line 493) | @Test
    method getAfterPaths (line 531) | @SuppressWarnings("resource")
    method getBeforePaths (line 542) | private List<Path> getBeforePaths(Path customWorkDirRoot) throws IOExc...
    method getCommandOutput (line 553) | private String getCommandOutput(String cmd) throws IOException {
    method getCommandOutputAll (line 559) | private String getCommandOutputAll(String cmd) throws IOException {
    class Config (line 565) | @Configuration
      method appDeployer (line 569) | @Bean

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalDeployerPropertiesTests.java
  class LocalDeployerPropertiesTests (line 33) | public class LocalDeployerPropertiesTests {
    method defaultNoPropertiesSet (line 37) | @Test
    method setAllProperties (line 66) | @Test
    method setAllPropertiesCamelCase (line 121) | @Test
    method testOnWindows (line 172) | @Test
    method testOnLinux (line 191) | @Test
    method testCopyProperties (line 210) | @Test
    class Config1 (line 236) | @EnableConfigurationProperties({LocalDeployerProperties.class})

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalDeployerSupportTests.java
  class LocalDeployerSupportTests (line 41) | public class LocalDeployerSupportTests {
    method setUp (line 46) | @BeforeEach
    method testAppPropsAsSAJ (line 52) | @Test
    method testCalcServerPort (line 65) | @Test
    method testShutdownPropertyConfiguresRequestFactory (line 95) | @Test
    method testShutdownPropertyNotConfiguresRequestFactory (line 108) | @Test
    method createAppDeploymentRequest (line 121) | protected AppDeploymentRequest createAppDeploymentRequest() throws Mal...
    method createAppDeploymentRequest (line 125) | protected AppDeploymentRequest createAppDeploymentRequest(Map<String, ...
    method testResource (line 134) | protected Resource testResource() {

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalTaskLauncherIntegrationTests.java
  class LocalTaskLauncherIntegrationTests (line 76) | @SpringBootTest(classes = {Config.class, AbstractIntegrationJUnit5Tests....
    method provideTaskLauncher (line 88) | @Override
    method testApplication (line 93) | @Override
    method randomName (line 102) | @Override
    method testPassingServerPortViaCommandLineArgs (line 115) | @Test
    method testBasicLaunchWithSymbolicLink (line 127) | @Test
    method createSymbolicLink (line 148) | private Path createSymbolicLink() throws IOException {
    method testInheritLoggingAndWorkDir (line 162) | @Test
    method testAppLogRetrieval (line 197) | @Test
    method testDeleteHistoryOnReLaunch (line 220) | @Test
    method basicLaunchAndValidation (line 285) | private void basicLaunchAndValidation(AppDefinition definition, Map<St...
    class Config (line 318) | @Configuration
      method taskLauncher (line 322) | @Bean

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/RandomPortRangeContextTests.java
  class RandomPortRangeContextTests (line 28) | public class RandomPortRangeContextTests {
    method defaultProtRangeProperties (line 33) | @Test
    method presetProtRangeProperties (line 47) | @Test

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/RandomPortRangeTests.java
  class RandomPortRangeTests (line 34) | @ExtendWith(MockitoExtension.class)
    method setUp (line 42) | @BeforeEach
    method portTests (line 55) | @Test
    method portTests2 (line 65) | @Test

FILE: spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/RandomPortTests.java
  class RandomPortTests (line 32) | @ExtendWith(MockitoExtension.class)
    method setUp (line 40) | @BeforeEach
    method portTests (line 46) | @Test

FILE: spring-cloud-deployer-resource-docker/src/main/java/org/springframework/cloud/deployer/resource/docker/DockerResource.java
  class DockerResource (line 34) | public class DockerResource extends AbstractResource {
    method DockerResource (line 44) | public DockerResource(String imageName) {
    method DockerResource (line 53) | public DockerResource(URI uri) {
    method getDescription (line 60) | @Override
    method getInputStream (line 68) | @Override
    method getURI (line 73) | @Override

FILE: spring-cloud-deployer-resource-docker/src/main/java/org/springframework/cloud/deployer/resource/docker/DockerResourceLoader.java
  class DockerResourceLoader (line 31) | public class DockerResourceLoader  implements ResourceLoader {
    method getResource (line 42) | @Override
    method getClassLoader (line 52) | @Override

FILE: spring-cloud-deployer-resource-docker/src/test/java/org/springframework/cloud/deployer/resource/docker/DockerResourceLoaderTests.java
  class DockerResourceLoaderTests (line 32) | public class DockerResourceLoaderTests {
    method verifyImageUri (line 34) | @Test
    method verifyImageUriWithSlashes (line 46) | @Test
    method verifyImageUriWithoutPrefix (line 58) | @Test

FILE: spring-cloud-deployer-resource-docker/src/test/java/org/springframework/cloud/deployer/resource/docker/DockerResourceTests.java
  class DockerResourceTests (line 33) | public class DockerResourceTests {
    method testResource (line 37) | @Test
    method testUri (line 43) | @Test
    method testInvalidUri (line 49) | @Test

FILE: spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/LoggingRepositoryListener.java
  class LoggingRepositoryListener (line 26) | public class LoggingRepositoryListener extends AbstractRepositoryListener {
    method artifactDeployed (line 30) | public void artifactDeployed(RepositoryEvent event) {
    method artifactDeploying (line 34) | public void artifactDeploying(RepositoryEvent event) {
    method artifactDescriptorInvalid (line 38) | public void artifactDescriptorInvalid(RepositoryEvent event) {
    method artifactDescriptorMissing (line 42) | public void artifactDescriptorMissing(RepositoryEvent event) {
    method artifactInstalled (line 46) | public void artifactInstalled(RepositoryEvent event) {
    method artifactInstalling (line 50) | public void artifactInstalling(RepositoryEvent event) {
    method artifactResolved (line 54) | public void artifactResolved(RepositoryEvent event) {
    method artifactDownloading (line 58) | public void artifactDownloading(RepositoryEvent event) {
    method artifactDownloaded (line 62) | public void artifactDownloaded(RepositoryEvent event) {
    method artifactResolving (line 66) | public void artifactResolving(RepositoryEvent event) {
    method metadataDeployed (line 70) | public void metadataDeployed(RepositoryEvent event) {
    method metadataDeploying (line 74) | public void metadataDeploying(RepositoryEvent event) {
    method metadataInstalled (line 78) | public void metadataInstalled(RepositoryEvent event) {
    method metadataInstalling (line 82) | public void metadataInstalling(RepositoryEvent event) {
    method metadataInvalid (line 86) | public void metadataInvalid(RepositoryEvent event) {
    method metadataResolved (line 90) | public void metadataResolved(RepositoryEvent event) {
    method metadataResolving (line 94) | public void metadataResolving(RepositoryEvent event) {
    method println (line 98) | private void println(String event, String message) {

FILE: spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/MavenArtifactResolver.java
  class MavenArtifactResolver (line 85) | class MavenArtifactResolver {
    method MavenArtifactResolver (line 104) | public MavenArtifactResolver(MavenProperties properties) {
    method defaultRemoteRepos (line 186) | protected Map<String, String> defaultRemoteRepos() {
    method proxyRepoIfProxyEnabled (line 194) | private RemoteRepository proxyRepoIfProxyEnabled(RemoteRepository remo...
    method isProxyEnabled (line 228) | private boolean isProxyEnabled() {
    method proxyHasCredentials (line 239) | private boolean proxyHasCredentials() {
    method remoteRepositoryHasCredentials (line 251) | private boolean remoteRepositoryHasCredentials(MavenProperties.RemoteR...
    method newAuthentication (line 265) | private Authentication newAuthentication(final String username, final ...
    method newRepositorySystemSession (line 282) | DefaultRepositorySystemSession newRepositorySystemSession() {
    method newRepositorySystemSession (line 289) | private DefaultRepositorySystemSession newRepositorySystemSession(Repo...
    method newRepositorySystem (line 326) | private RepositorySystem newRepositorySystem() {
    method remoteRepositories (line 352) | List<RemoteRepository> remoteRepositories() {
    method actualRemoteRepositoriesDescription (line 356) | private String actualRemoteRepositoriesDescription() {
    method configuredRemoteRepositoriesDescription (line 361) | private String configuredRemoteRepositoriesDescription() {
    method getVersions (line 367) | List<String> getVersions(String coordinates) {
    method resolve (line 394) | Resource resolve(MavenResource resource) {
    method validateCoordinates (line 414) | private void validateCoordinates(MavenResource resource) {
    method toResource (line 421) | public FileSystemResource toResource(ArtifactResult resolvedArtifact) {
    method toJarArtifact (line 425) | private Artifact toJarArtifact(MavenResource resource) {
    method toPomArtifact (line 429) | private Artifact toPomArtifact(MavenResource resource) {
    method toArtifact (line 433) | private Artifact toArtifact(MavenResource resource, String extension) {

FILE: spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/MavenProperties.java
  class MavenProperties (line 32) | public class MavenProperties {
    method isIncludeDefaultRemoteRepos (line 88) | boolean isIncludeDefaultRemoteRepos() {
    method setIncludeDefaultRemoteRepos (line 92) | void setIncludeDefaultRemoteRepos(boolean includeDefaultRemoteRepos) {
    method setUseWagon (line 101) | public void setUseWagon(boolean useWagon) {
    method isUseWagon (line 105) | public boolean isUseWagon() {
    method isEnableRepositoryListener (line 109) | public boolean isEnableRepositoryListener() {
    method setEnableRepositoryListener (line 113) | public void setEnableRepositoryListener(boolean enableRepositoryListen...
    method getUpdatePolicy (line 121) | public String getUpdatePolicy() {
    method setUpdatePolicy (line 125) | public void setUpdatePolicy(String updatePolicy) {
    method getChecksumPolicy (line 129) | public String getChecksumPolicy() {
    method setChecksumPolicy (line 133) | public void setChecksumPolicy(String checksumPolicy) {
    method getRemoteRepositories (line 137) | public Map<String, RemoteRepository> getRemoteRepositories() {
    method setRemoteRepositories (line 141) | public void setRemoteRepositories(final Map<String, RemoteRepository> ...
    method setLocalRepository (line 145) | public void setLocalRepository(String localRepository) {
    method getLocalRepository (line 149) | public String getLocalRepository() {
    method isOffline (line 153) | public boolean isOffline() {
    method setOffline (line 157) | public void setOffline(Boolean offline) {
    method getConnectTimeout (line 161) | public Integer getConnectTimeout() {
    method setConnectTimeout (line 165) | public void setConnectTimeout(Integer connectTimeout) {
    method getRequestTimeout (line 169) | public Integer getRequestTimeout() {
    method setRequestTimeout (line 173) | public void setRequestTimeout(Integer requestTimeout) {
    method getProxy (line 177) | public Proxy getProxy() {
    method setProxy (line 181) | public void setProxy(Proxy proxy) {
    method isResolvePom (line 185) | public boolean isResolvePom() {
    method setResolvePom (line 189) | public void setResolvePom(final boolean resolvePom) {
    class Proxy (line 193) | public static class Proxy {
      method getProtocol (line 217) | public String getProtocol() {
      method setProtocol (line 221) | public void setProtocol(String protocol) {
      method getHost (line 225) | public String getHost() {
      method setHost (line 229) | public void setHost(String host) {
      method getPort (line 233) | public int getPort() {
      method setPort (line 237) | public void setPort(int port) {
      method getNonProxyHosts (line 241) | public String getNonProxyHosts() {
      method setNonProxyHosts (line 245) | public void setNonProxyHosts(String nonProxyHosts) {
      method getAuth (line 249) | public Authentication getAuth() {
      method setAuth (line 253) | public void setAuth(Authentication auth) {
    type WagonHttpMethod (line 258) | public static enum WagonHttpMethod {
    class WagonHttpMethodProperties (line 266) | public static class WagonHttpMethodProperties {
      method isUsePreemptive (line 275) | public boolean isUsePreemptive() {
      method setUsePreemptive (line 279) | public void setUsePreemptive(boolean usePreemptive) {
      method isUseDefaultHeaders (line 283) | public boolean isUseDefaultHeaders() {
      method setUseDefaultHeaders (line 287) | public void setUseDefaultHeaders(boolean useDefaultHeaders) {
      method getConnectionTimeout (line 291) | public Integer getConnectionTimeout() {
      method setConnectionTimeout (line 295) | public void setConnectionTimeout(Integer connectionTimeout) {
      method getReadTimeout (line 299) | public Integer getReadTimeout() {
      method setReadTimeout (line 303) | public void setReadTimeout(Integer readTimeout) {
      method getHeaders (line 307) | public Map<String, String> getHeaders() {
      method setHeaders (line 311) | public void setHeaders(Map<String, String> headers) {
      method getParams (line 315) | public Map<String, String> getParams() {
      method setParams (line 319) | public void setParams(Map<String, String> params) {
    class Wagon (line 324) | public static class Wagon {
      method getHttp (line 328) | public Map<WagonHttpMethod, WagonHttpMethodProperties> getHttp() {
      method setHttp (line 332) | public void setHttp(Map<WagonHttpMethod, WagonHttpMethodProperties> ...
    class RemoteRepository (line 337) | public static class RemoteRepository {
      method RemoteRepository (line 354) | public RemoteRepository() {
      method RemoteRepository (line 357) | public RemoteRepository(final String url) {
      method RemoteRepository (line 361) | public RemoteRepository(final String url, final Authentication auth) {
      method getWagon (line 366) | public Wagon getWagon() {
      method setWagon (line 370) | public void setWagon(Wagon wagon) {
      method getUrl (line 374) | public String getUrl() {
      method setUrl (line 378) | public void setUrl(final String url) {
      method getAuth (line 382) | public Authentication getAuth() {
      method setAuth (line 386) | public void setAuth(final Authentication auth) {
      method getPolicy (lin
Condensed preview — 332 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,591K chars).
[
  {
    "path": ".editorconfig",
    "chars": 348,
    "preview": "root = true\n\n[*.java]\nindent_style = tab\nindent_size = 4\n\n[*.adoc]\nindent_style = tab\nindent_size = 4\n\n[*.groovy]\nindent"
  },
  {
    "path": ".github/actions/trivy-scan/action.yml",
    "chars": 669,
    "preview": "name: 'Trivy Scan'\ndescription: 'Run Trivy Scan on repository'\nruns:\n  using: \"composite\"\n  steps:\n    - uses: actions/c"
  },
  {
    "path": ".github/dco.yml",
    "chars": 26,
    "preview": "require:\n  members: false\n"
  },
  {
    "path": ".github/settings.xml",
    "chars": 2548,
    "preview": "<settings>\n\t<profiles>\n\t\t<profile>\n\t\t\t<id>stagingmilestone</id>\n\t\t\t<repositories>\n\t\t\t\t<repository>\n\t\t\t\t\t<id>maven-centra"
  },
  {
    "path": ".github/workflows/build-snapshot-worker.yml",
    "chars": 3902,
    "preview": "# Worker which is dispatched from build-snapshot-controller workflow.\nname: Build Snapshot Worker\n\non:\n  workflow_dispat"
  },
  {
    "path": ".github/workflows/ci-it.yml",
    "chars": 1932,
    "preview": "name: CI IT\n\non:\n  workflow_dispatch:\n\njobs:\n  prepare:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/chec"
  },
  {
    "path": ".github/workflows/ci-pr.yml",
    "chars": 446,
    "preview": "name: CI PRs\n\non:\n  workflow_dispatch:\n  pull_request:\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - use"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 302,
    "preview": "name: CI\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - 'main'\n      - '2.9.x'\n      - '2.8.x'\n      - '2.7.x'\n"
  },
  {
    "path": ".github/workflows/common-ci.yml",
    "chars": 1470,
    "preview": "name: common-ci\n\non:\n  workflow_call:\n    inputs:\n      artifactoryServerId:\n        type: string\n        required: true"
  },
  {
    "path": ".github/workflows/issue-handler.yml",
    "chars": 2356,
    "preview": "name: Issue Handler\n\non:\n  workflow_dispatch:\n  issues:\n    types: [opened, labeled, unlabeled]\n  issue_comment:\n    typ"
  },
  {
    "path": ".github/workflows/k8s-versions.json",
    "chars": 442,
    "preview": "[\n  {\n    \"k8s_version\": \"v1.23\",\n    \"patch\": null\n  },\n  {\n    \"k8s_version\": \"v1.24\",\n    \"patch\": null\n  },\n  {\n    "
  },
  {
    "path": ".github/workflows/milestone-worker.yml",
    "chars": 4514,
    "preview": "name: Milestone Worker\n\non:\n  workflow_dispatch:\n    inputs:\n      build-zoo-handler:\n        description: 'Build Zoo Ha"
  },
  {
    "path": ".github/workflows/next-dev-version-worker.yml",
    "chars": 4223,
    "preview": "name: Next Dev Version Worker\n\non:\n  workflow_dispatch:\n    inputs:\n      build-zoo-handler:\n        description: 'Build"
  },
  {
    "path": ".github/workflows/release-worker.yml",
    "chars": 4401,
    "preview": "name: Release Worker\n\non:\n  workflow_dispatch:\n    inputs:\n      build-zoo-handler:\n        description: 'Build Zoo Hand"
  },
  {
    "path": ".gitignore",
    "chars": 565,
    "preview": "*~\n.#*\n*#\n*.sw*\n_site/\n.factorypath\n.gradletasknamecache\n.DS_Store\n.checkstyle\n/application.yml\n/application.properties\n"
  },
  {
    "path": ".mvn/jvm.config",
    "chars": 95,
    "preview": "-Xmx1024m -XX:CICompilerCount=1 -XX:TieredStopAtLevel=1 -Djava.security.egd=file:/dev/./urandom"
  },
  {
    "path": ".mvn/maven.config",
    "chars": 112,
    "preview": "-DaltSnapshotDeploymentRepository=repo.spring.io::default::https://repo.spring.io/libs-snapshot-local -P spring\n"
  },
  {
    "path": ".mvn/wrapper/maven-wrapper.properties",
    "chars": 116,
    "preview": "distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.8/apache-maven-3.8.8-bin.zip\n"
  },
  {
    "path": ".settings.xml",
    "chars": 1753,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<settings>\n  <servers>\n\t<server>\n\t  <id>repo.spring.io</id>\n\t  <username>${env.CI"
  },
  {
    "path": ".trivyignore",
    "chars": 30,
    "preview": "CVE-2022-1471\nCVE-2016-1000027"
  },
  {
    "path": "CONTRIBUTING.adoc",
    "chars": 3257,
    "preview": "= Contributing to Spring Cloud Deployer\n\n:github: https://github.com/spring-cloud/spring-cloud-deployer\n\nSpring Cloud De"
  },
  {
    "path": "LICENSE",
    "chars": 11360,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "NOTICE",
    "chars": 618,
    "preview": "spring-cloud-deployer\n\nCopyright (c) 2016-Present Pivotal Software, Inc. All Rights Reserved.\n\nLicensed under the Apache"
  },
  {
    "path": "README.adoc",
    "chars": 3448,
    "preview": "# Spring Cloud Data Flow is no longer maintained as an open-source project by Broadcom, Inc.\n\n## For information about e"
  },
  {
    "path": "SECURITY.md",
    "chars": 342,
    "preview": "# Security Policy\n## Reporting a Vulnerability\n\nIf you think you have found a security vulnerability, please **DO NOT** "
  },
  {
    "path": "mvnw",
    "chars": 7097,
    "preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
  },
  {
    "path": "mvnw.cmd",
    "chars": 5008,
    "preview": "@REM ----------------------------------------------------------------------------\n@REM Licensed to the Apache Software F"
  },
  {
    "path": "pom.xml",
    "chars": 9235,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "spring-cloud-deployer-autoconfigure/pom.xml",
    "chars": 1808,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/DelegatingResourceLoaderBuilder.java",
    "chars": 2022,
    "preview": "/*\n * Copyright 2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/DelegatingResourceLoaderBuilderCustomizer.java",
    "chars": 1190,
    "preview": "/*\n * Copyright 2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/MavenConfigurationProperties.java",
    "chars": 1042,
    "preview": "/*\n * Copyright 2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-autoconfigure/src/main/java/org/springframework/cloud/deployer/autoconfigure/ResourceLoadingAutoConfiguration.java",
    "chars": 2785,
    "preview": "/*\n * Copyright 2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 82,
    "preview": "org.springframework.cloud.deployer.autoconfigure.ResourceLoadingAutoConfiguration\n"
  },
  {
    "path": "spring-cloud-deployer-autoconfigure/src/main/resources/META-INF/spring.factories",
    "chars": 149,
    "preview": "org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\\n  org.springframework.cloud.deployer.autoconfigure.Reso"
  },
  {
    "path": "spring-cloud-deployer-autoconfigure/src/test/java/org/springframework/cloud/deployer/autoconfigure/ResourceLoadingAutoConfigurationTests.java",
    "chars": 4163,
    "preview": "/*\n * Copyright 2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/README.adoc",
    "chars": 4259,
    "preview": "= Spring Cloud Deployer for Cloud Foundry\n\nThis project provides a common means to deploy applications to Cloud Foundry "
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/pom.xml",
    "chars": 4835,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/AbstractCloudFoundryDeployer.java",
    "chars": 16589,
    "preview": "/*\n * Copyright 2016-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/AbstractCloudFoundryTaskLauncher.java",
    "chars": 8514,
    "preview": "/*\n * Copyright 2016-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/AppNameGenerator.java",
    "chars": 1034,
    "preview": "/*\n * Copyright 2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/ApplicationLogAccessor.java",
    "chars": 3588,
    "preview": "/*\n * Copyright 2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvAwareAppDeploymentRequest.java",
    "chars": 1419,
    "preview": "/*\n * Copyright 2020-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvAwareResource.java",
    "chars": 4443,
    "preview": "/*\n * Copyright 2020-2024 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvConfigurer.java",
    "chars": 4591,
    "preview": "/*\n * Copyright 2020-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryActuatorTemplate.java",
    "chars": 2129,
    "preview": "/*\n * Copyright 2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppDeployer.java",
    "chars": 22147,
    "preview": "/*\n * Copyright 2016-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppInstanceStatus.java",
    "chars": 4219,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppNameGenerator.java",
    "chars": 3522,
    "preview": "/*\n * Copyright 2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryConnectionProperties.java",
    "chars": 3543,
    "preview": "/*\n * Copyright 2016-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryDeployerAutoConfiguration.java",
    "chars": 10138,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryDeploymentProperties.java",
    "chars": 13142,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryPlatformSpecificInfo.java",
    "chars": 2198,
    "preview": "/*\n * Copyright 2020-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryTaskLauncher.java",
    "chars": 11949,
    "preview": "/*\n * Copyright 2016-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/DurationConverter.java",
    "chars": 1331,
    "preview": "/*\n * Copyright 2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/ServiceParser.java",
    "chars": 3870,
    "preview": "/*\n * Copyright 2019-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/cloudfoundry/UnsupportedVersionTaskLauncher.java",
    "chars": 2813,
    "preview": "/*\n * Copyright 2017 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundryAppScheduler.java",
    "chars": 18530,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundryScheduleSSLException.java",
    "chars": 1034,
    "preview": "/*\n * Copyright 2018-2019 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundrySchedulerProperties.java",
    "chars": 3051,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/expression/QuartzCronExpression.java",
    "chars": 20034,
    "preview": "/*\n * Copyright 2018-2019 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/resources/META-INF/additional-spring-configuration-metadata.json",
    "chars": 314,
    "preview": "{\n  \"hints\": [\n    {\n      \"name\": \"spring.cloud.deployer.cloudfoundry.health-check\",\n      \"values\": [\n        {\n      "
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 90,
    "preview": "org.springframework.cloud.deployer.spi.cloudfoundry.CloudFoundryDeployerAutoConfiguration\n"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/main/resources/META-INF/spring.factories",
    "chars": 157,
    "preview": "org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\\n  org.springframework.cloud.deployer.spi.cloudfoundry.C"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/AbstractAppDeployerTestSupport.java",
    "chars": 5036,
    "preview": "/*\n * Copyright 2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/ApplicationLogAccessorTests.java",
    "chars": 2417,
    "preview": "/*\n * Copyright 2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvAwareResourceTests.java",
    "chars": 2211,
    "preview": "/*\n * Copyright 2020-2024 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CfEnvConfigurerTests.java",
    "chars": 4283,
    "preview": "/*\n * Copyright 2020-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryActuatorTemplateTests.java",
    "chars": 5058,
    "preview": "/*\n * Copyright 2022-2025 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppDeployerIntegrationIT.java",
    "chars": 3298,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppDeployerTests.java",
    "chars": 45098,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryAppNameGeneratorTest.java",
    "chars": 3290,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryConnectionPropertiesTests.java",
    "chars": 3579,
    "preview": "/*\n * Copyright 2019-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryDeployerTests.java",
    "chars": 3640,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryTaskLauncherCachingTests.java",
    "chars": 6230,
    "preview": "/*\n * Copyright 2020-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryTaskLauncherIntegrationIT.java",
    "chars": 3791,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/CloudFoundryTaskLauncherTests.java",
    "chars": 42269,
    "preview": "/*\n * Copyright 2016-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/cloudfoundry/ServiceParserTests.java",
    "chars": 4208,
    "preview": "/*\n * Copyright 2019-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundryAppSchedulerTests.java",
    "chars": 25410,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundryScheduleSSLExceptionTests.java",
    "chars": 1525,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/CloudFoundrySchedulerPropertiesTest.java",
    "chars": 2031,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/SpringCloudSchedulerIntegrationIT.java",
    "chars": 5831,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/java/org/springframework/cloud/deployer/spi/scheduler/cloudfoundry/expression/QuartzCronExpressionTests.java",
    "chars": 7490,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-cloudfoundry/src/test/resources/logback-test.xml",
    "chars": 606,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n\n    <appender name=\"STDOUT\" class=\"ch.qos.logback.core.ConsoleAp"
  },
  {
    "path": "spring-cloud-deployer-dependencies/pom.xml",
    "chars": 4652,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/README.md",
    "chars": 3604,
    "preview": "# Spring Cloud Deployer Kubernetes\nA [Spring Cloud Deployer](https://github.com/spring-cloud/spring-cloud-deployer) impl"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/pom.xml",
    "chars": 4652,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/AbstractKubernetesDeployer.java",
    "chars": 14547,
    "preview": "/*\n * Copyright 2015-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/CommandProbeCreator.java",
    "chars": 1770,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/CompositeDeploymentStateResolver.java",
    "chars": 1418,
    "preview": "/*\n * Copyright 2017 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ContainerConfiguration.java",
    "chars": 2050,
    "preview": "/*\n * Copyright 2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ContainerFactory.java",
    "chars": 1231,
    "preview": "/*\n * Copyright 2015-2019 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/DefaultContainerFactory.java",
    "chars": 15744,
    "preview": "/*\n * Copyright 2015-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/DefaultRunningPhaseDeploymentStateResolver.java",
    "chars": 1480,
    "preview": "/*\n * Copyright 2017 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/DeploymentPropertiesResolver.java",
    "chars": 54303,
    "preview": "/*\n * Copyright 2020-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/EntryPointStyle.java",
    "chars": 2452,
    "preview": "/*\n * Copyright 2018-2019 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/HttpProbeCreator.java",
    "chars": 4674,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ImagePullPolicy.java",
    "chars": 2065,
    "preview": "/*\n * Copyright 2015-2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesActuatorTemplate.java",
    "chars": 1589,
    "preview": "/*\n * Copyright 2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAppDeployer.java",
    "chars": 30630,
    "preview": "/*\n * Copyright 2015-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAppInstanceStatus.java",
    "chars": 10126,
    "preview": "/*\n * Copyright 2015-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAutoConfiguration.java",
    "chars": 3348,
    "preview": "/*\n * Copyright 2015-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesClientFactory.java",
    "chars": 1574,
    "preview": "/*\n * Copyright 2018-2019 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesDeployerProperties.java",
    "chars": 67434,
    "preview": "/*\n * Copyright 2015-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesScheduler.java",
    "chars": 14077,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesSchedulerProperties.java",
    "chars": 2650,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncher.java",
    "chars": 17557,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncherProperties.java",
    "chars": 2789,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/LivenessCommandProbeCreator.java",
    "chars": 2806,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/LivenessHttpProbeCreator.java",
    "chars": 3715,
    "preview": "/*\n * Copyright 2018-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/LivenessTcpProbeCreator.java",
    "chars": 2925,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/PredicateRunningPhaseDeploymentStateResolver.java",
    "chars": 7450,
    "preview": "/*\n * Copyright 2017 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ProbeAuthenticationType.java",
    "chars": 854,
    "preview": "/*\n * Copyright 2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ProbeCreator.java",
    "chars": 4027,
    "preview": "/*\n * Copyright 2018-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ProbeCreatorFactory.java",
    "chars": 3200,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ProbeType.java",
    "chars": 793,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ReadinessCommandProbeCreator.java",
    "chars": 2821,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ReadinessHttpProbeCreator.java",
    "chars": 4131,
    "preview": "/*\n * Copyright 2018-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/ReadinessTcpProbeCreator.java",
    "chars": 2941,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/RestartPolicy.java",
    "chars": 1038,
    "preview": "/*\n * Copyright 2018-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/RunningPhaseDeploymentStateResolver.java",
    "chars": 954,
    "preview": "/*\n * Copyright 2017 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/StartupCommandProbeCreator.java",
    "chars": 2767,
    "preview": "/*\n * Copyright 2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/StartupHttpProbeCreator.java",
    "chars": 4009,
    "preview": "/*\n * Copyright 2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/StartupTcpProbeCreator.java",
    "chars": 2879,
    "preview": "/*\n * Copyright 2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/TcpProbeCreator.java",
    "chars": 1644,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/support/ArgumentSanitizer.java",
    "chars": 4287,
    "preview": "/*\n * Copyright 2017-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/support/PropertyParserUtils.java",
    "chars": 2575,
    "preview": "/*\n * Copyright 2018-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/java/org/springframework/cloud/deployer/spi/kubernetes/support/RelaxedNames.java",
    "chars": 5962,
    "preview": "/*\n * Copyright 2012-2019 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 78,
    "preview": "org.springframework.cloud.deployer.spi.kubernetes.KubernetesAutoConfiguration\n"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/main/resources/META-INF/spring.factories",
    "chars": 141,
    "preview": "org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.cloud.deployer.spi.kubernetes.Kuberne"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/AbstractKubernetesTaskLauncherIntegrationTests.java",
    "chars": 3351,
    "preview": "/*\n * Copyright 2021-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/DefaultContainerFactoryTests.java",
    "chars": 76991,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/DeploymentPropertiesResolverTests.java",
    "chars": 3460,
    "preview": "/*\n * Copyright 2021-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/EntryPointStyleTests.java",
    "chars": 1501,
    "preview": "/*\n * Copyright 2019-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/ImagePullPolicyTests.java",
    "chars": 1558,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesActuatorTemplateTests.java",
    "chars": 6414,
    "preview": "/*\n * Copyright 2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAppDeployerIntegrationIT.java",
    "chars": 132325,
    "preview": "/*\n * Copyright 2016-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesAppDeployerTests.java",
    "chars": 109033,
    "preview": "/*\n * Copyright 2015-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesConfigurationPropertiesTests.java",
    "chars": 3866,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesDeployerPropertiesTests.java",
    "chars": 7297,
    "preview": "/*\n * Copyright 2021-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesSchedulerIT.java",
    "chars": 59287,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesSchedulerPropertiesTests.java",
    "chars": 8207,
    "preview": "/*\n * Copyright 2018-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncherIntegrationIT.java",
    "chars": 6557,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncherMaximumConcurrentTasksTests.java",
    "chars": 4322,
    "preview": "/*\n * Copyright 2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/KubernetesTaskLauncherWithJobIntegrationIT.java",
    "chars": 8541,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/PropertyParserUtilsTests.java",
    "chars": 6957,
    "preview": "/*\n * Copyright 2018-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/java/org/springframework/cloud/deployer/spi/kubernetes/RunAbstractKubernetesDeployerTests.java",
    "chars": 11209,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/resources/dataflow-server-configMapKeyRef.yml",
    "chars": 152,
    "preview": "# spring.cloud.deployer.kubernetes.configMapKeyRefs:\nconfigMapKeyRefs:\n  - envVarName: \"MY_ENV\"\n    configMapName: \"myCo"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/resources/dataflow-server-containerSecurityContext.yml",
    "chars": 600,
    "preview": "# spring.cloud.deployer.kubernetes.containerSecurityContext:\ncontainerSecurityContext:\n  allowPrivilegeEscalation: true\n"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/resources/dataflow-server-nodeAffinity.yml",
    "chars": 535,
    "preview": "# spring.cloud.deployer.kubernetes.nodeAffinity:\nnodeAffinity:\n  requiredDuringSchedulingIgnoredDuringExecution:\n    nod"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/resources/dataflow-server-podAffinity.yml",
    "chars": 606,
    "preview": "# spring.cloud.deployer.kubernetes.podAffinity:\npodAffinity:\n  requiredDuringSchedulingIgnoredDuringExecution:\n    - lab"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/resources/dataflow-server-podAntiAffinity.yml",
    "chars": 598,
    "preview": "# spring.cloud.deployer.kubernetes.podAntiAffinity:\npodAntiAffinity:\n  requiredDuringSchedulingIgnoredDuringExecution:\n "
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/resources/dataflow-server-podsecuritycontext.yml",
    "chars": 611,
    "preview": "# spring.cloud.deployer.kubernetes.podSecurityContext:\npodSecurityContext:\n  fsGroup: 65534\n  fsGroupChangePolicy: Alway"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/resources/dataflow-server-secretKeyRef.yml",
    "chars": 152,
    "preview": "# spring.cloud.deployer.kubernetes.secretKeyRefs:\nsecretKeyRefs:\n  - envVarName: \"SECRET_PASSWORD\"\n    secretName: \"mySe"
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/resources/dataflow-server-tolerations.yml",
    "chars": 142,
    "preview": "# spring.cloud.deployer.kubernetes.tolerations:\ntolerations:\n  - key: \"scdf\"\n    operator: \"Equal\"\n    value: \"true\"\n   "
  },
  {
    "path": "spring-cloud-deployer-kubernetes/src/test/resources/dataflow-server.yml",
    "chars": 288,
    "preview": "# spring.cloud.deployer.kubernetes.volumes:\nvolumes:\n  - name: testhostpath\n    hostPath:\n      path: /test/hostPath\n\n  "
  },
  {
    "path": "spring-cloud-deployer-local/README.adoc",
    "chars": 1292,
    "preview": "== Spring Cloud Local Deployer\n\nSpring Cloud Local Deployer is an implementation of the Spring Cloud Deployer SPI for us"
  },
  {
    "path": "spring-cloud-deployer-local/pom.xml",
    "chars": 2721,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/AbstractLocalDeployerSupport.java",
    "chars": 16387,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/CommandBuilder.java",
    "chars": 2648,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/DebugAddress.java",
    "chars": 3842,
    "preview": "/*\n * Copyright 2020-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/DeployerSocketUtils.java",
    "chars": 7350,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/DockerCommandBuilder.java",
    "chars": 8090,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/HttpProbeExecutor.java",
    "chars": 2755,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/JavaCommandBuilder.java",
    "chars": 7506,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalActuatorTemplate.java",
    "chars": 1537,
    "preview": "/*\n * Copyright 2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalAppDeployer.java",
    "chars": 18600,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalDeployerAutoConfiguration.java",
    "chars": 2365,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalDeployerProperties.java",
    "chars": 19455,
    "preview": "/*\n * Copyright 2015-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalDeployerUtils.java",
    "chars": 1109,
    "preview": "/*\n * Copyright 2017-2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/java/org/springframework/cloud/deployer/spi/local/LocalTaskLauncher.java",
    "chars": 12094,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 76,
    "preview": "org.springframework.cloud.deployer.spi.local.LocalDeployerAutoConfiguration\n"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/DebugAddressTests.java",
    "chars": 4566,
    "preview": "/*\n * Copyright 2020-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/DeployerSocketUtilsTests.java",
    "chars": 2697,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/DockerCommandBuilderTests.java",
    "chars": 8848,
    "preview": "/*\n * Copyright 2017-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/JavaExecutionCommandBuilderTests.java",
    "chars": 10920,
    "preview": "/*\n * Copyright 2015-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalAppDeployerEnvironmentIntegrationTests.java",
    "chars": 12145,
    "preview": "/*\n * Copyright 2018-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalAppDeployerIntegrationTests.java",
    "chars": 22402,
    "preview": "/*\n * Copyright 2016-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalDeployerPropertiesTests.java",
    "chars": 11670,
    "preview": "/*\n * Copyright 2019-2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalDeployerSupportTests.java",
    "chars": 5843,
    "preview": "/*\n * Copyright 2017-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/LocalTaskLauncherIntegrationTests.java",
    "chars": 12025,
    "preview": "/*\n * Copyright 2016-2022 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/RandomPortRangeContextTests.java",
    "chars": 2422,
    "preview": "/*\n * Copyright 2018-2025 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/RandomPortRangeTests.java",
    "chars": 2456,
    "preview": "/*\n * Copyright 2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-local/src/test/java/org/springframework/cloud/deployer/spi/local/RandomPortTests.java",
    "chars": 1646,
    "preview": "/*\n * Copyright 2018 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-local/src/test/resources/testResource.txt",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "spring-cloud-deployer-resource-docker/pom.xml",
    "chars": 1045,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "spring-cloud-deployer-resource-docker/src/main/java/org/springframework/cloud/deployer/resource/docker/DockerResource.java",
    "chars": 2174,
    "preview": "/*\n * Copyright 2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-resource-docker/src/main/java/org/springframework/cloud/deployer/resource/docker/DockerResourceLoader.java",
    "chars": 1951,
    "preview": "/*\n * Copyright 2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-resource-docker/src/test/java/org/springframework/cloud/deployer/resource/docker/DockerResourceLoaderTests.java",
    "chars": 2785,
    "preview": "/*\n * Copyright 2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-resource-docker/src/test/java/org/springframework/cloud/deployer/resource/docker/DockerResourceTests.java",
    "chars": 1727,
    "preview": "/*\n * Copyright 2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-resource-maven/pom.xml",
    "chars": 3328,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/LoggingRepositoryListener.java",
    "chars": 3616,
    "preview": "/*\n * Copyright 2019 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/MavenArtifactResolver.java",
    "chars": 18656,
    "preview": "/*\n * Copyright 2015-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/MavenProperties.java",
    "chars": 10356,
    "preview": "/*\n * Copyright 2015-2017 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/MavenResource.java",
    "chars": 9885,
    "preview": "/*\n * Copyright 2015-2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/MavenResourceLoader.java",
    "chars": 2517,
    "preview": "/*\n * Copyright 2016 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/StaticWagonConfigurator.java",
    "chars": 3681,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-resource-maven/src/main/java/org/springframework/cloud/deployer/resource/maven/StaticWagonProvider.java",
    "chars": 1827,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  },
  {
    "path": "spring-cloud-deployer-resource-maven/src/test/java/org/springframework/cloud/deployer/resource/maven/MavenArtifactResolverTests.java",
    "chars": 10429,
    "preview": "/*\n * Copyright 2016-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "spring-cloud-deployer-resource-maven/src/test/java/org/springframework/cloud/deployer/resource/maven/MavenExtension.java",
    "chars": 5312,
    "preview": "/*\n * Copyright 2020 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\""
  }
]

// ... and 132 more files (download for full content)

About this extraction

This page contains the full source code of the spring-cloud/spring-cloud-deployer GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 332 files (136.8 MB), approximately 625.6k tokens, and a symbol index with 3737 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!