Skip to content

Commit

Permalink
feat(polymer): add polymer install and build (#118) (#119)
Browse files Browse the repository at this point in the history
* automatically detect polymer.json
* detect polymer-cli and bower-cli from node_modules if not installed globally
* execute npm install
* execute bower install
* execute polymer install
* execute polymer build
* copy polymer output to artifacts/build
* add test project for npm, bower, and polymer-cli

Closes: #105
  • Loading branch information
dmccaffery committed Sep 6, 2017
1 parent ef38da4 commit 34af95c
Show file tree
Hide file tree
Showing 36 changed files with 1,192 additions and 36 deletions.
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ indent_size = 4
char_set = utf-8
insert_final_newline = true

[*.{js,json,targets}]
[*.{js,json,targets,html}]
indent_size = 2
7 changes: 6 additions & 1 deletion appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
version: 1.0.{build}
environment:
nodejs_version: ''

pull_requests:
do_not_increment_build_number: true
branches:
Expand All @@ -12,11 +15,13 @@ cache:
- '%USERPROFILE%\.nuget'
- '%USERPROFILE%\.am'
- '%LOCALAPPDATA%\Microsoft\dotnet'
install:
- ps: Install-Product node $env:nodejs_version
build_script:
- cmd: condo.cmd -- /t:ci
test: off
skip_commits:
message: "***NO_CI***"
message: '***NO_CI***'
notifications:
- provider: Webhook
url: https://webhooks.gitter.im/e/c731d7b3fd486219480c
Expand Down
2 changes: 2 additions & 0 deletions condo.build
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
<License>MIT</License>
<LicenseUri>https://opensource.org/licenses/MIT</LicenseUri>
<GitHubPages>true</GitHubPages>

<TestPurposeExclude>None</TestPurposeExclude>
</PropertyGroup>

<Import Project="$(CondoTargetsPath)\Lifecycle.targets" />
Expand Down
2 changes: 0 additions & 2 deletions src/AM.Condo.ChangeLog/AM.Condo.ChangeLog.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
<PackageReference Include="System.Diagnostics.Process" Version="[4.3.0, 5.0.0)" />
<PackageReference Include="Handlebars.NetStandard" Version="[1.8.1, 2.0.0)" />
<PackageReference Include="Newtonsoft.Json" Version="[9.0.1, 11.0.0)" />

<PackageReference Include="Newtonsoft.Json" Version="[10.0.2, 11.0.0)" />
<PackageReference Include="StyleCop.Analyzers" Version="[1.0.2, 2.0.0)">
<PrivateAssets>All</PrivateAssets>
</PackageReference>
Expand Down
29 changes: 27 additions & 2 deletions src/AM.Condo/Targets/Compile.targets
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,44 @@
</ItemGroup>

<Copy
SourceFiles="@(_CopyDotNetBuild)"
DestinationFiles="@(_CopyDotNetBuild->'$(BuildArtifactsRoot)$(slash)%(ProjectName)$(slash)%(RecursiveDir)%(Filename)%(Extension)')" />
SourceFiles="@(_CopyDotNetBuild)"
DestinationFiles="@(_CopyDotNetBuild->'$(BuildArtifactsRoot)$(slash)%(ProjectName)$(slash)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>

<Target Name="PolymerBuild" Condition=" $(PolymerBuild) ">
<PropertyGroup>
<PolymerBuildPreset Condition=" '$(PolymerBuildPreset)' == '' ">$(POLYMER_BUILD_PRESET)</PolymerBuildPreset>
<PolymerBuildOptions Condition=" '$(PolymerBuildOptions)' == '' ">$(POLYMER_BUILD_OPTIONS)</PolymerBuildOptions>
<PolymerBuildOptions Condition=" '$(PolymerBuildPreset)' != '' ">$(PolymerBuildOptions.Trim()) --preset $(PolymerBuildPreset)</PolymerBuildOptions>
</PropertyGroup>

<Exec Command="&quot;$(PolymerPath)&quot; build $(PolymerBuildOptions)"
WorkingDirectory="%(PolymerJsonProjects.ProjectDir)" />
</Target>

<Target Name="CopyPolymerBuild" Condition=" $(PolymerBuild) ">
<ItemGroup>
<_CopyPolymerBuild Include="%(PolymerJsonProjects.ProjectDir)build$(Slash)**">
<ProjectName>%(PolymerJsonProjects.ProjectName)</ProjectName>
</_CopyPolymerBuild>
</ItemGroup>

<Copy
SourceFiles="@(_CopyPolymerBuild)"
DestinationFiles="@(_CopyPolymerBuild->'$(BuildArtifactsRoot)$(slash)%(ProjectName)$(slash)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>

<PropertyGroup>
<AfterCompile>
$(AfterCompile);
CopyDotNetBuild;
CopyPolymerBuild;
</AfterCompile>

<CompileDependsOn>
$(BeforeCompile);
DotNetBuild;
PolymerBuild;
$(CompileDependsOn);
$(AfterCompile);
</CompileDependsOn>
Expand Down
13 changes: 6 additions & 7 deletions src/AM.Condo/Targets/Initialize.targets
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,7 @@
</PropertyGroup>

<ItemGroup>
<!-- locate all npm, bower, gulp, and grunt projects -->
<NpmInstallPaths Include="$(RepositoryRoot)$(Slash)**$(Slash)package.json" />
<BowerInstallPaths Include="$(RepositoryRoot)$(Slash)**$(Slash)bower.json" />
<GulpPaths Include="$(RepositoryRoot)$(Slash)**$(Slash)gulpfile.*" />
<GruntPaths Include="$(RepositoryRoot)$(Slash)**$(Slash)gruntfile.*" />
<!-- locate submodule paths -->
<SubmodulePaths Include="$(RepositoryRoot)$(Slash).gitmodules" />

<!-- add prefixes to well-known authenticated feeds -->
Expand All @@ -108,13 +104,16 @@
<!-- attempt to find docker info -->
<Target Name="GetDockerInfo">
<FindCommand Command="docker">
<Output TaskParameter="Path" PropertyName="DockerPath" />
<Output TaskParameter="ExecutablePath" PropertyName="DockerPath" />
<Output TaskParameter="Exists" PropertyName="HasDocker" />
</FindCommand>

<ItemGroup>
<DockerComposeFiles Include="$(DockerRoot)docker-compose.*" Exclude="$(DockerRoot)docker-compose.debug.*" />
<DockerComposePaths Include="$(DockerRoot)docker-compose.*" Exclude="$(DockerRoot)docker-compose.debug.*" />
</ItemGroup>

<Warning Condition="!$(HasDocker) AND '$(DockerComposePaths->Count())' != '0' "
Text="A docker-compose file was located at: %(DockerComposePaths.Identity), but the docker command or executable could not be found." />
</Target>

<!-- get repository information -->
Expand Down
176 changes: 163 additions & 13 deletions src/AM.Condo/Targets/Prepare.targets
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<NpmInstallOptions Condition=" '$(NpmInstallOptions)' == '' ">$(NPM_INSTALL_OPTIONS)</NpmInstallOptions>
<BowerInstallOptions Condition=" '$(BowerInstallOptions)' == '' ">$(BOWER_INSTALL_OPTIONS)</BowerInstallOptions>

<DotNetRestoreProperties Condition=" '$(DotNetRestoreProperties)' == '' ">$(DOTNET_RESTORE_PROPS)</DotNetRestoreProperties>
</PropertyGroup>

<Target Name="DotNetRestore" Condition=" '$(DotNetRestore)' != 'skip' AND '@(DotNetRestorePaths->Count())' != '0' ">
<PropertyGroup>
<DotNetRestoreProperties Condition=" '$(DotNetRestoreProperties)' == '' ">$(DOTNET_RESTORE_PROPS)</DotNetRestoreProperties>

<DotNetRestoreOptions Condition=" '$(DotNetRestoreOptions)' == '' ">$(DOTNET_RESTORE_OPTIONS)</DotNetRestoreOptions>
<DotNetRestoreOptions>$(DotNetRestoreOptions.Trim()) --ignore-failed-sources</DotNetRestoreOptions>
<DotNetRestoreOptions Condition=" '$(NuGetConfigPath)' != '' ">$(DotNetRestoreOptions.Trim()) --configfile &quot;$(NuGetConfigPath)&quot;</DotNetRestoreOptions>
Expand All @@ -30,14 +25,165 @@
WorkingDirectory="%(_DotNetRestore.WorkingDirectory)" />
</Target>

<Target Name="NpmInstall" Condition=" '$(NpmInstall)' != 'skip' AND '@(NpmInstallPaths->Count())' != '0' ">
<Exec Command="npm install $(NpmInstallOptions.Trim())"
WorkingDirectory="%(NpmInstallPaths.RootDir)%(NpmInstallPaths.Directory)" />
<!-- attempt to find npm paths -->
<Target Name="GetNpmInfo">
<FindCommand Command="npm">
<Output TaskParameter="ExecutablePath" PropertyName="NpmPath" />
<Output TaskParameter="Exists" PropertyName="HasNpm" />
</FindCommand>

<ItemGroup>
<PackageJsonPaths
Include="$(RepositoryRoot)$(Slash)**$(Slash)package.json"
Exclude="$(RepositoryRoot)$(Slash)**$(Slash)node_modules$(Slash)**$(Slash)package.json;$(RepositoryRoot)$(Slash)**$(Slash)bower_components$(Slash)**$(Slash)package.json" />

<FindCommandSearchPaths Include="%(PackageJsonPaths.RootDir)%(PackageJsonPaths.Directory)$(Slash)node_modules$(Slash).bin$(Slash)" />
</ItemGroup>

<PropertyGroup>
<NpmRequired>False</NpmRequired>
<NpmRequired Condition=" @(PackageJsonPaths->Count()) > 0 ">True</NpmRequired>

<NpmInstall Condition=" '$(NpmInstall)' != '' AND '$(NpmInstall.ToLower())' != 'true' ">False</NpmInstall>
<NpmInstall Condition=" '$(NpmInstall)' == '' AND $(HasNpm) AND $(NpmRequired) ">True</NpmInstall>
<NpmInstall Condition=" '$(NpmInstall)' == '' ">False</NpmInstall>
</PropertyGroup>

<Warning Condition=" !$(HasNpm) AND $(NpmRequired) "
Text="A package.json file was located at: %(PackageJsonPaths.Identity), but the npm command or executable could not be found." />
</Target>

<Target Name="BowerInstall" Condition=" '$(BowerInstall)' != 'skip' AND '@(BowerInstallPaths->Count())' != '0' ">
<Exec Command="bower install $(BowerInstallOptions.Trim())"
WorkingDirectory="%(BowerInstallPaths.RootDir)%(BowerInstallPaths.Directory)" />
<Target Name="NpmInstall" Condition=" $(NpmInstall) ">
<PropertyGroup>
<NpmInstallOptions Condition=" '$(NpmInstallOptions)' == '' ">$(NPM_INSTALL_OPTIONS)</NpmInstallOptions>
</PropertyGroup>

<GetProjectMetadata Projects="@(PackageJsonPaths)">
<Output TaskParameter="Projects" ItemName="PackageJsonProjects" />
</GetProjectMetadata>

<Exec Command="&quot;$(NpmPath)&quot; set progress=false" />

<Exec Command="&quot;$(NpmPath)&quot; install $(NpmInstallOptions.Trim())"
WorkingDirectory="%(PackageJsonProjects.ProjectDir)" />
</Target>

<!-- attempt to find bower and bower paths -->
<Target Name="GetBowerInfo">
<FindCommand Command="bower" SearchPaths="@(FindCommandSearchPaths)">
<Output TaskParameter="ExecutablePath" PropertyName="BowerPath" />
<Output TaskParameter="Exists" PropertyName="HasBower" />
</FindCommand>

<ItemGroup>
<BowerJsonPaths
Include="$(RepositoryRoot)$(Slash)**$(Slash)bower.json"
Exclude="$(RepositoryRoot)$(Slash)**$(Slash)node_modules$(Slash)**$(Slash)bower.json;$(RepositoryRoot)$(Slash)**$(Slash)bower_components$(Slash)**$(Slash)bower.json" />
</ItemGroup>

<PropertyGroup>
<BowerRequired>False</BowerRequired>
<BowerRequired Condition=" @(BowerJsonPaths->Count()) > 0 ">True</BowerRequired>

<BowerInstall Condition=" '$(BowerInstall)' != '' AND '$(BowerInstall.ToLower())' != 'true' ">False</BowerInstall>
<BowerInstall Condition=" '$(BowerInstall)' == '' AND $(HasBower) AND $(BowerRequired) ">True</BowerInstall>
<BowerInstall Condition=" '$(BowerInstall)' == '' ">False</BowerInstall>
</PropertyGroup>

<Warning Condition=" !$(HasBower) AND $(BowerRequired) "
Text="A bower.json file was located at: %(BowerJsonPaths.Identity), but the bower command or executable could not be found." />
</Target>

<Target Name="BowerInstall" Condition=" $(BowerInstall) ">
<PropertyGroup>
<BowerInstallOptions Condition=" '$(BowerInstallOptions)' == '' ">$(BOWER_INSTALL_OPTIONS)</BowerInstallOptions>
</PropertyGroup>

<GetProjectMetadata Projects="@(BowerJsonPaths)">
<Output TaskParameter="Projects" ItemName="BowerJsonProjects" />
</GetProjectMetadata>

<Exec Command="&quot;$(BowerPath)&quot; install $(BowerInstallOptions.Trim())"
WorkingDirectory="%(BowerJsonProjects.ProjectDir)" />
</Target>

<!-- attempt to find polymer and polymer paths -->
<Target Name="GetPolymerInfo">
<FindCommand Command="polymer" SearchPaths="@(FindCommandSearchPaths)">
<Output TaskParameter="ExecutablePath" PropertyName="PolymerPath" />
<Output TaskParameter="Exists" PropertyName="HasPolymer" />
</FindCommand>

<ItemGroup>
<PolymerJsonPaths
Include="$(RepositoryRoot)$(Slash)**$(Slash)polymer.json"
Exclude="$(RepositoryRoot)$(Slash)**$(Slash)node_modules$(Slash)**$(Slash)polymer.json;$(RepositoryRoot)$(Slash)**$(Slash)bower_components$(Slash)**$(Slash)polymer.json;$(RepositoryRoot)$(Slash)**$(Slash)build$(Slash)polymer.json" />
</ItemGroup>

<PropertyGroup>
<PolymerRequired>False</PolymerRequired>
<PolymerRequired Condition=" @(PolymerJsonPaths->Count()) > 0 ">True</PolymerRequired>

<PolymerInstall Condition=" '$(PolymerInstall)' != '' AND '$(PolymerInstall.ToLower())' != 'true' ">False</PolymerInstall>
<PolymerInstall Condition=" '$(PolymerInstall)' == '' AND $(HasPolymer) AND $(PolymerRequired) ">True</PolymerInstall>
<PolymerInstall Condition=" '$(PolymerInstall)' == '' ">False</PolymerInstall>

<PolymerBuild Condition=" '$(PolymerBuild)' != '' AND '$(PolymerBuild.ToLower())' != 'true' ">False</PolymerBuild>
<PolymerBuild Condition=" '$(PolymerBuild)' == '' ">$(PolymerInstall)</PolymerBuild>

<PolymerTest Condition=" '$(PolymerTest)' != '' AND '$(PolymerTest.ToLower())' != 'true' ">False</PolymerTest>
<PolymerTest Condition=" '$(PolymerTest)' == '' ">$(PolymerBuild)</PolymerTest>
</PropertyGroup>

<Warning Condition=" !$(HasPolymer) AND $(PolymerRequired) "
Text="A polymer.json file was located at: %(PolymerJsonPaths.Identity), but the polymer command or executable could not be found." />
</Target>

<Target Name="PolymerInstall" Condition=" $(PolymerInstall) ">
<PropertyGroup>
<PolymerInstallOptions Condition=" '$(PolymerInstallOptions)' == '' ">$(POLYMER_INSTALL_OPTIONS)</PolymerInstallOptions>
</PropertyGroup>

<GetProjectMetadata Projects="@(PolymerJsonPaths)">
<Output TaskParameter="Projects" ItemName="PolymerJsonProjects" />
</GetProjectMetadata>

<Exec Command="&quot;$(PolymerPath)&quot; install $(PolymerInstallOptions.Trim())"
WorkingDirectory="%(PolymerJsonProjects.ProjectDir)" />
</Target>

<!-- attempt to find gulp and gulp paths -->
<Target Name="GetGulpInfo">
<FindCommand Command="gulp" SearchPaths="@(FindCommandSearchPaths)">
<Output TaskParameter="ExecutablePath" PropertyName="GulpPath" />
<Output TaskParameter="Exists" PropertyName="HasGulp" />
</FindCommand>

<ItemGroup>
<GulpFilePaths
Include="$(RepositoryRoot)$(Slash)**$(Slash)gulpfile.*"
Exclude="$(RepositoryRoot)$(Slash)**$(Slash)node_modules$(Slash)**$(Slash)gulpfile.*;$(RepositoryRoot)$(Slash)**$(Slash)bower_components$(Slash)**$(Slash)gulpfile.*" />
</ItemGroup>

<Warning Condition="!$(HasGulp) AND '$(GulpFilePaths->Count())' != '0' "
Text="A gulpfile was located at: %(GulpFilePaths.Identity), but the gulp command or executable could not be found." />
</Target>

<!-- attempt to find grunt and grunt paths -->
<Target Name="GetGruntInfo">
<FindCommand Command="grunt" SearchPaths="@(FindCommandSearchPaths)">
<Output TaskParameter="ExecutablePath" PropertyName="GruntPath" />
<Output TaskParameter="Exists" PropertyName="HasGrunt" />
</FindCommand>

<ItemGroup>
<GruntFilePaths
Include="$(RepositoryRoot)$(Slash)**$(Slash)gruntfile.*"
Exclude="$(RepositoryRoot)$(Slash)**$(Slash)node_modules$(Slash)**$(Slash)gruntfile.*;$(RepositoryRoot)$(Slash)**$(Slash)bower_components$(Slash)**$(Slash)gruntfile.*" />
</ItemGroup>

<Warning Condition="!$(HasGrunt) AND '$(GruntFilePaths->Count())' != '0' "
Text="A gruntfile was located at: %(GruntFilePaths.Identity), but the grunt command or executable could not be found." />
</Target>

<Target Name="SubmoduleRestore" Condition=" '$(SubmoduleRestore)' != 'skip' AND '@(SubmodulePaths->Count())' != '0' AND $(HasGit) ">
Expand All @@ -51,8 +197,12 @@
<PropertyGroup>
<RestoreDependsOn>
$(BeforeRestore);
GetNpmInfo;
NpmInstall;
GetBowerInfo;
BowerInstall;
GetPolymerInfo;
PolymerInstall;
DotNetRestore;
$(RestoreDependsOn);
$(AfterRestore);
Expand Down
Loading

0 comments on commit 34af95c

Please sign in to comment.