Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ FROM golang:1.13.5-alpine3.10
WORKDIR /build
COPY . .
RUN apk --no-cache add build-base
RUN GOOS=linux go build -a -ldflags '-s -w -extldflags "-static"' -o launchpad .
RUN GOOS=linux go build -a -ldflags '-s -w -extldflags "-static"' -o galaxy .

FROM alpine:3.10
RUN apk --no-cache add ca-certificates
WORKDIR /launchpad
COPY --from=0 /build/launchpad .
CMD ["./launchpad", "runner"]
WORKDIR /galaxy
COPY --from=0 /build/galaxy .
CMD ["./galaxy", "runner"]
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
#Launchpad
#galaxy
123 changes: 118 additions & 5 deletions actions.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
package main

import (
"context"
"encoding/json"
"errors"
"fmt"
"os"
"strings"

"github.com/sirupsen/logrus"
"github.com/urfave/cli"

"github.com/spaceuptech/launchpad/proxy"
"github.com/spaceuptech/launchpad/runner"
"github.com/spaceuptech/launchpad/runner/driver"
"github.com/spaceuptech/launchpad/server"
"github.com/spaceuptech/launchpad/utils/auth"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/mount"
"github.com/docker/docker/client"
"github.com/spaceuptech/galaxy/cmd"
"github.com/spaceuptech/galaxy/model"
"github.com/spaceuptech/galaxy/proxy"
"github.com/spaceuptech/galaxy/runner"
"github.com/spaceuptech/galaxy/runner/driver"
"github.com/spaceuptech/galaxy/server"
"github.com/spaceuptech/galaxy/utils/auth"
)

func actionRunner(c *cli.Context) error {
Expand Down Expand Up @@ -103,3 +112,107 @@ func setLogLevel(loglevel string) {
logrus.SetLevel(logrus.InfoLevel)
}
}

type actionCode struct {
service *model.Service
isDeploy bool
}

func actionStartCode(c *cli.Context) error {
envID := c.String("env")
service, loginResp, err := cmd.CodeStart(envID)
if err != nil {
return err
}
actionCodeStruct := actionCode{
service: service,
isDeploy: false,
}
if err := runDockerFile(actionCodeStruct, loginResp); err != nil {
return err
}
return nil
}

func actionBuildCode(c *cli.Context) error {
envID := c.String("env")
service, loginResp, err := cmd.CodeStart(envID)
if err != nil {
return err
}
actionCodeStruct := actionCode{
service: service,
isDeploy: true,
}
if err := runDockerFile(actionCodeStruct, loginResp); err != nil {
return err
}
return nil
}

func actionLogin(c *cli.Context) error {
userName := c.String("username")
key := c.String("key")
local := c.Bool("local")
url := "url1"
if local {
url = "ur2"
}
if c.String("url") != "default url" {
url = c.String("url")
}
if err := cmd.LoginStart(userName, key, url, local); err != nil {
return err
}
return nil
}

func runDockerFile(s actionCode, loginResp *model.LoginResponse) error {
dir, err := os.Getwd()
if err != nil {
return err
}
sa, err := json.Marshal(s)
if err != nil {
return err
}
ctx := context.Background()
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
return err
}
resp, err := cli.ContainerCreate(ctx,
&container.Config{
Image: s.service.Tasks[0].Docker.Image,
Env: []string{
"FILE_PATH=/",
fmt.Sprintf("URL=%s", s.service.Tasks[0].Env["URL"]),
fmt.Sprintf("TOKEN=%s", loginResp.FileToken),
fmt.Sprintf("meta=%s", string(sa))},
},
&container.HostConfig{Mounts: []mount.Mount{
{
Type: mount.TypeBind,
Source: dir,
Target: "/build",
},
}}, nil, "")
if err != nil {
return err
}
if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
return err
}
return nil
}

func actionSetup(c *cli.Context) error {
driver := c.String("driver")
switch driver {
case "kubernetes":
cmd.SetKubernetes()
case "docker":
return cmd.SetDocker()
}
return nil
}
114 changes: 114 additions & 0 deletions cmd/code.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package cmd

import (
"strings"

"github.com/AlecAivazis/survey/v2"
"github.com/spaceuptech/galaxy/model"
)

//CodeStart starts the code commands
func CodeStart(envID string) (*model.Service, *model.LoginResponse, error) {
credential, err := getCreds()
if err != nil {
return nil, nil, err
}

selectedAccount := getSelectedAccount(credential)

loginRes, err := login(selectedAccount)
if err != nil {
return nil, nil, err
}

c, err := getServiceConfig(".galaxy.yaml")
if err != nil {
c, err = generateServiceConfig(loginRes.Projects, selectedAccount, envID)
if err != nil {
return nil, nil, err
}
}
return c, loginRes, nil
}

