Snippets

Denis Kuzmin Full script for assembling the vsSolutionBuildEvent v0.11

Created by Denis Kuzmin
#["
    Prepares data - versions, revBuild & information from git
"]

#[var tStart    = $([System.DateTime]::Parse("2015/01/15").ToBinary())]
#[var tNow      = $([System.DateTime]::UtcNow.Ticks)]
#[var revBuild  = $([System.TimeSpan]::FromTicks($([MSBuild]::Subtract($(tNow), $(tStart)))).TotalMinutes.ToString("0"))]

#[var tplVersion = #[File get("Version.tpl")]]

#[var pDir          = vsSolutionBuildEvent/]
#[var pDirBridge    = Bridge/]
#[var pDirCIM       = CI.MSBuild/]
#[var pDirDevenv    = Devenv/]
#[var pDirProvider  = Provider/]

#[var numSBE        = #[File get(".version")]]
#[var numBridge     = #[File get("#[var pDirBridge].version")]]
#[var numCIM        = #[File get("#[var pDirCIM].version")]]
#[var numDevenv     = #[File get("#[var pDirDevenv].version")]]
#[var numProvider   = #[File get("#[var pDirProvider].version")]]

#[" the 0 it's the reserved number for patches from external assemblies /see AssemblyInfo "]

#[var num0Bridge     = #[var numBridge].0]
#[var num0CIM        = #[var numCIM].0]
#[var num0Devenv     = #[var numDevenv].0]
#[var num0Provider   = #[var numProvider].0]
#[( #[File exists.directory(".git")] && #[File exists.file("git.exe", true)] )
{
    #[var branchSha1        = #[File sout("git", "rev-parse --short HEAD")]]
    #[var branchName        = #[File sout("git", "rev-parse --abbrev-ref HEAD")]]
    #[var branchRevCount    = #[File sout("git", "rev-list HEAD --count")]]
    
    #[var csVersion = $(tplVersion.Replace(%branchName%, "$(branchName)").Replace(%branchSha1%, "$(branchSha1)").Replace(%branchRevCount%, "$(branchRevCount)"))]
}
else {
    #[var csVersion = $(tplVersion.Replace(%branchName%, "-").Replace(%branchSha1%, "-").Replace(%branchRevCount%, "-"))]
}]


#["
    Updating version for 'vsSolutionBuildEvent'.
    
    Note:
    * For getting the main project path, sample:
                    #[var pDir = $($(ProjectDir:$(SolutionName)))]
"]

#[var cs        = $(csVersion.Replace(%Version%, "$(numSBE.Replace(".", ", ")), $(revBuild)").Replace(%namespace%, ""))]
#[var cs        = $(cs.Replace(%VersionRevString%, "$(numSBE).$(revBuild)").Replace(%VersionString%, "$(numSBE)"))]
#[File write("#[var pDir]Version.cs"):#[var cs]]


#["
    .vsixmanifest
"]

#[($(Configuration) ~= "_with_revision" || $(Configuration) ~= "CI_") {
    #[var numSBE = #[var numSBE].#[var revBuild]]
}]
#[File replace.Regexp("#[var pDir]/source.extension.vsixmanifest", "<Version>[0-9\.]+</Version>", "<Version>#[var numSBE]</Version>")]
#[" TODO: functions or templates (with delay of the evaluation)

 currently it's can be like this:

    #[var template =
        ##[var box = 
            #[var cs = $$(...)]
        ]
    ]
    #[var eval = #[var template]]
    
    however... inconvenient, not useful and unstable (not for all cases) ...
"]

#["
    Updating version for 'Bridge'.
"]

#[var cs    = $(csVersion.Replace(%Version%, "$(num0Bridge.Replace(".", ", ")), $(revBuild)").Replace(%namespace%, ".Bridge"))]
#[var cs    = $(cs.Replace(%VersionRevString%, "$(num0Bridge).$(revBuild)").Replace(%VersionString%, "$(num0Bridge)"))]
#[File write("#[var pDirBridge]Version.cs"):#[var cs]]

