Update to v0.1.2
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,5 +1,5 @@
|
|||||||
BINARY=ginie
|
BINARY=ginie
|
||||||
VERSION=0.1.0
|
VERSION=0.1.2
|
||||||
|
|
||||||
build:
|
build:
|
||||||
go build -o $(BINARY) ./cmd/ginie
|
go build -o $(BINARY) ./cmd/ginie
|
||||||
|
|||||||
92
README.md
92
README.md
@@ -2,19 +2,91 @@
|
|||||||
|
|
||||||
**Ginie – Git Native Installer Engine**
|
**Ginie – Git Native Installer Engine**
|
||||||
|
|
||||||
Ein leichtgewichtiges Paketmanagement-Tool, das GitHub-Releases installiert,
|
Ginie ist ein leichtgewichtiges Paketmanagement-Tool, das GitHub-Repositories verwaltet und später Releases installieren und aktualisieren kann.
|
||||||
aktualisiert und verwaltet.
|
|
||||||
|
|
||||||
### Features (geplant)
|
Aktuell implementierte Befehle:
|
||||||
|
|
||||||
- Installieren von GitHub-Releases
|
```
|
||||||
- Automatische Updates
|
ginie --version
|
||||||
- Deinstallieren
|
```
|
||||||
- Erweiterbare Repository-Definitionen
|
|
||||||
|
|
||||||
### Installation
|
Zeigt die installierte Version an.
|
||||||
|
|
||||||
**Debian / Ubuntu (.deb Paket)**:
|
```
|
||||||
|
ginie add <GitHub-URL>
|
||||||
|
```
|
||||||
|
|
||||||
```sh
|
Fügt ein Repository zur lokalen Liste hinzu.
|
||||||
|
Beispiel:
|
||||||
|
|
||||||
|
```
|
||||||
|
ginie add https://github.com/rustdesk/rustdesk
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
ginie list
|
||||||
|
```
|
||||||
|
|
||||||
|
Listet alle gespeicherten Repositories aus `~/.config/ginie/repos.json`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Aus .deb Datei
|
||||||
|
|
||||||
|
Nach dem Bauen oder Herunterladen:
|
||||||
|
|
||||||
|
```
|
||||||
sudo dpkg -i ginie_<version>_amd64.deb
|
sudo dpkg -i ginie_<version>_amd64.deb
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Entwicklung
|
||||||
|
|
||||||
|
### Projekt bauen
|
||||||
|
|
||||||
|
```
|
||||||
|
make build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Direkt ausführen
|
||||||
|
|
||||||
|
```
|
||||||
|
make run
|
||||||
|
```
|
||||||
|
|
||||||
|
### Debian-Paket erzeugen
|
||||||
|
|
||||||
|
```
|
||||||
|
make deb
|
||||||
|
```
|
||||||
|
|
||||||
|
Das Paket wird automatisch im Projektverzeichnis erstellt.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Konfiguration
|
||||||
|
|
||||||
|
Die registrierten Repositories werden gespeichert unter:
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.config/ginie/repos.json
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Geplante Features
|
||||||
|
|
||||||
|
* Installieren von GitHub-Releases
|
||||||
|
* Automatische Updates
|
||||||
|
* Entfernen von installierten Paketen
|
||||||
|
* Versionsverwaltung
|
||||||
|
* Unterstützung mehrerer Quellen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lizenz
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|||||||
@@ -4,14 +4,62 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"gitea.home.musaberdem.de/musabe24/ginie/internal/repos"
|
||||||
"gitea.home.musaberdem.de/musabe24/ginie/internal/version"
|
"gitea.home.musaberdem.de/musabe24/ginie/internal/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if len(os.Args) > 1 && (os.Args[1] == "--version" || os.Args[1] == "-v") {
|
if len(os.Args) < 2 {
|
||||||
fmt.Println("ginie version", version.Version)
|
fmt.Println("Ginie – Git Native Installer Engine")
|
||||||
|
fmt.Println("Usage: ginie <command> [arguments]")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("Ginie – Git Native Installer Engine")
|
cmd := os.Args[1]
|
||||||
|
|
||||||
|
switch cmd {
|
||||||
|
|
||||||
|
case "--version", "-v":
|
||||||
|
fmt.Println("ginie version", version.Version)
|
||||||
|
return
|
||||||
|
|
||||||
|
case "add":
|
||||||
|
if len(os.Args) < 3 {
|
||||||
|
fmt.Println("Usage: ginie add <GitHub-URL>")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
url := os.Args[2]
|
||||||
|
|
||||||
|
err := repos.AddRepo(url)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Fehler:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Repo hinzugefügt:", url)
|
||||||
|
return
|
||||||
|
|
||||||
|
case "list":
|
||||||
|
reposList, err := repos.ListRepos()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Fehler beim Laden:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(reposList) == 0 {
|
||||||
|
fmt.Println("Noch keine Repositories hinzugefügt. Nutze:")
|
||||||
|
fmt.Println(" ginie add <GitHub-URL>")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Registrierte Repositories:")
|
||||||
|
for _, r := range reposList {
|
||||||
|
fmt.Printf("- %s/%s (%s)\n", r.Owner, r.Name, r.URL)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
|
||||||
|
default:
|
||||||
|
fmt.Println("Unbekannter Befehl:", cmd)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
108
internal/repos/repos.go
Normal file
108
internal/repos/repos.go
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
package repos
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Repo struct {
|
||||||
|
URL string `json:"url"`
|
||||||
|
Owner string `json:"owner"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func configPath() (string, error) {
|
||||||
|
home, err := os.UserHomeDir()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
dir := filepath.Join(home, ".config", "ginie")
|
||||||
|
os.MkdirAll(dir, 0755)
|
||||||
|
|
||||||
|
return filepath.Join(dir, "repos.json"), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadRepos() ([]Repo, error) {
|
||||||
|
path, err := configPath()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := os.ReadFile(path)
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return []Repo{}, nil
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var repos []Repo
|
||||||
|
err = json.Unmarshal(data, &repos)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return repos, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SaveRepos(repos []Repo) error {
|
||||||
|
path, err := configPath()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := json.MarshalIndent(repos, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return os.WriteFile(path, data, 0644)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ParseGitHubURL(raw string) (Repo, error) {
|
||||||
|
if !strings.HasPrefix(raw, "https://github.com/") {
|
||||||
|
return Repo{}, errors.New("URL ist kein gültiger GitHub-Link")
|
||||||
|
}
|
||||||
|
|
||||||
|
parts := strings.Split(strings.TrimPrefix(raw, "https://github.com/"), "/")
|
||||||
|
if len(parts) < 2 {
|
||||||
|
return Repo{}, errors.New("GitHub-Link hat nicht das Format: https://github.com/<owner>/<repo>")
|
||||||
|
}
|
||||||
|
|
||||||
|
return Repo{
|
||||||
|
URL: raw,
|
||||||
|
Owner: parts[0],
|
||||||
|
Name: parts[1],
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddRepo(url string) error {
|
||||||
|
repo, err := ParseGitHubURL(url)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
repos, err := LoadRepos()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// prüfen ob bereits vorhanden
|
||||||
|
for _, r := range repos {
|
||||||
|
if r.URL == repo.URL {
|
||||||
|
return errors.New("Repo existiert bereits")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
repos = append(repos, repo)
|
||||||
|
|
||||||
|
return SaveRepos(repos)
|
||||||
|
}
|
||||||
|
|
||||||
|
func ListRepos() ([]Repo, error) {
|
||||||
|
return LoadRepos()
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package version
|
package version
|
||||||
|
|
||||||
// Wird vom Build-Prozess überschrieben, falls gewünscht
|
// Wird vom Build-Prozess überschrieben, falls gewünscht
|
||||||
var Version = "0.1.0"
|
var Version = "0.1.1"
|
||||||
|
|||||||
Reference in New Issue
Block a user