Use canonical path for CNB builder lifecycle binaries
This commit changes the path used to invoke lifecycle binaries in CNB builders from `/lifecycle` to `/cnb/lifecycle` to conform to the CNB spec. This will ensure the build plugin image-building goals and tasks are compatible with future versions of builders that may not support both paths. See gh-23009
This commit is contained in:
		
							parent
							
								
									8fd9c685a2
								
							
						
					
					
						commit
						56bc0eb9e0
					
				| 
						 | 
					@ -30,6 +30,7 @@ import org.springframework.util.StringUtils;
 | 
				
			||||||
 * An individual build phase executed as part of a {@link Lifecycle} run.
 | 
					 * An individual build phase executed as part of a {@link Lifecycle} run.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @author Phillip Webb
 | 
					 * @author Phillip Webb
 | 
				
			||||||
 | 
					 * @author Scott Frederick
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
class Phase {
 | 
					class Phase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,7 +113,7 @@ class Phase {
 | 
				
			||||||
			update.withUser("root");
 | 
								update.withUser("root");
 | 
				
			||||||
			update.withBind(DOMAIN_SOCKET_PATH, DOMAIN_SOCKET_PATH);
 | 
								update.withBind(DOMAIN_SOCKET_PATH, DOMAIN_SOCKET_PATH);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		update.withCommand("/lifecycle/" + this.name, StringUtils.toStringArray(this.args));
 | 
							update.withCommand("/cnb/lifecycle/" + this.name, StringUtils.toStringArray(this.args));
 | 
				
			||||||
		update.withLabel("author", "spring-boot");
 | 
							update.withLabel("author", "spring-boot");
 | 
				
