Antビルドスクリプトから最新のgit commitハッシュを検索するにはどうすればよいですか?
私は現在、githubに保存する新しいオープンソースプロジェクトに取り組んでいます。既存のANTビルドファイルを拡張して、番号付きビルドを作成できるようにしたいと思います。 「ant buildnum -Dnum = 12」のようなものでビルドを起動すると想像しています。
結果のjarのマニフェストファイルに2つの重要な情報が含まれるようにしたいと思います。
私はbuild.number行を作成する方法を知っています。ただし、最新のgit commit hashを検索するのに最適なant plumbはわかりません。これは、入力したい値です。
私はgithub上のプロジェクトに次のantターゲットを書きました。使用法:
<available file=".git" type="dir" property="git.present"/>
<target name="git.revision" description="Store git revision in ${repository.version}" if="git.present">
<exec executable="git" outputproperty="git.revision" failifexecutionfails="false" errorproperty="">
<arg value="describe"/>
<arg value="--tags"/>
<arg value="--always"/>
<arg value="HEAD"/>
</exec>
<condition property="repository.version" value="${git.revision}" else="unknown">
<and>
<isset property="git.revision"/>
<length string="${git.revision}" trim="yes" length="0" when="greater"/>
</and>
</condition>
</target>
それは例えばトークンを拡張するために使用する@repository.version@
テンプレートファイル内:
<target name="index.html" depends="git.revision" description="build index.html from template">
<copy file="index.html.template" tofile="index.html" overwrite="yes">
<filterchain>
<replacetokens>
<token key="repository.version" value="${repository.version}" />
</replacetokens>
</filterchain>
</copy>
</target>
このコマンドは常に作業フォルダーの最後のコミットSHA1を返します。常にHEADからビルドしない場合に役立ちます。コマンドは、Windowsシステムと* nixシステムの両方で実行する必要があります
<exec executable="git" outputproperty="git.revision">
<arg value="log" />
<arg value="-1" />
<arg value="--pretty=format:%H" />
</exec>
それがあなたが探しているものでしょうか?
git rev-parse HEAD
実際に両方の答えを使用しました。私が書いたアリのコードは次のとおりです。
<target name="getgitdetails" >
<exec executable="git" outputproperty="git.tagstring">
<arg value="describe"/>
</exec>
<exec executable="git" outputproperty="git.revision">
<arg value="rev-parse"/>
<arg value="HEAD"/>
</exec>
<if>
<contains string="${git.tagstring}" substring="cannot"/>
<then>
<property name="git.tag" value="none"/>
</then>
<else>
<property name="git.tag" value="${git.tagstring}"/>
</else>
</if>
</target>
私は、Gitコマンドを明示的に呼び出さずにビルドバージョンを判別するAntタスクを作成したので、インストールする必要はありません(WindowsではPATH
にも含める必要があります)。バージョン管理ワークフロー:
master
のタグを介して手動で設定されます。master
のタグのみ。)ソースコードと例: https://github.com/Hunternif/JGitVersion
バージョンにタグを付ける (0.1かそれと似たものから開始)してから、git describe
。
これにより、タグからの参照ポイントとして、読み取り可能な一意の識別子が得られます。リリースすると、このバージョン番号は指定したものになります。
大企業で<exec> git command-line
がすぐに問題にぶつかることに気づきました。GUIを使用している開発者もいれば、異なる場所に異なるコマンドラインバージョンがインストールされていたり、他の問題が発生したりしていました。行く方法は純粋なJavaソリューションであり、依存関係はプロジェクトビルドシステムの一部であることがわかりました。これまで、Svnkit for Subversionで使用していたのと同じです。
1つの条件は、「主流」のライブラリ依存関係のみが許可されていることでした。 JGitライブラリを使用することもできますが、githubなどに散在する多くのgit ant tasksプロジェクトは除外されました。
解決策は、build.xml内とJGitライブラリ内の組み合わせを使用することでした。
TODO:コードを貼り付け...