|
<?xml version="1.0" encoding="UTF-8"?> |
|
<project name="symfony build" default="symfony-build"> |
|
|
|
<taskdef name="regexp-copy" classname="tasks.RegexpCopy" classpath="${project.basedir}/build/lib"/> |
|
|
|
<!-- Загрузка конфигов --> |
|
<echo>Load config ...</echo> |
|
<if> |
|
<available file="${project.basedir}/build/properties/config.conf" /> |
|
<then> |
|
<echo>Use file ${project.basedir}/build/properties/config.conf</echo> |
|
<property file="${project.basedir}/build/properties/config.conf" /> |
|
<property file="${project.basedir}/build/properties/defaults.conf" override="no" /> |
|
</then> |
|
<else> |
|
<fail message="Not found file ${project.basedir}/build/properties/config.conf" /> |
|
</else> |
|
</if> |
|
|
|
<!-- Проверяем, если у нас есть алиас rev для свойства project.git.rev, то ставим алиас --> |
|
<if> |
|
<isset property="rev" /> |
|
<then> |
|
<property name="project.git.rev" value="${rev}" override="true" /> |
|
</then> |
|
</if> |
|
|
|
<!-- Приводим имена директорий в нижний регистр --> |
|
<php function="strtolower" returnProperty="strlowerpath"> |
|
<param value="${project.git.rev}"/> |
|
</php> |
|
|
|
<import file="${project.basedir}/build/lib/paths.target.xml" /> |
|
|
|
<target name="install" depends="update, deploy" /> |
|
<target name="update" depends="checkout, build" /> |
|
|
|
<!-- |
|
Сборка проекта |
|
|
|
@param no-migrate - не накатывать миграции |
|
@param load-data - накатить тестовые данные в чистую БД |
|
--> |
|
<target name="symfony-build" depends="System paths prepare"> |
|
|
|
<!-- Получаем текущее время --> |
|
<tstamp> |
|
<format property="build.timestamp" pattern="%Y%m%d%H%I" /> |
|
</tstamp> |
|
|
|
<echo>Copying config files</echo> |
|
<regexp-copy |
|
fromRegexp="(${project.basedir}.*?)\.autocopy\.([a-z]+)" |
|
toRegexp="$1.$2" |
|
dir="${project.basedir}" |
|
overwrite="true" |
|
verbose="true"> |
|
<filterchain> |
|
<expandproperties /> |
|
</filterchain> |
|
</regexp-copy> |
|
<exec command="php ${project.basedir}/symfony cc" dir="${project.basedir}" checkreturn="true" /> |
|
|
|
<if> |
|
<isset property="no-migrate" /> |
|
<then> |
|
<echo>Do not migrate</echo> |
|
</then> |
|
<else> |
|
<echo>Migrating Doctrine DB</echo> |
|
<exec command="php ${project.basedir}/symfony doctrine:migrate" dir="${project.basedir}" checkreturn="true" outputProperty="migration.output" /> |
|
<echo level="warning" msg="${migration.output}" /> |
|
</else> |
|
</if> |
|
<if> |
|
<isset property="load-data" /> |
|
<then> |
|
<echo>Loading common data fixtures</echo> |
|
<exec |
|
command="php ${project.basedir}/symfony doctrine:data-load ${project.basedir}/data/fixtures/common/" |
|
dir="${project.basedir}" checkreturn="true" outputProperty="migration.output" /> |
|
<echo level="warning" msg="${migration.output}" /> |
|
|
|
<echo>Loading common data fixtures</echo> |
|
<exec |
|
command="php ${project.basedir}/symfony doctrine:data-load ${project.basedir}/data/fixtures/users/" |
|
dir="${project.basedir}" checkreturn="true" outputProperty="migration.output" /> |
|
<echo level="warning" msg="${migration.output}" /> |
|
</then> |
|
</if> |
|
</target> |
|
|
|
<!-- |
|
Обновление репозитория проекта |
|
|
|
@param rev - имя ветки или тэга. Может быть указано в конфиге как |
|
project.git.rev |
|
--> |
|
<target name="checkout"> |
|
<if> |
|
<!-- Если текущая ветка доступна - обновляем --> |
|
<available file="${project.basedir}/.git" type="dir" /> |
|
<then> |
|
<!-- cd BASEDIR; git fetch --> |
|
<echo>git fetch repo ${project.git.rev}</echo> |
|
<exec command="${git.bin.path} fetch" dir="${project.basedir}" passthru="true" checkreturn="true" /> |
|
<exec command="${git.bin.path} fetch --tags" dir="${project.basedir}" passthru="true" checkreturn="true" /> |
|
<echo>git remote prune origin</echo> |
|
<exec command="${git.bin.path} remote prune origin" dir="${project.basedir}" passthru="true" checkreturn="true" /> |
|
|
|
<echo>Use git branch ${project.git.rev}</echo> |
|
<!-- cd BASEDIR; git checkout branch --> |
|
<exec command="${git.bin.path} checkout ${project.git.rev}" |
|
dir="${project.basedir}" passthru="true" checkreturn="true" /> |
|
|
|
<exec command="${git.bin.path} clean -f -f -d" |
|
dir="${project.basedir}" passthru="true" checkreturn="false" /> |
|
|
|
<exec command="${git.bin.path} submodule update --init --recursive" |
|
dir="${project.basedir}" passthru="true" checkreturn="true" /> |
|
</then> |
|
<!-- Если нет - ругаемся. Делай клон вручную --> |
|
<else> |
|
<fail message="Expected git repositary. Clone manually." /> |
|
</else> |
|
</if> |
|
</target> |
|
|
|
<!-- RELEASE: Пакуем файлы проекта в архив --> |
|
<target name="release"> |
|
<!-- При упаковке в архив ссылки остаются ссылками, а не превращаются в |
|
настоящие файлы. Так что при распаковке на другой машине есть вероятность |
|
получить пачку битых ссылок. --> |
|
<exec command="tar --exclude-from ${project.basedir}/build/properties/deploy.exclude -cpf ${project.basedir}/release.tar ." dir="${project.basedir}" checkreturn="true" /> |
|
</target> |
|
|
|
<!-- |
|
Копируем проект в отдельную директорию и перебрасываем симлинк |
|
|
|
@param rev - имя ветки или тэга. Может быть указано в конфиге как |
|
project.git.rev |
|
--> |
|
<target name="deploy" depends="Deploy paths prepare"> |
|
<!--Директории для выкатки --> |
|
<delete dir="${project.deploy.path}/versions/${project.git.rev}" includeemptydirs="true" verbose="false" failonerror="true" /> |
|
<mkdir dir="${project.deploy.path}/versions/${project.git.rev}"/> |
|
|
|
<!-- Копируем базовую директорию в дирректорию для сборки --> |
|
<exec command="tar --exclude-from ${project.basedir}/build/properties/deploy.exclude -cpf - . | (cd ${project.deploy.path}/versions/${strlowerpath} && tar --same-owner -xpBf -)" dir="${project.basedir}" checkreturn="true" /> |
|
<if> |
|
<available file="${project.deploy.path}/versions/${project.git.rev}/web/uploads" /> |
|
<then /> |
|
<else> |
|
<!-- Ставим ссылку на общую для всех версий директорию --> |
|
<exec command="ln -s ${project.basedir}/web/uploads ${project.deploy.path}/versions/${project.git.rev}/web/uploads" checkreturn="true" /> |
|
</else> |
|
</if> |
|
</target> |
|
|
|
<!-- |
|
Переключаем текущую версию |
|
|
|
@param rev - имя ветки или тэга. Может быть указано в конфиге как |
|
project.git.rev |
|
--> |
|
<target name="switch"> |
|
<if> |
|
<!--Если текущая ветка доступна - обновляем --> |
|
<available file="${project.deploy.path}/versions/${project.git.rev}" type="dir" /> |
|
<then> |
|
<!-- Создаём симлинк на текущую дирректорию --> |
|
<echo>Link branch '${strlowerpath}' to current...</echo> |
|
<exec command="rm current" dir="${project.deploy.path}" /> |
|
|
|
<exec command="ln -s ${project.deploy.path}/versions/${strlowerpath} current" |
|
dir="${project.deploy.path}" checkreturn="true" /> |
|
</then> |
|
<else> |
|
<fail message="Expected project directory '${project.deploy.path}/versions/${project.git.rev}'. Make before 'phing install -Drev=${project.git.rev}'" /> |
|
</else> |
|
</if> |
|
</target> |
|
</project> |