diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/InitializerController.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/ArchetypeController.java similarity index 87% rename from initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/InitializerController.java rename to initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/ArchetypeController.java index d87f346ef185e0f9810d5e79df15eb6220a4dfc1..4a7130560521faacf7e89d420865895a89b06fe5 100644 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/InitializerController.java +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/ArchetypeController.java @@ -17,11 +17,16 @@ import java.util.List; * @since 2022/3/20 */ @RestController -public class InitializerController { +public class ArchetypeController { @Autowired private ArchetypeService archetypeService; + @GetMapping("/archetype/update") + public ResponseDTO updateArchetype() { + return ResponseDTO.success(archetypeService.update()); + } + @PostMapping("/archetype/generate") public ResponseDTO generateArchetype(@RequestBody @Validated ArchetypeGenerateParam param) { return ResponseDTO.success(archetypeService.generate(param)); diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/runner/ArchetypePreparer.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/runner/ArchetypePreparer.java index 8d2bfe5d07c114e9a15eadf77a6451957dd5036c..ac470c1728681655649f53fdd1d493b71cfe3dad 100644 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/runner/ArchetypePreparer.java +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/runner/ArchetypePreparer.java @@ -3,6 +3,7 @@ package com.schbrain.archetype.initializer.runner; import cn.hutool.core.io.FileUtil; import cn.hutool.system.SystemUtil; import com.schbrain.archetype.initializer.maven.MavenUtils; +import com.schbrain.common.exception.BaseException; import lombok.extern.slf4j.Slf4j; import org.eclipse.jgit.api.CheckoutCommand; import org.eclipse.jgit.api.Git; @@ -26,7 +27,11 @@ public class ArchetypePreparer implements ApplicationRunner { private static final String ARCHETYPE_REPO_URL = "http://gitlab.schbrain.com/gitlab/tools/schbrain-archetype.git"; @Override - public void run(ApplicationArguments args) throws GitAPIException { + public void run(ApplicationArguments args) { + installArchetype(); + } + + public void installArchetype() { File archetypeTemplateDirectory = createArchetypeDirectory(); checkoutArchetype(archetypeTemplateDirectory); MavenUtils.install(archetypeTemplateDirectory.getAbsolutePath()); @@ -39,18 +44,22 @@ public class ArchetypePreparer implements ApplicationRunner { return archetypeTemplateDirectory; } - private void checkoutArchetype(File archetypeTemplateDirectory) throws GitAPIException { - Git git = Git.cloneRepository() - .setTagOption(TagOpt.FETCH_TAGS) - .setNoCheckout(false) - .setDirectory(archetypeTemplateDirectory) - .setCloneSubmodules(false) - .setURI(ARCHETYPE_REPO_URL) - .setRemote("upstream") - .call(); - CheckoutCommand checkoutCommand = git.checkout().setName("archetype").setCreateBranch(true); - Ref ref = checkoutCommand.call(); - log.info("Success checkout archetype branch: {} of {}", ref.getName(), ARCHETYPE_REPO_URL); + private void checkoutArchetype(File archetypeTemplateDirectory) { + try { + Git git = Git.cloneRepository() + .setTagOption(TagOpt.FETCH_TAGS) + .setNoCheckout(false) + .setDirectory(archetypeTemplateDirectory) + .setCloneSubmodules(false) + .setURI(ARCHETYPE_REPO_URL) + .setRemote("upstream") + .call(); + CheckoutCommand checkoutCommand = git.checkout().setName("archetype").setCreateBranch(true); + Ref ref = checkoutCommand.call(); + log.info("Success checkout archetype branch: {} of {}", ref.getName(), ARCHETYPE_REPO_URL); + } catch (GitAPIException e) { + throw new BaseException("Failed to checkout archetype from git repository", e); + } } } \ No newline at end of file diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java index 015cfe04bb1c7bf799156dd0cd7ee101792b7d8c..f992d03d63ab6782440b99f51b5116e5daced525 100644 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java @@ -5,7 +5,9 @@ import cn.hutool.core.util.ZipUtil; import com.schbrain.archetype.initializer.maven.MavenUtils; import com.schbrain.archetype.initializer.param.ArchetypeGenerateParam; import com.schbrain.archetype.initializer.response.PreviewFileTree; +import com.schbrain.archetype.initializer.runner.ArchetypePreparer; import com.schbrain.common.util.ServletUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ContentDisposition; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -33,6 +35,9 @@ public class ArchetypeService { private final Map archetypeNameCache = new ConcurrentHashMap<>(); + @Autowired + private ArchetypePreparer archetypePreparer; + public String generate(ArchetypeGenerateParam param) { String generateId = MavenUtils.generate(param); archetypeNameCache.put(generateId, param.getArtifactId()); @@ -53,6 +58,11 @@ public class ArchetypeService { StreamUtils.copy(inputStream, response.getOutputStream()); } + public boolean update() { + archetypePreparer.installArchetype(); + return true; + } + private PreviewFileTree buildFileTree(File root) { File[] fileItems = root.listFiles(); if (ArrayUtil.isEmpty(fileItems)) {