From 455012bec7e7bd5f64eb3cbcbf6330fa859b96af Mon Sep 17 00:00:00 2001 From: JoC0de <53140583+JoC0de@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:53:15 +0100 Subject: [PATCH 1/3] fix generator when switching plattform + fix dublicate property group in generated .csproj --- .config/dotnet-tools.json | 18 +-- .../RootTestProject/Packages/manifest.json | 3 +- .../Packages/packages-lock.json | 14 +- .../ProjectSettings/MultiplayerManager.asset | 7 + .../Settings.json | 22 ++- .../ProjectSettings/ProjectSettings.asset | 126 +++++++++++++++++- .../ProjectSettings/ProjectVersion.txt | 4 +- .../GeneratorSettingsProvider.cs | 1 + .../Editor/ProjectFileGeneratorSdkStyle.cs | 11 ++ .../Assets/Editor/SolutionFile.cs | 5 + .../Editor/VisualStudioAssetPostprocessor.cs | 16 ++- 11 files changed, 202 insertions(+), 25 deletions(-) create mode 100644 src/TestProjects/RootTestProject/ProjectSettings/MultiplayerManager.asset diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index bbcd38d..393d698 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -1,10 +1,12 @@ { - "version": 1, - "isRoot": true, - "tools": { - "jetbrains.resharper.globaltools": { - "version": "2023.2.2", - "commands": ["jb"] - } + "version": 1, + "isRoot": true, + "tools": { + "jetbrains.resharper.globaltools": { + "version": "2023.3.3", + "commands": [ + "jb" + ] } -} + } +} \ No newline at end of file diff --git a/src/TestProjects/RootTestProject/Packages/manifest.json b/src/TestProjects/RootTestProject/Packages/manifest.json index 5abf188..795fc2c 100644 --- a/src/TestProjects/RootTestProject/Packages/manifest.json +++ b/src/TestProjects/RootTestProject/Packages/manifest.json @@ -1,5 +1,6 @@ { "dependencies": { - "com.github-joc0de.visual-studio-solution-generator": "file:../../../UnityVisualStudioSolutionGenerator/Assets" + "com.github-joc0de.visual-studio-solution-generator": "file:../../../UnityVisualStudioSolutionGenerator/Assets", + "com.unity.modules.accessibility": "1.0.0" } } diff --git a/src/TestProjects/RootTestProject/Packages/packages-lock.json b/src/TestProjects/RootTestProject/Packages/packages-lock.json index 5ca2640..ee7ce11 100644 --- a/src/TestProjects/RootTestProject/Packages/packages-lock.json +++ b/src/TestProjects/RootTestProject/Packages/packages-lock.json @@ -5,19 +5,19 @@ "depth": 0, "source": "local", "dependencies": { - "com.unity.ide.visualstudio": "2.0.20", + "com.unity.ide.visualstudio": "2.0.22", "com.unity.settings-manager": "2.0.1" } }, "com.unity.ext.nunit": { - "version": "2.0.3", + "version": "2.0.5", "depth": 3, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" }, "com.unity.ide.visualstudio": { - "version": "2.0.20", + "version": "2.0.22", "depth": 1, "source": "registry", "dependencies": { @@ -33,7 +33,7 @@ "url": "https://packages.unity.com" }, "com.unity.test-framework": { - "version": "1.3.7", + "version": "1.3.9", "depth": 2, "source": "registry", "dependencies": { @@ -43,6 +43,12 @@ }, "url": "https://packages.unity.com" }, + "com.unity.modules.accessibility": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, "com.unity.modules.imgui": { "version": "1.0.0", "depth": 3, diff --git a/src/TestProjects/RootTestProject/ProjectSettings/MultiplayerManager.asset b/src/TestProjects/RootTestProject/ProjectSettings/MultiplayerManager.asset new file mode 100644 index 0000000..8073753 --- /dev/null +++ b/src/TestProjects/RootTestProject/ProjectSettings/MultiplayerManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!655991488 &1 +MultiplayerManager: + m_ObjectHideFlags: 0 + m_EnableMultiplayerRoles: 0 + m_ActiveMultiplayerRole: 0 diff --git a/src/TestProjects/RootTestProject/ProjectSettings/Packages/com.github-joc0de.visual-studio-solution-generator/Settings.json b/src/TestProjects/RootTestProject/ProjectSettings/Packages/com.github-joc0de.visual-studio-solution-generator/Settings.json index 1a0a09b..72a5be0 100644 --- a/src/TestProjects/RootTestProject/ProjectSettings/Packages/com.github-joc0de.visual-studio-solution-generator/Settings.json +++ b/src/TestProjects/RootTestProject/ProjectSettings/Packages/com.github-joc0de.visual-studio-solution-generator/Settings.json @@ -16,6 +16,21 @@ "key": "general.LogVerbose", "value": "{\"m_Value\":false}" }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "general.GenerateReSharperProjectSettings", + "value": "{\"m_Value\":false}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "general.TrackMetaDeletion", + "value": "{\"m_Value\":false}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "general.EnableNullableReferenceTypes", + "value": "{\"m_Value\":false}" + }, { "type": "System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", "key": "legacy-style.ExcludedAnalyzers", @@ -27,7 +42,12 @@ "value": "{\"m_Value\":[\"**/*.meta\",\"**/*.asset\",\"**/*.prefab\"]}" }, { - "type": "System.Collections.Generic.List`1[[UnityVisualStudioSolutionGenerator.PropertyGroupSetting, UnityVisualStudioSolutionGenerator, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "type": "System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "general.AdditionalIncludedSolutions", + "value": "{\"m_Value\":[]}" + }, + { + "type": "System.Collections.Generic.List`1[[UnityVisualStudioSolutionGenerator.Configuration.PropertyGroupSetting, UnityVisualStudioSolutionGenerator, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", "key": "sdk-style.SdkAdditionalProperties", "value": "{\"m_Value\":[{\"k__BackingField\":\"EnableNETAnalyzers\",\"k__BackingField\":\"true\"},{\"k__BackingField\":\"AnalysisLevel\",\"k__BackingField\":\"latest\"},{\"k__BackingField\":\"AnalysisMode\",\"k__BackingField\":\"AllEnabledByDefault\"}]}" } diff --git a/src/TestProjects/RootTestProject/ProjectSettings/ProjectSettings.asset b/src/TestProjects/RootTestProject/ProjectSettings/ProjectSettings.asset index a49b486..ab7af1a 100644 --- a/src/TestProjects/RootTestProject/ProjectSettings/ProjectSettings.asset +++ b/src/TestProjects/RootTestProject/ProjectSettings/ProjectSettings.asset @@ -48,6 +48,7 @@ PlayerSettings: defaultScreenHeightWeb: 600 m_StereoRenderingPath: 0 m_ActiveColorSpace: 1 + unsupportedMSAAFallback: 0 m_SpriteBatchVertexThreshold: 300 m_MTRendering: 1 mipStripping: 0 @@ -75,6 +76,7 @@ PlayerSettings: androidMinimumWindowWidth: 400 androidMinimumWindowHeight: 300 androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 androidApplicationEntry: 1 defaultIsNativeResolution: 1 macRetinaSupport: 1 @@ -87,6 +89,7 @@ PlayerSettings: hideHomeButton: 0 submitAnalytics: 1 usePlayerLog: 1 + dedicatedServerOptimizations: 0 bakeCollisionMeshes: 0 forceSingleInstance: 0 useFlipModelSwapchain: 1 @@ -126,6 +129,7 @@ PlayerSettings: switchAllowGpuScratchShrinking: 0 switchNVNMaxPublicTextureIDCount: 0 switchNVNMaxPublicSamplerIDCount: 0 + switchMaxWorkerMultiple: 8 switchNVNGraphicsFirmwareMemory: 32 vulkanNumSwapchainBuffers: 3 vulkanEnableSetSRGBWrite: 0 @@ -145,6 +149,7 @@ PlayerSettings: isWsaHolographicRemotingEnabled: 0 enableFrameTimingStats: 0 enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 useHDRDisplay: 0 hdrBitDepth: 0 m_ColorGamuts: 00000000 @@ -153,14 +158,16 @@ PlayerSettings: resetResolutionOnWindowResize: 0 androidSupportedAspectRatio: 1 androidMaxAspectRatio: 2.1 + androidMinAspectRatio: 1 applicationIdentifier: {} buildNumber: + Bratwurst: 0 Standalone: 0 iPhone: 0 tvOS: 0 overrideDefaultApplicationIdentifier: 0 AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 22 + AndroidMinSdkVersion: 23 AndroidTargetSdkVersion: 0 AndroidPreferredInstallLocation: 1 aotOptions: @@ -180,6 +187,8 @@ PlayerSettings: tvOSSdkVersion: 0 tvOSRequireExtendedGameController: 0 tvOSTargetOSVersionString: 13.0 + bratwurstSdkVersion: 0 + bratwurstTargetOSVersionString: 13.0 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 uIRequiresFullScreen: 1 @@ -227,8 +236,10 @@ PlayerSettings: appleDeveloperTeamID: iOSManualSigningProvisioningProfileID: tvOSManualSigningProvisioningProfileID: + bratwurstManualSigningProvisioningProfileID: iOSManualSigningProvisioningProfileType: 0 tvOSManualSigningProvisioningProfileType: 0 + bratwurstManualSigningProvisioningProfileType: 0 appleEnableAutomaticSigning: 0 iOSRequireARKit: 0 iOSAutomaticallyDetectAndAddCapabilities: 1 @@ -252,6 +263,7 @@ PlayerSettings: AndroidKeystoreName: AndroidKeyaliasName: AndroidEnableArmv9SecurityFeatures: 0 + AndroidEnableArm64MTE: 0 AndroidBuildApkPerCpuArchitecture: 0 AndroidTVCompatibility: 0 AndroidIsGame: 1 @@ -271,7 +283,104 @@ PlayerSettings: AndroidAppBundleSizeToValidate: 150 AndroidReportGooglePlayAppDependencies: 1 m_BuildTargetIcons: [] - m_BuildTargetPlatformIcons: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: iPhone + m_Icons: + - m_Textures: [] + m_Width: 180 + m_Height: 180 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 0 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 167 + m_Height: 167 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 152 + m_Height: 152 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 76 + m_Height: 76 + m_Kind: 0 + m_SubKind: iPad + - m_Textures: [] + m_Width: 120 + m_Height: 120 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 80 + m_Height: 80 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 3 + m_SubKind: iPad + - m_Textures: [] + m_Width: 87 + m_Height: 87 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 58 + m_Height: 58 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 29 + m_Height: 29 + m_Kind: 1 + m_SubKind: iPad + - m_Textures: [] + m_Width: 60 + m_Height: 60 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPhone + - m_Textures: [] + m_Width: 40 + m_Height: 40 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 20 + m_Height: 20 + m_Kind: 2 + m_SubKind: iPad + - m_Textures: [] + m_Width: 1024 + m_Height: 1024 + m_Kind: 4 + m_SubKind: App Store m_BuildTargetBatching: - m_BuildTarget: Standalone m_StaticBatching: 1 @@ -395,7 +504,7 @@ PlayerSettings: switchSocketConcurrencyLimit: 14 switchScreenResolutionBehavior: 2 switchUseCPUProfiler: 0 - switchUseGOLDLinker: 0 + switchEnableFileSystemTrace: 0 switchLTOSetting: 0 switchApplicationID: 0x01004b9000490000 switchNSODependencies: @@ -525,7 +634,7 @@ PlayerSettings: switchSocketBufferEfficiency: 4 switchSocketInitializeEnabled: 1 switchNetworkInterfaceManagerInitializeEnabled: 1 - switchPlayerConnectionEnabled: 1 + switchDisableHTCSPlayerConnection: 0 switchUseNewStyleFilepaths: 1 switchUseLegacyFmodPriorities: 0 switchUseMicroSleepForYield: 1 @@ -634,7 +743,11 @@ PlayerSettings: webGLMemoryLinearGrowthStep: 16 webGLMemoryGeometricGrowthStep: 0.2 webGLMemoryGeometricGrowthCap: 96 + webGLEnableWebGPU: 0 webGLPowerPreference: 2 + webGLWebAssemblyTable: 0 + webGLWebAssemblyBigInt: 0 + webGLCloseOnQuit: 0 scriptingDefineSymbols: {} additionalCompilerArguments: {} platformArchitecture: {} @@ -740,9 +853,11 @@ PlayerSettings: hmiPlayerDataPath: hmiForceSRGBBlit: 1 embeddedLinuxEnableGamepadInput: 1 - hmiLogStartupTiming: 0 hmiCpuConfiguration: + hmiLogStartupTiming: 0 + qnxGraphicConfPath: apiCompatibilityLevel: 6 + captureStartupLogs: {} activeInputHandler: 0 windowsGamepadBackendHint: 0 cloudProjectId: @@ -753,5 +868,6 @@ PlayerSettings: cloudEnabled: 0 legacyClampBlendShapeWeights: 0 hmiLoadingImage: {fileID: 0} + platformRequiresReadableAssets: 0 virtualTexturingSupportEnabled: 0 insecureHttpOption: 0 diff --git a/src/TestProjects/RootTestProject/ProjectSettings/ProjectVersion.txt b/src/TestProjects/RootTestProject/ProjectSettings/ProjectVersion.txt index fd4a3fc..4b379c0 100644 --- a/src/TestProjects/RootTestProject/ProjectSettings/ProjectVersion.txt +++ b/src/TestProjects/RootTestProject/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2023.1.1f1 -m_EditorVersionWithRevision: 2023.1.1f1 (46620eadcc07) +m_EditorVersion: 2023.2.6f1 +m_EditorVersionWithRevision: 2023.2.6f1 (57daeefc879b) diff --git a/src/UnityVisualStudioSolutionGenerator/Assets/Editor/Configuration/GeneratorSettingsProvider.cs b/src/UnityVisualStudioSolutionGenerator/Assets/Editor/Configuration/GeneratorSettingsProvider.cs index e9d46a5..41625ca 100644 --- a/src/UnityVisualStudioSolutionGenerator/Assets/Editor/Configuration/GeneratorSettingsProvider.cs +++ b/src/UnityVisualStudioSolutionGenerator/Assets/Editor/Configuration/GeneratorSettingsProvider.cs @@ -23,6 +23,7 @@ internal static class GeneratorSettingsProvider /// The settings provider / the class used to generate the UI to change the settings. [SettingsProvider] [SuppressMessage("CodeQuality", "IDE0051:Remove unused private members", Justification = "Called by Unity")] + [SuppressMessage("Performance", "CA1859:Use concrete types when possible for improved performance", Justification = "Return type needed becaus of Unity.")] private static SettingsProvider CreateSettingsProvider() { return new UserSettingsProvider( diff --git a/src/UnityVisualStudioSolutionGenerator/Assets/Editor/ProjectFileGeneratorSdkStyle.cs b/src/UnityVisualStudioSolutionGenerator/Assets/Editor/ProjectFileGeneratorSdkStyle.cs index 19da16c..35ae523 100644 --- a/src/UnityVisualStudioSolutionGenerator/Assets/Editor/ProjectFileGeneratorSdkStyle.cs +++ b/src/UnityVisualStudioSolutionGenerator/Assets/Editor/ProjectFileGeneratorSdkStyle.cs @@ -13,6 +13,9 @@ namespace UnityVisualStudioSolutionGenerator /// public class ProjectFileGeneratorSdkStyle : ProjectFileGeneratorBase { + private const string GeneratedByElementName = "GeneratedBy"; + private const string GeneratorName = "UnityVisualStudioSolutionGenerator"; + /// public ProjectFileGeneratorSdkStyle(string filePath) : base(filePath) @@ -27,6 +30,7 @@ protected override void WriteProjectFileInternal(XmlWriter writer, string output wrappedWriter.WriteStartElement("Project"); wrappedWriter.WriteStartElement("PropertyGroup"); + wrappedWriter.WriteElementString(GeneratedByElementName, GeneratorName); wrappedWriter.WriteElementString("OutputPath", Path.Combine(solutionDirectoryPath, "Temp", "Bin", "$(Configuration)", ProjectName)); wrappedWriter.WriteElementString("BaseIntermediateOutputPath", Path.Combine(solutionDirectoryPath, "obj", "Sdk", ProjectName)); wrappedWriter.WriteElementString("IsUnityProject", "true"); @@ -34,6 +38,7 @@ protected override void WriteProjectFileInternal(XmlWriter writer, string output var relativeSubProjectDirectories = FindSubProjectFolders(outputFileDirectoryPath); wrappedWriter.WriteStartElement("PropertyGroup"); + wrappedWriter.WriteElementString(GeneratedByElementName, GeneratorName); var fileExcludedPatterns = string.Join( ';', GeneratorSettings.SdkExcludedFilePatterns.Where(pattern => !string.IsNullOrWhiteSpace(pattern)) @@ -58,6 +63,12 @@ protected override void WriteProjectFileInternal(XmlWriter writer, string output // copy property groups elements from input foreach (var propertyGroup in ProjectElement.Elements(XmlNamespace + "PropertyGroup")) { + if (propertyGroup.Element(XmlNamespace + GeneratedByElementName)?.Value == GeneratorName) + { + // prevent adding property groups twice + continue; + } + propertyGroup.Element(XmlNamespace + "OutputPath")?.Remove(); propertyGroup.Element(XmlNamespace + "ProductVersion")?.Remove(); propertyGroup.Element(XmlNamespace + "SchemaVersion")?.Remove(); diff --git a/src/UnityVisualStudioSolutionGenerator/Assets/Editor/SolutionFile.cs b/src/UnityVisualStudioSolutionGenerator/Assets/Editor/SolutionFile.cs index 8ca1944..e813511 100644 --- a/src/UnityVisualStudioSolutionGenerator/Assets/Editor/SolutionFile.cs +++ b/src/UnityVisualStudioSolutionGenerator/Assets/Editor/SolutionFile.cs @@ -18,6 +18,11 @@ static SolutionFile() CurrentProjectSolution = new SolutionFile(solutionDirectoryPath, solutionFilePath); } + /// + /// Initializes a new instance of the class. + /// + /// The directory that contains the .sln file. + /// The full path of the .sln file. public SolutionFile(string solutionDirectoryPath, string solutionFilePath) { SolutionDirectoryPath = solutionDirectoryPath ?? throw new ArgumentNullException(nameof(solutionDirectoryPath)); diff --git a/src/UnityVisualStudioSolutionGenerator/Assets/Editor/VisualStudioAssetPostprocessor.cs b/src/UnityVisualStudioSolutionGenerator/Assets/Editor/VisualStudioAssetPostprocessor.cs index b8285d7..65b6445 100644 --- a/src/UnityVisualStudioSolutionGenerator/Assets/Editor/VisualStudioAssetPostprocessor.cs +++ b/src/UnityVisualStudioSolutionGenerator/Assets/Editor/VisualStudioAssetPostprocessor.cs @@ -160,18 +160,26 @@ private static List GenerateNewProjects(IReadOnlyList var newProjects = new List(); foreach (var project in allProjects) { - if (!File.Exists(project.FilePath)) + var projectFilePath = project.FilePath; + var projectFilePathInSolutionDirectory = Path.Combine(solutionDirectoryPath, Path.GetFileName(projectFilePath)); + if (projectFilePathInSolutionDirectory != projectFilePath && File.Exists(projectFilePathInSolutionDirectory)) { - LogHelper.LogInformation($"The project file '{project.FilePath}' doesn't exists so we skip it from the solution."); + // prefer file from solution directory (the one generated by Unity), if it exists. + projectFilePath = projectFilePathInSolutionDirectory; + } + + if (!File.Exists(projectFilePath)) + { + LogHelper.LogInformation($"The project file '{projectFilePath}' doesn't exists so we skip it from the solution."); continue; } - var generator = ProjectFileGeneratorBase.Create(project.FilePath); + var generator = ProjectFileGeneratorBase.Create(projectFilePath); if (generator.IsProjectFromPackageCache()) { LogHelper.LogVerbose( - $"The project '{Path.GetFileNameWithoutExtension(project.FilePath)}' is a Unity Package so we don't change the '.csproj' file."); + $"The project '{Path.GetFileNameWithoutExtension(projectFilePath)}' is a Unity Package so we don't change the '.csproj' file."); newProjects.Add(project); continue; } From 19e4c6a8c9aef33abb2ef9cff71042cffc3451bb Mon Sep 17 00:00:00 2001 From: JoC0de <53140583+JoC0de@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:25:31 +0100 Subject: [PATCH 2/3] update version to 1.0.13 --- src/UnityVisualStudioSolutionGenerator/Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UnityVisualStudioSolutionGenerator/Assets/package.json b/src/UnityVisualStudioSolutionGenerator/Assets/package.json index 1567e83..d5faca0 100644 --- a/src/UnityVisualStudioSolutionGenerator/Assets/package.json +++ b/src/UnityVisualStudioSolutionGenerator/Assets/package.json @@ -1,7 +1,7 @@ { "name": "com.github-joc0de.visual-studio-solution-generator", "displayName": "Unity Visual Studio Solution Generator", - "version": "1.0.12", + "version": "1.0.13", "description": "Visual Studio Solution Generator with improved developer productivity especially when working with multi-package unity projects", "unity": "2021.2", "keywords": [ From aa3cfb7844a7bb3bb2feae3b86a924ef5e6bfde2 Mon Sep 17 00:00:00 2001 From: JoC0de <53140583+JoC0de@users.noreply.github.com> Date: Fri, 22 Mar 2024 19:05:11 +0100 Subject: [PATCH 3/3] fix upm update action --- .../update-upm-packages.ps1 | 48 +++++++------------ 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/.github/actions/update-upm-packages/update-upm-packages.ps1 b/.github/actions/update-upm-packages/update-upm-packages.ps1 index 441dd83..8a0268a 100644 --- a/.github/actions/update-upm-packages/update-upm-packages.ps1 +++ b/.github/actions/update-upm-packages/update-upm-packages.ps1 @@ -10,11 +10,6 @@ param ( [string] $ProjectPath, - [Parameter(Mandatory = $true, - HelpMessage = "List of pattern used to determine packages that can't be updated.")] - [string[]] - $ExcludedPackagePatterns, - [Parameter(Mandatory = $true, HelpMessage = 'List of package.json files that should also be updated with the new version numbers.')] [string[]] @@ -22,30 +17,8 @@ param ( ) $ErrorActionPreference = 'Stop' -$UnityPackageRepositoryBaseUrl = 'https://packages.unity.com' - -function Test-Any { - param ( - [Parameter(Mandatory = $true)] - $EvaluateCondition, - [Parameter(Mandatory = $true, ValueFromPipeline = $true)] - $ObjectToTest - ) - begin { - $any = $false - } - process { - if (-not $any -and (& $EvaluateCondition $ObjectToTest)) { - $any = $true - } - } - end { - $any - } -} $ProjectPath = $ProjectPath.Trim() -$ExcludedPackagePatterns = $ExcludedPackagePatterns | ForEach-Object { $_.Trim() } $PackageJsonFilesToUpdate = $PackageJsonFilesToUpdate | ForEach-Object { $_.Trim() } $oldLocation = Get-Location try { @@ -55,18 +28,29 @@ try { throw "One of the provided package.json files doesn't exists: ['$($PackageJsonFilesToUpdate -join "'; '")']" } - $manifestObject = Get-Content -Path 'Packages\manifest.json' -Encoding utf8 | ConvertFrom-Json + $manifestObject = Get-Content -Path 'Packages\manifest.json' -Encoding utf8 | ConvertFrom-Json -Depth 10 + $packagesLockObject = Get-Content -Path "Packages\packages-lock.json" -Encoding utf8 | ConvertFrom-Json -Depth 10 $availableUpdates = New-Object Collections.Generic.List[PsObject] foreach ($dependency in $manifestObject.dependencies.PsObject.Properties) { $packageName = $dependency.Name $currentVersion = $dependency.Value - if ($ExcludedPackagePatterns | Test-Any { $_ -like $packageName }) { + $packageLockData = $packagesLockObject.dependencies.PsObject.Properties[$packageName].Value + if ($packageLockData.source -ne 'registry') { continue } - $repositoryBaseUrl = $UnityPackageRepositoryBaseUrl - $packageMetadata = Invoke-WebRequest -Uri "$repositoryBaseUrl/$packageName" | ConvertFrom-Json + $repositoryBaseUrl = $packageLockData.url + $packageMetadata = Invoke-WebRequest -Uri "$repositoryBaseUrl/$packageName" | ConvertFrom-Json -Depth 10 $latestVersion = $packageMetadata.'dist-tags'.latest + if ($currentVersion.Contains('-')) { + # current is pre-release -> allow pre-release + $latestVersion = $packageMetadata.'dist-tags'.latest + } + else { + $latestVersion = ($packageMetadata.versions.PsObject.Properties | Where-Object { -not $_.Name.Contains('-') } | + ForEach-Object { [System.Version]::Parse($_.Name) } | Sort-Object -Descending | Select-Object -First 1).ToString() + } + if ([System.String]::IsNullOrEmpty($latestVersion)) { throw "Failed to get latest version number for package: '$packageName'. Received the following from the registry: '$repositoryBaseUrl': $packageMetadata" } @@ -88,7 +72,7 @@ try { } Write-Host "Update Packages/manifest.json of Unity project at: '$ProjectPath'" - ConvertTo-Json -InputObject $manifestObject | Set-Content -Path 'Packages\manifest.json' -Encoding utf8 + ConvertTo-Json -InputObject $manifestObject -Depth 10 | Set-Content -Path 'Packages\manifest.json' -Encoding utf8 foreach ($packageJsonFile in $PackageJsonFilesToUpdate) { $packageJsonContent = Get-Content -Path $packageJsonFile -Encoding utf8