NAntでビルドからVSSのチェックインまでを自動化する

VSSディレクトリが以下のようになっていて、

$/PROJECT
├─Function1_DLL
│  └─Module1.DLL
│
└─Function1_SRC
    └─Function1
        └─Module1
            └─Module1.sln

ローカルディレクトリに下記のように取得してあるとき、

C:¥Dev¥PROJECT
├─Function1_DLL
│  └─Module1.DLL
│
└─Function1_SRC
    └─Function1
        └─Module1
            └─Module1.sln

Module1.slnをビルドして、VSS上のModule1.dllを更新するNAntプロジェクト。

<?xml version="1.0" encoding="utf-8"?>
<project name="SampleProject" default="main" basedir="C:/Dev/" xmlns="http://nant.sf.net/schemas/nant-0.85.win32.net-1.0.xsd">
    <description>Sample project for NAnt 0.85</description>

    <!-- Properties -->
    <property name="src.dir" value="Project/Function1_SRC/Module1" />
    <property name="obj.dir" value="Project/Function1_DLL" />
    <property name="module.name" value="Module1.dll" />
    <property name="solution.name"  value="Module1.sln" />
    <property name="vss.dir" value="//SERVER_NAME/VSS_DIR" />   <!-- srcsafe.iniがあるディレクトリ -->
    <property name="vss.usr" value="username" />
    <property name="vss.pwd" value="password" />

    <!-- Targets -->
    <target name="main" depends="" >
        <!-- VSSから最新版取得 -->
        <call target="update" />
        <!-- クリーン -->
        <call target="clean" />
        <!-- ビルド -->
        <call target="build" />
        <!-- オブジェクトをチェックアウト -->
        <call target="checkout" />
        <!-- オブジェクトをリリースディレクトリに移動 -->
        <call target="move" />
        <!-- オブジェクトをチェックイン -->
        <call target="checkin" />
    </target>

    <!-- VSSから最新版取得 -->
    <target name="update" depends="" >
        <vssget dbpath="${vss.dir}/srcsafe.ini"
                path="$/${src.dir}"
                password="${vss.pwd}"
                username="${vss.usr}"
                recursive="true"
                replace="true"
                localpath ="${src.dir}" />
    </target>

    <!-- クリーン -->
    <target name="clean" depends="" >
        <delete dir="${src.dir}/bin" />
        <delete dir="${src.dir}/obj" />
    </target>

    <!-- ビルド -->
    <target name="build" description="Build of the solution" depends="" >
        <solution configuration="release"
                  solutionfile="${src.dir}/${solution.name}"
                  failonerror="false" />
    </target>

    <!-- オブジェクトをチェックアウト -->
    <target name="checkout" depends="" >
        <vsscheckout  dbpath="${vss.dir}/srcsafe.ini"
                      path="$/${obj.dir}/${module.name}"
                      password="${vss.pwd}"
                      username="${vss.usr}"
                      localpath="${obj.dir}"
                      recursive="false"
                      writable="true" />
    </target>

    <!-- オブジェクトをリリースディレクトリに移動 -->
    <target name="move" depends="" >
        <copy file="${src.dir}/obj/Release/${module.name}"
              tofile="${obj.dir}/${module.name}" />
    </target>

    <!-- オブジェクトをチェックイン -->
    <target name="checkin" depends="" >
        <vsscheckin  dbpath="${vss.dir}/srcsafe.ini"
                      path="$/${obj.dir}/${module.name}"
                      password="${vss.pwd}"
                      username="${vss.usr}"
                      localpath="${obj.dir}/${module.name}"
                      recursive="false"
                      writable="false" />
    </target>
</project>