| <project name="Kotlin CI Steps" default="none"> |
| <import file="build.xml" optional="false"/> |
| |
| <property name="build.number" value="snapshot"/> |
| <property name="jdk16.home" value="${java.home}"/> |
| <property name="fail.on.plugin.verifier.error" value="true"/> |
| |
| <property name="version_substitute_dir" value="${basedir}/versions_temp/"/> |
| |
| <property name="artifact.output.path" value="${basedir}/out/artifacts"/> |
| <property name="plugin.xml" value="idea/src/META-INF/plugin.xml"/> |
| <property name="plugin.xml.bk" value="${version_substitute_dir}/plugin.xml.bk"/> |
| <property name="plugin.xml.versioned" value="${plugin.xml}.versioned"/> |
| <property name="plugin.xml.version.number" value="${build.number}"/> |
| |
| <property name="compiler.version.java" value="core/util.runtime/src/org/jetbrains/kotlin/config/KotlinCompilerVersion.java"/> |
| <property name="compiler.version.java.bk" value="${version_substitute_dir}/KotlinCompilerVersion.java.bk"/> |
| <property name="compiler.version.java.versioned" value="${compiler.version.java}.versioned"/> |
| <property name="compiler.version.number" value="${build.number}"/> |
| <property name="compiler.ant.fork.jvmargs" value="-Xmx1024m"/> |
| |
| <property name="plugin.zip" value="${artifact.output.path}/kotlin-plugin-${build.number}.zip"/> |
| |
| <macrodef name="echoprop"> |
| <attribute name="prop"/> |
| <sequential> |
| <echo>@{prop}=${@{prop}}</echo> |
| </sequential> |
| </macrodef> |
| |
| <echoprop prop="os.name"/> |
| <echoprop prop="os.version"/> |
| <echoprop prop="os.arch"/> |
| <echoprop prop="java.home"/> |
| <echoprop prop="java.vendor"/> |
| <echoprop prop="java.version"/> |
| <echoprop prop="user.name"/> |
| <echoprop prop="user.home"/> |
| <echoprop prop="user.dir"/> |
| |
| <target name="cleanupArtifacts"> |
| <delete dir="${artifact.output.path}" includes="*"/> |
| </target> |
| |
| <macrodef name="substituteVersionInFile"> |
| <attribute name="target.file"/> |
| <attribute name="test.string"/> |
| <attribute name="target.file.bk" default="@{target.file}.bk"/> |
| <attribute name="target.file.versioned" default="@{target.file}.versioned"/> |
| <attribute name="token.key" default="snapshot"/> |
| <attribute name="version" default="${build.number}"/> |
| <sequential> |
| <!-- Create backup. Backup will be restored after build end. This will allow to rebuild project without renew |
| plugin.xml from repository. --> |
| <copy file="@{target.file}" tofile="@{target.file.bk}"/> |
| |
| <!-- Check that version has correct pattern for substitution --> |
| <copy todir=""> |
| <fileset file="@{target.file.bk}"> |
| <contains text="@{test.string}"/> |
| </fileset> |
| <filterchain> |
| <replacetokens> |
| <token key="@{token.key}" value="@{version}"/> |
| </replacetokens> |
| </filterchain> |
| <mergemapper to="@{target.file.versioned}"/> |
| </copy> |
| |
| <!-- If file doesn't exist - there's a problem with original plugin.xml. Probably there's a bad pattern used for version --> |
| <copy file="@{target.file.versioned}" tofile="@{target.file}" overwrite="true"/> |
| |
| <delete file="@{target.file.versioned}" quiet="true"/> |
| </sequential> |
| </macrodef> |
| |
| <target name="writeCompilerVersionToTemplateFile"> |
| <mkdir dir="${version_substitute_dir}"/> |
| |
| <substituteVersionInFile |
| target.file="${compiler.version.java}" |
| target.file.bk="${compiler.version.java.bk}" |
| target.file.versioned="${compiler.version.java.versioned}" |
| test.string="public static final String VERSION = "@snapshot@";" |
| version="${compiler.version.number}"/> |
| </target> |
| |
| <target name="writePluginVersionToTemplateFile"> |
| <mkdir dir="${version_substitute_dir}"/> |
| |
| <substituteVersionInFile |
| target.file="${plugin.xml}" |
| target.file.bk="${plugin.xml.bk}" |
| target.file.versioned="${plugin.xml.versioned}" |
| test.string="<version>@snapshot@</version>" |
| version="${plugin.xml.version.number}"/> |
| </target> |
| |
| <target name="revertTemplateFiles"> |
| <copy file="${plugin.xml.bk}" tofile="${plugin.xml}" overwrite="true"/> |
| <copy file="${compiler.version.java.bk}" tofile="${compiler.version.java}" overwrite="true"/> |
| |
| <delete dir="${version_substitute_dir}" quiet="true"/> |
| </target> |
| |
| <target name="pre_build" depends="writeCompilerVersionToTemplateFile, writePluginVersionToTemplateFile, cleanupArtifacts"/> |
| |
| <target name="zipArtifacts"> |
| <macrodef name="zipPlugin"> |
| <attribute name="filename"/> |
| <attribute name="dir"/> |
| |
| <sequential> |
| <zip destfile="@{filename}"> |
| <zipfileset prefix="@{dir}" dir="${artifact.output.path}/@{dir}" excludes="kotlinc/bin/*"/> |
| <zipfileset prefix="@{dir}/kotlinc/bin" dir="${artifact.output.path}/@{dir}/kotlinc/bin" includes="*.bat" |
| filemode="644"/> |
| <zipfileset prefix="@{dir}/kotlinc/bin" dir="${artifact.output.path}/@{dir}/kotlinc/bin" excludes="*.bat" |
| filemode="755"/> |
| </zip> |
| <delete dir="${artifact.output.path}/@{dir}" quiet="true"/> |
| </sequential> |
| </macrodef> |
| |
| <zipPlugin filename="${plugin.zip}" dir="Kotlin"/> |
| </target> |
| |
| <macrodef name="print-statistic"> |
| <attribute name="key"/> |
| <attribute name="value"/> |
| |
| <sequential> |
| <echo message="##teamcity[buildStatisticValue key='@{key}' value='@{value}']"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="print-file-size-statistic"> |
| <attribute name="path"/> |
| <attribute name="file-name"/> |
| |
| <sequential> |
| <local name="file.size"/> |
| <length file="@{path}/@{file-name}" property="file.size"/> |
| <print-statistic key="@{file-name} size" value="${file.size}"/> |
| </sequential> |
| </macrodef> |
| |
| <target name="printStatistics"> |
| <print-file-size-statistic path="${kotlin-home}/lib" file-name="kotlin-stdlib.jar"/> |
| <print-file-size-statistic path="${kotlin-home}/lib" file-name="kotlin-reflect.jar"/> |
| |
| <print-file-size-statistic path="${kotlin-home}/lib" file-name="kotlin-stdlib-js.jar"/> |
| <print-file-size-statistic path="${js.stdlib.output.dir}" file-name="kotlin.js"/> |
| <print-file-size-statistic path="${js.stdlib.output.dir}" file-name="kotlin-test.js"/> |
| <print-file-size-statistic path="${basedir}/libraries/stdlib/js/build/classes/main" file-name="kotlin.meta.js"/> |
| </target> |
| |
| <target name="post_build" depends="patchXmlForAndroidStudio, zipArtifacts, revertTemplateFiles, printStatistics, remove_internal_artifacts, dont_remove_internal_artifacts"/> |
| |
| <target name="none"> |
| <fail message="Either specify pre_build or post_build"/> |
| </target> |
| |
| <property name="teamcity.build.branch" value=""/> |
| |
| <condition property="need.remove.artifacts" value="true"> |
| <and> |
| <matches pattern="rri?/.*" string="${teamcity.build.branch}"/> |
| <not> |
| <matches pattern="rri?/internal/.*" string="${teamcity.build.branch}"/> |
| </not> |
| </and> |
| </condition> |
| |
| <target name="remove_internal_artifacts" |
| description="Remove internal artifacts for rri?/* branches, but store them for rri?/internal/*" |
| if="need.remove.artifacts"> |
| <echo message="Remove internal artifacts" /> |
| |
| <delete failonerror="false" verbose="true"> |
| <fileset dir="dist"> |
| <include name="kotlin-compiler-before-shrink.jar"/> |
| <include name="kotlin-for-upsource.jar"/> |
| <include name="kotlin-for-upsource-sources.jar"/> |
| <include name="kotlin-test-data.zip"/> |
| </fileset> |
| <fileset dir="out/artifacts/internal"> |
| <include name="kotlin-ide-common.jar"/> |
| </fileset> |
| </delete> |
| </target> |
| |
| <target name="dont_remove_internal_artifacts" unless="need.remove.artifacts"> |
| <echo message="Internal artifacts left untouched"/> |
| </target> |
| |
| <macrodef name="patch_plugin_xml"> |
| <attribute name="plugin.xml" /> |
| <sequential> |
| <replace file="@{plugin.xml}" token="<!-- DEPENDS-ON-AS-PLACEHOLDER -->" value="<depends>com.intellij.modules.androidstudio</depends>"/> |
| </sequential> |
| </macrodef> |
| |
| <target name="patchXmlForAndroidStudio"> |
| <unzip src="${artifact.output.path}/Kotlin/lib/kotlin-plugin.jar" dest="tmpAndroidStudio"> |
| <patternset> |
| <include name="META-INF/plugin.xml"/> |
| </patternset> |
| </unzip> |
| |
| <patch_plugin_xml plugin.xml="tmpAndroidStudio/META-INF/plugin.xml"/> |
| |
| <jar destfile="${artifact.output.path}/Kotlin/lib/kotlin-plugin.jar" update="true"> |
| <fileset dir="tmpAndroidStudio"/> |
| <file file="META-INF/plugin.xml"/> |
| </jar> |
| |
| <delete file="tmpAndroidStudio"/> |
| </target> |
| </project> |