feat: add bash pipeline functions for Go project initialization
2 pipelines Bash: init_go_module (inicializa un modulo Go con go mod init y estructura de directorios estandar) e init_go_project (scaffolding completo de proyecto Go con cmd/, internal/, configs y Makefile). Componen funciones shell existentes del registry.
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
#!/usr/bin/env bash
|
||||
# init_go_module
|
||||
# --------------
|
||||
# Pipeline que inicializa un módulo Go simple en el directorio actual.
|
||||
# Crea: go.mod, main.go, .gitignore, build.sh y dev.sh.
|
||||
#
|
||||
# USO:
|
||||
# bash init_go_module.sh [module_path]
|
||||
#
|
||||
# ARGUMENTOS:
|
||||
# module_path Path del módulo Go (opcional; default: github.com/user/<dirname>)
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
init_go_module() {
|
||||
local module_path="${1:-}"
|
||||
|
||||
local dir_name
|
||||
dir_name="$(basename "$(pwd)")"
|
||||
|
||||
if [[ -z "$module_path" ]]; then
|
||||
module_path="github.com/user/${dir_name}"
|
||||
fi
|
||||
|
||||
echo "=== Inicializar Módulo Go ==="
|
||||
echo " Módulo: ${module_path}"
|
||||
echo " Directorio: $(pwd)"
|
||||
echo ""
|
||||
|
||||
# Verificar Go
|
||||
if ! command -v go &>/dev/null; then
|
||||
echo "init_go_module: Go no está instalado" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "Go detectado: $(go version)"
|
||||
echo ""
|
||||
|
||||
# Inicializar módulo
|
||||
echo "Inicializando go module..."
|
||||
if ! go mod init "$module_path"; then
|
||||
echo "init_go_module: falló go mod init" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "go.mod creado"
|
||||
echo ""
|
||||
|
||||
# Crear main.go
|
||||
echo "Creando main.go..."
|
||||
cat > main.go << 'GOEOF'
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("Hola desde Go!")
|
||||
fmt.Println("Modulo inicializado correctamente")
|
||||
}
|
||||
GOEOF
|
||||
echo "main.go creado"
|
||||
echo ""
|
||||
|
||||
# Crear .gitignore
|
||||
echo "Creando .gitignore..."
|
||||
cat > .gitignore << 'IGNEOF'
|
||||
# Binarios
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
bin/
|
||||
build/
|
||||
|
||||
# Archivos de test
|
||||
*.test
|
||||
*.out
|
||||
coverage.txt
|
||||
*.prof
|
||||
|
||||
# IDEs
|
||||
.idea/
|
||||
.vscode/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
IGNEOF
|
||||
echo ".gitignore creado"
|
||||
echo ""
|
||||
|
||||
# Crear build.sh
|
||||
echo "Creando build.sh..."
|
||||
cat > build.sh << 'BUILDEOF'
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
TARGET="${1:-linux}"
|
||||
mkdir -p bin
|
||||
|
||||
case "$TARGET" in
|
||||
linux)
|
||||
GOOS=linux GOARCH=amd64 go build -o bin/app-linux main.go
|
||||
chmod +x bin/app-linux
|
||||
echo "Compilado: bin/app-linux"
|
||||
;;
|
||||
windows)
|
||||
GOOS=windows GOARCH=amd64 go build -o bin/app-windows.exe main.go
|
||||
echo "Compilado: bin/app-windows.exe"
|
||||
;;
|
||||
all)
|
||||
GOOS=linux GOARCH=amd64 go build -o bin/app-linux main.go && echo "Linux OK"
|
||||
GOOS=windows GOARCH=amd64 go build -o bin/app-windows.exe main.go && echo "Windows OK"
|
||||
GOOS=darwin GOARCH=amd64 go build -o bin/app-macos main.go && echo "macOS OK"
|
||||
;;
|
||||
*)
|
||||
echo "Uso: ./build.sh [linux|windows|all]" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
BUILDEOF
|
||||
chmod +x build.sh
|
||||
echo "build.sh creado"
|
||||
echo ""
|
||||
|
||||
# Crear dev.sh
|
||||
echo "Creando dev.sh..."
|
||||
cat > dev.sh << 'DEVEOF'
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
go run main.go "$@"
|
||||
DEVEOF
|
||||
chmod +x dev.sh
|
||||
echo "dev.sh creado"
|
||||
echo ""
|
||||
|
||||
echo "=== Modulo Go creado exitosamente ==="
|
||||
echo ""
|
||||
echo "Archivos generados:"
|
||||
echo " main.go - Codigo del modulo"
|
||||
echo " go.mod - Modulo Go (${module_path})"
|
||||
echo " .gitignore - Exclusiones git"
|
||||
echo " build.sh - Compilar binario"
|
||||
echo " dev.sh - Ejecutar directamente"
|
||||
echo ""
|
||||
echo "Proximos pasos:"
|
||||
echo " ./dev.sh - Ejecutar el modulo"
|
||||
echo " ./build.sh - Compilar para Linux"
|
||||
echo " ./build.sh windows - Compilar para Windows"
|
||||
echo " ./build.sh all - Compilar para todo"
|
||||
}
|
||||
|
||||
init_go_module "$@"
|
||||
Reference in New Issue
Block a user