ae1c69eee0
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.
161 lines
3.4 KiB
Bash
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 "$@"
|