Skip to content

Commit

Permalink
Merge pull request #6 from Doer-org/refactor/cmd-to-internal
Browse files Browse the repository at this point in the history
refactor : all directory
  • Loading branch information
seipan authored Feb 4, 2024
2 parents 00cca4d + 0a642ee commit fd62057
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 59 deletions.
65 changes: 6 additions & 59 deletions cmd/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,12 @@ Copyright © 2024 Do'er
package cmd

import (
"context"
"os"
"os/exec"

"github.com/docker/docker/client"
"github.com/spf13/cobra"
)

const (
TarTmpDir = "tmp-tar"
ImageName = "ketos-tmp-image"
"github.com/Doer-org/ketos/internal/api"
"github.com/Doer-org/ketos/internal/docker"
)

var dirPath string

// createCmd represents the create command
Expand All @@ -25,59 +19,12 @@ var createCmd = &cobra.Command{
Long: `This command creates a docker image based on the local environment,
compresses it, and sends it to the server.`,
Run: func(cmd *cobra.Command, args []string) {
createImageWithPack()
compressImageToTar()
sendTarToServer()
docker.CreateImageWithPack()
docker.CompressImageToTar()
api.SendTarToServer()
},
}

func createImageWithPack() {
// Packを外部コマンドで実行してimageを作成
cmd := exec.Command("pack", "build", ImageName, "--builder", "gcr.io/buildpacks/builder:v1")
if dirPath != "" {
cmd.Dir = dirPath
}
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
panic(err)
}
}

func compressImageToTar() {
// imageをtarに圧縮
ctx := context.Background()
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
panic(err)
}
if _, err := os.Stat(TarTmpDir); os.IsNotExist(err) {
os.Mkdir(TarTmpDir, 0777)
}
tarFileName := TarTmpDir + "/" + ImageName + ".tar"
imageSaveResponse, err := cli.ImageSave(ctx, []string{ImageName})
if err != nil {
panic(err)
}
defer imageSaveResponse.Close()
file, err := os.Create(tarFileName)
if err != nil {
panic(err)
}
defer file.Close()
_, err = file.ReadFrom(imageSaveResponse)
if err != nil {
panic(err)
}
}

func sendTarToServer() {
// tarをサーバに送信
// TODO: サーバに送信する処理を実装
// TODO: サーバに送信したらtarを削除する
}

func init() {
rootCmd.AddCommand(createCmd)
createCmd.Flags().StringVarP(&dirPath, "path", "p", "", "directory path to create docker image")
Expand Down
7 changes: 7 additions & 0 deletions internal/api/send_file.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package api

func SendTarToServer() {
// tarをサーバに送信
// TODO: サーバに送信する処理を実装
// TODO: サーバに送信したらtarを削除する
}
1 change: 1 addition & 0 deletions internal/api/send_file_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package api
35 changes: 35 additions & 0 deletions internal/docker/compress_docker_image.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package docker

import (
"context"
"os"

"github.com/docker/docker/client"
)

func CompressImageToTar() {
// imageをtarに圧縮
ctx := context.Background()
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
panic(err)
}
if _, err := os.Stat(TarTmpDir); os.IsNotExist(err) {
os.Mkdir(TarTmpDir, 0777)
}
tarFileName := TarTmpDir + "/" + ImageName + ".tar"
imageSaveResponse, err := cli.ImageSave(ctx, []string{ImageName})
if err != nil {
panic(err)
}
defer imageSaveResponse.Close()
file, err := os.Create(tarFileName)
if err != nil {
panic(err)
}
defer file.Close()
_, err = file.ReadFrom(imageSaveResponse)
if err != nil {
panic(err)
}
}
1 change: 1 addition & 0 deletions internal/docker/compress_docker_image_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package docker
20 changes: 20 additions & 0 deletions internal/docker/create_docker_image.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package docker

import (
"os"
"os/exec"
)

func CreateImageWithPack() {
// Packを外部コマンドで実行してimageを作成
cmd := exec.Command("pack", "build", ImageName, "--builder", "gcr.io/buildpacks/builder:v1")
if dirPath != "" {
cmd.Dir = dirPath
}
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
panic(err)
}
}
8 changes: 8 additions & 0 deletions internal/docker/value.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package docker

const (
TarTmpDir = "tmp-tar"
ImageName = "ketos-tmp-image"
)

var dirPath string

0 comments on commit fd62057

Please sign in to comment.