			||||||
		this.binds.forEach(update::withBind);
 | 
							this.binds.forEach(update::withBind);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -190,7 +190,7 @@ class LifecycleTests {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private void assertPhaseWasRun(String name, IOConsumer<ContainerConfig> configConsumer) throws IOException {
 | 
						private void assertPhaseWasRun(String name, IOConsumer<ContainerConfig> configConsumer) throws IOException {
 | 
				
			||||||
		ContainerReference containerReference = ContainerReference.of("lifecycle-" + name);
 | 
							ContainerReference containerReference = ContainerReference.of("cnb-lifecycle-" + name);
 | 
				
			||||||
		verify(this.docker.container()).start(containerReference);
 | 
							verify(this.docker.container()).start(containerReference);
 | 
				
			||||||
		verify(this.docker.container()).logs(eq(containerReference), any());
 | 
							verify(this.docker.container()).logs(eq(containerReference), any());
 | 
				
			||||||
		verify(this.docker.container()).remove(containerReference, true);
 | 
							verify(this.docker.container()).remove(containerReference, true);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
 | 
				
			||||||
 * Tests for {@link Phase}.
 | 
					 * Tests for {@link Phase}.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @author Phillip Webb
 | 
					 * @author Phillip Webb
 | 
				
			||||||
 | 
					 * @author Scott Frederick
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
class PhaseTests {
 | 
					class PhaseTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,7 +53,7 @@ class PhaseTests {
 | 
				
			||||||
		Phase phase = new Phase("test", false);
 | 
							Phase phase = new Phase("test", false);
 | 
				
			||||||
		Update update = mock(Update.class);
 | 
							Update update = mock(Update.class);
 | 
				
			||||||
		phase.apply(update);
 | 
							phase.apply(update);
 | 
				
			||||||
		verify(update).withCommand("/lifecycle/test", NO_ARGS);
 | 
							verify(update).withCommand("/cnb/lifecycle/test", NO_ARGS);
 | 
				
			||||||
		verify(update).withLabel("author", "spring-boot");
 | 
							verify(update).withLabel("author", "spring-boot");
 | 
				
			||||||
		verifyNoMoreInteractions(update);
 | 
							verifyNoMoreInteractions(update);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -65,7 +66,7 @@ class PhaseTests {
 | 
				
			||||||
		phase.apply(update);
 | 
							phase.apply(update);
 | 
				
			||||||
		verify(update).withUser("root");
 | 
							verify(update).withUser("root");
 | 
				
			||||||
		verify(update).withBind("/var/run/docker.sock", "/var/run/docker.sock");
 | 
							verify(update).withBind("/var/run/docker.sock", "/var/run/docker.sock");
 | 
				
			||||||
		verify(update).withCommand("/lifecycle/test", NO_ARGS);
 | 
							verify(update).withCommand("/cnb/lifecycle/test", NO_ARGS);
 | 
				
			||||||
		verify(update).withLabel("author", "spring-boot");
 | 
							verify(update).withLabel("author", "spring-boot");
 | 
				
			||||||
		verifyNoMoreInteractions(update);
 | 
							verifyNoMoreInteractions(update);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -76,7 +77,7 @@ class PhaseTests {
 | 
				
			||||||
		phase.withLogLevelArg();
 | 
							phase.withLogLevelArg();
 | 
				
			||||||
		Update update = mock(Update.class);
 | 
							Update update = mock(Update.class);
 | 
				
			||||||
		phase.apply(update);
 | 
							phase.apply(update);
 | 
				
			||||||
		verify(update).withCommand("/lifecycle/test", "-log-level", "debug");
 | 
							verify(update).withCommand("/cnb/lifecycle/test", "-log-level", "debug");
 | 
				
			||||||
		verify(update).withLabel("author", "spring-boot");
 | 
							verify(update).withLabel("author", "spring-boot");
 | 
				
			||||||
		verifyNoMoreInteractions(update);
 | 
							verifyNoMoreInteractions(update);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -87,7 +88,7 @@ class PhaseTests {
 | 
				
			||||||
		phase.withLogLevelArg();
 | 
							phase.withLogLevelArg();
 | 
				
			||||||
		Update update = mock(Update.class);
 | 
							Update update = mock(Update.class);
 | 
				
			||||||
		phase.apply(update);
 | 
							phase.apply(update);
 | 
				
			||||||
		verify(update).withCommand("/lifecycle/test");
 | 
							verify(update).withCommand("/cnb/lifecycle/test");
 | 
				
			||||||
		verify(update).withLabel("author", "spring-boot");
 | 
							verify(update).withLabel("author", "spring-boot");
 | 
				
			||||||
		verifyNoMoreInteractions(update);
 | 
							verifyNoMoreInteractions(update);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -98,7 +99,7 @@ class PhaseTests {
 | 
				
			||||||
		phase.withArgs("a", "b", "c");
 | 
							phase.withArgs("a", "b", "c");
 | 
				
			||||||
		Update update = mock(Update.class);
 | 
							Update update = mock(Update.class);
 | 
				
			||||||
		phase.apply(update);
 | 
							phase.apply(update);
 | 
				
			||||||
		verify(update).withCommand("/lifecycle/test", "a", "b", "c");
 | 
							verify(update).withCommand("/cnb/lifecycle/test", "a", "b", "c");
 | 
				
			||||||
		verify(update).withLabel("author", "spring-boot");
 | 
							verify(update).withLabel("author", "spring-boot");
 | 
				
			||||||
		verifyNoMoreInteractions(update);
 | 
							verifyNoMoreInteractions(update);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -110,7 +111,7 @@ class PhaseTests {
 | 
				
			||||||
		phase.withBinds(volumeName, "/test");
 | 
							phase.withBinds(volumeName, "/test");
 | 
				
			||||||
		Update update = mock(Update.class);
 | 
							Update update = mock(Update.class);
 | 
				
			||||||
		phase.apply(update);
 | 
							phase.apply(update);
 | 
				
			||||||
		verify(update).withCommand("/lifecycle/test");
 | 
							verify(update).withCommand("/cnb/lifecycle/test");
 | 
				
			||||||
		verify(update).withLabel("author", "spring-boot");
 | 
							verify(update).withLabel("author", "spring-boot");
 | 
				
			||||||
		verify(update).withBind(volumeName, "/test");
 | 
							verify(update).withBind(volumeName, "/test");
 | 
				
			||||||
		verifyNoMoreInteractions(update);
 | 
							verifyNoMoreInteractions(update);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "User" : "root",
 | 
					  "User" : "root",
 | 
				
			||||||
  "Image" : "pack.local/ephemeral-builder",
 | 
					  "Image" : "pack.local/ephemeral-builder",
 | 
				
			||||||
  "Cmd" : [ "/lifecycle/creator", "-app", "/workspace", "-platform", "/platform", "-run-image", "docker.io/cloudfoundry/run:latest", "-layers", "/layers", "-cache-dir", "/cache", "-launch-cache", "/launch-cache", "-daemon", "-skip-restore", "docker.io/library/my-application:latest" ],
 | 
					  "Cmd" : [ "/cnb/lifecycle/creator", "-app", "/workspace", "-platform", "/platform", "-run-image", "docker.io/cloudfoundry/run:latest", "-layers", "/layers", "-cache-dir", "/cache", "-launch-cache", "/launch-cache", "-daemon", "-skip-restore", "docker.io/library/my-application:latest" ],
 | 
				
			||||||
  "Labels" : {
 | 
					  "Labels" : {
 | 
				
			||||||
    "author" : "spring-boot"
 | 
					    "author" : "spring-boot"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "User" : "root",
 | 
					  "User" : "root",
 | 
				
			||||||
  "Image" : "pack.local/ephemeral-builder",
 | 
					  "Image" : "pack.local/ephemeral-builder",
 | 
				
			||||||
  "Cmd" : [ "/lifecycle/creator", "-app", "/workspace", "-platform", "/platform", "-run-image", "docker.io/cloudfoundry/run:latest", "-layers", "/layers", "-cache-dir", "/cache", "-launch-cache", "/launch-cache", "-daemon", "docker.io/library/my-application:latest" ],
 | 
					  "Cmd" : [ "/cnb/lifecycle/creator", "-app", "/workspace", "-platform", "/platform", "-run-image", "docker.io/cloudfoundry/run:latest", "-layers", "/layers", "-cache-dir", "/cache", "-launch-cache", "/launch-cache", "-daemon", "docker.io/library/my-application:latest" ],
 | 
				
			||||||
  "Labels" : {
 | 
					  "Labels" : {
 | 
				
			||||||
    "author" : "spring-boot"
 | 
					    "author" : "spring-boot"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue