Skip to content

Commit

Permalink
Added missed files, fixed gitignore
Browse files Browse the repository at this point in the history
For #46 - fixed gitignore by remiving gitstrap pattern
which is a name of package
  • Loading branch information
g4s8 committed Mar 24, 2021
1 parent 61e142d commit 4851ddf
Show file tree
Hide file tree
Showing 14 changed files with 910 additions and 2 deletions.
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
./gitignore
dist/**
bin/**
gitstrap
_old/
/gitstrap
52 changes: 52 additions & 0 deletions cmd/gitstrap/cmd_apply.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package main

import (
"os"

"github.com/g4s8/gitstrap/internal/gitstrap"
"github.com/g4s8/gitstrap/internal/spec"
"github.com/g4s8/gitstrap/internal/view"
"github.com/urfave/cli/v2"
)

var applyCommand = &cli.Command{
Name: "apply",
Usage: "Apply new specficiation",
Action: cmdApply,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "file",
Aliases: []string{"f"},
Usage: "Resource specification file",
},
&cli.BoolFlag{
Name: "force",
Usage: "Force create, replace existing resource if exists",
},
},
}

func cmdApply(c *cli.Context) error {
token, err := resolveToken(c)
if err != nil {
return err
}

model := new(spec.Model)
if err := model.FromFile(c.String("file")); err != nil {
return err
}
debug := os.Getenv("DEBUG") != ""
g, err := gitstrap.New(c.Context, token, debug)
if err != nil {
return err
}
if c.Bool("force") {
model.Metadata.Annotations["force"] = "true"
}
rs, errs := g.Apply(model)
if err := view.RenderOn(view.Console, rs, errs); err != nil {
fatal(err)
}
return nil
}
53 changes: 53 additions & 0 deletions cmd/gitstrap/cmd_create.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package main

import (
"os"

"github.com/g4s8/gitstrap/internal/gitstrap"
"github.com/g4s8/gitstrap/internal/spec"
"github.com/g4s8/gitstrap/internal/view"
"github.com/urfave/cli/v2"
)

var createCommand = &cli.Command{
Name: "create",
Aliases: []string{"c"},
Usage: "Create new resource",
Action: cmdCreate,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "file",
Aliases: []string{"f"},
Usage: "Resource specification file",
},
&cli.BoolFlag{
Name: "force",
Usage: "Force create, replace existing resource if exists",
},
},
}

func cmdCreate(c *cli.Context) error {
token, err := resolveToken(c)
if err != nil {
return err
}

model := new(spec.Model)
if err := model.FromFile(c.String("file")); err != nil {
return err
}
debug := os.Getenv("DEBUG") != ""
g, err := gitstrap.New(c.Context, token, debug)
if err != nil {
return err
}
if c.Bool("force") {
model.Metadata.Annotations["force"] = "true"
}
rs, errs := g.Create(model)
if err := view.RenderOn(view.Console, rs, errs); err != nil {
fatal(err)
}
return nil
}
54 changes: 54 additions & 0 deletions cmd/gitstrap/cmd_delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package main

import (
"os"

"github.com/g4s8/gitstrap/internal/gitstrap"
"github.com/g4s8/gitstrap/internal/spec"
"github.com/g4s8/gitstrap/internal/view"
"github.com/urfave/cli/v2"
"gopkg.in/yaml.v3"
"io/ioutil"
"path/filepath"
)

var deleteCommand = &cli.Command{
Name: "delete",
Aliases: []string{"remove", "del", "rm"},
Usage: "Delete resource",
Action: cmdDelete,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "file",
Aliases: []string{"f"},
Usage: "Resource specification file",
},
},
}

func cmdDelete(c *cli.Context) error {
token, err := resolveToken(c)
if err != nil {
return err
}

fn, _ := filepath.Abs(c.String("file"))
data, err := ioutil.ReadFile(fn)
if err != nil {
return err
}
model := new(spec.Model)
if err := yaml.Unmarshal(data, model); err != nil {
return err
}
debug := os.Getenv("DEBUG") != ""
g, err := gitstrap.New(c.Context, token, debug)
if err != nil {
return err
}
rs, errs := g.Delete(model)
if err := view.RenderOn(view.Console, rs, errs); err != nil {
fatal(err)
}
return nil
}
53 changes: 53 additions & 0 deletions cmd/gitstrap/cmd_get.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package main

import (
"fmt"
"os"

"github.com/g4s8/gitstrap/internal/gitstrap"
"github.com/g4s8/gitstrap/internal/spec"
"github.com/g4s8/gitstrap/internal/view"
"github.com/urfave/cli/v2"
)

var getCommand = &cli.Command{
Name: "get",
Aliases: []string{"g"},
Usage: "Get resource",
Subcommands: []*cli.Command{
{
Name: "repo",
Usage: "Get repository",
Action: cmdGetRepo,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "owner",
Usage: "Get repositories of another user or organization",
},
},
},
},
}

func cmdGetRepo(c *cli.Context) error {
token, err := resolveToken(c)
if err != nil {
return err
}
name := c.Args().First()
if name == "" {
return fmt.Errorf("Requires repository name argument")
}
format := spec.MfYaml
owner := c.String("owner")
debug := os.Getenv("DEBUG") != ""
g, err := gitstrap.New(c.Context, token, debug)
if err != nil {
return err
}
repo, errs := g.Get(name, owner, format)
if err := view.RenderOn(view.Console, repo, errs); err != nil {
fatal(err)
}
return nil
}
75 changes: 75 additions & 0 deletions cmd/gitstrap/cmd_list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package main

import (
"os"

"github.com/g4s8/gitstrap/internal/gitstrap"
"github.com/g4s8/gitstrap/internal/view"
"github.com/urfave/cli/v2"
)

var listCommand = &cli.Command{
Name: "list",
Aliases: []string{"l", "ls", "lst"},
Usage: "List resources",
Action: cmdListRepo,
Subcommands: []*cli.Command{
{
Name: "repo",
Usage: "List repositories",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "owner",
Usage: "List repositories of another user or organization",
},
&cli.BoolFlag{
Name: "forks",
Usage: "Filter only fork repositories",
},
&cli.BoolFlag{
Name: "no-forks",
Usage: "Filter out fork repositories",
},
&cli.IntFlag{
Name: "stars-gt",
Usage: "Filter by stars greater than value",
},
&cli.IntFlag{
Name: "stars-lt",
Usage: "Filter by stars less than value",
},
},
},
},
}

func cmdListRepo(c *cli.Context) error {
token, err := resolveToken(c)
if err != nil {
return err
}
owner := c.String("owner")
debug := os.Getenv("DEBUG") != ""
g, err := gitstrap.New(c.Context, token, debug)
if err != nil {
return err
}
filter := gitstrap.LfNop
if c.Bool("forks") {
filter = gitstrap.LfForks(filter, true)
}
if c.Bool("no-forks") {
filter = gitstrap.LfForks(filter, false)
}
if gt := c.Int("stars-gt"); gt > 0 {
filter = gitstrap.LfStars(filter, gitstrap.LfStarsGt(gt))
}
if lt := c.Int("stars-lt"); lt > 0 {
filter = gitstrap.LfStars(filter, gitstrap.LfStarsLt(lt))
}
lst, errs := g.List(filter, owner)
if err := view.RenderOn(view.Console, lst, errs); err != nil {
fatal(err)
}
return nil
}
68 changes: 68 additions & 0 deletions internal/gitstrap/apply.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package gitstrap

import (
"context"
"fmt"

"github.com/g4s8/gitstrap/internal/github"
"github.com/g4s8/gitstrap/internal/spec"
"github.com/g4s8/gitstrap/internal/view"
gh "github.com/google/go-github/v33/github"
)

func (g *Gitstrap) Apply(m *spec.Model) (<-chan view.Printable, <-chan error) {
res := make(chan view.Printable)
errs := make(chan error)
ctx, cancel := g.newContext()
go func() {
defer close(res)
defer close(errs)
defer cancel()
var r view.Printable
var err error
switch m.Kind {
case spec.KindRepo:
repo := m.Spec.(*spec.Repo)
r, err = g.applyRepo(ctx, repo, m.Metadata)
}
if err != nil {
errs <- err
} else {
res <- r
}
}()
return res, errs
}

type resRepoApply struct {
*gh.Repository
}

func (r *resRepoApply) PrintOn(p view.Printer) {
p.Print(fmt.Sprintf("Repository %s updated", r.GetFullName()))
}

func (g *Gitstrap) applyRepo(ctx context.Context, repo *spec.Repo, meta *spec.Metadata) (view.Printable, error) {
owner := meta.Owner
if owner == "" {
owner = g.me
}
name := meta.Name
exist, err := github.RepoExist(g.gh, ctx, owner, name)
if err != nil {
return nil, err
}
if !exist {
return g.createRepo(ctx, repo, meta)
}
gr := new(gh.Repository)
if err := repo.ToGithub(gr); err != nil {
return nil, err
}
gr.ID = meta.ID
gr, _, err = g.gh.Repositories.Edit(ctx, owner, name, gr)
if err != nil {
return nil, err
}
return &resRepoApply{gr}, nil
}
Loading

0 comments on commit 4851ddf

Please sign in to comment.