blob: 7df05c9ff83654dd81d06685e72bf1cc6ba6ef21 [file] [log] [blame]
<project name="jsr-308" basedir="../../..">
<description>
Ant utilities for releasing the Checker-Framework. All targets in this file
are intended to be run much like method calls (i.e. you must specify a certain set of properties
as parameters and they do not depend on any other target.
</description>
<property file="docs/developer/release/release.properties"/>
<!-- Todays date -->
<tstamp>
<format property="release.date" pattern="d MMM yyyy"/>
</tstamp>
<!-- For updating version numbers in files -->
<macrodef name="update">
<attribute name="file"/>
<attribute name="start"/>
<attribute name="end" default=""/>
<attribute name="with"/>
<sequential>
<echo level="info" message="updating @{file}"/>
<replaceregexp file="@{file}" byline="true"
match="@{start}.*@{end}" replace="@{start}@{with}@{end}"/>
</sequential>
</macrodef>
<target name="update-checker-framework-versions" description="updates version info in Checker Framework documents and build configs">
<fail unless="checker" message="checker property is not set!" />
<fail unless="release.ver" message="release.ver property is not set!"/>
<fail unless="afu.properties" message="afu.properties property is not set!"/>
<fail unless="afu.release.date" message="afu.release.date property is not set!"/>
<fail unless="afu.version" message="afu.version not set"/>
<property name="cf.docs" value="${checker}/../docs" />
<property name="checker.manual" value="${cf.docs}/manual" />
<property name="cf.docs.examples" value="${cf.docs}/examples" />
<property name="checker.tutorial" value="${cf.docs}/tutorial" />
<property name="checker.release" value="${checker}/../release" />
<property name="checkerWebPage" value="${cf.docs}/checker-framework-webpage.html" />
<property name="checkerQuickStartPage" value="${checker.manual}/checker-framework-quick-start.html" />
<property name="release.version.regexp" value="\d\.\d+\.\d+(?:\.\d)" />
<!-- for afu.date.0 and afu.date.1 -->
<loadproperties srcFile="${afu.properties}"/>
<replaceregexp file="${checkerWebPage}" byline="true"
match="checker-framework-${release.version.regexp}{0,1}" replace="checker-framework-${release.ver}"/>
<replaceregexp file="${checkerWebPage}" byline="true"
match="annotation-tools-${release.version.regexp}{0,1}.zip" replace="annotation-tools-${afu.version}.zip"/>
<update file="${checkerWebPage}"
start="${checkers.zip.ver.0}" end="${checkers.zip.ver.1}"
with="checker-framework-${release.ver}.zip"/>
<update file="${checkerWebPage}"
start="${afu.zip.ver.0}" end="${afu.zip.ver.1}"
with="annotation-tools-${afu.version}.zip"/>
<update file="${checkerWebPage}"
start="${checkers.ver.0}" end="${checkers.ver.1}"
with="${release.ver}, ${release.date}"/>
<update file="${cf.docs}/manual/checkerframework.gradle"
start="${gradle.ver.0}" end="${gradle.ver.1}"
with="${release.ver}"/>
<update file="${checkerWebPage}"
start="${compiler.ver.0}" end="${compiler.ver.1}"
with="${release.ver}, ${release.date}"/>
<update file="${checkerWebPage}"
start="${checkers.date.0}" end="${checkers.date.1}"
with="${release.date}"/>
<update file="${checkerWebPage}"
start="${afu.date.0}" end="${afu.date.1}"
with="${afu.release.date}"/>
<replaceregexp file="${checkerQuickStartPage}" byline="true"
match="checker-framework-${release.version.regexp}{0,1}" replace="checker-framework-${release.ver}"/>
<update file="${checkerQuickStartPage}"
start="${checkers.zip.ver.0}" end="${checkers.zip.ver.1}"
with="checker-framework-${release.ver}.zip"/>
<replaceregexp file="${checker.manual}/introduction.tex" byline="true"
match="checker-framework-${release.version.regexp}{0,1}" replace="checker-framework-${release.ver}"/>
<replaceregexp file="${checker.manual}/external-tools.tex" byline="true"
match="checker-framework-${release.version.regexp}{0,1}" replace="checker-framework-${release.ver}"/>
<replaceregexp file="${checker.manual}/external-tools.tex" byline="true"
match="checker-${release.version.regexp}{0,1}" replace="checker-${release.ver}"/>
<replaceregexp file="${checker.manual}/external-tools.tex" byline="true"
match="checker-qual-${release.version.regexp}{0,1}" replace="checker-qual-${release.ver}"/>
<replaceregexp file="${checker.manual}/external-tools.tex" byline="true"
match="checker-util-${release.version.regexp}{0,1}" replace="checker-util-${release.ver}"/>
<replaceregexp file="${checker.manual}/external-tools.tex" byline="true"
match="checker/${release.version.regexp}{0,1}" replace="checker/${release.ver}"/>
<replaceregexp file="${checker.manual}/external-tools.tex" byline="true"
match="checker-qual/${release.version.regexp}{0,1}" replace="checker-qual/${release.ver}"/>
<replaceregexp file="${checker.manual}/external-tools.tex" byline="true"
match="checker-util/${release.version.regexp}{0,1}" replace="checker-util/${release.ver}"/>
<replaceregexp file="${checker.manual}/external-tools.tex" byline="true"
match="/${release.version.regexp}{0,1}/jar" replace="/${release.ver}/jar"/>
<replaceregexp file="${checker.manual}/external-tools.tex" byline="true"
match="ext.checkerFrameworkVersion = '${release.version.regexp}{0,1}'"
replace="ext.checkerFrameworkVersion = '${release.ver}'"/>
<replaceregexp file="${checker}/../build-common.properties" byline="true"
match="build.version = ${release.version.regexp}{0,1}" replace="build.version = ${release.ver}"/>
<update file="${checker}/build.properties"
start="build.version = " with="${release.ver}"/>
<update file="${checker.manual}/manual.tex"
start="${release.info.0}" end="${release.info.1}"
with="${release.ver} (${release.date})"/>
<update file="${checker.manual}/manual.tex"
start="${release.ver.0}" end="${release.ver.1}"
with="${release.ver}"/>
<!-- examples -->
<update file="${cf.docs.examples}/MavenExample/pom.xml"
start="${checkers.ver.0}" end="${checkers.ver.1}"
with="${release.ver}"/>
</target>
<target name="zip-checker-framework" description="Creates a zip archive for the Checker Framework.">
<fail unless="checker" message="checker property is not set!" />
<fail unless="dest.dir" message="dest.dir property is not set!" />
<fail unless="file.name" message="file.name property is not set!" />
<fail unless="version" message="version number is not set!" />
<property name="dest.file" value="${dest.dir}/${file.name}"/>
<property name="checkerframework" value="${checker}/.."/>
<property name="checker.includes" value="${checkerframework}/docs/developer/release/checker-includes"/>
<property name="checker.excludes" value="${checkerframework}/docs/developer/release/checker-excludes"/>
<echo message="${checker.includes}" />
<available file="${checker.includes}" property="checker.includes.available"/>
<available file="${checker.excludes}" property="checker.excludes.available"/>
<fail unless="${checker.includes.available}" message="${checker.includes} includes file not available"/>
<fail unless="${checker.excludes.available}" message="${checker.excludes} excludes file not available"/>
<chmod file="${checker}/bin/javac" perm="+x"/>
<delete file="${dest.file}"/>
<zip destfile="${dest.file}" update="true">
<zipfileset dir="${checkerframework}" prefix="checker-framework-${version}"
includesfile="${checker.includes}" excludesfile="${checker.excludes}"/>
<zipfileset dir="${checkerframework}" prefix="checker-framework-${version}"
includes="checker/bin/javac" filemode="755"/>
<zipfileset dir="${checkerframework}"
includes="docs/logo/Logo/CFLogo.png" fullpath="checker-framework-${version}/docs/manual/CFLogo.png"/>
<zipfileset dir="${checkerframework}"
includes="docs/logo/Logo/CFLogo.png" fullpath="checker-framework-${version}/docs/tutorial/CFLogo.png"/>
<zipfileset dir="${checkerframework}"
includes="docs/logo/Logo/CFLogo.png" fullpath="checker-framework-${version}/docs/tutorial/webpages/CFLogo.png"/>
</zip>
</target>
<target name="zip-tutorial" description="Create a zip archive for the directory tutorial.">
<fail unless="checker" message="checker property is not set!" />
<fail unless="dest.dir" message="dest.dir property is not set!" />
<zip destfile="${dest.dir}/$tutorial.zip">
<zipfileset dir="${checkerframework}" prefix="tutorial"
includes="docs/tutorial/**"
excludes="docs/tutorial/test/** docs/tutorial/src/** docs/tutorial/Makefile docs/tutorial/README"/>
<zipfileset dir="${checkerframework}" includes="docs/logo/Logo/CFLogo.png" fullpath="docs/tutorial/CFLogo.png"/>
<zipfileset dir="${checkerframework}" includes="docs/logo/Logo/CFLogo.png" fullpath="docs/tutorial/webpages/CFLogo.png"/>
</zip>
</target>
<target name="zip-maven-examples" description="Create a zip archive for the directory checker/examples/MavenExample.">
<fail unless="checker" message="checker property is not set!" />
<fail unless="dest.dir" message="dest.dir property is not set!" />
<fail unless="file.name" message="file.name property is not set!" />
<fail unless="version" message="version is not set!" />
<property name="cf.docs" value="${checker}/../docs" />
<property name="cf.docs.examples" value="${cf.docs}/examples" />
<zip destfile="${dest.dir}/${file.name}">
<zipfileset dir="${cf.docs.examples}/MavenExample" filemode="755" prefix="maven-examples-${version}"/>
</zip>
</target>
<!-- TODO: Document the params -->
<target name="checker-framework-website-docs" description="Copies the relevant Checker Framework files to the given directory">
<!-- This assumes all files have been built; it just does the copying -->
<!-- The directory in which the Checker Framework has been built -->
<fail unless="checker" message="checker property is not set!" />
<!-- The properties set by release_build.py -->
<fail unless="dest.dir" message="dest.dir property is not set!" />
<fail unless="manual.name" message="manual.name property is not set!" />
<fail unless="dataflow.manual.name" message="dataflow.manual.name property is not set!" />
<fail unless="checker.webpage" message="checker.webpage property is not set!" />
<!-- //TODO: PERHAPS CHECK THAT THESE FILES EXIST -->
<property name="cf.docs" value="${checker}/../docs" />
<property name="checker.manual" value="${cf.docs}/manual" />
<property name="checker.logo" value="${cf.docs}/logo" />
<property name="dataflow.manual" value="${checker}/../dataflow/manual" />
<property name="checker.tutorial" value="${cf.docs}/tutorial" />
<property name="dest.dir.manual" value="${dest.dir}/manual" />
<property name="web.root" value="${dest.dir}/../.." />
<copy file="${cf.docs}/${checker.webpage}" tofile="${dest.dir}/${checker.webpage}" />
<mkdir dir="${dest.dir.manual}" />
<copy file="${checker.manual}/manual.html" tofile="${dest.dir.manual}/${manual.name}.html"/>
<symlink link="${dest.dir.manual}/index.html" resource="${manual.name}.html" />
<copy file="${checker.manual}/manual.pdf" tofile="${dest.dir.manual}/${manual.name}.pdf"/>
<copy file="${dataflow.manual}/dataflow.pdf" tofile="${dest.dir.manual}/${dataflow.manual.name}.pdf" failonerror="false"/>
<copy todir="${dest.dir.manual}" flatten="true">
<fileset dir="${checker.manual}">
<include name="*.svg"/>
<include name="manual001.png"/>
<include name="manual001.svg"/>
</fileset>
</copy>
<copy file="${checker.logo}/Logo/CFLogo.png" tofile="${web.root}/CFLogo.png" />
<copy file="${checker.logo}/Logo/CFLogo.png" tofile="${checker.manual}/CFLogo.png" />
<copy file="${checker.logo}/Logo/CFLogo.png" tofile="${dest.dir.manual}/CFLogo.png" />
<copy file="${checker.logo}/Logo/CFLogo.png" tofile="${dest.dir}/docs/tutorial/CFLogo.png" />
<copy file="${checker.logo}/Logo/CFLogo.png" tofile="${dest.dir}/docs/tutorial/webpages/CFLogo.png" />
<copy file="${checker.logo}/Checkmark/CFCheckmark_favicon.png" tofile="${dest.dir}/favicon-checkerframework.png" />
<copy file="${checker.logo}/Checkmark/CFCheckmark_favicon.png" tofile="${dest.dir.manual}/favicon-checkerframework.png" />
<copy file="${checker.logo}/Checkmark/CFCheckmark_favicon.png" tofile="${web.root}/favicon-checkerframework.png" />
<copy todir="${dest.dir}/tutorial" >
<fileset dir="${checker.tutorial}" includes="**"/>
</copy>
<copy todir="${dest.dir}" file="${checker}/../docs/CHANGELOG.md" />
<copy todir="${dest.dir}/api" flatten="false">
<fileset dir="${checker}/../docs/api">
<include name="**" />
</fileset>
</copy>
<symlink overwrite="true" link="${dest.dir}/index.html" resource="${checker.webpage}" />
</target>
<target name="update-and-copy-maven-example" description="Update version/repo information of the Maven example and copy it to dest.dir">
<fail unless="dest.dir" message="dest.dir property is not set!" />
<fail unless="checker" message="checker property is not set!" />
<fail unless="version" message="version is not set!" />
<property name="cf.docs" value="${checker}/../docs" />
<property name="cf.docs.examples" value="${cf.docs}/examples" />
<copy todir="${dest.dir}/MavenExample" flatten="false">
<fileset dir="${cf.docs.examples}/MavenExample">
<include name="**" />
</fileset>
</copy>
<!-- examples -->
<update file="${dest.dir}/MavenExample/pom.xml"
start="${checkers.ver.0}" end="${checkers.ver.1}"
with="${version}"/>
</target>
<!-- Run from parent directory as: ant -e -file release/release.xml pylint -->
<target name="pylint" description="Run pylint on Python code">
<apply executable="pylint">
<arg value="--output-format=parseable"/>
<arg value="--rcfile=docs/developer/release/.pylintrc"/>
<srcfile/>
<fileset dir="." includes="docs/developer/release/*.py"/>
</apply>
</target>
</project>