#["
    Updating version for 'CI.MSBuild'.
"]

#[var cs    = $(csVersion.Replace(%Version%, "$(num0CIM.Replace(".", ", ")), $(revBuild)").Replace(%namespace%, ".CI.MSBuild"))]
#[var cs    = $(cs.Replace(%VersionRevString%, "$(num0CIM).$(revBuild)").Replace(%VersionString%, "$(num0CIM)"))]
#[File write("#[var pDirCIM]Version.cs"):#[var cs]]

#["
    Updating version for 'Devenv'.
"]

#[var cs    = $(csVersion.Replace(%Version%, "$(num0Devenv.Replace(".", ", ")), $(revBuild)").Replace(%namespace%, ".Devenv"))]
#[var cs    = $(cs.Replace(%VersionRevString%, "$(num0Devenv).$(revBuild)").Replace(%VersionString%, "$(num0Devenv)"))]
#[File write("#[var pDirDevenv]Version.cs"):#[var cs]]

#["
    Updating version for 'Provider'.
"]

#[var cs    = $(csVersion.Replace(%Version%, "$(num0Provider.Replace(".", ", ")), $(revBuild)").Replace(%namespace%, ".Provider"))]
#[var cs    = $(cs.Replace(%VersionRevString%, "$(num0Provider).$(revBuild)").Replace(%VersionString%, "$(num0Provider)"))]
#[File write("#[var pDirProvider]Version.cs"):#[var cs]]
1
2
3
#[($(Configuration) ~= "Release" && !$(Configuration) ~= "CI_") {
    #[DTE exec: Test.RunAllTestsInSolution]
}]
#[var appzip    = $(SolutionDir)bin/7z/7za.exe]
#[var odir      = $(SolutionDir)bin/Releases/]
#[var cfg       = #[($(Configuration) ~= "Release"){Release}else{Debug}]]
#[var cfgFull   = $(Configuration)]

#[var netStamp      = net$(TargetFrameworkVersion.Replace(".", "").Replace("v", ""))]
#[var netVerString  = $(TargetFrameworkVersion)#[($(TargetFrameworkVersion) != v4.0){ (be careful - need a v4.0 to compatibility with VS2010)}]]

#[File sout("cmd", "/C mkdir \"#[var odir]\" 2>&1")]
#[File sout("cmd", "/C del /F/Q \"#[var odir]\" 2>&1")]
#[File write("#[var odir]/Release_notes.txt"):This assembled from:

* Configuration:   '#[var cfgFull]' (Folders: #[var cfg])
* .NET version:     #[var netVerString];
* Build number:     #[var revBuild];
* Branch Sha1:      #[var branchSha1];
* Branch Name:      #[var branchName];
* Branch revCount:  #[var branchRevCount];
------------------------------------------

Versions:

* The 'Bridge':                 v#[var numBridge];
* The 'CI.MSBuild':             v#[var numCIM];
* The 'Devenv':                 v#[var numDevenv];
* The 'Provider':               v#[var numProvider];
* The 'vsSolutionBuildEvent':   v#[var numSBE];

------------------------------------------
\t\t\t\t\t Generated by vsSolutionBuildEvent
]
#[File sout("cmd", "/C cd \"#[var pDirBridge]bin/#[var cfg]/\" & \"#[var appzip]\" a \"#[var odir]Bridge_v#[var numBridge]_[#[var branchSha1]][#[var netStamp]].zip\" *.*")]
#[File sout("cmd", "/C cd \"#[var pDirCIM]bin/#[var cfg]/\" & \"#[var appzip]\" a \"#[var odir]CI.MSBuild_v#[var numCIM]_[#[var branchSha1]][#[var netStamp]].zip\" *.*")]
1
2
3
#[File sout("cmd", "/C cd \"#[var pDirDevenv]bin/#[var cfg]/\" & xcopy *.dll Devenv /Y/R/I & xcopy *.pdb Devenv /Y/R/I")]

