﻿#Использовать fs
#Использовать asserts

Перем ВерсияПакета;

////////////////////////////////////////////////////////////
// Описание пакета для сборки и установки
// Полную документацию см. на hub.oscript.io/packaging
//

///////////////////////////////////////////////////////////////////
// Процедуры установки пакета с клиентской машины        
///////////////////////////////////////////////////////////////////


// Вызывается пакетным менеджером после распаковки пакета на клиентскую машину.
// 
// Параметры:
//   КаталогУстановкиПакета - строка. Путь в который пакетный менеджер устанавливает текущий пакет.
// 
Процедура ПриУстановке(Знач КаталогУстановкиПакета, СтандартнаяОбработка) Экспорт
	
	Если ВерсияПакета = "5.5.0" Или ВерсияПакета = "5.5.1" Тогда
		УдалитьФайлы(ОбъединитьПути(КаталогУстановкиПакета, "features\libraries\Макеты\step_definitions\СуществованиеЭлементов.epf"));
		УдалитьФайлы(ОбъединитьПути(КаталогУстановкиПакета, "features\libraries\TestClients\step_definitions\Последовательная_работа_нескольких_клиентов_тестирования_в_одном_сценарии.epf"));
		УдалитьФайлы(ОбъединитьПути(КаталогУстановкиПакета, "features\libraries\Плагины\РаботаСFakeMail.epf"));		
	КонецЕсли;

КонецПроцедуры


///////////////////////////////////////////////////////////////////
// Процедуры сборки пакета                                          
///////////////////////////////////////////////////////////////////


// Вызывается пакетным менеджером перед началом сборки пакета.
// 
// Параметры:
//   РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета.
// 
Процедура ПередСборкой(Знач РабочийКаталог) Экспорт
КонецПроцедуры


