/
arvliv
/
esp32-code-server
Обзор
Документация
Войти
/
arvliv
/
esp32-code-server
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Makefile
135 строк
6 KB
Artyom Ivanov
first_commit
07 авг 2026, 12:01
07 авг 2026, 12:01
fb1f7b2
Код
Авторство
О чём код?
.PHONY: help up build stop down restart logs shell status fix-perms clean \ export-image import save load COMPOSE := docker compose SERVICE := pioarduino-dev CONTAINER := pioarduino-code-server IMAGE := pioarduino-dev:latest TAR_FILE := pioarduino-dev.tar USER_NAME := user # REBUILD=1 — принудительная пересборка из Dockerfile # Без REBUILD — загрузка из .tar (если есть) и запуск help: ## 📜 Показать это справочное сообщение @echo "Доступные команды для управления проектом:" @grep -E '^[a-zA-Z0-9_-]+( [a-zA-Z0-9_-]+)*:.*?## .*$$' $(MAKEFILE_LIST) | \ awk 'BEGIN {FS = ":.*?## "}; { \ split($$1, targets, " "); \ for (i in targets) { \ if (targets[i] != "") printf "\033[36m%-15s\033[0m %s\n", targets[i], $$2 \ } \ }' | sort -u @echo "" @echo "Переменные:" @echo " REBUILD=1 — пересобрать образ с нуля из Dockerfile" @echo " Пример: make up REBUILD=1" # --------------------------------------------------------------------------- # Основной запуск # --------------------------------------------------------------------------- up: ## 🚀 Запустить контейнер (по умолчанию из .tar, REBUILD=1 — с нуля) ifeq ($(REBUILD),1) @echo "🔨 REBUILD=1 → полная пересборка образа из Dockerfile..." $(COMPOSE) up -d --build @echo "✅ Образ пересобран и контейнер запущен! → http://localhost:8080" else @if [ -f "$(TAR_FILE)" ]; then \ echo "📦 Найден $(TAR_FILE) — загружаем образ..."; \ docker load -i "$(TAR_FILE)"; \ else \ echo "⚠️ Файл $(TAR_FILE) не найден."; \ echo " Варианты:"; \ echo " 1) make import — если .tar уже есть в другой папке"; \ echo " 2) make up REBUILD=1 — собрать образ с нуля из Dockerfile"; \ exit 1; \ fi $(COMPOSE) up -d @echo "✅ Контейнер запущен из готового образа! → http://localhost:8080" endif build: ## 🛠️ Принудительно пересобрать образ (алиас к up REBUILD=1) $(MAKE) up REBUILD=1 # --------------------------------------------------------------------------- # Экспорт / импорт образа # --------------------------------------------------------------------------- export-image: ## 💾 Экспорт текущего рабочего образа в $(TAR_FILE) @echo "🔍 Проверяем контейнер $(CONTAINER)..." @if docker ps -a --format '{{.Names}}' | grep -q "^$(CONTAINER)$$"; then \ echo "📝 Фиксируем изменения контейнера (docker commit)..."; \ docker commit $(CONTAINER) $(IMAGE); \ echo "✅ Контейнер закоммичен в образ $(IMAGE)"; \ else \ echo "ℹ️ Контейнер $(CONTAINER) не найден — экспортируем существующий образ $(IMAGE)"; \ fi @if ! docker image inspect $(IMAGE) >/dev/null 2>&1; then \ echo "❌ Образ $(IMAGE) не найден. Сначала соберите его: make up REBUILD=1"; \ exit 1; \ fi @echo "📦 Сохраняем образ $(IMAGE) → $(TAR_FILE) ..." docker save -o $(TAR_FILE) $(IMAGE) @ls -lh $(TAR_FILE) @echo "✅ Экспорт завершён: $(TAR_FILE)" save: export-image ## 💾 Алиас для export-image import: ## 📥 Импорт образа из $(TAR_FILE) @if [ ! -f "$(TAR_FILE)" ]; then \ echo "❌ Файл $(TAR_FILE) не найден в текущей директории"; \ exit 1; \ fi @echo "📦 Загружаем образ из $(TAR_FILE)..." docker load -i $(TAR_FILE) @echo "✅ Образ загружен. Можно запускать: make up" load: import ## 📥 Алиас для import # --------------------------------------------------------------------------- # Управление жизненным циклом # --------------------------------------------------------------------------- stop: ## 🛑 Остановить контейнер $(COMPOSE) stop @echo "⏸️ Контейнер остановлен." down: ## 🗑️ Остановить и удалить контейнер $(COMPOSE) down @echo "🧹 Контейнер удалён." restart: ## 🔄 Перезапустить контейнер $(COMPOSE) restart @echo "🔄 Контейнер перезапущен." logs: ## 📋 Просмотр логов в реальном времени $(COMPOSE) logs -f $(SERVICE) shell: ## 💻 Открыть терминал (bash) внутри работающего контейнера $(COMPOSE) exec $(SERVICE) bash status: ## 📊 Показать текущий статус контейнеров и наличие .tar $(COMPOSE) ps @echo "" @if [ -f "$(TAR_FILE)" ]; then \ echo "📦 Архив образа: $(TAR_FILE) ($$(ls -lh $(TAR_FILE) | awk '{print $$5}'))"; \ else \ echo "📦 Архив образа: отсутствует ($(TAR_FILE))"; \ fi @if docker image inspect $(IMAGE) >/dev/null 2>&1; then \ echo "🖼️ Образ в Docker: $(IMAGE) — есть"; \ else \ echo "🖼️ Образ в Docker: $(IMAGE) — отсутствует"; \ fi fix-perms: ## 🔧 Исправить права на папку ./projects (UID 1000 = user) @echo "Исправление прав на папку projects..." sudo chown -R 1000:1000 ./projects @echo "✅ Права исправлены." clean: ## ⚠️ Полная очистка: контейнер + volumes (образ и .tar НЕ удаляются) @echo "ВНИМАНИЕ: Это удалит контейнер и именованные тома (volumes)." @read -p "Вы уверены? (y/N): " confirm && [ "$$confirm" = "y" ] || exit 1 $(COMPOSE) down -v @echo "🧹 Полная очистка завершена."