137 lines
No EOL
3.9 KiB
Nix
137 lines
No EOL
3.9 KiB
Nix
{ pkgs ? import <nixpkgs> {} }:
|
|
|
|
pkgs.mkShell {
|
|
buildInputs = with pkgs; [
|
|
# PHP and tools
|
|
php83
|
|
php83Packages.composer
|
|
|
|
# Node.js and npm
|
|
nodejs_20
|
|
|
|
# Container tools
|
|
podman
|
|
podman-compose
|
|
|
|
# Database client (optional, for direct DB access)
|
|
mariadb-client
|
|
|
|
# Utilities
|
|
git
|
|
curl
|
|
gnumake
|
|
];
|
|
|
|
shellHook = ''
|
|
# Define helper functions
|
|
rebuild() {
|
|
echo "🔨 Rebuilding development environment..."
|
|
podman-compose down -v
|
|
podman-compose build --no-cache app
|
|
podman-compose up -d
|
|
echo "✅ Rebuild complete! Check logs with: podman-compose logs -f app"
|
|
}
|
|
|
|
rebuild-quick() {
|
|
echo "⚡ Quick rebuild (keeping volumes)..."
|
|
podman-compose down
|
|
podman-compose build app
|
|
podman-compose up -d
|
|
echo "✅ Quick rebuild complete!"
|
|
}
|
|
|
|
logs() {
|
|
podman-compose logs -f "$@"
|
|
}
|
|
|
|
shell() {
|
|
podman-compose exec app sh
|
|
}
|
|
|
|
artisan() {
|
|
podman-compose exec app php artisan "$@"
|
|
}
|
|
|
|
prod-build() {
|
|
local TAG="''${1:-latest}"
|
|
local REGISTRY="codeberg.org"
|
|
local NAMESPACE="lvl0"
|
|
local IMAGE_NAME="dish-planner"
|
|
|
|
echo "🔨 Building production image..."
|
|
podman build -f Dockerfile -t ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG} .
|
|
|
|
echo "✅ Build complete: ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG}"
|
|
echo "Run 'prod-push' to push to Codeberg"
|
|
}
|
|
|
|
prod-push() {
|
|
local TAG="''${1:-latest}"
|
|
local REGISTRY="codeberg.org"
|
|
local NAMESPACE="lvl0"
|
|
local IMAGE_NAME="dish-planner"
|
|
|
|
echo "📤 Pushing to Codeberg registry..."
|
|
if podman push ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG}; then
|
|
echo "✅ Image pushed to ''${REGISTRY}/''${NAMESPACE}/''${IMAGE_NAME}:''${TAG}"
|
|
else
|
|
echo "❌ Failed to push image. Did you run 'prod-build' first?"
|
|
echo " Also make sure you're logged in with 'prod-login'"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
prod-build-push() {
|
|
local TAG="''${1:-latest}"
|
|
prod-build "$TAG" && prod-push "$TAG"
|
|
}
|
|
|
|
prod-login() {
|
|
echo "📝 Logging into Codeberg registry..."
|
|
podman login codeberg.org
|
|
}
|
|
|
|
echo "🚀 Dish Planner Development Environment"
|
|
echo "======================================="
|
|
echo "PHP: $(php --version | head -n1)"
|
|
echo "Node: $(node --version)"
|
|
echo "Podman: $(podman --version)"
|
|
echo "Podman-compose: $(podman-compose --version 2>/dev/null || echo 'checking...')"
|
|
echo ""
|
|
echo "Development commands:"
|
|
echo " rebuild - Full rebuild (removes volumes)"
|
|
echo " rebuild-quick - Quick rebuild (keeps volumes)"
|
|
echo " logs [service] - Follow logs (default: all)"
|
|
echo " shell - Enter app container"
|
|
echo " artisan [cmd] - Run artisan commands"
|
|
echo ""
|
|
echo "Production commands:"
|
|
echo " prod-login - Login to Codeberg registry"
|
|
echo " prod-build [tag] - Build production image (default: latest)"
|
|
echo " prod-push [tag] - Push image to Codeberg"
|
|
echo " prod-build-push - Build and push in one command"
|
|
echo ""
|
|
|
|
# Auto-start prompt
|
|
if [ -f "docker-compose.yml" ]; then
|
|
read -p "Start development containers? (y/N) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
echo "Starting containers..."
|
|
podman-compose up -d
|
|
|
|
# Wait a moment for containers to start
|
|
sleep 3
|
|
|
|
echo ""
|
|
echo "✅ Services should be available at:"
|
|
echo " App: http://localhost:8000"
|
|
echo " Vite: http://localhost:5173"
|
|
echo " Mailhog: http://localhost:8025"
|
|
echo " MariaDB: localhost:3306"
|
|
echo ""
|
|
echo "Run 'podman-compose logs -f app' to follow logs"
|
|
fi
|
|
fi
|
|
'';
|
|
} |