func generateServiceConfig(projects []model.Projects, selectedaccount *model.Account, envID string) (*model.Service, error) {
progLang, err := getProgLang()
if err != nil {
return nil, err
}
var envNameID string
var clusters []string
serviceName := ""
if err := survey.AskOne(&survey.Input{Message: "Enter Service Name"}, &serviceName); err != nil {
return nil, err
}
defaultServiceID := strings.ReplaceAll(serviceName, " ", "-")
serviceID := ""
if err := survey.AskOne(&survey.Input{Message: "Enter Service ID", Default: strings.ToLower(defaultServiceID)}, &serviceID); err != nil {
return nil, err
}
var port int32
if err := survey.AskOne(&survey.Input{Message: "Enter Service Port"}, &port); err != nil {
return nil, err
}
projectNameID := ""
if err := survey.AskOne(&survey.Select{Message: "Select Project Name", Options: getProjects(projects)}, &projectNameID); err != nil {
return nil, err
}

temp := strings.Split(projectNameID, " ")
projectID := temp[0]

var project model.Projects
if envID == "none" {
project, err := getProject(projectID, projects)
if err != nil {
return nil, err
}
if err := survey.AskOne(&survey.Select{Message: "Select Environment", Options: getEnvironments(project)}, &envNameID); err != nil {
return nil, err
}
temp := strings.Split(envNameID, " ")
envID = temp[0]
}

selectedEnv, err := getEnvironment(envID, project.Environments)
if err != nil {
return nil, err
}
if err := survey.AskOne(&survey.MultiSelect{Message: "Select Clusters", Options: getClusters(selectedEnv)}, &clusters); err != nil {
return nil, err
}
var progCmd string
if err := survey.AskOne(&survey.Input{Message: "Enter Run Cmd",
Default: strings.Join(getCmd(progLang), " ")}, &progCmd); err != nil {
return nil, err
}
img, err := getImage(progLang)
if err != nil {
return nil, err
}

c := &model.Service{
ID: serviceID,
Name: serviceName,
ProjectID: projectID,
Environment: envID,
Version: "v1",
Scale: model.ScaleConfig{Replicas: 0, MinReplicas: 0, MaxReplicas: 100, Concurrency: 50},
Tasks: []model.Task{
{
ID: serviceID,
Name: serviceName,
Ports: []model.Port{model.Port{Protocol: "http", Port: port}},
Resources: model.Resources{CPU: 250, Memory: 512},
Docker: model.Docker{Image: img},
Env: map[string]string{"URL": selectedaccount.ServerUrl, "Cmd": progCmd},
},
},
Whitelist: []string{"project:*"},
Upstreams: []model.Upstream{model.Upstream{ProjectID: projectID, Service: "*"}},
Runtime: "code",
}
return c, nil
}
66 changes: 66 additions & 0 deletions cmd/creds.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package cmd

import (
"fmt"
"io/ioutil"

"github.com/spaceuptech/galaxy/model"
"gopkg.in/yaml.v2"
)

func getSelectedAccount(credential *model.Credential) *model.Account {
var selectedaccount model.Account
for _, v := range credential.Accounts {
if credential.SelectedAccount == v.ID {
selectedaccount = v
}
}
return &selectedaccount
}

func getCreds() (*model.Credential, error) {
fileName := fmt.Sprintf("/%s/galaxy/config.yaml", getHomeDirectory())
yamlFile, err := ioutil.ReadFile(fileName)
if err != nil {
return nil, fmt.Errorf("error reading yaml file: %s", err)
}

credential := new(model.Credential)
if err := yaml.Unmarshal(yamlFile, credential); err != nil {
return nil, err
}
return credential, nil
}

func checkCred(selectedAccount *model.Account) error {
fileName := fmt.Sprintf("/%s/galaxy/config.yaml", getHomeDirectory())
yamlFile, err := ioutil.ReadFile(fileName)
if err != nil {
credential := model.Credential{
Accounts: []model.Account{*selectedAccount},
SelectedAccount: selectedAccount.ID,
}
if err := generateYamlFile(&credential); err != nil {
return err
}
}
credential := new(model.Credential)
if err := yaml.Unmarshal(yamlFile, credential); err != nil {
return err
}
for _, val := range credential.Accounts {
if val.ID == selectedAccount.ID {
val.ID, val.UserName, val.Key, val.ServerUrl = selectedAccount.ID, selectedAccount.UserName, selectedAccount.Key, selectedAccount.ServerUrl
if err := generateYamlFile(credential); err != nil {
return err
}
return nil
}
}
credential.Accounts = append(credential.Accounts, *selectedAccount)
credential.SelectedAccount = selectedAccount.ID
if err := generateYamlFile(credential); err != nil {
return err
}
return nil
}
Loading