Skip to content

Commit

Permalink
hotfix: tar compress bug
Browse files Browse the repository at this point in the history
  • Loading branch information
coding-convention committed Jul 26, 2023
1 parent 0c90466 commit a3bbf3c
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 46 deletions.
4 changes: 2 additions & 2 deletions api/v1.0/deploy/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ type DeployInfo struct {
User string `json:"user" binding:"required"`
Repo string `json:"repo" binding:"required"`
Branch string `json:"branch" binding:"required"`
Dockerfile bool `json:"Dockerfile" binding:"required"`
Dockerfile bool `json:"Dockerfile"`
PortBind PortBindInfo `json:"portbind"`
Language string `json:"Language"`
Runtime string `json:"Runtime"`
Expand Down Expand Up @@ -109,7 +109,7 @@ func ApplicationDeploy2(c *gin.Context) {
}
}

err = rep.ArchiveToTarGz(srcDir, dstDir)
err = rep.CompressToTarGz(srcDir, dstDir)
if handleError(c, err, http.StatusBadRequest) {
return
}
Expand Down
2 changes: 1 addition & 1 deletion api/v1.0/sample/sample5.extractgzip.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func SAMPLE_EXTRACT(c *gin.Context) {
func SAMPLE_ARCHIVE(c *gin.Context) {
srcDir := "/app/repository/i-02b5064a1e36be086/coding-convention-sample-flask-f361fb2"
dstDir := filepath.Dir(srcDir)
err := repo.ArchiveToTarGz(srcDir, dstDir)
err := repo.CompressToTarGz(srcDir, dstDir)
if err != nil {
fmt.Println(err.Error())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ func JavaApplication(targetDir string) {
builder.AddDirective(dfenum.FROM, "gradle:jdk17-alpine AS builder")
builder.AddDirective(dfenum.WORKDIR, "/src")
builder.AddDirective(dfenum.COPY, ". .")
builder.AddDirective(dfenum.RUN, "gradle build && \\\n cd build/libs && \\\n ls && \\\n rm $(ls *plain.jar) && \\\n mv $(ls *.jar) app.jar")
builder.AddDirective(dfenum.RUN, "ls")
builder.AddDirective(dfenum.RUN, "gradle build && cd build/libs && ls && rm $(ls *plain.jar) && mv $(ls *.jar) app.jar")

// Build the second stage
builder.AddDirective(dfenum.FROM, "openjdk:17-alpine")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,72 +46,73 @@ func ExtractTarGz(gzipStream io.Reader, targetDir string) {
}
}

func ArchiveToTarGz(srcDir, destDir string) error {
// 소스 디렉토리 열기
source, err := os.Open(srcDir)
if err != nil {
return err
}
defer source.Close()

// 목적지 디렉토리로 tar.gz 파일 생성
func CompressToTarGz(srcDir, dstDir string) error {
// 폴더 이름 설정
fileName := filepath.Base(srcDir) + ".tar.gz"
destFile, err := os.Create(filepath.Join(destDir, fileName))
dstFilePath := filepath.Join(dstDir, fileName)

// 파일 생성
dstFile, err := os.Create(dstFilePath)
if err != nil {
return err
}
defer destFile.Close()
defer dstFile.Close()

// gzip writer 생성
gw := gzip.NewWriter(destFile)
defer gw.Close()
// gzip 생성
gzWriter := gzip.NewWriter(dstFile)
defer gzWriter.Close()

// tar writer 생성
tw := tar.NewWriter(gw)
defer tw.Close()
// tar 생성
tarWriter := tar.NewWriter(gzWriter)
defer tarWriter.Close()

// 디렉토리 내부 파일들을 순회하며 tar 아카이브 작성
return filepath.Walk(srcDir, func(path string, info os.FileInfo, err error) error {
// srcDir 내부 파일들을 가져와서 tar에 추가
err = filepath.Walk(srcDir, func(filePath string, info os.FileInfo, err error) error {
if err != nil {
return err
}

// 현재 아이템의 상대 경로 얻기
relPath, err := filepath.Rel(srcDir, path)
// 디렉토리는 제외하고 파일만 처리
if !info.Mode().IsRegular() {
return nil
}

// 상대 경로 구하기
relPath, err := filepath.Rel(srcDir, filePath)
if err != nil {
return err
}

// 디렉토리 자체는 무시
if relPath == "." {
return nil
// tar 헤더 작성
header := &tar.Header{
Name: relPath,
Mode: int64(info.Mode()),
Size: info.Size(),
}

// 파일 정보 구하기
header, err := tar.FileInfoHeader(info, relPath)
if err != nil {
// tar에 파일 추가
if err := tarWriter.WriteHeader(header); err != nil {
return err
}

// header 쓰기
if err := tw.WriteHeader(header); err != nil {
// 파일 내용 추가
file, err := os.Open(filePath)
if err != nil {
return err
}
defer file.Close()

// 파일 내용 쓰기
if !info.IsDir() {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()

_, err = io.Copy(tw, file)
if err != nil {
return err
}
_, err = io.Copy(tarWriter, file)
if err != nil {
return err
}

return nil
})

if err != nil {
return err
}

return nil
}
2 changes: 1 addition & 1 deletion utils/repomanagement/tar-analyze.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,5 +84,5 @@ func GetFolderNameFromTar(filePath string) (string, error) {
}
}

return "", fmt.Errorf("Folder not found")
return "", fmt.Errorf("folder not found")
}

0 comments on commit a3bbf3c

Please sign in to comment.