/// <summary> /// Updates an existing GitHub release. /// </summary> /// <param name="updateRelease">The updated release.</param> /// <param name="cancellationToken"> /// An optional token to monitor for cancellation requests. /// </param> /// <returns>The updated release.</returns> public async Task <Release> UpdateReleaseAsync( UpdateRelease updateRelease, CancellationToken cancellationToken = default) { var octokitRelease = updateRelease.Id.HasValue ? await _gitHubApi .UpdateReleaseAsync(updateRelease.Id.Value, updateRelease.OctokitUpdateRelease) .ConfigureAwait(false) : await _gitHubApi .UpdateReleaseAsync(updateRelease.CurrentTagName !, updateRelease.OctokitUpdateRelease) .ConfigureAwait(false); var release = new Release(octokitRelease); if (updateRelease.DeleteExistingAssets) { await _gitHubApi.DeleteAllAssetsAsync(octokitRelease.Id, cancellationToken) .ConfigureAwait(false); } foreach (var asset in updateRelease.NewAssets) { cancellationToken.ThrowIfCancellationRequested(); var octokitAsset = await _gitHubApi .UploadAssetAsync( octokitRelease, asset, overwriteExisting : updateRelease.OverwriteExistingAssets && !updateRelease.DeleteExistingAssets) .ConfigureAwait(false); release.AddAsset(new ReleaseAsset(octokitAsset)); } return(release); }