public void CanCreateBuildConfig()
        {
            var createProject = new CreateProject
            {
                Id   = projectWithBuild,
                Name = projectWithBuild,
            };
            var response          = Client.CreateProject(createProject);
            var createBuildConfig = new CreateBuildConfig
            {
                Locator = "id:" + createProject.Id,
                Name    = "BuildMe"
            };
            var buildConfigResponse = Client.CreateBuildConfig(createBuildConfig);

            Assert.That(buildConfigResponse, Is.Not.Null);
            Assert.That(buildConfigResponse.Name, Is.Not.Null);
            Assert.That(buildConfigResponse.AgentRequirementsResponse, Is.Not.Null);
            Assert.That(buildConfigResponse.ArtifactDependenciesResponse, Is.Not.Null);
            Assert.That(buildConfigResponse.Builds, Is.Not.Null);
            Assert.That(buildConfigResponse.FeaturesResponse, Is.Not.Null);
            Assert.That(buildConfigResponse.SettingsResponse, Is.Not.Null);
            Client.DeleteProject(new DeleteProject {
                Locator = "id:" + response.Id
            });
        }
 public void CanCreateBuildConfig()
 {
     var createProject = new CreateProject
     {
         Id = projectWithBuild,
         Name = projectWithBuild,
     };
     var response = Client.CreateProject(createProject);
     var createBuildConfig = new CreateBuildConfig
     {
         Locator = "id:" + createProject.Id,
         Name = "BuildMe"
     };
     var buildConfigResponse = Client.CreateBuildConfig(createBuildConfig);
     Assert.That(buildConfigResponse, Is.Not.Null);
     Assert.That(buildConfigResponse.Name, Is.Not.Null);
     Assert.That(buildConfigResponse.AgentRequirementsResponse, Is.Not.Null);
     Assert.That(buildConfigResponse.ArtifactDependenciesResponse, Is.Not.Null);
     Assert.That(buildConfigResponse.Builds, Is.Not.Null);
     Assert.That(buildConfigResponse.FeaturesResponse, Is.Not.Null);
     Assert.That(buildConfigResponse.SettingsResponse, Is.Not.Null);
     Client.DeleteProject(new DeleteProject { Locator = "id:" + response.Id });
 }
        public void CanCreateTechStacksBuildConfig()
        {
            var createProject = new CreateProject { Name = "TestTS" };
            var createProjResponse = Client.CreateProject(createProject);
            var createVcs = new CreateVcsRoot
            {
                Name = "GitHub_Test1",
                VcsName = VcsRootTypes.Git,
                Project = new CreateVcsRootProject { Id = createProjResponse.Id },
                Properties = new CreateVcsRootProperties
                {
                    Properties = new List<CreateVcsRootProperty>
                    {
                        new CreateVcsRootProperty
                        {
                            Name = "url",
                            Value = "https://github.com/ServiceStackApps/TechStacks.git"
                        },
                        new CreateVcsRootProperty
                        {
                            Name = "authMethod",
                            Value = "ANONYMOUS"
                        },
                        new CreateVcsRootProperty
                        {
                            Name = "branch",
                            Value = "refs/heads/master"
                        }
                    }
                }
            };

            var vcsResponse = Client.CreateVcsRoot(createVcs);

            var createEmptyBuild = new CreateBuildConfig {Locator = "id:" + createProjResponse.Id, Name = "Build"};
            var emptyBuildConfigResponse = Client.CreateBuildConfig(createEmptyBuild);
            var attachRequest = new AttachVcsEntries
            {
                BuildTypeLocator = "id:" + emptyBuildConfigResponse.Id,
                VcsRootEntries = new List<AttachVcsRootEntry>
                {
                    new AttachVcsRootEntry
                    {
                        Id = vcsResponse.Id,
                        VcsRoot = new AttachVcsRoot
                        {
                            Id = vcsResponse.Id
                        }
                    }
                }
            };
            var attachResponse = Client.AttachVcsEntries(attachRequest);

            //Create build steps
            var npmStepRequest = new CreateBuildStep
            {
                BuildTypeLocator = "id:" + emptyBuildConfigResponse.Id,
                Name = "NPM Install",
                TypeId = BuidStepTypes.Npm,
                StepProperties = new CreateTeamCityProperties
                {
                    Properties = new List<CreateTeamCityProperty>
                    {
                        new CreateTeamCityProperty
                        {
                            Name = "npm_commands",
                            Value = "install\ninstall bower\ninstall grunt\ninstall grunt-cli"
                        },
                        new CreateTeamCityProperty
                        {
                            Name = "teamcity.build.workingDir",
                            Value = "src/TechStacks/TechStacks"
                        },
                        new CreateTeamCityProperty
                        {
                            Name = "teamcity.step.mode",
                            Value = "default"
                        }
                    }
                }
            };

            var npmStepResponse = Client.CreateBuildStep(npmStepRequest);
        }
        public CreateSpaBuildProjectResponse Post(CreateSpaBuildProject request)
        {
            Log.Info(request.ToJson());
            var session     = SessionAs <AuthUserSession>();
            var gitHubToken = session.GetGitHubAccessToken();

            var createProjResponse = CreateTeamCityProject(request);

            var vcsResponse = CreateVcsRoot(request, createProjResponse, gitHubToken);

            try
            {
                if (!request.LocalOnlyApp)
                {
                    IisHelper.AddSite(request.Name, request.HostName);
                }
                else
                {
                    IisHelper.AddLocalOnlySite(request.Name, request.Port);
                }
            }
            catch (Exception e)
            {
                Log.Error(e.Message, e);
            }

            var createBuildConfig = new CreateBuildConfig
            {
                Locator = "id:" + createProjResponse.Id,
                Name    = "Build and Deploy"
            };
            var buildConfigResponse = TeamCityClient.CreateBuildConfig(createBuildConfig);

            TeamCityClient.UpdateBuildConfigParameters(new UpdateBuildConfigParameters
            {
                Locator    = "id:" + buildConfigResponse.Id,
                Properties = new List <CreateTeamCityBuildParameter>
                {
                    TeamCityRequestBuilder
                    .CreateTeamCityBuildParameter(buildConfigResponse.Id, "ss.msdeploy.serverAddress", "localhost",
                                                  "text validationMode='any' display='normal'"),
                    TeamCityRequestBuilder
                    .CreateTeamCityBuildParameter(buildConfigResponse.Id, "ss.msdeploy.iisApp", request.Name,
                                                  "text validationMode='any' display='normal'")
                }
            });

            TeamCityClient.UpdateBuildConfigSettings(new UpdateBuildConfigSetting
            {
                Locator   = "id:" + buildConfigResponse.Id,
                SettingId = "artifactRules",
                Value     = request.WorkingDirectory + "/wwwroot => " + request.WorkingDirectory + "/wwwroot"
            });

            AttachVcsToProject(buildConfigResponse, vcsResponse);
            CreateVcsTrigger(buildConfigResponse);

            CreateNpmInstallStep(request, buildConfigResponse);
            CreateBowerInstallStep(request, buildConfigResponse);
            CreateNuGetRestoreStep(request, buildConfigResponse);
            CreateGruntStep(request, buildConfigResponse);
            CreateCopyAppSettingsStep(request, buildConfigResponse);
            CreateWebDeployPackStep(request, buildConfigResponse);
            CreateWebDeployPushStep(request, buildConfigResponse);

            TeamCityClient.TriggerBuild(new TriggerBuild
            {
                TriggerBuildType = new TriggerBuildType
                {
                    Id = buildConfigResponse.Id
                }
            });

            return(new CreateSpaBuildProjectResponse
            {
                ProjectId = createProjResponse.Id
            });
        }
        public CreateSpaBuildProjectResponse Post(CreateSpaBuildProject request)
        {
            Log.Info(request.ToJson());
            var session = SessionAs<AuthUserSession>();
            var gitHubToken = session.GetGitHubAccessToken();

            var createProjResponse = CreateTeamCityProject(request);

            var vcsResponse = CreateVcsRoot(request, createProjResponse, gitHubToken);

            try
            {
                if(!request.LocalOnlyApp)
                    IisHelper.AddSite(request.Name, request.HostName);
                else
                    IisHelper.AddLocalOnlySite(request.Name, request.Port);
            }
            catch (Exception e)
            {
                Log.Error(e.Message, e);
            }

            var createBuildConfig = new CreateBuildConfig
            {
                Locator = "id:" + createProjResponse.Id,
                Name = "Build and Deploy"
            };
            var buildConfigResponse = TeamCityClient.CreateBuildConfig(createBuildConfig);

            TeamCityClient.UpdateBuildConfigParameters(new UpdateBuildConfigParameters
            {
                Locator = "id:" + buildConfigResponse.Id,
                Properties = new List<CreateTeamCityBuildParameter>
                {
                    TeamCityRequestBuilder
                        .CreateTeamCityBuildParameter(buildConfigResponse.Id, "ss.msdeploy.serverAddress", "localhost",
                            "text validationMode='any' display='normal'"),
                    TeamCityRequestBuilder
                        .CreateTeamCityBuildParameter(buildConfigResponse.Id, "ss.msdeploy.iisApp", request.Name,
                            "text validationMode='any' display='normal'")
                }
            });

            TeamCityClient.UpdateBuildConfigSettings(new UpdateBuildConfigSetting
            {
                Locator = "id:" + buildConfigResponse.Id,
                SettingId = "artifactRules",
                Value = request.WorkingDirectory + "/wwwroot => " + request.WorkingDirectory + "/wwwroot"
            });

            AttachVcsToProject(buildConfigResponse, vcsResponse);
            CreateVcsTrigger(buildConfigResponse);

            CreateNpmInstallStep(request, buildConfigResponse);
            CreateBowerInstallStep(request, buildConfigResponse);
            CreateNuGetRestoreStep(request, buildConfigResponse);
            CreateGruntStep(request, buildConfigResponse);
            CreateCopyAppSettingsStep(request, buildConfigResponse);
            CreateWebDeployPackStep(request, buildConfigResponse);
            CreateWebDeployPushStep(request, buildConfigResponse);

            TeamCityClient.TriggerBuild(new TriggerBuild
            {
                TriggerBuildType = new TriggerBuildType
                {
                    Id = buildConfigResponse.Id
                }
            });

            return new CreateSpaBuildProjectResponse
            {
                ProjectId = createProjResponse.Id
            };
        }
        public void CanCreateTechStacksBuildConfig()
        {
            var createProject = new CreateProject {
                Name = "TestTS"
            };
            var createProjResponse = Client.CreateProject(createProject);
            var createVcs          = new CreateVcsRoot
            {
                Name    = "GitHub_Test1",
                VcsName = VcsRootTypes.Git,
                Project = new CreateVcsRootProject {
                    Id = createProjResponse.Id
                },
                Properties = new CreateVcsRootProperties
                {
                    Properties = new List <CreateVcsRootProperty>
                    {
                        new CreateVcsRootProperty
                        {
                            Name  = "url",
                            Value = "https://github.com/ServiceStackApps/TechStacks.git"
                        },
                        new CreateVcsRootProperty
                        {
                            Name  = "authMethod",
                            Value = "ANONYMOUS"
                        },
                        new CreateVcsRootProperty
                        {
                            Name  = "branch",
                            Value = "refs/heads/master"
                        }
                    }
                }
            };

            var vcsResponse = Client.CreateVcsRoot(createVcs);

            var createEmptyBuild = new CreateBuildConfig {
                Locator = "id:" + createProjResponse.Id, Name = "Build"
            };
            var emptyBuildConfigResponse = Client.CreateBuildConfig(createEmptyBuild);
            var attachRequest            = new AttachVcsEntries
            {
                BuildTypeLocator = "id:" + emptyBuildConfigResponse.Id,
                VcsRootEntries   = new List <AttachVcsRootEntry>
                {
                    new AttachVcsRootEntry
                    {
                        Id      = vcsResponse.Id,
                        VcsRoot = new AttachVcsRoot
                        {
                            Id = vcsResponse.Id
                        }
                    }
                }
            };
            var attachResponse = Client.AttachVcsEntries(attachRequest);

            //Create build steps
            var npmStepRequest = new CreateBuildStep
            {
                BuildTypeLocator = "id:" + emptyBuildConfigResponse.Id,
                Name             = "NPM Install",
                TypeId           = BuidStepTypes.Npm,
                StepProperties   = new CreateTeamCityProperties
                {
                    Properties = new List <CreateTeamCityProperty>
                    {
                        new CreateTeamCityProperty
                        {
                            Name  = "npm_commands",
                            Value = "install\ninstall bower\ninstall grunt\ninstall grunt-cli"
                        },
                        new CreateTeamCityProperty
                        {
                            Name  = "teamcity.build.workingDir",
                            Value = "src/TechStacks/TechStacks"
                        },
                        new CreateTeamCityProperty
                        {
                            Name  = "teamcity.step.mode",
                            Value = "default"
                        }
                    }
                }
            };

            var npmStepResponse = Client.CreateBuildStep(npmStepRequest);
        }