// Вызывается пакетным менеджером после помещения файлов в пакет.
// 
// Параметры:
//   РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета.
//   АрхивПакета - ЗаписьZIPФайла - ZIP-архив с содержимым пакета (включаемые файлы).
// 
Процедура ПриСборке(Знач РабочийКаталог, Знач АрхивПакета) Экспорт

	Исходники = ЗагрузитьСценарий("tasks/Модули/Исходники.os");

	СлужебныйКаталог = ".forbuild";
	КлючМассиваПутей = "opm_build";
	КлючМассиваИсключаемыхПутей = "opm_build_exclude";
	
	//ФС.ОбеспечитьПустойКаталог(СлужебныйКаталог);
	СтрокаЗапуска = Исходники.СтрокаЗапускаКомандыСборки(Ложь, СлужебныйКаталог);
	СтрокаЗапуска = СтрШаблон("%1 --key %2", СтрокаЗапуска, КлючМассиваПутей);
	СтрокаЗапуска = СтрШаблон("%1 --cachekey %2", СтрокаЗапуска, КлючМассиваПутей);
	Исходники.ИсполнитьКоманду(СтрокаЗапуска);

	КаталогСборки = СтрШаблон("./%1/", СлужебныйКаталог);
	СтрокаЗапуска = СтрШаблон("oscript ./tools/runner.os compileepf ./lib/TemplateEpf %1lib/TemplateEpf --onlycopy --ibname /F./build/ibservice", КаталогСборки);
	Исходники.ИсполнитьКоманду(СтрокаЗапуска);
	
	СтрокаЗапуска = СтрШаблон("oscript ./tools/runner.os compileepf ./lib/TemplateEpfUF %1lib/TemplateEpfUF --onlycopy --ibname /F./build/ibservice", КаталогСборки);
	Исходники.ИсполнитьКоманду(СтрокаЗапуска);

	СтрокаЗапуска = СтрШаблон("oscript ./tools/runner.os compileepf ./locales %1locales --onlycopy --ibname /F./build/ibservice", КаталогСборки);
	Исходники.ИсполнитьКоманду(СтрокаЗапуска);
	
	Настройки = Исходники.ПолучитьИзJSONФайла(Исходники.ПутьФайлаНастроек());
	Ожидаем.Что(Настройки, "Не загружены настройки из файла настроек").Заполнено();
	
	МассивПутей = Настройки[КлючМассиваПутей];
	Ожидаем.Что(МассивПутей, "Не найдена настройка " + КлючМассиваПутей).Заполнено();
	
	ТекущийКаталогСохр = ТекущийКаталог();
	УстановитьТекущийКаталог(СлужебныйКаталог);

	МассивИсключаемыхПутей = Настройки[КлючМассиваИсключаемыхПутей];
	Ожидаем.Что(МассивИсключаемыхПутей, "Не найдена настройка " + КлючМассиваИсключаемыхПутей).Заполнено();

	Попытка
		Для каждого Путь Из МассивИсключаемыхПутей Цикл
			ФайлПути = Новый Файл(Путь);
			Если ФайлПути.Существует() Тогда
				Если ФайлПути.ЭтоКаталог() Тогда
					УдалитьФайлы(Путь, "*.*");
				Иначе
					УдалитьФайлы(Путь);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		
		Для каждого Путь Из МассивПутей Цикл
			АрхивПакета.Добавить(Путь,
				РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
				РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
		КонецЦикла;

		МассивОбработок = НайтиФайлы(".", "*.epf");
		Для каждого Файл Из МассивОбработок Цикл
			Путь = Файл.Имя;

			АрхивПакета.Добавить(Путь,
				РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
				РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
		КонецЦикла;

	Исключение
		УстановитьТекущийКаталог(ТекущийКаталогСохр);
		ВызватьИсключение;
	КонецПопытки;
	УстановитьТекущийКаталог(ТекущийКаталогСохр);
	
КонецПроцедуры


// Вызывается пакетным менеджером после сборки пакета.
// 
// Параметры:
//   РабочийКаталог - Строка - Текущий рабочий каталог с исходниками пакета.
//   ПутьКФайлуПакета - Строка - Полный путь к собранному файлу пакета.
// 
Процедура ПослеСборки(Знач РабочийКаталог, Знач ПутьКФайлуПакета) Экспорт

	Файл = Новый Файл(ОбъединитьПути(РабочийКаталог, "content.zip"));
	Если Файл.Существует() Тогда
		УдалитьФайлы(Файл.ПолноеИмя);
	КонецЕсли;

	ФайлКонечный = Новый Файл(ОбъединитьПути(РабочийКаталог, СтрШаблон("add-%1.zip", ВерсияПакета)));
	Если ФайлКонечный.Существует() Тогда
		УдалитьФайлы(ФайлКонечный.ПолноеИмя);
	КонецЕсли;

	АрхивПакета = Новый ЧтениеZipФайла(ПутьКФайлуПакета);
	Элемент = АрхивПакета.Элементы.Найти(Файл.Имя);
	Ожидаем.Что(Элемент, "Не сформирован файл " + ФайлКонечный.ПолноеИмя)
		.ЭтоНе().Равно(Неопределено);
	АрхивПакета.Извлечь(Элемент, РабочийКаталог);

	ПереместитьФайл(Файл.ПолноеИмя, ФайлКонечный.ПолноеИмя);

	Ожидаем.Что(ФайлКонечный.Существует(), "Не сформирован файл " + ФайлКонечный.ПолноеИмя)
		.ЭтоИстина();

	Сообщить("ИНФОРМАЦИЯ - Создан файл релиза " + ФайлКонечный.ПолноеИмя);
КонецПроцедуры

ВерсияПакета = "5.5.5";

Описание.Имя("add")
	.Версия(ВерсияПакета)
	.Автор("Silver Bulleters")
	.Описание("Сборка add")
	.ВерсияСреды("1.0.20")
	// автоматически собираются все файлы из файла "ospx/settings.json" + корневые обработки
	.ВключитьФайл("lib/TemplateEpfUF")
	.ВключитьФайл("lib/TemplateEpf")
	.ВключитьФайл("license")
	.ВключитьФайл("licenses")
	.ВключитьФайл("locales")
	.ВключитьФайл("tasks")
	.ВключитьФайл("ospx")
	.ВключитьФайл("packagedef")
	.ВключитьФайл("readme.md")
	.ВключитьФайл("f.a.q.md")
	.ВключитьФайл("MakeAutoVideo.md")
	.ВключитьФайл("notice")
	.ВключитьФайл("history")
	.ВключитьФайл("tools/json")
	.ВключитьФайл("tools/VideoTools")
	.ВключитьФайл("tools/onescript")
	.ЗависитОт("asserts")
	.ЗависитОт("1commands", "1.3.0")
	.ЗависитОт("logos", "0.6.2")
	.ЗависитОт("cmdline", "0.6.2")
	.ЗависитОт("tempfiles", "0.2.1")
	.ЗависитОт("v8runner", "0.11.2")
	.ЗависитОт("v8unpack", "1.0.1")
	.ЗависитОт("fs", "0.5.0")
	.ОпределяетМодуль("add", "ospx/addospx.os")
	;
