Skip to content

Commit

Permalink
Merge pull request #36348 from dotnet/main
Browse files Browse the repository at this point in the history
  • Loading branch information
BillWagner committed Jul 21, 2023
2 parents 8db60b1 + 229510e commit 4921da3
Show file tree
Hide file tree
Showing 46 changed files with 1,323 additions and 289 deletions.
109 changes: 31 additions & 78 deletions .github/workflows/version-sweep.yml
Original file line number Diff line number Diff line change
@@ -1,84 +1,37 @@
# This is a basic workflow to help you get started with Actions

name: "target supported version"

# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the default branch
schedule:
- cron: "0 0 1 * *"
workflow_dispatch:
inputs:
reason:
description: "The reason for running the workflow"
required: true
default: "Manual run"
support:
description: "The support level to target (STS, LTS, or Preview)."
required: true
default: "STS"
# Triggers the workflow on push or pull request events but only for the default branch
schedule:
- cron: "0 0 1 * *"
workflow_dispatch:
inputs:
reason:
description: "The reason for running the workflow"
required: true
default: "Manual run"
support:
description: "The support level to target (STS, LTS, or Preview)."
required: true
default: "STS"

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
version-sweep:
# The type of runner that the job will run on
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9

# Runs a single command using the runners shell
- name: "Print manual run reason"
if: ${{ github.event_name == 'workflow_dispatch' }}
run: |
echo 'Reason: ${{ github.event.inputs.reason }}'
# Start the .NET version sweeper, scan projects/slns for non-LTS (or currrent) versions
- name: .NET version sweeper
id: dotnet-version-sweeper
uses: dotnet/versionsweeper@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
owner: ${{ github.repository_owner }}
name: ${{ github.repository }}
branch: ${{ github.ref }}

- name: Create pull requests
if: steps.dotnet-version-sweeper.outputs.has-remaining-work == 'true'
run: |
upgradeProjects: ${{ steps.dotnet-version-sweeper.outputs.upgradeProjects }}
# Install .NET Upgrade Assistant global tool
dotnet tool install --global upgrade-assistant
# Iterate all upgrade projects
for projectDir in "${upgradeProjects[@]}"; do
echo "Project Directory: $projectDir"
# Create a new branch
git checkout -b upgrade/$projectDir
# Perform the upgrade using upgrade-assistant
upgrade-assistant upgrade "$projectDir" --non-interactive -t ${{ inputs.support }}
# Commit the changes
git add .
git commit -m ".NET Version Sweeper: Upgraded $projectDir"
# Push the branch to the repository
git push origin upgrade/$projectDir
# Create a pull request
gh pr create \
--base main \
--head upgrade/$projectDir \
--title "Upgraded $projectDir" \
--body "Proposed upgrade for $projectDir"
done
# This workflow contains a single job called "build"
version-sweep:
# The type of runner that the job will run on
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write

# Steps represent a sequence of tasks that will be executed as part of the job
steps:

