Skip to content

Commit d56bfa1

Browse files
authored
fix: private package mapping during artifact generation (aws#2348)
* fix: mapping of private packages to reference list * fix: relative path comparison to the lowercase on in artifact reference * fix: packages being filtered in the artifact generation
1 parent d8733a7 commit d56bfa1

File tree

4 files changed

+62
-85
lines changed

4 files changed

+62
-85
lines changed

server/aws-lsp-codewhisperer/src/language-server/netTransform/artifactManager.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@ const customTransformationFolderName = 'customTransformation'
2626
const filteredExtensions = ['.suo', '.meta', '.user', '.obj', '.tmp', '.log', '.dbmdl', '.jfm', '.pdb']
2727
const filteredDirectories = ['.git', 'bin', 'obj', '.idea', '.vs', 'artifactworkspace', 'node_modules', 'nuget.config']
2828
const failedCopies: string[] = []
29-
const filteredPathRegex: RegExp[] = [
30-
/\\users\\[^\\]+\\appdata/i, // IgnoreCase flag with 'i'
31-
/.+\.(vspscc|vssscc)$/,
32-
]
29+
const filteredPathRegex: RegExp[] = [/.+\.(vspscc|vssscc)$/]
3330

3431
export class ArtifactManager {
3532
private workspace: Workspace
@@ -210,7 +207,7 @@ export class ArtifactManager {
210207
relativePath: relativePath,
211208
isThirdPartyPackage: false,
212209
}
213-
await this.processPrivatePackages(request, reference, artifactReference)
210+
await this.processPrivatePackages(request, artifactReference)
214211
references.push(artifactReference)
215212
} catch (error) {
216213
this.logging.log('Failed to process file: ' + error + reference.AssemblyFullPath)
@@ -230,8 +227,6 @@ export class ArtifactManager {
230227
for (const pkg of request.PackageReferences) {
231228
if (!pkg.NetCompatiblePackageFilePath) {
232229
continue
233-
} else if (this.shouldFilterFile(pkg.NetCompatiblePackageFilePath)) {
234-
continue
235230
}
236231
try {
237232
const packageRelativePath = this.normalizePackageFileRelativePath(pkg.NetCompatiblePackageFilePath)
@@ -261,16 +256,13 @@ export class ArtifactManager {
261256
} as RequirementJson
262257
}
263258

264-
async processPrivatePackages(
265-
request: StartTransformRequest,
266-
reference: ExternalReference,
267-
artifactReference: References
268-
): Promise<void> {
259+
async processPrivatePackages(request: StartTransformRequest, artifactReference: References): Promise<void> {
269260
if (!request.PackageReferences) {
270261
return
271262
}
272263
var thirdPartyPackage = request.PackageReferences.find(
273-
p => p.IsPrivatePackage && reference.RelativePath.includes(p.Id)
264+
// should be toLower because we to lower case the reference paths
265+
p => p.IsPrivatePackage && artifactReference.relativePath.includes(p.Id.concat('.dll').toLowerCase())
274266
)
275267
if (thirdPartyPackage) {
276268
artifactReference.isThirdPartyPackage = true

server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/artifactManager.createRequirementJsonContent.test.ts

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -158,30 +158,6 @@ describe('ArtifactManager - createRequirementJsonContent', () => {
158158
// Should only include .dll reference, not .pdb
159159
expect(result.Projects[0].references).to.have.length(1)
160160
})
161-
162-
it('should filter package references with filtered extensions', async () => {
163-
const request = setupRequest({
164-
PackageReferences: [
165-
{
166-
Id: 'ValidPackage',
167-
Versions: ['1.0.0'],
168-
IsPrivatePackage: false,
169-
NetCompatiblePackageFilePath: path.join('C:', 'packages', 'valid.nupkg'),
170-
},
171-
{
172-
Id: 'FilteredPackage',
173-
Versions: ['1.0.0'],
174-
IsPrivatePackage: false,
175-
NetCompatiblePackageFilePath: path.join('C:', 'packages', 'filtered.pdb'), // Should be filtered
176-
},
177-
],
178-
})
179-
180-
const result = await artifactManager.createRequirementJsonContent(request)
181-
182-
// Should only include valid package, not filtered one
183-
expect((result as any).Packages).to.have.length(1)
184-
})
185161
})
186162

187163
describe('Error handling', () => {

server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/artifactManager.general.test.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -268,15 +268,11 @@ describe('ArtifactManager - Complete Coverage', () => {
268268
it('should filter regex', async () => {
269269
const unfilteredString = '\\users\\test\\dataApp\\test.cs'
270270
const unfilteredStringWithExtraDir = '\\users\\extraDir\\test\\appData\\test.cs'
271-
const filteredString = '\\users\\test\\appdata\\test.cs'
272-
const filteredStringWithCasing = '\\USERS\\test\\APPdata\\test.cs'
273271
const filteredExtension = '\\users\\test\\project.vspscc'
274272
const filteredExtensionTwo = '\\users\\test\\project.vssscc'
275273

276274
expect(artifactManager.shouldFilterFile(unfilteredString)).to.be.false
277275
expect(artifactManager.shouldFilterFile(unfilteredStringWithExtraDir)).to.be.false
278-
expect(artifactManager.shouldFilterFile(filteredString)).to.be.true
279-
expect(artifactManager.shouldFilterFile(filteredStringWithCasing)).to.be.true
280276
expect(artifactManager.shouldFilterFile(filteredExtension)).to.be.true
281277
expect(artifactManager.shouldFilterFile(filteredExtensionTwo)).to.be.true
282278
})

server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/artifactManager.processPrivatePackages.test.ts

Lines changed: 57 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ describe('ArtifactManager - processPrivatePackages', () => {
1010
let workspace: StubbedInstance<Workspace>
1111
let artifactManager: ArtifactManager
1212
let sampleStartTransformRequest: StartTransformRequest
13-
let sampleExternalReference: ExternalReference
1413
let sampleArtifactReference: References
1514
const mockedLogging = stubInterface<Logging>()
1615

@@ -30,12 +29,6 @@ describe('ArtifactManager - processPrivatePackages', () => {
3029
// Setup initial test data
3130
sampleStartTransformRequest = EXAMPLE_REQUEST
3231

33-
sampleExternalReference = {
34-
ProjectPath: '',
35-
RelativePath: '',
36-
AssemblyFullPath: '',
37-
IncludedInArtifact: true,
38-
}
3932
sampleArtifactReference = {
4033
includedInArtifact: true,
4134
relativePath: '',
@@ -45,11 +38,7 @@ describe('ArtifactManager - processPrivatePackages', () => {
4538

4639
it('should do nothing when PackageReferences is undefined', async () => {
4740
sampleStartTransformRequest.PackageReferences = undefined
48-
artifactManager.processPrivatePackages(
49-
sampleStartTransformRequest,
50-
sampleExternalReference,
51-
sampleArtifactReference
52-
)
41+
artifactManager.processPrivatePackages(sampleStartTransformRequest, sampleArtifactReference)
5342
expect(sampleArtifactReference.isThirdPartyPackage).to.equal(false)
5443
expect(sampleArtifactReference.netCompatibleRelativePath).to.equal(undefined)
5544
expect(sampleArtifactReference.netCompatibleVersion).to.equal(undefined)
@@ -66,24 +55,20 @@ describe('ArtifactManager - processPrivatePackages', () => {
6655
Id: 'test-package',
6756
Versions: [],
6857
IsPrivatePackage: true,
69-
NetCompatibleAssemblyRelativePath: 'path/to/assembly',
70-
NetCompatibleAssemblyPath: 'full/path/to/assembly',
58+
NetCompatibleAssemblyRelativePath: 'path/to/test-package.dll',
59+
NetCompatibleAssemblyPath: 'full/path/to/test-package.dll',
7160
NetCompatiblePackageVersion: '2.0.0',
7261
}
7362

7463
sampleStartTransformRequest.PackageReferences = [privatePackage]
75-
sampleExternalReference.RelativePath = 'some/path/test-package/more/path'
64+
sampleArtifactReference.relativePath = 'some/path/test-package/more/path/test-package.dll'
7665

77-
await artifactManager.processPrivatePackages(
78-
sampleStartTransformRequest,
79-
sampleExternalReference,
80-
sampleArtifactReference
81-
)
66+
await artifactManager.processPrivatePackages(sampleStartTransformRequest, sampleArtifactReference)
8267

8368
expect(copyFileCalled).to.be.true
8469
expect(sampleArtifactReference.isThirdPartyPackage).to.equal(true)
8570
expect(sampleArtifactReference.netCompatibleRelativePath).to.equal(
86-
path.join('references', 'thirdpartypackages', 'path/to/assembly').toLowerCase()
71+
path.join('references', 'thirdpartypackages', 'path/to/test-package.dll').toLowerCase()
8772
)
8873
expect(sampleArtifactReference.netCompatibleVersion).to.equal('2.0.0')
8974
})
@@ -98,28 +83,24 @@ describe('ArtifactManager - processPrivatePackages', () => {
9883
const nonPrivatePackage = {
9984
Id: 'test-package',
10085
IsPrivatePackage: false,
101-
NetCompatibleAssemblyRelativePath: 'path/to/assembly',
102-
NetCompatibleAssemblyPath: 'full/path/to/assembly',
86+
NetCompatibleAssemblyRelativePath: 'path/to/test-package.dll',
87+
NetCompatibleAssemblyPath: 'full/path/to/test-package.dll',
10388
NetCompatiblePackageVersion: '1.0.0',
10489
Versions: [],
10590
}
10691

10792
sampleStartTransformRequest.PackageReferences = [nonPrivatePackage]
108-
sampleExternalReference.RelativePath = 'some/path/test-package/more/path'
93+
sampleArtifactReference.relativePath = 'some/path/test-package/more/path/test-package.dll'
10994

110-
artifactManager.processPrivatePackages(
111-
sampleStartTransformRequest,
112-
sampleExternalReference,
113-
sampleArtifactReference
114-
)
95+
artifactManager.processPrivatePackages(sampleStartTransformRequest, sampleArtifactReference)
11596

11697
expect(copyFileCalled).to.be.false
11798
expect(sampleArtifactReference.isThirdPartyPackage).to.equal(false)
11899
expect(sampleArtifactReference.netCompatibleRelativePath).to.equal(undefined)
119100
expect(sampleArtifactReference.netCompatibleVersion).to.equal(undefined)
120101
})
121102

122-
it('should not process when package ID is not in reference path', async () => {
103+
it('should not process when assembly is not in reference path', async () => {
123104
let copyFileCalled = false
124105
artifactManager.copyFile = async (source: string, destination: string): Promise<void> => {
125106
copyFileCalled = true
@@ -129,27 +110,63 @@ describe('ArtifactManager - processPrivatePackages', () => {
129110
const privatePackage = {
130111
Id: 'test-package',
131112
IsPrivatePackage: true,
132-
NetCompatibleAssemblyRelativePath: 'path/to/assembly',
133-
NetCompatibleAssemblyPath: 'full/path/to/assembly',
113+
NetCompatibleAssemblyRelativePath: 'path/to/test-package.dll',
114+
NetCompatibleAssemblyPath: 'full/path/to/test-package.dll',
134115
NetCompatiblePackageVersion: '1.0.0',
135116
Versions: [],
136117
}
137118

138119
sampleStartTransformRequest.PackageReferences = [privatePackage]
139-
sampleExternalReference.RelativePath = 'some/path/different-package/more/path'
120+
sampleArtifactReference.relativePath = 'some/path/different-package/more/path/test-package2.dll'
140121

141-
artifactManager.processPrivatePackages(
142-
sampleStartTransformRequest,
143-
sampleExternalReference,
144-
sampleArtifactReference
145-
)
122+
artifactManager.processPrivatePackages(sampleStartTransformRequest, sampleArtifactReference)
146123

147124
expect(copyFileCalled).to.be.false
148125
expect(sampleArtifactReference.isThirdPartyPackage).to.equal(false)
149126
expect(sampleArtifactReference.netCompatibleRelativePath).to.equal(undefined)
150127
expect(sampleArtifactReference.netCompatibleVersion).to.equal(undefined)
151128
})
152129

130+
it('should handle multiple packages with same substring', async () => {
131+
const privatePackage1: PackageReferenceMetadata = {
132+
Id: 'PNMAC.Core',
133+
Versions: ['2.27.0', '2.30.0'],
134+
IsPrivatePackage: true,
135+
NetCompatibleAssemblyRelativePath: 'PNMAC.Core/lib/net8.0/PNMAC.Core.dll',
136+
NetCompatibleAssemblyPath:
137+
'C:/Users/user/AppData/Local/Temp/AwsToolkit/Transforms/Packages/PNMAC.Core/lib/net8.0/PNMAC.Core.dll',
138+
NetCompatiblePackageVersion: '5.4.1',
139+
}
140+
141+
const privatePackage2: PackageReferenceMetadata = {
142+
Id: 'PNMAC.Core.EntityService',
143+
Versions: ['2.2.0'],
144+
IsPrivatePackage: true,
145+
NetCompatibleAssemblyRelativePath: 'PNMAC.Core.EntityService/lib/net8.0/PNMAC.Core.EntityService.dll',
146+
NetCompatibleAssemblyPath:
147+
'C:/Users/user/AppData/Local/Temp/AwsToolkit/Transforms/Packages/PNMAC.Core.EntityService/lib/net8.0/PNMAC.Core.EntityService.dll',
148+
NetCompatiblePackageVersion: '4.1.0.4',
149+
}
150+
151+
sampleStartTransformRequest.PackageReferences = [privatePackage1, privatePackage2]
152+
sampleArtifactReference.relativePath =
153+
'references/packages/pnmac.core.entityservice.2.2.0/lib/pnmac.core.entityservice.dll'
154+
155+
await artifactManager.processPrivatePackages(sampleStartTransformRequest, sampleArtifactReference)
156+
157+
expect(sampleArtifactReference.isThirdPartyPackage).to.equal(true)
158+
expect(sampleArtifactReference.packageId).to.equal('PNMAC.Core.EntityService')
159+
expect(sampleArtifactReference.netCompatibleVersion).to.equal('4.1.0.4')
160+
161+
sampleArtifactReference.relativePath = 'references/packages/pnmac.core.2.30.0/lib/pnmac.core.dll'
162+
163+
await artifactManager.processPrivatePackages(sampleStartTransformRequest, sampleArtifactReference)
164+
165+
expect(sampleArtifactReference.isThirdPartyPackage).to.equal(true)
166+
expect(sampleArtifactReference.packageId).to.equal('PNMAC.Core')
167+
expect(sampleArtifactReference.netCompatibleVersion).to.equal('5.4.1')
168+
})
169+
153170
it('should mark as third party package but not copy when paths are null', async () => {
154171
let copyFileCalled = false
155172
artifactManager.copyFile = async (source: string, destination: string): Promise<void> => {
@@ -167,13 +184,9 @@ describe('ArtifactManager - processPrivatePackages', () => {
167184
}
168185

169186
sampleStartTransformRequest.PackageReferences = [privatePackage]
170-
sampleExternalReference.RelativePath = 'some/path/test-package/more/path'
187+
sampleArtifactReference.relativePath = 'some/path/test-package/more/test-package.dll'
171188

172-
await artifactManager.processPrivatePackages(
173-
sampleStartTransformRequest,
174-
sampleExternalReference,
175-
sampleArtifactReference
176-
)
189+
await artifactManager.processPrivatePackages(sampleStartTransformRequest, sampleArtifactReference)
177190

178191
expect(copyFileCalled).to.be.false
179192
expect(sampleArtifactReference.isThirdPartyPackage).to.equal(true)

0 commit comments

Comments
 (0)