From 9d745785eda41ce40007b427ddb914bf3f9f0041 Mon Sep 17 00:00:00 2001 From: FernandoJVideira <03.pleaser-minster@icloud.com> Date: Thu, 29 Jan 2026 22:17:11 +0000 Subject: [PATCH] feat: added install logic --- Makefile | 14 ++++----- cmd/api.go | 2 +- cmd/basalt/main.go | 7 ----- cmd/helpers.go | 2 +- cmd/version.go | 1 - go.mod | 2 +- main.go | 7 +++++ tools/create_zip.go | 68 ++++++++++++++++++++++++++++++++++++++++ tools/publish-package.sh | 49 +++++++++++++++++++++++++++++ 9 files changed, 134 insertions(+), 18 deletions(-) delete mode 100644 cmd/basalt/main.go create mode 100644 main.go create mode 100644 tools/create_zip.go create mode 100755 tools/publish-package.sh diff --git a/Makefile b/Makefile index 3909ced..9d841b1 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ -PKG_NAME="gitea.fernandovideira.com/FernandoJVideira/keystone" +PKG_NAME="gitea.fernandovideira.com/fernandojvideira/keystone" version: - @go run -ldflags "-X ${PKG_NAME}/cmd.version=v1.0.0" cmd/basalt/main.go version + @go run -ldflags "-X ${PKG_NAME}/cmd.version=v1.0.0" ./main.go version generate-templates: @echo "Initializing submodules..." @@ -11,19 +11,19 @@ generate-templates: build: prepare-embed @echo "Building for $(GOOS)/$(GOARCH)..." - @GOOS=$(GOOS) GOARCH=$(GOARCH) go build -ldflags "-X ${PKG_NAME}/cmd.version=v0.0.1" -o $(OUTPUT) ./cmd/basalt/main.go + @GOOS=$(GOOS) GOARCH=$(GOARCH) go build -ldflags "-X ${PKG_NAME}/cmd.version=v0.0.1" -o $(OUTPUT) ./main.go windows: - @$(MAKE) build GOOS=windows GOARCH=amd64 OUTPUT=basalt.exe + @$(MAKE) build GOOS=windows GOARCH=amd64 OUTPUT=keystone.exe win-arm: - @$(MAKE) build GOOS=windows GOARCH=arm64 OUTPUT=basalt.exe + @$(MAKE) build GOOS=windows GOARCH=arm64 OUTPUT=keystone.exe linux: - @$(MAKE) build GOOS=linux GOARCH=amd64 OUTPUT=basalt + @$(MAKE) build GOOS=linux GOARCH=amd64 OUTPUT=keystone mac: - @$(MAKE) build GOOS=darwin GOARCH=arm64 OUTPUT=basalt + @$(MAKE) build GOOS=darwin GOARCH=arm64 OUTPUT=keystone prepare-embed: @git submodule update --init --recursive diff --git a/cmd/api.go b/cmd/api.go index 34cfc4a..b5b15e2 100644 --- a/cmd/api.go +++ b/cmd/api.go @@ -8,7 +8,7 @@ import ( "path/filepath" "strings" - "gitea.fernandovideira.com/FernandoJVideira/keystone/assets" + "gitea.fernandovideira.com/fernandojvideira/keystone/assets" "github.com/manifoldco/promptui" "github.com/spf13/cobra" ) diff --git a/cmd/basalt/main.go b/cmd/basalt/main.go deleted file mode 100644 index bb38bd2..0000000 --- a/cmd/basalt/main.go +++ /dev/null @@ -1,7 +0,0 @@ -package main - -import "gitea.fernandovideira.com/FernandoJVideira/keystone/cmd" - -func main() { - cmd.Execute() -} diff --git a/cmd/helpers.go b/cmd/helpers.go index b654dcf..9768f0f 100644 --- a/cmd/helpers.go +++ b/cmd/helpers.go @@ -11,7 +11,7 @@ import ( "strings" "text/template" - "gitea.fernandovideira.com/FernandoJVideira/keystone/assets" + "gitea.fernandovideira.com/fernandojvideira/keystone/assets" ) const ( diff --git a/cmd/version.go b/cmd/version.go index 45b99b6..e712786 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -6,7 +6,6 @@ import ( "github.com/spf13/cobra" ) -// Default version (we will change this dynamically later!) var version = "dev" func init() { diff --git a/go.mod b/go.mod index da40ee8..fffc693 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module gitea.fernandovideira.com/FernandoJVideira/keystone +module gitea.fernandovideira.com/fernandojvideira/keystone go 1.25.5 diff --git a/main.go b/main.go new file mode 100644 index 0000000..300d411 --- /dev/null +++ b/main.go @@ -0,0 +1,7 @@ +package main + +import "gitea.fernandovideira.com/fernandojvideira/keystone/cmd" + +func main() { + cmd.Execute() +} diff --git a/tools/create_zip.go b/tools/create_zip.go new file mode 100644 index 0000000..a7cc2b4 --- /dev/null +++ b/tools/create_zip.go @@ -0,0 +1,68 @@ +package main + +import ( + "archive/zip" + "fmt" + "os" + "path/filepath" + "strings" +) + +func main() { + if len(os.Args) != 3 { + fmt.Println("usage: create_zip ") + os.Exit(1) + } + sourceDir := os.Args[1] + outputZip := os.Args[2] + + outFile, err := os.Create(outputZip) + if err != nil { + panic(err) + } + defer outFile.Close() + + w := zip.NewWriter(outFile) + defer w.Close() + + err = filepath.Walk(sourceDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.IsDir() { + return nil // Skip directory entries entirely + } + + // Skip hidden files/directories (like .DS_Store) + if strings.HasPrefix(filepath.Base(path), ".") { + return nil + } + + // Get path relative to the source directory + relPath, err := filepath.Rel(sourceDir, path) + if err != nil { + return err + } + + // Ensure forward slashes for zip spec compliance + relPath = filepath.ToSlash(relPath) + + // Create file in zip + f, err := w.Create(relPath) + if err != nil { + return err + } + + // Write content + fileContent, err := os.ReadFile(path) + if err != nil { + return err + } + _, err = f.Write(fileContent) + return err + }) + + if err != nil { + panic(err) + } +} diff --git a/tools/publish-package.sh b/tools/publish-package.sh new file mode 100755 index 0000000..ec2df77 --- /dev/null +++ b/tools/publish-package.sh @@ -0,0 +1,49 @@ +#!/bin/bash +set -e + +# Usage: ./tools/publish-package.sh +VERSION=$1 +TOKEN=$2 +MODULE="gitea.fernandovideira.com/fernandojvideira/keystone" +# Note: The zip must contain the full domain path as the root directory +ZIP_ROOT="${MODULE}@${VERSION}" +API_URL="https://gitea.fernandovideira.com/api/packages/FernandoJVideira/go/upload" + +if [ -z "$VERSION" ] || [ -z "$TOKEN" ]; then + echo "Usage: $0 " + exit 1 +fi + +echo "🚀 preparing release $VERSION..." + +# 1. Generate the assets locally +make prepare-embed + +# 2. Create a temporary staging area +TMP_DIR=$(mktemp -d) +TARGET_DIR="$TMP_DIR/$ZIP_ROOT" +mkdir -p "$TARGET_DIR" + +# 3. Export clean git source to staging +git archive --format=tar HEAD | tar -x -C "$TARGET_DIR" + +# 4. Copy the generated (and git-ignored) assets into the staging area +# We assume assets/embedded exists after 'make prepare-embed' +mkdir -p "$TARGET_DIR/assets/embedded" +cp -r assets/embedded/* "$TARGET_DIR/assets/embedded/" + +# 5. Zip it up (using a custom Go tool to avoid directory entries) +ZIP_FILE="keystone-$VERSION.zip" +# We run the tool from the current directory, pointing it to the temp dir +go run tools/create_zip.go "$TMP_DIR" "$ZIP_FILE" + +# 6. Upload to Gitea +echo "📦 Uploading to Gitea Package Registry..." +curl --fail --silent --show-error \ + --user "FernandoJVideira:$TOKEN" \ + --upload-file "$ZIP_FILE" \ + "$API_URL" + +# Cleanup +rm -rf "$TMP_DIR" "$ZIP_FILE" +echo "✅ Published $VERSION successfully!" \ No newline at end of file