Commit 03c29c40 authored by liaozan's avatar liaozan 🏀

feat: support update archetype online

parent b78ff402
......@@ -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<Boolean> updateArchetype() {
return ResponseDTO.success(archetypeService.update());
}
@PostMapping("/archetype/generate")
public ResponseDTO<String> generateArchetype(@RequestBody @Validated ArchetypeGenerateParam param) {
return ResponseDTO.success(archetypeService.generate(param));
......
......@@ -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
......@@ -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<String, String> 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)) {
......
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