build.xml
8.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<?xml version="1.0"?>
<!--
/**
* Configurações para o processo de build Phing
*
* Este arquivo de build precisa de alguns ajustes antes da criação de uma
* release. Mude a propriedade project.conf.version para o número de versão
* desejado e a propriedade project.conf.buildin para apontar para o diretório
* de build desejado (o padrão é /tmp).
*
* Dois pacotes compactados serão criados, um Gzip e outro Zip.
*
* Este build não executa os testes unitários e funcionais.
*
* Arquivo codificado em UTF-8 para maior compatibilidade com o utilitário
* CLI phing.
*
* @author Eriksen Costa Paixão <eriksen.paixao_bs@cobra.com.br>
* @license http://creativecommons.org/licenses/GPL/2.0/legalcode.pt CC GNU GPL
* @link http://phing.info/docs/guide/current/ Phing Documentation
* @todo Incluir tarefas de geração de API (PhpDocumentorTask)
* @version $Id: build.xml 768 2010-12-09 02:20:10Z eriksencosta@gmail.com $
*/
-->
<project name="i-Educar" description="Sistema de gestão escolar" default="release" basedir="../">
<!-- Configuração geral do build -->
<property name="project.conf.version" value="1.1.0" />
<property name="project.conf.curdir" value="" />
<property name="project.conf.buildin" value="/tmp" />
<property name="project.conf.buildbase" value="${project.conf.buildin}/release-${project.conf.version}" />
<property name="project.conf.builddir" value="${project.conf.buildin}/release-${project.conf.version}/ieducar" />
<property name="project.conf.buildgzip" value="${project.conf.buildin}/ieducar-${project.conf.version}.tar.gz" />
<property name="project.conf.buildzip" value="${project.conf.buildin}/ieducar-${project.conf.version}.zip" />
<!-- Configuração de acesso ao banco de dados para o DbDeployTask -->
<property name="project.conf.dbdeploy.hostname" value="localhost" />
<property name="project.conf.dbdeploy.username" value="ieducar" />
<property name="project.conf.dbdeploy.dbname" value="ieducar" />
<property name="project.conf.dbdeploy.password" value="" />
<property name="project.conf.dbdeploy.psql_path" value="" />
<!-- Variáveis para substituição de tokens -->
<property name="project.conf.license" value="http://creativecommons.org/licenses/GPL/2.0/legalcode.pt CC GNU GPL" />
<!-- Apenas para saber quanta memória o build consome -->
<property name="build.report.memory_peak" value="" />
<!-- project.conf.dbdeploy.psql -->
<!--
Procura pelo psql no path do sistema.
O comando which retorna um status code. Para saber qual o comando
registrado no $PATH, gravamos para um arquivo, recuperamos o seu conteúdo
e gravamos o valor em ${project.conf.dbdeploy.psql_path}.
-->
<exec command="which psql > ${project.conf.buildin}/psql_path.txt" escape="false" />
<php function="file_get_contents" returnProperty="project.conf.dbdeploy.psql_path">
<param value="${project.conf.buildin}/psql_path.txt" />
</php>
<php function="trim" returnProperty="project.conf.dbdeploy.psql_path">
<param value="${project.conf.dbdeploy.psql_path}" />
</php>
<!-- /project.conf.dbdeploy.psql -->
<!-- Pega o diretório atual como workaround ao chdir das classes de teste base -->
<php function="getcwd" returnProperty="project.conf.curdir" />
<!-- project.conf.release_hash -->
<!--
Gera um hash único no momento do build para uso como chave de geração de
Id de sessão. Ver: http://php.net/session_id
-->
<php function="time" returnProperty="project.conf.timestamp" />
<!-- Gera um uniqid -->
<php function="uniqid" returnProperty="project.conf.uniqid">
<param value="${project.conf.version}-${project.conf.timestamp}" />
<param value="TRUE" />
</php>
<!-- Hash sha1 do uniqid para distribuição -->
<php function="sha1" returnProperty="project.conf.hash">
<param value="${project.conf.uniqid}" />
</php>
<!-- /project.conf.release_hash -->
<!-- Inclui todos os arquivos do projeto, ignorando alguns arquivos e diretórios -->
<fileset dir="${project.basedir}" id="allfiles">
<include name="**" />
<exclude name=".svn/" />
<exclude name=".git/" />
<exclude name=".settings/" />
<exclude name=".gitignore" />
<exclude name=".gitmodules" />
<exclude name=".project" />
<exclude name=".buildpath" />
<exclude name=".DS_STORE" />
<exclude name="tests/" />
<exclude name="**/build.xml" />
<exclude name="**/coverage.db" />
<exclude name="spikes/" />
<exclude name="deploy/" />
<exclude name="misc/database/deltas/**" />
</fileset>
<!-- Prepara o ambiente para a o processo de build -->
<target name="prepare">
<echo msg="Preparando o build para a release ${project.conf.version}" />
<echo msg="Apagando diretório alvo ${project.conf.builddir}" />
<delete dir="${project.conf.builddir}" verbose="on" includeemptydirs="on" failonerror="on" />
<echo msg="Apagando pacotes gzip e zip ${project.conf.buildgzip} e ${project.conf.buildzip}" />
<delete file="${project.conf.buildgzip}" verbose="on" failonerror="on" />
<delete file="${project.conf.buildzip}" verbose="on" failonerror="on" />
<echo msg="Criando diretório do build ${project.conf.builddir}" />
<delete dir="${project.conf.builddir}" verbose="on" includeemptydirs="on" failonerror="on" />
<mkdir dir="${project.conf.builddir}" />
<mkdir dir="${project.conf.builddir}/deploy" />
</target>
<!-- Tarefa de migração de banco de dados -->
<target name="migrate" description="Migração de BD" depends="prepare">
<!-- Carrega a tarefa dbdeploy -->
<taskdef name="dbdeploy" classname="phing.tasks.ext.dbdeploy.DbDeployTask"/>
<!-- Propriedades com o destino dos arquivos SQL -->
<property name="project.conf.dbdeploy.deployfile" value="deploy/deploy.sql" />
<property name="project.conf.dbdeploy.undofile" value="deploy/undo.sql" />
<!-- Gera os scripts de dbdeploy -->
<dbdeploy
url="pgsql:host=${project.conf.dbdeploy.hostname};dbname=${project.conf.dbdeploy.dbname}"
userid="${project.conf.dbdeploy.username}"
password="${project.conf.dbdeploy.password}"
dir="${project.conf.curdir}/ieducar/misc/database/deltas"
outputfile="${project.conf.builddir}/${project.conf.dbdeploy.deployfile}"
undooutputfile="${project.conf.builddir}/${project.conf.dbdeploy.undofile}" />
<!-- Executa o psql através de chamada shell, por velocidade -->
<exec
command="${project.conf.dbdeploy.psql_path} -U ${project.conf.dbdeploy.username} ${project.conf.dbdeploy.dbname} < ${project.conf.dbdeploy.deployfile}"
dir="${project.conf.builddir}"
checkreturn="true" />
</target>
<!-- Copia os arquivos do projeto para o diretório de build -->
<target name="build" depends="prepare">
<echo msg="Criando o build" />
<delete dir="${project.conf.builddir}/deploy" verbose="on" includeemptydirs="on" failonerror="on" />
<copy todir="${project.conf.builddir}">
<filterchain id="filters">
<replacetokens begintoken="@@" endtoken="@@">
<token key="package_version" value="${project.conf.version}" />
<token key="license" value="${project.conf.license}" />
<token key="release_hash" value="${project.conf.hash}" />
</replacetokens>
</filterchain>
<fileset refid="allfiles" />
</copy>
</target>
<!-- Empacota o build com Gzip -->
<target name="gzip" depends="build">
<echo msg="Gzipping ${project.conf.builddir}" />
<tar basedir="${project.conf.buildbase}" destfile="${project.conf.buildgzip}" compression="gzip" />
</target>
<!-- Empacota o build com Zip -->
<target name="zip" depends="build">
<echo msg="Zipping ${project.conf.builddir}" />
<zip basedir="${project.conf.buildbase}" destfile="${project.conf.buildzip}" />
</target>
<!-- Cria uma nova release -->
<target name="release" depends="migrate, build, gzip, zip">
<echo msg="OK! Build construído com sucesso." />
<php function="memory_get_peak_usage" returnProperty="build.report.memory_peak" />
<echo msg="Pico de memória: ${build.report.memory_peak}." />
</target>
</project>