Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
3dbb6c7
Add azartifacts credential provider integration
alerickson Dec 18, 2024
6d52514
Add dynamic parameters to Register-PSResourceRepository and Set-PSRes…
alerickson Dec 18, 2024
fe270a1
Bug fixes and clean up
alerickson Dec 19, 2024
a99b2b2
Add tests
alerickson Dec 19, 2024
fc81545
Update AdoV2 server tests
alerickson Dec 19, 2024
7f5f0ae
Add logging for GH pkgs tests
alerickson Dec 19, 2024
01ab760
Remove GH pkgs logging
alerickson Dec 19, 2024
43a69e7
Rename tests
alerickson Dec 19, 2024
bfeb5e0
Add Verbose messaging
alerickson Dec 23, 2024
2644183
Update dynamic parameters for Set and Register repositories
alerickson Dec 24, 2024
b11eb71
Dynamic param should not appear when using Repositories param set, co…
alerickson Dec 24, 2024
d3154ed
Set dynamic param updates
alerickson Dec 24, 2024
317463d
Add -CredentialProvider None to existing ADO tests
alerickson Dec 26, 2024
e063a97
uncomment cred provider tests
alerickson Dec 26, 2024
ae5a467
Update ADO feed
alerickson Jan 3, 2025
f994d14
Fix #1777: Fixes bug with nuspec dependency version range when versio…
Jan 24, 2025
1cfdf2a
only convert Version info to hashtable if its not an empty string
anamnavi Mar 4, 2025
f3fe35e
delete unzippedPath in test after it's written to or subsequent Expan…
anamnavi Mar 4, 2025
97ef9d7
Update Dependency parsing logic to account for Az packages with Az* n…
anamnavi Feb 12, 2025
b1ba2b2
specify Azpreview explicitly in condition
anamnavi Feb 12, 2025
d189750
add test for Azpreview from MAR
anamnavi Feb 12, 2025
35bce61
fix test for Azpreview from MAR
anamnavi Feb 12, 2025
74abeb0
update outdated az FindName() from MAR test
anamnavi Feb 12, 2025
79f1e23
check if version is greaterthan not equal
anamnavi Feb 12, 2025
25bee9d
Allow wildcard for MAR repository for FindAll and FindByName (#1786)
adityapatwardhan Feb 19, 2025
ffa42a9
Use authentication challenge for unauthenticated container registry r…
adityapatwardhan Feb 21, 2025
405a0f7
Use deploybox to release to Gallery (#1800)
adityapatwardhan Feb 26, 2025
8a3c89c
Get metadata properties when finding a PSResource from a ContainerReg…
anamnavi Feb 25, 2025
4a60d68
Retrieve Tags property which can be in PrivateData.PSData but is not …
anamnavi Feb 25, 2025
e27c8c3
clean up code
anamnavi Feb 25, 2025
6af54e1
check privateData JsonElement kind, if Object check for its propertie…
anamnavi Feb 25, 2025
8050006
fix install for a package from MAR that may have different version th…
anamnavi Feb 18, 2025
5a3cca2
add find and install tests for 2 digit pkg
anamnavi Feb 18, 2025
0e77d20
add -TrustRepository to install tests
anamnavi Feb 18, 2025
96f76e7
account for prerelease version when using manifest version
anamnavi Feb 18, 2025
dd142a9
add test for preview install
anamnavi Feb 18, 2025
ec8d2cc
fix error in test logic
anamnavi Feb 18, 2025
5645a14
account for 2 digit version being concatenated with prerelease when c…
anamnavi Feb 25, 2025
5add5e5
Update README.md
alerickson Feb 20, 2025
7ac9a55
Update changelog, release notes, version for v1.1.1 release (#1801)
anamnavi Mar 6, 2025
24047d7
Update .NET to 8.0.406 (#1802)
adityapatwardhan Mar 6, 2025
3b34f53
Remove InstallationPath to Install .NET Dependencies task (#1804)
anamnavi Mar 7, 2025
1a043eb
Update NuGet assembly versions (#1807)
adityapatwardhan Mar 24, 2025
8290e62
Add CODEOWNERS file (#1818)
anamnavi Apr 30, 2025
71110ba
Add SupportsWildcards attribute to Repository parameter of Install-PS…
sdwheeler May 7, 2025
36acf3c
Fix PSResourceGet CI for ContainerRegistry (#1829)
adityapatwardhan Jun 17, 2025
a6e71fa
Fix catalog access for Container Registry repositories (#1831)
adityapatwardhan Jun 18, 2025
d48a2d5
Remove netstandard2.0 from build options (#1835)
alerickson Jun 23, 2025
adac2bf
NuGet v3 populate dependencies (#1778)
o-l-a-v Jun 24, 2025
ef6e17d
Update changelog, release notes and version (#1838)
alerickson Jun 26, 2025
068493f
Add azartifacts credential provider integration
alerickson Dec 18, 2024
bc4fbdb
Add dynamic parameters to Register-PSResourceRepository and Set-PSRes…
alerickson Dec 18, 2024
1f0c768
Bug fixes and clean up
alerickson Dec 19, 2024
2446093
Add tests
alerickson Dec 19, 2024
3128532
Update AdoV2 server tests
alerickson Dec 19, 2024
adfd8d7
Add logging for GH pkgs tests
alerickson Dec 19, 2024
f83e9f8
Remove GH pkgs logging
alerickson Dec 19, 2024
603a04a
Rename tests
alerickson Dec 19, 2024
b93be9b
Add Verbose messaging
alerickson Dec 23, 2024
9410ba5
Update dynamic parameters for Set and Register repositories
alerickson Dec 24, 2024
d2099ec
Dynamic param should not appear when using Repositories param set, co…
alerickson Dec 24, 2024
f9e3253
Set dynamic param updates
alerickson Dec 24, 2024
ca9e36e
Add -CredentialProvider None to existing ADO tests
alerickson Dec 26, 2024
5be8a6d
uncomment cred provider tests
alerickson Dec 26, 2024
0a19373
Update ADO feed
alerickson Jan 3, 2025
b178031
Merge branch 'addAdoCredProvider' of https://github.com/alerickson/PS…
alerickson Jun 30, 2025
8436ac4
Install cred provider and setup secret in test CI
alerickson Jul 8, 2025
f001264
Merge branch 'master' into addAdoCredProvider
alerickson Jul 8, 2025
992af99
Add capture environment
alerickson Jul 9, 2025
fc5a264
Merge branch 'addAdoCredProvider' of https://github.com/powershell/PS…
alerickson Jul 9, 2025
bfcdc9a
Update endpoint variable for setting creds
alerickson Jul 9, 2025
4634617
Update repo uri variable value
alerickson Jul 9, 2025
324ab1b
add logging
alerickson Jul 9, 2025
1ae81db
Try adding username to endpoints value
alerickson Jul 9, 2025
c8d01ee
add logging
alerickson Jul 9, 2025
dd32cd8
check if env is set for tests
alerickson Jul 9, 2025
4c71f1d
See if new env var is accessible
alerickson Jul 9, 2025
d1ff4fa
Add double quotations
alerickson Jul 9, 2025
b82a714
change var to here string
alerickson Jul 10, 2025
19f2e59
change variable contents
alerickson Jul 10, 2025
a9ac2aa
remove username
alerickson Jul 10, 2025
11657ad
Add endpoint obj as json
alerickson Jul 10, 2025
1ae884b
second try
alerickson Jul 10, 2025
04066df
Add verbose logging
adityapatwardhan Jul 10, 2025
f0f5c27
Convert from secure string
adityapatwardhan Jul 10, 2025
bfba721
Fix typo
adityapatwardhan Jul 10, 2025
904bd28
fix tests
alerickson Jul 10, 2025
b8ff08d
test new module
alerickson Jul 10, 2025
ee6efce
add debugging
alerickson Jul 11, 2025
928f7a5
revert test changes
alerickson Jul 11, 2025
f293c9e
fix dynamic parameter and add test
alerickson Jul 11, 2025
b9deb95
Add test
alerickson Jul 11, 2025
06e24b8
Update test/CredentialProvider.Tests.ps1
alerickson Jul 14, 2025
63c5ea3
Resolve code review feedback
alerickson Jul 15, 2025
106f871
Merge branch 'addAdoCredProvider' of https://github.com/powershell/PS…
alerickson Jul 15, 2025
8a74fb2
Revert accidental change made
alerickson Jul 15, 2025
71cc75c
Address comments
alerickson Jul 15, 2025
7695955
Update references to SetNetworkCredentials
alerickson Jul 15, 2025
b38a1c6
Small fixes
alerickson Jul 15, 2025
fa51324
Split 'IsContainerRegistry' into 2 methods
alerickson Jul 16, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions src/code/CredentialProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -160,13 +160,8 @@ internal static PSCredential GetCredentialsFromProvider(Uri uri, PSCmdlet cmdlet
if (Environment.OSVersion.Platform == PlatformID.Unix)
{
FileInfo fileInfo = new FileInfo(credProviderPath);
string resolvedFilePath = Utils.GetCaseInsensitiveFilePath(fileInfo.Directory.FullName, _credProviderDll);
if (resolvedFilePath != null)
{
credProviderPath = resolvedFilePath;
}
else
{
if (!Utils.TryGetCaseInsensitiveFilePath(fileInfo.Directory.FullName, _credProviderDll, out credProviderPath))
{
cmdletPassedIn.WriteError(new ErrorRecord(
new FileNotFoundException($"Path found '{credProviderPath}' is not a valid Azure Artifact Credential Provider executable. See https://github.com/NuGet/Home/wiki/NuGet-cross-plat-authentication-plugin#plugin-installation-and-discovery to set up the Credential Provider."),
"CredentialProviderFileNotFound",
Expand Down
26 changes: 3 additions & 23 deletions src/code/FindHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -204,13 +204,7 @@ public IEnumerable<PSResourceInfo> FindByResourceName(
repositoryNamesToSearch.Add(currentRepository.Name);

// Set network credentials via passed in credentials, AzArtifacts CredentialProvider, or SecretManagement.
if (currentRepository.CredentialProvider.Equals(PSRepositoryInfo.CredentialProviderType.AzArtifacts))
{
_networkCredential = Utils.SetCredentialProviderNetworkCredential(currentRepository, _networkCredential, _cmdletPassedIn);
}
else {
_networkCredential = Utils.SetSecretManagementNetworkCredential(currentRepository, _networkCredential, _cmdletPassedIn);
}
_networkCredential = Utils.SetNetworkCredentials(currentRepository, _networkCredential, _cmdletPassedIn);

ServerApiCall currentServer = ServerFactory.GetServer(currentRepository, _cmdletPassedIn, _networkCredential);
if (currentServer == null)
Expand Down Expand Up @@ -398,14 +392,7 @@ public IEnumerable<PSCommandResourceInfo> FindByCommandOrDscResource(
repositoryNamesToSearch.Add(currentRepository.Name);

// Set network credentials via passed in credentials, AzArtifacts CredentialProvider, or SecretManagement.
if (currentRepository.CredentialProvider.Equals(PSRepositoryInfo.CredentialProviderType.AzArtifacts))
{
_networkCredential = Utils.SetCredentialProviderNetworkCredential(currentRepository, _networkCredential, _cmdletPassedIn);
}
else
{
_networkCredential = Utils.SetSecretManagementNetworkCredential(currentRepository, _networkCredential, _cmdletPassedIn);
}
_networkCredential = Utils.SetNetworkCredentials(currentRepository, _networkCredential, _cmdletPassedIn);

ServerApiCall currentServer = ServerFactory.GetServer(currentRepository, _cmdletPassedIn, _networkCredential);
if (currentServer == null)
Expand Down Expand Up @@ -612,14 +599,7 @@ public IEnumerable<PSResourceInfo> FindByTag(
repositoryNamesToSearch.Add(currentRepository.Name);

// Set network credentials via passed in credentials, AzArtifacts CredentialProvider, or SecretManagement.
if (currentRepository.CredentialProvider.Equals(PSRepositoryInfo.CredentialProviderType.AzArtifacts))
{
_networkCredential = Utils.SetCredentialProviderNetworkCredential(currentRepository, _networkCredential, _cmdletPassedIn);
}
else
{
_networkCredential = Utils.SetSecretManagementNetworkCredential(currentRepository, _networkCredential, _cmdletPassedIn);
}
_networkCredential = Utils.SetNetworkCredentials(currentRepository, _networkCredential, _cmdletPassedIn);

ServerApiCall currentServer = ServerFactory.GetServer(currentRepository, _cmdletPassedIn, _networkCredential);
if (currentServer == null)
Expand Down
9 changes: 1 addition & 8 deletions src/code/InstallHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -287,14 +287,7 @@ private List<PSResourceInfo> ProcessRepositories(
sourceTrusted = currentRepository.Trusted || trustRepository;

// Set network credentials via passed in credentials, AzArtifacts CredentialProvider, or SecretManagement.
if (currentRepository.CredentialProvider.Equals(PSRepositoryInfo.CredentialProviderType.AzArtifacts))
{
_networkCredential = Utils.SetCredentialProviderNetworkCredential(currentRepository, _networkCredential, _cmdletPassedIn);
}
else
{
_networkCredential = Utils.SetSecretManagementNetworkCredential(currentRepository, _networkCredential, _cmdletPassedIn);
}
_networkCredential = Utils.SetNetworkCredentials(currentRepository, _networkCredential, _cmdletPassedIn);

ServerApiCall currentServer = ServerFactory.GetServer(currentRepository, _cmdletPassedIn, _networkCredential);

Expand Down
9 changes: 1 addition & 8 deletions src/code/PublishHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -381,14 +381,7 @@ internal void PushResource(string Repository, string modulePrefix, bool SkipDepe
}

// Set network credentials via passed in credentials, AzArtifacts CredentialProvider, or SecretManagement.
if (repository.CredentialProvider.Equals(PSRepositoryInfo.CredentialProviderType.AzArtifacts))
{
_networkCredential = Utils.SetCredentialProviderNetworkCredential(repository, _networkCredential, _cmdletPassedIn);
}
else
{
_networkCredential = Utils.SetSecretManagementNetworkCredential(repository, _networkCredential, _cmdletPassedIn);
}
_networkCredential = Utils.SetNetworkCredentials(repository, _networkCredential, _cmdletPassedIn);

// Check if dependencies already exist within the repo if:
// 1) the resource to publish has dependencies and
Expand Down
5 changes: 2 additions & 3 deletions src/code/RegisterPSResourceRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,13 +121,12 @@ public object GetDynamicParameters()
// It should also not appear when using the 'Repositories' parameter set.
if (ParameterSetName.Equals(PSGalleryParameterSet) ||
ParameterSetName.Equals(RepositoriesParameterSet) ||
Uri.EndsWith(".azurecr.io") || Uri.EndsWith(".azurecr.io/") || Uri.Contains("mcr.microsoft.com"))
Utils.IsContainerRegistry(Uri))
{
return null;
}

_credentialProvider = new CredentialProviderDynamicParameters();
return _credentialProvider;
return new CredentialProviderDynamicParameters();
}

#endregion
Expand Down
2 changes: 1 addition & 1 deletion src/code/RepositorySettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -901,7 +901,7 @@ private static APIVersion GetRepoAPIVersion(Uri repoUri)
// repositories with Uri Scheme "temp" may have PSPath Uri's like: "Temp:\repo" and we should consider them as local repositories.
return APIVersion.Local;
}
else if (repoUri.AbsoluteUri.EndsWith(".azurecr.io") || repoUri.AbsoluteUri.EndsWith(".azurecr.io/") || repoUri.AbsoluteUri.Contains("mcr.microsoft.com"))
else if (Utils.IsContainerRegistry(repoUri.AbsoluteUri))
{
return APIVersion.ContainerRegistry;
}
Expand Down
5 changes: 2 additions & 3 deletions src/code/SetPSResourceRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,13 +114,12 @@ public object GetDynamicParameters()
if (repository is not null &&
(repository.Name.Equals("PSGallery", StringComparison.OrdinalIgnoreCase) ||
ParameterSetName.Equals(RepositoriesParameterSet) ||
repository.Uri.AbsoluteUri.EndsWith(".azurecr.io") || repository.Uri.AbsoluteUri.EndsWith(".azurecr.io/") || repository.Uri.AbsoluteUri.Contains("mcr.microsoft.com")))
Utils.IsContainerRegistry(repository.Uri.AbsoluteUri)))
{
return null;
}

_credentialProvider = new CredentialProviderDynamicParameters();
return _credentialProvider;
return new CredentialProviderDynamicParameters();
}

#endregion
Expand Down
43 changes: 40 additions & 3 deletions src/code/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -968,6 +968,10 @@ public static NetworkCredential SetSecretManagementNetworkCredential(
return networkCredential;
}

#endregion

#region Credential methods

public static NetworkCredential SetCredentialProviderNetworkCredential(
PSRepositoryInfo repository,
NetworkCredential networkCredential,
Expand All @@ -992,6 +996,37 @@ public static NetworkCredential SetCredentialProviderNetworkCredential(
return networkCredential;
}

public static NetworkCredential SetNetworkCredentials(PSRepositoryInfo repository, NetworkCredential networkCredential, PSCmdlet cmdletPassedIn)
{
NetworkCredential networkCreds = new NetworkCredential();
if (repository.CredentialProvider.Equals(PSRepositoryInfo.CredentialProviderType.AzArtifacts))
{
cmdletPassedIn.WriteVerbose("Setting credential provider network credentials");
networkCreds = Utils.SetCredentialProviderNetworkCredential(repository, networkCredential, cmdletPassedIn);
}
else
{
cmdletPassedIn.WriteVerbose("Setting Secret Management network credentials");
networkCreds = Utils.SetSecretManagementNetworkCredential(repository, networkCredential, cmdletPassedIn);
}

return networkCreds;
}

#endregion

#region Container Registry methods

public static bool IsContainerRegistry(string uri)
{
if (uri.EndsWith(".azurecr.io") || uri.EndsWith(".azurecr.io/") || uri.Contains("mcr.microsoft.com") || uri.StartsWith("mcr.microsoft"))
{
return true;
}

return false;
}

#endregion

#region Path methods
Expand Down Expand Up @@ -1259,19 +1294,21 @@ internal static void GetMetadataFilesFromPath(string dirPath, string packageName
}
}

internal static string GetCaseInsensitiveFilePath(string directory, string fileName)
internal static bool TryGetCaseInsensitiveFilePath(string directory, string fileName, out string fileFound)
{
fileFound = String.Empty;
var files = Directory.GetFiles(directory);
foreach (var file in files)
{
if (string.Equals(Path.GetFileName(file), fileName, StringComparison.OrdinalIgnoreCase))
{
return file;
fileFound = file;
return true;
}
}

// File not found
return null;
return false;
}

#endregion
Expand Down