Commit 03c29c40 authored by liaozan's avatar liaozan 🏀

feat: support update archetype online

parent b78ff402
...@@ -17,11 +17,16 @@ import java.util.List; ...@@ -17,11 +17,16 @@ import java.util.List;
* @since 2022/3/20 * @since 2022/3/20
*/ */
@RestController @RestController
public class InitializerController { public class ArchetypeController {
@Autowired @Autowired
private ArchetypeService archetypeService; private ArchetypeService archetypeService;
@GetMapping("/archetype/update")
public ResponseDTO<Boolean> updateArchetype() {
return ResponseDTO.success(archetypeService.update());
}
@PostMapping("/archetype/generate") @PostMapping("/archetype/generate")
public ResponseDTO<String> generateArchetype(@RequestBody @Validated ArchetypeGenerateParam param) { public ResponseDTO<String> generateArchetype(@RequestBody @Validated ArchetypeGenerateParam param) {
return ResponseDTO.success(archetypeService.generate(param)); return ResponseDTO.success(archetypeService.generate(param));
......
...@@ -3,6 +3,7 @@ package com.schbrain.archetype.initializer.runner; ...@@ -3,6 +3,7 @@ package com.schbrain.archetype.initializer.runner;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.system.SystemUtil; import cn.hutool.system.SystemUtil;
import com.schbrain.archetype.initializer.maven.MavenUtils; import com.schbrain.archetype.initializer.maven.MavenUtils;
import com.schbrain.common.exception.BaseException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.eclipse.jgit.api.CheckoutCommand; import org.eclipse.jgit.api.CheckoutCommand;
import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.Git;
...@@ -26,7 +27,11 @@ public class ArchetypePreparer implements ApplicationRunner { ...@@ -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"; private static final String ARCHETYPE_REPO_URL = "http://gitlab.schbrain.com/gitlab/tools/schbrain-archetype.git";
@Override @Override
public void run(ApplicationArguments args) throws GitAPIException { public void run(ApplicationArguments args) {
installArchetype();
}
public void installArchetype() {
File archetypeTemplateDirectory = createArchetypeDirectory(); File archetypeTemplateDirectory = createArchetypeDirectory();
checkoutArchetype(archetypeTemplateDirectory); checkoutArchetype(archetypeTemplateDirectory);
MavenUtils.install(archetypeTemplateDirectory.getAbsolutePath()); MavenUtils.install(archetypeTemplateDirectory.getAbsolutePath());
...@@ -39,18 +44,22 @@ public class ArchetypePreparer implements ApplicationRunner { ...@@ -39,18 +44,22 @@ public class ArchetypePreparer implements ApplicationRunner {
return archetypeTemplateDirectory; return archetypeTemplateDirectory;
} }
private void checkoutArchetype(File archetypeTemplateDirectory) throws GitAPIException { private void checkoutArchetype(File archetypeTemplateDirectory) {
Git git = Git.cloneRepository() try {
.setTagOption(TagOpt.FETCH_TAGS) Git git = Git.cloneRepository()
.setNoCheckout(false) .setTagOption(TagOpt.FETCH_TAGS)
.setDirectory(archetypeTemplateDirectory) .setNoCheckout(false)
.setCloneSubmodules(false) .setDirectory(archetypeTemplateDirectory)
.setURI(ARCHETYPE_REPO_URL) .setCloneSubmodules(false)
.setRemote("upstream") .setURI(ARCHETYPE_REPO_URL)
.call(); .setRemote("upstream")
CheckoutCommand checkoutCommand = git.checkout().setName("archetype").setCreateBranch(true); .call();
Ref ref = checkoutCommand.call(); CheckoutCommand checkoutCommand = git.checkout().setName("archetype").setCreateBranch(true);
log.info("Success checkout archetype branch: {} of {}", ref.getName(), ARCHETYPE_REPO_URL); 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
...@@ -5,7 +5,9 @@ import cn.hutool.core.util.ZipUtil; ...@@ -5,7 +5,9 @@ import cn.hutool.core.util.ZipUtil;
import com.schbrain.archetype.initializer.maven.MavenUtils; import com.schbrain.archetype.initializer.maven.MavenUtils;
import com.schbrain.archetype.initializer.param.ArchetypeGenerateParam; import com.schbrain.archetype.initializer.param.ArchetypeGenerateParam;
import com.schbrain.archetype.initializer.response.PreviewFileTree; import com.schbrain.archetype.initializer.response.PreviewFileTree;
import com.schbrain.archetype.initializer.runner.ArchetypePreparer;
import com.schbrain.common.util.ServletUtils; import com.schbrain.common.util.ServletUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ContentDisposition; import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
...@@ -33,6 +35,9 @@ public class ArchetypeService { ...@@ -33,6 +35,9 @@ public class ArchetypeService {
private final Map<String, String> archetypeNameCache = new ConcurrentHashMap<>(); private final Map<String, String> archetypeNameCache = new ConcurrentHashMap<>();
@Autowired
private ArchetypePreparer archetypePreparer;
public String generate(ArchetypeGenerateParam param) { public String generate(ArchetypeGenerateParam param) {
String generateId = MavenUtils.generate(param); String generateId = MavenUtils.generate(param);
archetypeNameCache.put(generateId, param.getArtifactId()); archetypeNameCache.put(generateId, param.getArtifactId());
...@@ -53,6 +58,11 @@ public class ArchetypeService { ...@@ -53,6 +58,11 @@ public class ArchetypeService {
StreamUtils.copy(inputStream, response.getOutputStream()); StreamUtils.copy(inputStream, response.getOutputStream());
} }
public boolean update() {
archetypePreparer.installArchetype();
return true;
}
private PreviewFileTree buildFileTree(File root) { private PreviewFileTree buildFileTree(File root) {
File[] fileItems = root.listFiles(); File[] fileItems = root.listFiles();
if (ArrayUtil.isEmpty(fileItems)) { if (ArrayUtil.isEmpty(fileItems)) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment