Files
egutierrez c383e6464a 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.
2026-04-12 13:54:30 +02:00

161 lines
3.4 KiB
Bash

#!/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 "$@"