| skipped 54 lines |
55 | 55 | | import io.onedev.commons.utils.command.Commandline; |
56 | 56 | | import io.onedev.commons.utils.command.ExecutionResult; |
57 | 57 | | import io.onedev.commons.utils.command.LineConsumer; |
| 58 | + | import io.onedev.k8shelper.BuildImageFacade; |
58 | 59 | | import io.onedev.k8shelper.CacheInstance; |
59 | | - | import io.onedev.k8shelper.CheckoutExecutable; |
| 60 | + | import io.onedev.k8shelper.CheckoutFacade; |
60 | 61 | | import io.onedev.k8shelper.CloneInfo; |
61 | | - | import io.onedev.k8shelper.CommandExecutable; |
62 | | - | import io.onedev.k8shelper.CompositeExecutable; |
63 | | - | import io.onedev.k8shelper.ContainerExecutable; |
| 62 | + | import io.onedev.k8shelper.CommandFacade; |
| 63 | + | import io.onedev.k8shelper.CompositeFacade; |
| 64 | + | import io.onedev.k8shelper.RunContainerFacade; |
64 | 65 | | import io.onedev.k8shelper.KubernetesHelper; |
65 | | - | import io.onedev.k8shelper.LeafExecutable; |
| 66 | + | import io.onedev.k8shelper.LeafFacade; |
66 | 67 | | import io.onedev.k8shelper.LeafHandler; |
67 | 68 | | import io.onedev.k8shelper.OsContainer; |
68 | 69 | | import io.onedev.k8shelper.OsExecution; |
69 | 70 | | import io.onedev.k8shelper.OsInfo; |
70 | | - | import io.onedev.k8shelper.ServerExecutable; |
| 71 | + | import io.onedev.k8shelper.ServerSideFacade; |
71 | 72 | | import io.onedev.server.OneDev; |
72 | 73 | | import io.onedev.server.buildspec.Service; |
73 | 74 | | import io.onedev.server.buildspec.job.JobContext; |
| skipped 140 lines |
214 | 215 | | } |
215 | 216 | | |
216 | 217 | | jobContext.reportJobWorkspace(containerWorkspace); |
217 | | - | CompositeExecutable entryExecutable = new CompositeExecutable(jobContext.getActions()); |
218 | | - | boolean successful = entryExecutable.execute(new LeafHandler() { |
| 218 | + | CompositeFacade entryFacade = new CompositeFacade(jobContext.getActions()); |
| 219 | + | boolean successful = entryFacade.execute(new LeafHandler() { |
219 | 220 | | |
220 | 221 | | private int runStepContainer(String image, @Nullable String entrypoint, |
221 | 222 | | List<String> arguments, Map<String, String> environments, |
| skipped 52 lines |
274 | 275 | | docker.addArgs(arguments.toArray(new String[arguments.size()])); |
275 | 276 | | |
276 | 277 | | ExecutionResult result = docker.execute(ExecutorUtils.newInfoLogger(jobLogger), |
277 | | - | ExecutorUtils.newErrorLogger(jobLogger), null, newDockerKiller(newDocker(), |
| 278 | + | ExecutorUtils.newWarningLogger(jobLogger), null, newDockerKiller(newDocker(), |
278 | 279 | | containerName, jobLogger)); |
279 | 280 | | return result.getReturnCode(); |
280 | 281 | | } |
281 | 282 | | |
282 | 283 | | @Override |
283 | | - | public boolean execute(LeafExecutable executable, List<Integer> position) { |
284 | | - | String stepNames = entryExecutable.getNamesAsString(position); |
| 284 | + | public boolean execute(LeafFacade facade, List<Integer> position) { |
| 285 | + | String stepNames = entryFacade.getNamesAsString(position); |
285 | 286 | | jobLogger.notice("Running step \"" + stepNames + "\"..."); |
286 | 287 | | |
287 | | - | if (executable instanceof CommandExecutable) { |
288 | | - | CommandExecutable commandExecutable = (CommandExecutable) executable; |
| 288 | + | if (facade instanceof CommandFacade) { |
| 289 | + | CommandFacade commandFacade = (CommandFacade) facade; |
289 | 290 | | |
290 | | - | OsExecution execution = commandExecutable.getExecution(osInfo); |
| 291 | + | OsExecution execution = commandFacade.getExecution(osInfo); |
291 | 292 | | if (execution.getImage() == null) { |
292 | 293 | | throw new ExplicitException("This step can only be executed by server shell " |
293 | 294 | | + "executor or remote shell executor"); |
294 | 295 | | } |
295 | 296 | | |
296 | 297 | | Commandline entrypoint = DockerExecutorUtils.getEntrypoint( |
297 | | - | hostBuildHome, commandExecutable, osInfo, hostAuthInfoHome.get() != null); |
| 298 | + | hostBuildHome, commandFacade, osInfo, hostAuthInfoHome.get() != null); |
298 | 299 | | |
299 | 300 | | int exitCode = runStepContainer(execution.getImage(), entrypoint.executable(), |
300 | | - | entrypoint.arguments(), new HashMap<>(), null, position, commandExecutable.isUseTTY()); |
| 301 | + | entrypoint.arguments(), new HashMap<>(), null, position, commandFacade.isUseTTY()); |
301 | 302 | | |
302 | 303 | | if (exitCode != 0) { |
303 | 304 | | jobLogger.error("Step \"" + stepNames + "\" is failed: Command exited with code " + exitCode); |
304 | 305 | | return false; |
305 | 306 | | } |
306 | | - | } else if (executable instanceof ContainerExecutable) { |
307 | | - | ContainerExecutable containerExecutable = (ContainerExecutable) executable; |
308 | | - | OsContainer container = containerExecutable.getContainer(osInfo); |
| 307 | + | } else if (facade instanceof BuildImageFacade || facade instanceof BuildImageFacade) { |
| 308 | + | DockerExecutorUtils.buildImage(newDocker(), (BuildImageFacade) facade, |
| 309 | + | hostWorkspace, jobLogger); |
| 310 | + | } else if (facade instanceof RunContainerFacade) { |
| 311 | + | RunContainerFacade rubContainerFacade = (RunContainerFacade) facade; |
| 312 | + | OsContainer container = rubContainerFacade.getContainer(osInfo); |
309 | 313 | | List<String> arguments = new ArrayList<>(); |
310 | 314 | | if (container.getArgs() != null) |
311 | 315 | | arguments.addAll(Arrays.asList(StringUtils.parseQuoteTokens(container.getArgs()))); |
312 | 316 | | int exitCode = runStepContainer(container.getImage(), null, arguments, container.getEnvMap(), |
313 | | - | container.getWorkingDir(), position, containerExecutable.isUseTTY()); |
| 317 | + | container.getWorkingDir(), position, rubContainerFacade.isUseTTY()); |
314 | 318 | | if (exitCode != 0) { |
315 | 319 | | jobLogger.error("Step \"" + stepNames + "\" is failed: Container exited with code " + exitCode); |
316 | 320 | | return false; |
317 | 321 | | } |
318 | | - | } else if (executable instanceof CheckoutExecutable) { |
| 322 | + | } else if (facade instanceof CheckoutFacade) { |
319 | 323 | | try { |
320 | | - | CheckoutExecutable checkoutExecutable = (CheckoutExecutable) executable; |
| 324 | + | CheckoutFacade checkoutFacade = (CheckoutFacade) facade; |
321 | 325 | | jobLogger.log("Checking out code..."); |
322 | 326 | | if (hostAuthInfoHome.get() == null) |
323 | 327 | | hostAuthInfoHome.set(FileUtils.createTempDir()); |
324 | 328 | | Commandline git = new Commandline(AppLoader.getInstance(GitConfig.class).getExecutable()); |
325 | 329 | | git.workingDir(hostWorkspace).environments().put("HOME", hostAuthInfoHome.get().getAbsolutePath()); |
326 | 330 | | |
327 | | - | CloneInfo cloneInfo = checkoutExecutable.getCloneInfo(); |
| 331 | + | CloneInfo cloneInfo = checkoutFacade.getCloneInfo(); |
328 | 332 | | |
329 | | - | cloneInfo.writeAuthData(hostAuthInfoHome.get(), git, ExecutorUtils.newInfoLogger(jobLogger), ExecutorUtils.newErrorLogger(jobLogger)); |
| 333 | + | cloneInfo.writeAuthData(hostAuthInfoHome.get(), git, ExecutorUtils.newInfoLogger(jobLogger), ExecutorUtils.newWarningLogger(jobLogger)); |
330 | 334 | | try { |
331 | 335 | | List<String> trustCertContent = getTrustCertContent(); |
332 | 336 | | if (!trustCertContent.isEmpty()) { |
333 | 337 | | installGitCert(new File(hostAuthInfoHome.get(), "trust-cert.pem"), trustCertContent, |
334 | | - | git, ExecutorUtils.newInfoLogger(jobLogger), ExecutorUtils.newErrorLogger(jobLogger)); |
| 338 | + | git, ExecutorUtils.newInfoLogger(jobLogger), ExecutorUtils.newWarningLogger(jobLogger)); |
335 | 339 | | } |
336 | 340 | | |
337 | | - | int cloneDepth = checkoutExecutable.getCloneDepth(); |
| 341 | + | int cloneDepth = checkoutFacade.getCloneDepth(); |
338 | 342 | | |
339 | 343 | | cloneRepository(git, jobContext.getProjectGitDir().getAbsolutePath(), |
340 | 344 | | cloneInfo.getCloneUrl(), jobContext.getCommitId().name(), |
341 | | - | checkoutExecutable.isWithLfs(), checkoutExecutable.isWithSubmodules(), |
342 | | - | cloneDepth, ExecutorUtils.newInfoLogger(jobLogger), ExecutorUtils.newErrorLogger(jobLogger)); |
| 345 | + | checkoutFacade.isWithLfs(), checkoutFacade.isWithSubmodules(), |
| 346 | + | cloneDepth, ExecutorUtils.newInfoLogger(jobLogger), ExecutorUtils.newWarningLogger(jobLogger)); |
343 | 347 | | } finally { |
344 | 348 | | git.clearArgs(); |
345 | 349 | | git.addArgs("config", "--global", "--unset", "core.sshCommand"); |
346 | | - | ExecutionResult result = git.execute(ExecutorUtils.newInfoLogger(jobLogger), ExecutorUtils.newErrorLogger(jobLogger)); |
| 350 | + | ExecutionResult result = git.execute(ExecutorUtils.newInfoLogger(jobLogger), ExecutorUtils.newWarningLogger(jobLogger)); |
347 | 351 | | if (result.getReturnCode() != 5 && result.getReturnCode() != 0) |
348 | 352 | | result.checkReturnCode(); |
349 | 353 | | } |
| skipped 2 lines |
352 | 356 | | return false; |
353 | 357 | | } |
354 | 358 | | } else { |
355 | | - | ServerExecutable serverExecutable = (ServerExecutable) executable; |
| 359 | + | ServerSideFacade serverSideFacade = (ServerSideFacade) facade; |
356 | 360 | | |
357 | 361 | | File filesDir = FileUtils.createTempDir(); |
358 | 362 | | try { |
359 | | - | Collection<String> placeholders = serverExecutable.getPlaceholders(); |
| 363 | + | Collection<String> placeholders = serverSideFacade.getPlaceholders(); |
360 | 364 | | Map<String, String> placeholderValues = readPlaceholderValues(hostBuildHome, placeholders); |
361 | 365 | | PatternSet filePatterns = new PatternSet( |
362 | | - | new HashSet<>(replacePlaceholders(serverExecutable.getIncludeFiles(), placeholderValues)), |
363 | | - | new HashSet<>(replacePlaceholders(serverExecutable.getExcludeFiles(), placeholderValues))); |
| 366 | + | new HashSet<>(replacePlaceholders(serverSideFacade.getIncludeFiles(), placeholderValues)), |
| 367 | + | new HashSet<>(replacePlaceholders(serverSideFacade.getExcludeFiles(), placeholderValues))); |
364 | 368 | | |
365 | 369 | | int baseLen = hostWorkspace.getAbsolutePath().length()+1; |
366 | 370 | | for (File file: filePatterns.listFiles(hostWorkspace)) { |
| skipped 25 lines |
392 | 396 | | } |
393 | 397 | | |
394 | 398 | | @Override |
395 | | - | public void skip(LeafExecutable executable, List<Integer> position) { |
396 | | - | jobLogger.notice("Step \"" + entryExecutable.getNamesAsString(position) + "\" is skipped"); |
| 399 | + | public void skip(LeafFacade facade, List<Integer> position) { |
| 400 | + | jobLogger.notice("Step \"" + entryFacade.getNamesAsString(position) + "\" is skipped"); |
397 | 401 | | } |
398 | 402 | | |
399 | 403 | | }, new ArrayList<>()); |
| skipped 243 lines |