Skip to content

Commit

Permalink
Merge pull request #2 from gibsongd/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
fenix-hub authored Mar 27, 2022
2 parents b3ccf14 + 5257743 commit 55483de
Show file tree
Hide file tree
Showing 10 changed files with 576 additions and 278 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,7 @@
*.exe
*.out
*.app

# Project Specific
gibson.json
addons/
81 changes: 79 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,94 @@
Golang CLI tool for Gibson framework: package manager, project manager, godot cli parser, class resolver, etc...

## Modules
- [x] [Package Manager](#package-manager)
- [ ] [Project Manager]()
- [ ] [CLI Parser]()
- [ ] [Class Resolver]()

### Package Manager
Gibson package manager lets you install addons in your Godot projects.
Gibson handles assets in a very similar (yet liter) way to `npm`.
Addons are installed only from one trusted source, which is the official [AssetLib](https://godotengine.org/asset-library/asset) using their public APIs.
Once installed, addons will be cached in your %APP_DATA% folder, so all your Godot projects will be able to share addons just executing one command!

**PoC**
#### examples

*search for an addon*
```bash
> gibson pm -search "time"

[id] [user] [title]
1275 Blaron Timer Counter
1157 Aendryr Date Time Addon
1134 GianptDev EditorTimer
1127 RipeX Simple Project Timer
236 thomazthz Godot Wakatime
721 VolodyaKEK Single File Runtime Console
702 Eminnet EminMultiMesh
662 pycbouh Time Tracker
342 Cevantime Water2D Node
```

*install an addon by `author/title`*
```bash
> gibson pm -install "pycbouh/Time Tracker"

[gibson-cli] ✓
[gibson-cli] ✓ `pycbouh/Time Tracker` fetched!
[gibson-cli] ✓ `662` info retrieved!
[gibson-cli] ✓ `pycbouh/Time Tracker` downloaded!
[gibson-cli] ✓ `pycbouh/Time Tracker` installed successfully!
```

*install an addon by `id`*
```bash
> gibson pm -install 662

[gibson-cli] ✓
[gibson-cli] ✓ `662` info retrieved!
[gibson-cli] ✓ `pycbouh/Time Tracker` downloaded!
[gibson-cli] ✓ `pycbouh/Time Tracker` installed successfully!
```

When an addon is installed, it will create a `gibson.json` in the current folder.
It is used by *gibson* in order to handle addons.
If an addon is already cached, it will just be unpacked in the current project.

*install an addon by `author/title` (cached)*
```bash
> gibson pm -install "pycbouh/Time Tracker"

[gibson-cli] ✓ `pycbouh/Time Tracker` found in cache
[gibson-cli] ✓ `pycbouh/Time Tracker` installed successfully!
```

*Want to clear the cache and force install?*
```bash
> gibson pm -install "pycbouh/Time Tracker" -clear

[gibson-cli] ✓ `pycbouh/Time Tracker` cache cleared
[gibson-cli] ✓ `pycbouh/Time Tracker` fetched!
[gibson-cli] ✓ `662` info retrieved!
[gibson-cli] ✓ `pycbouh/Time Tracker` downloaded!
[gibson-cli] ✓ `pycbouh/Time Tracker` installed successfully!
```

*uninstall an addon*
```bash
> gibson pm -uninstall "pycbouh/Time Tracker"

[gibson-cli] ✓ `time-tracker` removed
[gibson-cli] ✓ `pycbouh/Time Tracker` uninstalled
```

*install all the addons listed in the `gibson.json` file*
```bash
> gibson pm -install .
```
This is useful if you want to share your project and leave it addons-independent or want to make a lighter project.

If an addon is already cached, it will just be unzipped in the current project.
*list all addons currently installed (using gibson)*
```bash
> gibson pm -list
```
73 changes: 39 additions & 34 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,64 +3,69 @@ package main
import (
"flag"
"fmt"
packagemanager "gibson/package-manager"
packagemanager "gibson/package_manager"
"os"
)

var version string = "1.0.0"
var Version string = "1.1.0"

func main() {
pmCmd := flag.NewFlagSet("pm", flag.ExitOnError)

var installAsset string
var uninstallAsset string
var searchAddon string
var installAddon string
var uninstallAddon string
var clearCached bool
var listAddons bool

pmCmd.StringVar(&installAsset, "install", "", "Install a new asset")
pmCmd.StringVar(&uninstallAsset, "uninstall", "", "Uninstall a new asset")
pmCmd.BoolVar(&clearCached, "clear", false, "Clear cached asset")
pmCmd.StringVar(&searchAddon, "search", "", "Search for an addon")
pmCmd.StringVar(&installAddon, "install", "", "Install a new addon")
pmCmd.StringVar(&uninstallAddon, "uninstall", "", "Uninstall a new addon")
pmCmd.BoolVar(&listAddons, "list", false, "List all addons installed in the current project")
pmCmd.BoolVar(&clearCached, "clear", false, "Clear cached addon")

versionPtr := flag.Bool("version", false, "Print gibson-cli version")
flag.Parse()

if *versionPtr {
fmt.Println(getVersion())
os.Exit(1)
fmt.Println(Version)
os.Exit(0)
}

if len(os.Args) < 2 {
fmt.Println(getUsage())
os.Exit(1)
flag.Usage()
pmCmd.Usage()
os.Exit(0)
}

switch os.Args[1] {
case "pm":
packagemanager.Init()

pmCmd.Parse(os.Args[2:])
if installAsset == "" && uninstallAsset == "" {
fmt.Println(packagemanager.GetUsage())
os.Exit(1)

if listAddons {
packagemanager.ListAddons()
os.Exit(0)
}
if searchAddon != "" {
packagemanager.SearchAddon(searchAddon)
os.Exit(0)
}
if installAsset != "" {
packagemanager.InstallAddon(installAsset, clearCached)
if installAddon == "" && uninstallAddon == "" {
pmCmd.Usage()
os.Exit(0)
}
if uninstallAsset != "" {
packagemanager.UninstallAsset(uninstallAsset, clearCached)
if installAddon != "" {
if installAddon == "." {
packagemanager.InstallByConfig(clearCached)
} else {
packagemanager.InstallAddon(installAddon, clearCached)
}
}
if uninstallAddon != "" {
packagemanager.UninstallAddon(uninstallAddon, clearCached)
}
default:
fmt.Println(getUsage())
os.Exit(1)
os.Exit(0)
}

}

func getVersion() string {
return version
}

func getUsage() string {
return "Usage:\n\n" +
"gibson pm Package Manager\n" +
"\n" +
"All commands:\n\n" +
" pm, version, help\n"
}
Loading

0 comments on commit 55483de

Please sign in to comment.