#[File sout("cmd", "/C cd \"#[var pDirDevenv]bin/#[var cfg]/\" & \"#[var appzip]\" a \"#[var odir]Devenv_v#[var numDevenv]_[#[var branchSha1]][#[var netStamp]].zip\" Devenv.AddIn Devenv/*.*")]
#[File sout("cmd", "/C cd \"#[var pDirProvider]bin/#[var cfg]/\" & \"#[var appzip]\" a \"#[var odir]Provider_v#[var numProvider]_[#[var branchSha1]][#[var netStamp]].zip\" *.*")]
#[File sout("cmd", "/C cd \"#[var pDir]bin/#[var cfg]/\" & copy vsSolutionBuildEvent.vsix \"#[var odir]vsSolutionBuildEvent_v#[var numSBE]_[#[var branchSha1]][#[var netStamp]].vsix\"")]
1
2
3
4
5
6
#[($(Configuration) ~= "Release" && !$(Configuration) ~= "CI_") {
    #[var numCIMPackage = $([MSBuild]::Add(#[File sout("cmd", "/C .nuget\nuget.exe list vsSBE.CI.MSBuild | grep 'vsSBE.CI.MSBuild' | sed -r 's/^.*\s[0-9]+\.[0-9]+\.//'")], 1))]
}
else{
    #[var numCIMPackage = 0]
}]
#[var tplNuspecCIM  = #[File get("vsSBE.CI.MSBuild.nuspec.tpl")]]
#[var nupCIMdir     = $(odir)NuGet-CI.MSBuild-package]

#[File sout("cmd", "/C mkdir \"#[var nupCIMdir]\" 2>&1")]
#[File sout("cmd", "/C del /F/Q \"#[var nupCIMdir]\" & del /F/Q \"#[var nupCIMdir]\bin\" 2>&1")]

#[var nuspecCIM = $(tplNuspecCIM.Replace(%CIMVersion%, "$(numCIM)").Replace(%PackageVersion%, "").Replace(%vsSBEVersion%, "$(numSBE)"))]
#[File write("#[var nupCIMdir]\vsSBE.CI.MSBuild.nuspec"):#[var nuspecCIM]]

#[" files for package "]

#[File sout("cmd", "/C cd \"#[var pDir]bin/#[var cfg]/\" & xcopy *.dll \"#[var nupCIMdir]\bin\" /Y/R/I & xcopy NLog.dll.nlog \"#[var nupCIMdir]\bin\" /Y/R/I")]
#[File sout("cmd", "/C cd \"#[var pDirCIM]bin/#[var cfg]/\" & xcopy *.dll \"#[var nupCIMdir]\bin\" /Y/R/I")]
#[File scall(".nuget\nuget.exe", "pack \"#[var nupCIMdir]\vsSBE.CI.MSBuild.nuspec\" -OutputDirectory \"#[var nupCIMdir]\..\" -NonInteractive")]

Comments (1)

  1. Denis Kuzmin

    script file: https://bitbucket.org/3F/vssolutionbuildevent/src/master/.vssbe

    Results for samples:

    _

    This assembled from:
    
    * Configuration:   'CI_Debug' (Folders: Debug)
    * .NET version:     v4.0;
    * Build number:     47103;
    * Branch Sha1:      399a7e8;
    * Branch Name:      master;
    * Branch revCount:  212;
    ------------------------------------------
    
    Versions:
    
    * The 'Bridge':                 v1.0;
    * The 'CI.MSBuild':             v1.0;
    * The 'Devenv':                 v1.0;
    * The 'Provider':               v1.0;
    * The 'vsSolutionBuildEvent':   v0.11.3.47103;
    
    ------------------------------------------
                         Generated by vsSolutionBuildEvent
    
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.