# Start the .NET version updater action
# A composite of the .NET Version Sweeper and the .NET Upgrade Assistant
- name: .NET version updater
id: dotnet-version-updater
uses: dotnet/docs-tools/actions/dotnet-version-updater@main
with:
support: ${{ github.event.inputs.support }}
2 changes: 2 additions & 0 deletions docs/azure/TOC.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@
href: ./sdk/logging.md
- name: Pagination
href: ./sdk/pagination.md
- name: Unit testing and mocking
href: ./sdk/unit-testing-mocking.md
- name: Configure a proxy server
href: ./sdk/azure-sdk-configure-proxy.md
- name: Packages list
Expand Down
2 changes: 1 addition & 1 deletion docs/azure/includes/dotnet-all.md
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@
| Microsoft.Azure.Functions.Worker.Extensions.SignalRService | NuGet [1.10.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.SignalRService/1.10.0) | | |
| Microsoft.Azure.Functions.Worker.Extensions.Sql | NuGet [3.0.181-preview](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Sql/3.0.181-preview) | | |
| Microsoft.Azure.Functions.Worker.Extensions.Storage | NuGet [5.1.2](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Storage/5.1.2)<br>NuGet [5.1.3-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Storage/5.1.3-preview1) | | |
| Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs | NuGet [5.1.2](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs/5.1.2)<br>NuGet [5.1.3-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs/5.1.3-preview1) | | |
| Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs | NuGet [6.0.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs/6.0.0) | | |
| Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues | NuGet [5.1.2](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues/5.1.2)<br>NuGet [5.1.3-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues/5.1.3-preview1) | | |
| Microsoft.Azure.Functions.Worker.Extensions.Storage.Tables | NuGet [1.0.0-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Storage.Tables/1.0.0-preview1) | | |
| Microsoft.Azure.Functions.Worker.Extensions.Tables | NuGet [1.0.0](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Tables/1.0.0)<br>NuGet [1.2.0-preview1](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Tables/1.2.0-preview1) | | |
Expand Down
4 changes: 2 additions & 2 deletions docs/azure/includes/dotnet-new.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
| Purview Administration | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Azure.Analytics.Purview.Administration/1.0.0-beta.1) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Administration-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Administration_1.0.0-beta.1/sdk/purview/Azure.Analytics.Purview.Administration/) |
| Purview Catalog | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Azure.Analytics.Purview.Catalog/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Catalog-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Catalog_1.0.0-beta.4/sdk/purview/Azure.Analytics.Purview.Catalog/) |
| Purview Scanning | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.Analytics.Purview.Scanning/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Scanning-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Scanning_1.0.0-beta.2/sdk/purview/Azure.Analytics.Purview.Scanning/) |
| Purview Share | NuGet [1.0.3-beta.20](https://www.nuget.org/packages/Azure.Analytics.Purview.Share/1.0.3-beta.20) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Share-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.3-beta.20](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Share_1.0.3-beta.20/sdk/purview/Azure.Analytics.Purview.Share/) |
| Purview Share | NuGet [1.0.3-beta.20](https://www.nuget.org/packages/Azure.Analytics.Purview.Share/1.0.3-beta.20) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Share-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.3-beta.20](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Share_1.0.3-beta.20/sdk/purview/Azure.Analytics.Purview.Share) |
| Purview Sharing | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.Analytics.Purview.Sharing/1.0.0-beta.3) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Sharing-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Sharing_1.0.0-beta.3/sdk/purview/Azure.Analytics.Purview.Sharing/) |
| Purview Workflow | NuGet [1.0.0-beta.1](https://www.nuget.org/packages/Azure.Analytics.Purview.Workflows/1.0.0-beta.1) | [docs](/dotnet/api/overview/azure/Analytics.Purview.Workflows-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.Analytics.Purview.Workflows_1.0.0-beta.1/sdk/purview/Azure.Analytics.Purview.Workflows/) |
| Question Answering | NuGet [1.1.0](https://www.nuget.org/packages/Azure.AI.Language.QuestionAnswering/1.1.0) | [docs](/dotnet/api/overview/azure/AI.Language.QuestionAnswering-readme) | GitHub [1.1.0](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Language.QuestionAnswering_1.1.0/sdk/cognitivelanguage/Azure.AI.Language.QuestionAnswering/) |
Expand Down Expand Up @@ -181,7 +181,7 @@
| Resource Management - Hybrid Compute | NuGet [1.0.0-beta.4](https://www.nuget.org/packages/Azure.ResourceManager.HybridCompute/1.0.0-beta.4) | [docs](/dotnet/api/overview/azure/ResourceManager.HybridCompute-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.4](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridCompute_1.0.0-beta.4/sdk/hybridcompute/Azure.ResourceManager.HybridCompute/) |
| Resource Management - Hybrid Connectivity | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.HybridConnectivity/1.0.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.HybridConnectivity-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridConnectivity_1.0.0-beta.3/sdk/hybridconnectivity/Azure.ResourceManager.HybridConnectivity/) |
| Resource Management - Hybrid Container Service | NuGet [1.0.0-beta.2](https://www.nuget.org/packages/Azure.ResourceManager.HybridContainerService/1.0.0-beta.2) | [docs](/dotnet/api/overview/azure/ResourceManager.HybridContainerService-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.2](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridContainerService_1.0.0-beta.2/sdk/hybridaks/Azure.ResourceManager.HybridContainerService/) |
| Resource Management - Hybrid Data | NuGet [1.0.1](https://www.nuget.org/packages/Azure.ResourceManager.HybridData/1.0.1)<br>NuGet [1.1.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.HybridData/1.1.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.HybridData-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridData_1.0.1/sdk/hybriddatamanager/Azure.ResourceManager.HybridData/)<br>GitHub [1.1.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridData_1.1.0-beta.1/sdk/hybriddatamanager/Azure.ResourceManager.HybridData/) |
| Resource Management - Hybrid Data | NuGet [1.0.1](https://www.nuget.org/packages/Azure.ResourceManager.HybridData/1.0.1)<br>NuGet [1.1.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.HybridData/1.1.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.HybridData-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.HybridData_1.1.0-beta.1/sdk/hybriddatamanager/Azure.ResourceManager.HybridData) |
| Resource Management - Hybrid Kubernetes | NuGet [1.0.0-beta.3](https://www.nuget.org/packages/Azure.ResourceManager.Kubernetes/1.0.0-beta.3) | [docs](/dotnet/api/overview/azure/ResourceManager.Kubernetes-readme?view=azure-dotnet-preview&preserve-view=true) | GitHub [1.0.0-beta.3](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.Kubernetes_1.0.0-beta.3/sdk/hybridkubernetes/Azure.ResourceManager.Kubernetes/) |
| Resource Management - IoT Central | NuGet [1.0.1](https://www.nuget.org/packages/Azure.ResourceManager.IotCentral/1.0.1)<br>NuGet [1.1.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.IotCentral/1.1.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.IotCentral-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.IotCentral_1.0.1/sdk/iotcentral/Azure.ResourceManager.IotCentral/)<br>GitHub [1.1.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.IotCentral_1.1.0-beta.1/sdk/iotcentral/Azure.ResourceManager.IotCentral/) |
| Resource Management - IoT Hub | NuGet [1.0.1](https://www.nuget.org/packages/Azure.ResourceManager.IotHub/1.0.1)<br>NuGet [1.1.0-beta.1](https://www.nuget.org/packages/Azure.ResourceManager.IotHub/1.1.0-beta.1) | [docs](/dotnet/api/overview/azure/ResourceManager.IotHub-readme) | GitHub [1.0.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.IotHub_1.0.1/sdk/iothub/Azure.ResourceManager.IotHub/)<br>GitHub [1.1.0-beta.1](https://github.com/Azure/azure-sdk-for-net/tree/Azure.ResourceManager.IotHub_1.1.0-beta.1/sdk/iothub/Azure.ResourceManager.IotHub/) |
Expand Down
29 changes: 29 additions & 0 deletions docs/azure/sdk/snippets/unit-testing/AboutToExpireSecretsFinder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Azure.Security.KeyVault.Secrets;

public class AboutToExpireSecretFinder
{
private readonly TimeSpan _threshold;
private readonly SecretClient _client;

public AboutToExpireSecretFinder(TimeSpan threshold, SecretClient client)
{
_threshold = threshold;
_client = client;
}

public async Task<string[]> GetAboutToExpireSecretsAsync()
{
List<string> secretsAboutToExpire = new();

await foreach (var secret in _client.GetPropertiesOfSecretsAsync())
{
if (secret.ExpiresOn.HasValue &&
secret.ExpiresOn.Value - DateTimeOffset.Now <= _threshold)
{
secretsAboutToExpire.Add(secret.Name);
}
}

return secretsAboutToExpire.ToArray();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
using Azure;
using Azure.Security.KeyVault.Secrets;
using Moq;

namespace UnitTestingSampleApp.Moq;

public class AboutToExpireSecretFinderTests_Moq
{
[Fact]
public async Task DoesNotReturnNonExpiringSecrets()
{
// Arrange
// Create a page of enumeration results
Page<SecretProperties> page = Page<SecretProperties>.FromValues(new[]
{
new SecretProperties("secret1") { ExpiresOn = null },
new SecretProperties("secret2") { ExpiresOn = null }
}, null, Mock.Of<Response>());

// Create a pageable that consists of a single page
AsyncPageable<SecretProperties> pageable =
AsyncPageable<SecretProperties>.FromPages(new[] { page });

// Setup a client mock object to return the pageable
var clientMock = new Mock<SecretClient>();
clientMock.Setup(c => c.GetPropertiesOfSecretsAsync(It.IsAny<CancellationToken>()))
.Returns(pageable);

// Create an instance of a class to test passing in the mock client
var finder = new AboutToExpireSecretFinder(TimeSpan.FromDays(2), clientMock.Object);

// Act
string[] soonToExpire = await finder.GetAboutToExpireSecretsAsync();

// Assert
Assert.Empty(soonToExpire);
}

[Fact]
public async Task ReturnsSecretsThatExpireSoon()
{
// Arrange

// Create a page of enumeration results
DateTimeOffset now = DateTimeOffset.Now;
Page<SecretProperties> page = Page<SecretProperties>.FromValues(new[]
{
new SecretProperties("secret1") { ExpiresOn = now.AddDays(1) },
new SecretProperties("secret2") { ExpiresOn = now.AddDays(2) },
new SecretProperties("secret3") { ExpiresOn = now.AddDays(3) }
}, null, Mock.Of<Response>());

// Create a pageable that consists of a single page
AsyncPageable<SecretProperties> pageable =
AsyncPageable<SecretProperties>.FromPages(new[] { page });

// Setup a client mock object to return the pageable
var clientMock = new Mock<SecretClient>();
clientMock.Setup(c => c.GetPropertiesOfSecretsAsync(It.IsAny<CancellationToken>()))
.Returns(pageable);

// Create an instance of a class to test passing in the mock client
var finder = new AboutToExpireSecretFinder(TimeSpan.FromDays(2), clientMock.Object);

// Act
string[] soonToExpire = await finder.GetAboutToExpireSecretsAsync();

// Assert
Assert.Equal(new[] { "secret1", "secret2" }, soonToExpire);
}
}
Loading

0 comments on commit 4921da3

Please sign in to comment.