public static IoTEdgeRelease Create(VstsRelease vstsRelease) => new IoTEdgeRelease( vstsRelease.Id, vstsRelease.DefinitionId, vstsRelease.Name, vstsRelease.WebUri, vstsRelease.Environments.Select(IoTEdgeReleaseEnvironment.Create).ToHashSet() );
public static IoTEdgeRelease Create(VstsRelease vstsRelease, string sourceBranch) => new IoTEdgeRelease( vstsRelease.Id, vstsRelease.DefinitionId, vstsRelease.Name, sourceBranch, vstsRelease.Status, vstsRelease.WebUri, vstsRelease.Environments.Select(IoTEdgeReleaseEnvironment.Create).ToHashSet() );
public async Task StartEnvironmentDeployment(VstsRelease vstsRelease, int releaseEnvironmentId) { ReleaseHttpClient releaseClient = _vssConnection.GetClient <ReleaseHttpClient>(); ReleaseEnvironmentUpdateMetadata releaseEnvironmentUpdateMetadata = new ReleaseEnvironmentUpdateMetadata() { Status = EnvironmentStatus.InProgress }; await releaseClient.UpdateReleaseEnvironmentAsync(releaseEnvironmentUpdateMetadata, _configuration.Value.ProjectName, vstsRelease.Id, releaseEnvironmentId); }
/// <summary> /// This method is used to get latest release result of given release definition Id and branch name with descending order. /// Reference: https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/list?view=azure-devops-rest-5.1 /// </summary> /// <param name="definitionId">release definition Ids</param> /// <param name="branchName">github repository branch name</param> /// <returns>List of IoT Edge releases</returns> public async Task <List <IoTEdgeRelease> > GetReleasesAsync(ReleaseDefinitionId definitionId, string branchName, int top = 200) { ValidationUtil.ThrowIfNullOrWhiteSpace(branchName, nameof(branchName)); ValidationUtil.ThrowIfNonPositive(top, nameof(top)); // TODO: need to think about how to handle unexpected exception during REST API call string requestPath = string.Format(ReleasePathSegmentFormat, this.accessSetting.Organization, this.accessSetting.Project); IFlurlRequest listReleasesRequest = DevOpsAccessSetting.ReleaseManagementBaseUrl .AppendPathSegment(requestPath) .SetQueryParam("definitionId", definitionId.IdString()) .SetQueryParam("queryOrder", "descending") .SetQueryParam("$top", top) .SetQueryParam("api-version", "5.1") .SetQueryParam("sourceBranchFilter", branchName) .WithBasicAuth(string.Empty, this.accessSetting.PersonalAccessToken); string releasesJson = await listReleasesRequest.GetStringAsync().ConfigureAwait(false); JObject releasesJObject = JObject.Parse(releasesJson); if (!releasesJObject.ContainsKey("count") || (int)releasesJObject["count"] <= 0) { return(new List <IoTEdgeRelease>()); } VstsRelease[] vstsReleases = JsonConvert.DeserializeObject <VstsRelease[]>(releasesJObject["value"].ToString()); var iotEdgeReleases = new List <IoTEdgeRelease>(); foreach (VstsRelease vstsRelease in vstsReleases) { IFlurlRequest getReleaseRequest = DevOpsAccessSetting.ReleaseManagementBaseUrl .AppendPathSegment(requestPath) .SetQueryParam("api-version", "5.1") .SetQueryParam("releaseId", vstsRelease.Id) .WithBasicAuth(string.Empty, this.accessSetting.PersonalAccessToken); string releaseJson = await getReleaseRequest.GetStringAsync().ConfigureAwait(false); try { VstsRelease releaseWithDetails = JsonConvert.DeserializeObject <VstsRelease>(releaseJson); iotEdgeReleases.Add(IoTEdgeRelease.Create(releaseWithDetails, branchName)); } catch (System.Exception ex) { // TODO: log exception Console.WriteLine(ex.ToString()); } } return(iotEdgeReleases); }
public async Task StartEnvironmentDeployment(VstsRelease vstsRelease, int releaseEnvironmentId) { await releaseClient.StartEnvironmentDeployment(vstsRelease, releaseEnvironmentId); }