Public Access
feat: added install logic
This commit is contained in:
9 files changed
+134
-18
No files matched your search
@@ -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 <source_dir> <output_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)
|
||||
}
|
||||
}
|
||||
Executable
+49
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Usage: ./tools/publish-package.sh <version> <gitea-token>
|
||||
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 <version> <gitea-token>"
|
||||
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!"
|
||||
Reference in new issue
Block a user