From 6f56315c74d5b60fc6cf60b0f8fb245e4c3be178 Mon Sep 17 00:00:00 2001 From: Emma Date: Tue, 11 Aug 2026 16:03:46 -0400 Subject: [PATCH 1/6] fix: Message sending GC allocations (#4119) * fix: GC allocations * Add message receive allocations test * Revert the fix to check ILPP build fails the test * Revert forced failure * Remove gc checks on NetworkListTests --- .../Messages/NetworkVariableDeltaMessage.cs | 8 +- .../Runtime/Messaging/Messages/RpcMessages.cs | 8 +- .../Messaging/NetworkMessageManager.cs | 11 +- .../Runtime/Metrics/MetricHooks.cs | 23 +++- .../Collections/NetworkList.cs | 33 +++--- .../Runtime/Serialization/BitReader.cs | 2 +- .../Runtime/Serialization/FastBufferReader.cs | 2 +- .../Editor/Messaging/MessageReceivingTests.cs | 103 ++++++++--------- .../Editor/Serialization/BytePackerTests.cs | 2 +- .../Serialization/FastBufferReaderTests.cs | 5 +- .../Tests/Runtime/Helpers/MessageCatcher.cs | 8 +- .../MessageReceiveAllocationTests.cs | 106 ++++++++++++++++++ .../MessageReceiveAllocationTests.cs.meta | 2 + .../NetworkVariable/NetworkVariableTests.cs | 2 +- .../Tests/Runtime/Rpc/RpcInvocationTests.cs | 8 ++ .../Tests/Runtime/Rpc/RpcManyClientsTests.cs | 7 ++ 16 files changed, 240 insertions(+), 90 deletions(-) create mode 100644 com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs create mode 100644 com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs.meta diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/NetworkVariableDeltaMessage.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/NetworkVariableDeltaMessage.cs index 11fe2e2a7e..3e4c6a0541 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/NetworkVariableDeltaMessage.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/NetworkVariableDeltaMessage.cs @@ -47,7 +47,7 @@ internal struct NetworkVariableDeltaMessage : INetworkMessage private Dictionary> m_ForwardUpdates; - private List m_UpdatedNetworkVariables; + private NativeList m_UpdatedNetworkVariables; [MethodImpl(MethodImplOptions.AggressiveInlining)] private void WriteNetworkVariable(ref FastBufferWriter writer, ref NetworkVariableBase networkVariable, bool ensureNetworkVariableLengthSafety, int nonfragmentedSize, int fragmentedSize) @@ -217,7 +217,7 @@ public void Handle(ref NetworkContext context) var networkBehaviour = networkObject.GetNetworkBehaviourAtOrderIndex(NetworkBehaviourIndex); var isServerAndDeltaForwarding = m_ReceivedMessageVersion >= k_ServerDeltaForwardingAndNetworkDelivery && networkManager.IsServer; var markNetworkVariableDirty = m_ReceivedMessageVersion >= k_ServerDeltaForwardingAndNetworkDelivery ? false : networkManager.IsServer; - m_UpdatedNetworkVariables = new List(); + m_UpdatedNetworkVariables = new NativeList(Allocator.Temp); if (networkBehaviour == null) { @@ -396,9 +396,9 @@ public void Handle(ref NetworkContext context) // When a server forwards delta updates to connected clients, it needs to preserve the previous value // until it is done serializing all valid NetworkVariable field deltas (relative to each client). This // is invoked after it is done forwarding the deltas. - foreach (var fieldIndex in m_UpdatedNetworkVariables) + for (int i = 0; i < m_UpdatedNetworkVariables.Length; i++) { - networkBehaviour.NetworkVariableFields[fieldIndex].PostDeltaRead(); + networkBehaviour.NetworkVariableFields[m_UpdatedNetworkVariables[i]].PostDeltaRead(); } } } diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/RpcMessages.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/RpcMessages.cs index b7f1320788..0dbb3b6bf6 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/RpcMessages.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/Messages/RpcMessages.cs @@ -83,12 +83,8 @@ public static void Handle(ref NetworkContext context, ref RpcMetadata metadata, { networkManager.Log.Exception(ex, new Context(LogLevel.Error, "Unhandled RPC exception!").AddNetworkBehaviour(networkBehaviour)); - var methodId = metadata.NetworkRpcMethodId; - networkManager.Log.Info(new Context(LogLevel.Developer, "RPC Table Contents").AddCollection(rpcsForBehaviour, entry => - { - var invokePermission = NetworkBehaviour.__rpc_permission_table[networkBehaviour.GetType()][methodId]; - return $"{entry.Key} | {entry.Value.Method.Name} | {invokePermission}"; - })); + var invokePermission = permission; + networkManager.Log.Info(new Context(LogLevel.Developer, "RPC Table Contents").AddCollection(rpcsForBehaviour, entry => $"{entry.Key} | {entry.Value.Method.Name} | {invokePermission}")); } } } diff --git a/com.unity.netcode.gameobjects/Runtime/Messaging/NetworkMessageManager.cs b/com.unity.netcode.gameobjects/Runtime/Messaging/NetworkMessageManager.cs index 343cec9961..21df4c7e4b 100644 --- a/com.unity.netcode.gameobjects/Runtime/Messaging/NetworkMessageManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Messaging/NetworkMessageManager.cs @@ -503,9 +503,9 @@ internal void CleanupDisconnectedClients() m_DisconnectedClients.Clear(); } - public static int CreateMessageAndGetVersion() where T : INetworkMessage, new() + public static int CreateMessageAndGetVersion() where T : struct, INetworkMessage { - return new T().Version; + return default(T).Version; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -538,10 +538,10 @@ internal int GetMessageVersion(Type type, ulong clientId, bool forReceive = fals - public static void ReceiveMessage(FastBufferReader reader, ref NetworkContext context, NetworkMessageManager manager) where T : INetworkMessage, new() + public static void ReceiveMessage(FastBufferReader reader, ref NetworkContext context, NetworkMessageManager manager) where T : struct, INetworkMessage { var messageType = typeof(T); - var message = new T(); + var message = default(T); var messageVersion = 0; // Special cases because these are the messages that carry the version info - thus the version info isn't @@ -633,8 +633,9 @@ internal int SendMessage(ref TMessageType messa return largestSerializedSize; } - internal unsafe int SendPreSerializedMessage(in FastBufferWriter tmpSerializer, int maxSize, ref TMessageType message, NetworkDelivery delivery, in IReadOnlyList clientIds, int messageVersionFilter) + internal unsafe int SendPreSerializedMessage(in FastBufferWriter tmpSerializer, int maxSize, ref TMessageType message, NetworkDelivery delivery, in TClientIdListType clientIds, int messageVersionFilter) where TMessageType : INetworkMessage + where TClientIdListType : IReadOnlyList { using var headerSerializer = new FastBufferWriter(FastBufferWriter.GetWriteSize(), Allocator.Temp); diff --git a/com.unity.netcode.gameobjects/Runtime/Metrics/MetricHooks.cs b/com.unity.netcode.gameobjects/Runtime/Metrics/MetricHooks.cs index fd12bc5adc..c7badc20a0 100644 --- a/com.unity.netcode.gameobjects/Runtime/Metrics/MetricHooks.cs +++ b/com.unity.netcode.gameobjects/Runtime/Metrics/MetricHooks.cs @@ -1,10 +1,12 @@ using System; +using System.Collections.Generic; namespace Unity.Netcode { internal class MetricHooks : INetworkHooks { private readonly NetworkManager m_NetworkManager; + private readonly Dictionary m_CachedTypeNames = new(); public MetricHooks(NetworkManager networkManager) { @@ -17,12 +19,12 @@ public void OnBeforeSendMessage(ulong clientId, ref T message, NetworkDeliver public void OnAfterSendMessage(ulong clientId, ref T message, NetworkDelivery delivery, int messageSizeBytes) where T : INetworkMessage { - m_NetworkManager.NetworkMetrics.TrackNetworkMessageSent(clientId, typeof(T).Name, messageSizeBytes); + m_NetworkManager.NetworkMetrics.TrackNetworkMessageSent(clientId, GetNameForType(typeof(T)), messageSizeBytes); } public void OnBeforeReceiveMessage(ulong senderId, Type messageType, int messageSizeBytes) { - m_NetworkManager.NetworkMetrics.TrackNetworkMessageReceived(senderId, messageType.Name, messageSizeBytes); + m_NetworkManager.NetworkMetrics.TrackNetworkMessageReceived(senderId, GetNameForType(messageType), messageSizeBytes); } public void OnAfterReceiveMessage(ulong senderId, Type messageType, int messageSizeBytes) @@ -66,5 +68,22 @@ public void OnAfterHandleMessage(ref T message, ref NetworkContext context) w { // TODO: Per-message metrics recording moved here } + + /// + /// Gets the Name from a given type. + /// + private string GetNameForType(Type type) + { + if (m_CachedTypeNames.TryGetValue(type, out var cachedName)) + { + return cachedName; + } + + // type.Name does a reflection lookup that does a GC allocation + // Grab the name once and save to a cache. + var name = type.Name; + m_CachedTypeNames.Add(type, name); + return name; + } } } diff --git a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs index 9c0cb4bd83..acf139b0d1 100644 --- a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs +++ b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Collections/NetworkList.cs @@ -137,6 +137,15 @@ public override void WriteDelta(FastBufferWriter writer) } } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private T ReadValue(FastBufferReader reader) + { + // T is constrained to unmanaged, use default rather than new() to avoid an allocation. + var value = default(T); + NetworkVariableSerialization.Serializer.Read(reader, ref value); + return value; + } + /// public override void WriteField(FastBufferWriter writer) { @@ -154,9 +163,7 @@ public override void ReadField(FastBufferReader reader) reader.ReadValueSafe(out ushort count); for (int i = 0; i < count; i++) { - var value = new T(); - NetworkVariableSerialization.Serializer.Read(reader, ref value); - m_List.Add(value); + m_List.Add(ReadValue(reader)); } } @@ -178,8 +185,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta) { case NetworkListEvent.EventType.Add: { - var value = new T(); - NetworkVariableSerialization.Serializer.Read(reader, ref value); + var value = ReadValue(reader); m_List.Add(value); if (OnListChanged != null) @@ -188,7 +194,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta) { Type = eventType, Index = m_List.Length - 1, - Value = m_List[m_List.Length - 1] + Value = value }); } @@ -198,7 +204,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta) { Type = eventType, Index = m_List.Length - 1, - Value = m_List[m_List.Length - 1] + Value = value }); // Preserve the legacy way of handling this if (keepDirtyDelta) @@ -211,8 +217,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta) case NetworkListEvent.EventType.Insert: { ByteUnpacker.ReadValueBitPacked(reader, out int index); - var value = new T(); - NetworkVariableSerialization.Serializer.Read(reader, ref value); + var value = ReadValue(reader); if (index < m_List.Length) { @@ -230,7 +235,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta) { Type = eventType, Index = index, - Value = m_List[index] + Value = value }); } @@ -240,7 +245,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta) { Type = eventType, Index = index, - Value = m_List[index] + Value = value }); // Preserve the legacy way of handling this if (keepDirtyDelta) @@ -252,8 +257,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta) break; case NetworkListEvent.EventType.Remove: { - var value = new T(); - NetworkVariableSerialization.Serializer.Read(reader, ref value); + var value = ReadValue(reader); int index = m_List.IndexOf(value); if (index == -1) { @@ -323,8 +327,7 @@ public override void ReadDelta(FastBufferReader reader, bool keepDirtyDelta) case NetworkListEvent.EventType.Value: { ByteUnpacker.ReadValueBitPacked(reader, out int index); - var value = new T(); - NetworkVariableSerialization.Serializer.Read(reader, ref value); + var value = ReadValue(reader); if (index >= m_List.Length) { throw new Exception("Shouldn't be here, index is higher than list length"); diff --git a/com.unity.netcode.gameobjects/Runtime/Serialization/BitReader.cs b/com.unity.netcode.gameobjects/Runtime/Serialization/BitReader.cs index ab8c9bc5ce..92d1951a7a 100644 --- a/com.unity.netcode.gameobjects/Runtime/Serialization/BitReader.cs +++ b/com.unity.netcode.gameobjects/Runtime/Serialization/BitReader.cs @@ -170,7 +170,7 @@ public unsafe void ReadBit(out bool bit) [MethodImpl(MethodImplOptions.AggressiveInlining)] private unsafe void ReadPartialValue(out T value, int bytesToRead, int offsetBytes = 0) where T : unmanaged { - var val = new T(); + var val = default(T); byte* ptr = ((byte*)&val) + offsetBytes; byte* bufferPointer = m_BufferPointer + BytePosition; UnsafeUtility.MemCpy(ptr, bufferPointer, bytesToRead); diff --git a/com.unity.netcode.gameobjects/Runtime/Serialization/FastBufferReader.cs b/com.unity.netcode.gameobjects/Runtime/Serialization/FastBufferReader.cs index d132f775fd..522e9c4bad 100644 --- a/com.unity.netcode.gameobjects/Runtime/Serialization/FastBufferReader.cs +++ b/com.unity.netcode.gameobjects/Runtime/Serialization/FastBufferReader.cs @@ -707,7 +707,7 @@ public unsafe void ReadPartialValue(out T value, int bytesToRead, int offsetB } #endif - var val = new T(); + var val = default(T); byte* ptr = ((byte*)&val) + offsetBytes; byte* bufferPointer = Handle->BufferPointer + Handle->Position; UnsafeUtility.MemCpy(ptr, bufferPointer, bytesToRead); diff --git a/com.unity.netcode.gameobjects/Tests/Editor/Messaging/MessageReceivingTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/Messaging/MessageReceivingTests.cs index 5a879f1c20..1cf88e4815 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/Messaging/MessageReceivingTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/Messaging/MessageReceivingTests.cs @@ -1,9 +1,10 @@ using System; using System.Collections.Generic; using NUnit.Framework; -using NUnit.Framework.Internal; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; +using UnityEngine.TestTools.Constraints; +using Is = NUnit.Framework.Is; namespace Unity.Netcode.GameObjects.EditorTests { @@ -95,22 +96,23 @@ public void WhenHandlingAMessage_ReceiveMethodIsCalled() }; var message = GetMessage(); - var writer = new FastBufferWriter(1300, Allocator.Temp); - using (writer) - { - writer.TryBeginWrite(FastBufferWriter.GetWriteSize(message)); - writer.WriteValue(message); + using var writer = new FastBufferWriter(1300, Allocator.Temp); + writer.TryBeginWrite(FastBufferWriter.GetWriteSize(message)); + writer.WriteValue(message); - var reader = new FastBufferReader(writer, Allocator.Temp); - using (reader) - { - m_MessageManager.HandleMessage(messageHeader, reader, 0, 0, 0); - Assert.IsTrue(TestMessage.Deserialized); - Assert.IsTrue(TestMessage.Handled); - Assert.AreEqual(1, TestMessage.DeserializedValues.Count); - Assert.AreEqual(message, TestMessage.DeserializedValues[0]); - } - } + using var reader = new FastBufferReader(writer, Allocator.Temp); + m_MessageManager.HandleMessage(messageHeader, reader, 0, 0, 0); + Assert.IsTrue(TestMessage.Deserialized); + Assert.IsTrue(TestMessage.Handled); + Assert.AreEqual(1, TestMessage.DeserializedValues.Count); + Assert.AreEqual(message, TestMessage.DeserializedValues[0]); + + // Check for GC Allocations + Assert.That(() => + { + reader.Seek(0); + m_MessageManager.HandleMessage(messageHeader, reader, 0, 0, 0); + }, Is.Not.AllocatingGCMemory()); } [Test] @@ -220,44 +222,45 @@ public unsafe void WhenReceivingMultipleMessagesAndProcessingMessageQueue_Receiv var message = GetMessage(); var message2 = GetMessage(); - var writer = new FastBufferWriter(1300, Allocator.Temp); - using (writer) + using var writer = new FastBufferWriter(1300, Allocator.Temp); + writer.WriteValueSafe(batchHeader); + BytePacker.WriteValueBitPacked(writer, messageHeader.MessageType); + BytePacker.WriteValueBitPacked(writer, messageHeader.MessageSize); + writer.WriteValueSafe(message); + BytePacker.WriteValueBitPacked(writer, messageHeader.MessageType); + BytePacker.WriteValueBitPacked(writer, messageHeader.MessageSize); + writer.WriteValueSafe(message2); + + // Fill out the rest of the batch header + writer.Seek(0); + batchHeader = new NetworkBatchHeader { - writer.WriteValueSafe(batchHeader); - BytePacker.WriteValueBitPacked(writer, messageHeader.MessageType); - BytePacker.WriteValueBitPacked(writer, messageHeader.MessageSize); - writer.WriteValueSafe(message); - BytePacker.WriteValueBitPacked(writer, messageHeader.MessageType); - BytePacker.WriteValueBitPacked(writer, messageHeader.MessageSize); - writer.WriteValueSafe(message2); + Magic = NetworkBatchHeader.MagicValue, + BatchSize = writer.Length, + BatchHash = XXHash.Hash64(writer.GetUnsafePtr() + sizeof(NetworkBatchHeader), writer.Length - sizeof(NetworkBatchHeader)), + BatchCount = 2 + }; + writer.WriteValue(batchHeader); - // Fill out the rest of the batch header - writer.Seek(0); - batchHeader = new NetworkBatchHeader - { - Magic = NetworkBatchHeader.MagicValue, - BatchSize = writer.Length, - BatchHash = XXHash.Hash64(writer.GetUnsafePtr() + sizeof(NetworkBatchHeader), writer.Length - sizeof(NetworkBatchHeader)), - BatchCount = 2 - }; - writer.WriteValue(batchHeader); + var data = new ArraySegment(writer.ToArray()); + m_MessageManager.HandleIncomingData(0, data, 0); + Assert.IsFalse(TestMessage.Deserialized); + Assert.IsFalse(TestMessage.Handled); + Assert.IsEmpty(TestMessage.DeserializedValues); - var reader = new FastBufferReader(writer, Allocator.Temp); - using (reader) - { - m_MessageManager.HandleIncomingData(0, new ArraySegment(writer.ToArray()), 0); - Assert.IsFalse(TestMessage.Deserialized); - Assert.IsFalse(TestMessage.Handled); - Assert.IsEmpty(TestMessage.DeserializedValues); + m_MessageManager.ProcessIncomingMessageQueue(); + Assert.IsTrue(TestMessage.Deserialized); + Assert.IsTrue(TestMessage.Handled); + Assert.AreEqual(2, TestMessage.DeserializedValues.Count); + Assert.AreEqual(message, TestMessage.DeserializedValues[0]); + Assert.AreEqual(message2, TestMessage.DeserializedValues[1]); - m_MessageManager.ProcessIncomingMessageQueue(); - Assert.IsTrue(TestMessage.Deserialized); - Assert.IsTrue(TestMessage.Handled); - Assert.AreEqual(2, TestMessage.DeserializedValues.Count); - Assert.AreEqual(message, TestMessage.DeserializedValues[0]); - Assert.AreEqual(message2, TestMessage.DeserializedValues[1]); - } - } + // Check for GC Allocations + Assert.That(() => + { + m_MessageManager.HandleIncomingData(0, data, 0); + m_MessageManager.ProcessIncomingMessageQueue(); + }, Is.Not.AllocatingGCMemory()); } } } diff --git a/com.unity.netcode.gameobjects/Tests/Editor/Serialization/BytePackerTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/Serialization/BytePackerTests.cs index 30881efff0..9189843ac3 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/Serialization/BytePackerTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/Serialization/BytePackerTests.cs @@ -92,7 +92,7 @@ private unsafe void RunTypeTest(T value) where T : unmanaged using (reader) { - var outVal = new T(); + var outVal = default(T); MethodInfo method; if (value is Enum) { diff --git a/com.unity.netcode.gameobjects/Tests/Editor/Serialization/FastBufferReaderTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/Serialization/FastBufferReaderTests.cs index b27eda622b..ac840639d0 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/Serialization/FastBufferReaderTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/Serialization/FastBufferReaderTests.cs @@ -259,7 +259,7 @@ private void RunReadMethod(string methodName, FastBufferReader reader, out T } } } - value = new T(); + value = default; Assert.NotNull(method); @@ -766,8 +766,7 @@ public unsafe void RunFixedStringTest(T fixedStringValue, int numBytesWritten { VerifyPositionAndLength(reader, writer.Length); - var result = new T(); - reader.ReadValueSafe(out result); + reader.ReadValueSafe(out T result); Assert.AreEqual(fixedStringValue, result); VerifyCheckBytes(reader, serializedValueSize); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Helpers/MessageCatcher.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Helpers/MessageCatcher.cs index f408532871..63955c1acc 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Helpers/MessageCatcher.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Helpers/MessageCatcher.cs @@ -25,7 +25,6 @@ private struct TriggerData public void ReleaseMessages() { - foreach (var caughtSpawn in m_CaughtMessages) { // Reader will be disposed within HandleMessage @@ -33,6 +32,13 @@ public void ReleaseMessages() } } + public void HandleCaughtMessage(int index) + { + var caughtMessage = m_CaughtMessages[index]; + // Reader will be disposed within HandleMessage + m_OwnerNetworkManager.ConnectionManager.MessageManager.HandleMessage(caughtMessage.Header, caughtMessage.Reader, caughtMessage.SenderId, caughtMessage.Timestamp, caughtMessage.SerializedHeaderSize); + } + public int CaughtMessageCount => m_CaughtMessages.Count; public void OnBeforeSendMessage(ulong clientId, ref T message, NetworkDelivery delivery) where T : INetworkMessage diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs new file mode 100644 index 0000000000..bcd768ac9c --- /dev/null +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs @@ -0,0 +1,106 @@ +using System.Collections; +using NUnit.Framework; +using Unity.Netcode.TestHelpers.Runtime; +using UnityEngine; +using UnityEngine.TestTools; +using UnityEngine.TestTools.Constraints; +using Is = NUnit.Framework.Is; + +namespace Unity.Netcode.RuntimeTests +{ + internal class AllocationTestBehaviour : NetworkBehaviour + { + internal int RpcReceivedCount; + + public NetworkVariable TestVariable = new(); + + [Rpc(SendTo.NotMe)] + public void NotMeRpc() + { + RpcReceivedCount++; + } + } + + [TestFixture(HostOrServer.Host)] + [TestFixture(HostOrServer.DAHost)] + internal class MessageReceiveAllocationTests : NetcodeIntegrationTest + { + protected override int NumberOfClients => 1; + + public MessageReceiveAllocationTests(HostOrServer hostOrServer) : base(hostOrServer) { } + + private GameObject m_Prefab; + + protected override void OnServerAndClientsCreated() + { + m_Prefab = CreateNetworkObjectPrefab(nameof(AllocationTestBehaviour)); + m_Prefab.AddComponent(); + base.OnServerAndClientsCreated(); + } + + [UnityTest] + public IEnumerator NoAllocationsOnMessageReceive() + { + var authority = GetAuthorityNetworkManager(); + var nonAuthority = GetNonAuthorityNetworkManager(); + + var authorityInstance = SpawnObject(m_Prefab, authority); + var authorityComponent = authorityInstance.GetComponent(); + yield return WaitForSpawnedOnAllOrTimeOut(authorityInstance); + AssertOnTimeout("Timed out waiting for objects to spawn"); + + var nonAuthorityComponent = nonAuthority.SpawnManager.SpawnedObjects[authorityComponent.NetworkObjectId].GetComponent(); + + /* + * RpcMessage + */ + var rpcCatcher = new MessageCatcher(nonAuthority); + nonAuthority.ConnectionManager.MessageManager.Hook(rpcCatcher); + + // Send the same message twice: the first is replayed as a warm-up. + // The second will follow the identical code path and is checked for allocations. + authorityComponent.NotMeRpc(); + authorityComponent.NotMeRpc(); + yield return WaitForConditionOrTimeOut(() => rpcCatcher.CaughtMessageCount == 2); + AssertOnTimeout($"Timed out waiting to catch all expected {nameof(RpcMessage)} messages. Expected: 2, Actual: {rpcCatcher.CaughtMessageCount}"); + + // Unhook first so the replayed messages are handled instead of being caught again + nonAuthority.ConnectionManager.MessageManager.Unhook(rpcCatcher); + + rpcCatcher.HandleCaughtMessage(0); + Assert.AreEqual(1, nonAuthorityComponent.RpcReceivedCount); + + Assert.That(() => + { + rpcCatcher.HandleCaughtMessage(1); + }, Is.Not.AllocatingGCMemory()); + Assert.AreEqual(2, nonAuthorityComponent.RpcReceivedCount); + + /* + * NetworkVariableDeltaMessage + */ + var deltaCatcher = new MessageCatcher(nonAuthority); + nonAuthority.ConnectionManager.MessageManager.Hook(deltaCatcher); + + authorityComponent.TestVariable.Value = 1; + // Wait for the first change to be received client-side before sending the second change + yield return WaitForConditionOrTimeOut(() => deltaCatcher.CaughtMessageCount == 1); + authorityComponent.TestVariable.Value = 2; + yield return WaitForConditionOrTimeOut(() => deltaCatcher.CaughtMessageCount == 2); + AssertOnTimeout($"Timed out waiting to catch all expected {nameof(NetworkVariableDeltaMessage)} messages. Expected: 2, Actual: {deltaCatcher.CaughtMessageCount}"); + + // Unhook first so the replayed messages are handled instead of being caught again + nonAuthority.ConnectionManager.MessageManager.Unhook(deltaCatcher); + + deltaCatcher.HandleCaughtMessage(0); + Assert.AreEqual(1, nonAuthorityComponent.TestVariable.Value); + + Assert.That(() => + { + deltaCatcher.HandleCaughtMessage(1); + }, Is.Not.AllocatingGCMemory()); + Assert.AreEqual(2, nonAuthorityComponent.TestVariable.Value); + } + + } +} diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs.meta b/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs.meta new file mode 100644 index 0000000000..88be098d8d --- /dev/null +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 52d657f70a8454deaa08d1de60e0fee1 \ No newline at end of file diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs index 85a72d9f19..4eb9611a75 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs @@ -1780,7 +1780,7 @@ public void WhenSerializingAndDeserializingValueTypeNativeArrayNetworkVariables_ public unsafe T RandGenBytes(System.Random rand) where T : unmanaged { - var t = new T(); + var t = default(T); T* tPtr = &t; var s = new Span(tPtr, sizeof(T)); rand.NextBytes(s); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcInvocationTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcInvocationTests.cs index 52faa09867..83cdb828bf 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcInvocationTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcInvocationTests.cs @@ -8,6 +8,8 @@ using Unity.Netcode.TestHelpers.Runtime; using UnityEngine; using UnityEngine.TestTools; +using UnityEngine.TestTools.Constraints; +using Is = NUnit.Framework.Is; namespace Unity.Netcode.RuntimeTests { @@ -335,6 +337,12 @@ public IEnumerator RpcInvocationOrderTests() Assert.IsTrue(ValidateInvocationOrder(errorLog), $"[Has nested][nonAuthority][{testType}] Rpcs were invoked in an incorrect order\n {errorLog}"); errorLog.Clear(); } + + // Safety check for GC allocations + Assert.That(() => + { + nonAuthorityInstance.EveryoneInvokePermissionRpc(); + }, Is.Not.AllocatingGCMemory()); } private void ResetAllExpectedInvocations() diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcManyClientsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcManyClientsTests.cs index 62fb94bbe5..99f88ecf85 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcManyClientsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcManyClientsTests.cs @@ -4,6 +4,7 @@ using NUnit.Framework; using Unity.Netcode.TestHelpers.Runtime; using UnityEngine; +using UnityEngine.TestTools.Constraints; namespace Unity.Netcode.RuntimeTests { @@ -150,6 +151,12 @@ public void RpcManyClientsTest() var possibility1 = new List { m_ClientNetworkManagers[1].LocalClientId, m_ClientNetworkManagers[2].LocalClientId }; var possibility2 = new List { m_ClientNetworkManagers[2].LocalClientId, m_ClientNetworkManagers[1].LocalClientId }; Debug.Assert(Enumerable.SequenceEqual(rpcManyClientsObject.ReceivedFrom, possibility1) || Enumerable.SequenceEqual(rpcManyClientsObject.ReceivedFrom, possibility2)); + + // Safety check for GC allocations + Assert.That(() => + { + rpcManyClientsObject.WithParamsClientRpc(param); + }, NUnit.Framework.Is.Not.AllocatingGCMemory()); } } } From 9c3a0ce3ebbea5225fbc4766931720e2a13ae8f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Chrobot?= <124174716+michalChrobot@users.noreply.github.com> Date: Thu, 13 Aug 2026 13:23:21 +0200 Subject: [PATCH 2/6] ci: re-enable PS5 and Switch jobs (#4117) * Re-enabled ps5 and webgl * ci: Add WebGL PlayMode test job (MTT-15569) Split the WebGL CI into a build phase and a run phase. webgl-build.yml now exposes the built player as a dedicated 'players' artifact, and a new webgl-test.yml run job consumes it and executes the PlayMode tests inside Firefox on a GPU-backed Ubuntu agent (Unity::VM::GPU, rtx2080). The Firefox browser flags are passed explicitly so UTR does not attempt to download the browser from Stevedore. The run job is wired into the Nightly and Weekly (QV) triggers only, not into PR triggers, since WebGL failures are infrequent and the build is slow. Runtime RuntimePlatform.WebGLPlayer exclusions are intentionally deferred to be added reactively after the first real CI run. * corrected images * disabled webgl test * adjustments * Removed WebGL changes * reverted change * added diagnostic for switch * corrected Switch sdk version * temporarily disabled switch * corrected ticket description --- .yamato/console-standalone-test.yml | 23 +++++++++--------- .yamato/project.metafile | 36 ++++++++++++++--------------- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/.yamato/console-standalone-test.yml b/.yamato/console-standalone-test.yml index dba4a796a1..9574e07e1b 100644 --- a/.yamato/console-standalone-test.yml +++ b/.yamato/console-standalone-test.yml @@ -31,7 +31,6 @@ # Each console requires specific SDK paths and tools # QUALITY THOUGHTS-------------------------------------------------------------------- - # TODO: consider adding all projects that have tests # To see where this job is included (in trigger job definitions) look into _triggers.yml file @@ -51,16 +50,16 @@ console_standalone_build_{{ project.name }}_{{ platform.name }}_{{ editor }}: {% endif %} commands: - unity-downloader-cli --fast --wait -u {{ editor }} -c Editor -c il2cpp -c {{ platform.name }} - - UnifiedTestRunner --testproject={{ project.path }} --architecture={% if platform.name == "switch" %}arm64{% else %}x64{% endif %} --scripting-backend=il2cpp --suite=playmode --platform={{ platform.standalone }} --editor-location=.Editor --artifacts-path=artifacts --player-save-path=build/players --testfilter="Unity.Netcode.RuntimeTests.*" --extra-editor-arg=-batchmode --extra-editor-arg=-nographics --reruncount=1 --clean-library-on-rerun --build-only --timeout={{ test_timeout}} + - UnifiedTestRunner --testproject={{ project.path }} --architecture={% if platform.name == "switch" %}arm64{% else %}x64{% endif %} --scripting-backend=il2cpp --suite=playmode --platform={{ platform.standalone }} --editor-location=.Editor --artifacts-path=artifacts --player-save-path=build/players --testfilter="Unity.Netcode.RuntimeTests.*" --extra-editor-arg=-batchmode --extra-editor-arg=-nographics{% if platform.name == "switch" %} --extra-editor-arg=-overrideTextureCompression --extra-editor-arg=ForceUncompressed{% endif %} --reruncount=1 --clean-library-on-rerun --build-only --timeout={{ test_timeout}} variables: # PS4 related SCE_ORBIS_SDK_DIR: 'C:\Users\bokken\SCE\ps4_sdk_12_00' -# PS5 related --> THIS WAS DISABLED IN PROJECT.METAFILE. SEE MTT-12118 - SCE_PROSPERO_SDK_DIR: 'C:\Program Files (x86)\SCE\Prospero SDKs\9.000' - SHADER_COMPILER_PATH: '${SCE_PROSPERO_SDK_DIR}\target\bins' +# PS5 related --> win10-ps5:v4 ships SDK 13.000 but defaults SCE_PROSPERO_SDK_DIR to an unsupported version, so set it explicitly. + SCE_PROSPERO_SDK_DIR: 'C:\Program Files (x86)\SCE\Prospero SDKs\13.000' + SHADER_COMPILER_PATH: '${SCE_PROSPERO_SDK_DIR}\host_tools\bin' SCE_ROOT_DIR: 'C:\Program Files (x86)\SCE' -# Switch related - NINTENDO_SDK_ROOT: 'C:\Nintendo\nx_sdk-18_3_0\NintendoSDK' +# Switch related --> Switch is DISABLED in project.metafile (MTT-15636): 6000.x/trunk editors mandate NintendoSDK 22.2.x, which is not installed on win10-switch:v4 (only nintendosdk-en-21_4_0 is). This target path is correct for when PETS ships 22.2.x and Switch is re-enabled. + NINTENDO_SDK_ROOT: 'C:\Nintendo\nintendosdk-en-22_2_0\NintendoSDK' UNITY_NINTENDOSDK_CLI_TOOLS: '${NINTENDO_SDK_ROOT}\Tools\CommandLineTools' artifacts: players: @@ -94,12 +93,12 @@ console_standalone_test_{{ project.name }}_{{ platform.name }}_{{ editor }}: variables: # PS4 related SCE_ORBIS_SDK_DIR: 'C:\Users\bokken\SCE\ps4_sdk_12_00' -# PS5 related --> THIS WAS DISABLED IN PROJECT.METAFILE. SEE MTT-12118 - SCE_PROSPERO_SDK_DIR: 'C:\Program Files (x86)\SCE\Prospero SDKs\9.000' - SHADER_COMPILER_PATH: '${SCE_PROSPERO_SDK_DIR}\target\bins' +# PS5 related --> win10-ps5:v4 ships SDK 13.000 but defaults SCE_PROSPERO_SDK_DIR to an unsupported version, so set it explicitly. + SCE_PROSPERO_SDK_DIR: 'C:\Program Files (x86)\SCE\Prospero SDKs\13.000' + SHADER_COMPILER_PATH: '${SCE_PROSPERO_SDK_DIR}\host_tools\bin' SCE_ROOT_DIR: 'C:\Program Files (x86)\SCE' -# Switch related - NINTENDO_SDK_ROOT: 'C:\Nintendo\nx_sdk-18_3_0\NintendoSDK' +# Switch related --> Switch is DISABLED in project.metafile (MTT-15636): 6000.x/trunk editors mandate NintendoSDK 22.2.x, which is not installed on win10-switch:v4 (only nintendosdk-en-21_4_0 is). This target path is correct for when PETS ships 22.2.x and Switch is re-enabled. + NINTENDO_SDK_ROOT: 'C:\Nintendo\nintendosdk-en-22_2_0\NintendoSDK' UNITY_NINTENDOSDK_CLI_TOOLS: '${NINTENDO_SDK_ROOT}\Tools\CommandLineTools' artifacts: logs: diff --git a/.yamato/project.metafile b/.yamato/project.metafile index 1117c4badf..9c92cbac7e 100644 --- a/.yamato/project.metafile +++ b/.yamato/project.metafile @@ -111,18 +111,15 @@ test_platforms: flavor: b1.large larger_flavor: b1.xlarge standalone: PS4 - # - name: ps5 --> SEE MTT-12118 - # type: Unity::VM - # image: package-ci/win10-ps5:v4 - # flavor: b1.large - # larger_flavor: b1.xlarge - # standalone: PS5 - # - name: switch --> TEMPORARILY DISABLED. SEE MTT-12118 - # The NintendoSDK on the win10-switch:v4 Bokken image is incomplete for the SDK - # version the newer editor Playback Engines require: 18_3_0 is missing the - # nintendo-switch-support lib the new toolchain links against, and 21_4_3 is missing the - # Tools\Graphics\NvnTools (GraphicsConverter) libraries needed to package textures. - # Neither is fixable from .yamato; re-enable once Package CI ships a complete SDK on the image. + # ps5: win10-ps5:v4 defaults SCE_PROSPERO_SDK_DIR to an unsupported SDK, so it is overridden to 13.000 in console-standalone-test.yml. + - name: ps5 + type: Unity::VM + image: package-ci/win10-ps5:v4 + flavor: b1.large + larger_flavor: b1.xlarge + standalone: PS5 + # switch --> DISABLED. SEE MTT-15636 (split from MTT-12118). 6000.x/trunk editors mandate NintendoSDK 22.2.x, but package-ci/win10-switch:v4 currently ships only nintendosdk-en-21_4_0. That fixes texture packaging but the native IL2CPP link then fails (undefined symbol std::__1::__hash_memory, from the 22_02 SwitchPlayer.a). Re-enable once PETS publishes a win10-switch image with nintendosdk-en-22_2_x. + # - name: switch # type: Unity::VM # image: package-ci/win10-switch:v4 # flavor: b1.large @@ -147,13 +144,14 @@ test_platforms: flavor: b1.large larger_flavor: b1.xlarge standalone: PS4 - #- name: ps5 --> SEE MTT-12118 - # type: Unity::console::ps5 - # image: package-ci/win10-ps5:v4 - # flavor: b1.large - # larger_flavor: b1.xlarge - # standalone: PS5 - # - name: switch --> TEMPORARILY DISABLED. SEE MTT-12118 (incomplete NintendoSDK on win10-switch:v4 image) + - name: ps5 + type: Unity::console::ps5 + image: package-ci/win10-ps5:v4 + flavor: b1.large + larger_flavor: b1.xlarge + standalone: PS5 + # switch --> DISABLED. SEE MTT-15636 (needs NintendoSDK 22.2.x on the image; see console_build note). + # - name: switch # type: Unity::console::switch # image: package-ci/win10-switch:v4 # flavor: b1.large From 224836600b85f675999f9d41b5a3b54b346ffe8f Mon Sep 17 00:00:00 2001 From: Netcode team bot Date: Tue, 18 Aug 2026 15:12:24 +0200 Subject: [PATCH 3/6] chore: Updated aspects of Netcode package in anticipation of v2.13.2 release (#4121) --- com.unity.netcode.gameobjects/CHANGELOG.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/com.unity.netcode.gameobjects/CHANGELOG.md b/com.unity.netcode.gameobjects/CHANGELOG.md index 85157fe510..fd673d8ed3 100644 --- a/com.unity.netcode.gameobjects/CHANGELOG.md +++ b/com.unity.netcode.gameobjects/CHANGELOG.md @@ -19,8 +19,6 @@ Additional documentation and release notes are available at [Multiplayer Documen - `Unity.Netcode.Editor.PackageChecker` → `Unity.Netcode.GameObjects.Editor.PackageChecker` - `Unity.Netcode.Editor.Tests` → `Unity.Netcode.GameObjects.Editor.Tests` - - ### Deprecated @@ -29,10 +27,6 @@ Additional documentation and release notes are available at [Multiplayer Documen ### Fixed -- Issue with not being able to spawn initially disabled in-scene placed objects. (#4093) -- Issue with pre-instantiated network prefab instances being marked as in-scene placed. Now pre-instantiated network prefabs are dynamically spawned. (#4093) -- Issue where a user could spawn runtime created `NetworkObject` that has a GlobalObjectIdHash of zero. These are not valid instances and will no longer be allowed to spawn. (#4093) - ### Security @@ -40,6 +34,17 @@ Additional documentation and release notes are available at [Multiplayer Documen ### Obsolete +## [2.13.2] - 2026-08-16 + + + +### Fixed + +- Issue with not being able to spawn initially disabled in-scene placed objects. (#4093) +- Issue with pre-instantiated network prefab instances being marked as in-scene placed. Now pre-instantiated network prefabs are dynamically spawned. (#4093) +- Issue where a user could spawn runtime created `NetworkObject` that has a GlobalObjectIdHash of zero. These are not valid instances and will no longer be allowed to spawn. (#4093) + + ## [2.13.1] - 2026-07-19 ### Added From 6a3294b108651f6c6de901206303f8be3e4fe99e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Chrobot?= <124174716+michalChrobot@users.noreply.github.com> Date: Tue, 18 Aug 2026 15:43:28 +0200 Subject: [PATCH 4/6] ci: Add pets-svc to pr-description-check exclusion list (#4125) Changde users exclusion to pattern exclusion in pr description check --- .github/workflows/pr-description-validation.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pr-description-validation.yml b/.github/workflows/pr-description-validation.yml index adb0b9dfda..43b1c975a0 100644 --- a/.github/workflows/pr-description-validation.yml +++ b/.github/workflows/pr-description-validation.yml @@ -30,18 +30,18 @@ jobs: script: | const pr = context.payload.pull_request; const body = pr.body || ''; - - // List of users to skip description validation + + // List of user patterns to skip description validation // This should be automations where we don't care that much about the description format - const skipUsersPrefixes = [ - 'unity-renovate', - 'svc-' + const skipUserPatterns = [ + /^unity-renovate/, + /(^|-)svc(-|$)/ ]; - // If PR author is in the skip list, exit early + // If PR author matches the skip list, exit early const author = pr.user.login; console.log(`PR author: ${author}`); - if (skipUsersPrefixes.some(prefix => author.startsWith(prefix))) { + if (skipUserPatterns.some(pattern => pattern.test(author))) { console.log(`Skipping PR description check for user: ${author}`); return; } From e8c92c9da75ed152d86f9a3435ae8743c261c84c Mon Sep 17 00:00:00 2001 From: "pets-svc[bot]" <299490404+pets-svc[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 09:52:32 +0200 Subject: [PATCH 5/6] trunk shadow changes: com.unity.netcode.gameobjects (#4120) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated changelog and package version for Netcode in anticipation of v2.13.1 release * typo in build automation * trunk shadow changes: com.unity.netcode.gameobjects [skip ci] * Revert CHANGELOG changes * Added UNITY_TEST_FRAMEWORK_1_7_OR_NEWER guard and UnityCoreClrExplicitDisabledAttributeShim.cs to make attribute usage possible * corrected svc bot exclusion --------- Co-authored-by: netcode-automation Co-authored-by: Michał Chrobot Co-authored-by: PETS automation <299490404+pets-svc[bot]@users.noreply.github.com> Co-authored-by: Emma --- .../workflows/pr-description-validation.yml | 2 +- .../BuildAutomation/manifest_update.py | 2 +- .../DeferredDespawningTests.cs | 1 + .../NetworkClientAndPlayerObjectTests.cs | 1 + .../Configuration/SinglePlayerSessions.cs | 1 + .../CustomSerializationDocsTests.cs | 1 + .../NetworkObjectSynchronizationTests.cs | 3 +++ .../NetworkVariable/NetworkListTests.cs | 1 + .../NetworkVariableAnticipationTests.cs | 2 ++ ...NetworkVariableCollectionsChangingTests.cs | 1 + .../NetworkVariableCollectionsTests.cs | 1 + .../NetworkVariableGeneralTests.cs | 1 + .../NetworkVariablePermissionTests.cs | 1 + .../NetworkVariable/NetworkVariableTests.cs | 27 +++++++++++++++++++ .../NetworkVariableTraitsTests.cs | 1 + ...tworkVariableUserSerializableTypesTests.cs | 2 ++ .../NetworkVariable/OwnerPermissionTests.cs | 1 + .../Runtime/PeerDisconnectCallbackTests.cs | 1 + .../Tests/Runtime/Rpc/RpcTests.cs | 1 + .../Runtime/Rpc/RpcTypeSerializationTests.cs | 2 ++ .../NetworkBehaviourReferenceTests.cs | 2 ++ .../Transports/SinglePlayerTransportTests.cs | 1 + .../Unity.Netcode.Runtime.Tests.asmdef | 4 +++ ...ityCoreClrExplicitDisabledAttributeShim.cs | 14 ++++++++++ ...reClrExplicitDisabledAttributeShim.cs.meta | 11 ++++++++ 25 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 com.unity.netcode.gameobjects/Tests/Runtime/UnityCoreClrExplicitDisabledAttributeShim.cs create mode 100644 com.unity.netcode.gameobjects/Tests/Runtime/UnityCoreClrExplicitDisabledAttributeShim.cs.meta diff --git a/.github/workflows/pr-description-validation.yml b/.github/workflows/pr-description-validation.yml index 43b1c975a0..268b44b809 100644 --- a/.github/workflows/pr-description-validation.yml +++ b/.github/workflows/pr-description-validation.yml @@ -35,7 +35,7 @@ jobs: // This should be automations where we don't care that much about the description format const skipUserPatterns = [ /^unity-renovate/, - /(^|-)svc(-|$)/ + /svc/ ]; // If PR author matches the skip list, exit early diff --git a/Tools/scripts/BuildAutomation/manifest_update.py b/Tools/scripts/BuildAutomation/manifest_update.py index 0ad8913b8e..1597e2bc39 100644 --- a/Tools/scripts/BuildAutomation/manifest_update.py +++ b/Tools/scripts/BuildAutomation/manifest_update.py @@ -51,7 +51,7 @@ def main(): # Extract the version, providing a default if not found local_package_version = local_package_data.get('version', 'N/A') - print(f"--> Verified local '{args.package-name}' version is: {local_package_version}") + print(f"--> Verified local '{args.package_name}' version is: {local_package_version}") except FileNotFoundError: print(f"Warning: Could not find package.json at '{local_package_json_path}'") diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DeferredDespawningTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DeferredDespawningTests.cs index 1902539113..dac15570f7 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DeferredDespawningTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DeferredDespawningTests.cs @@ -53,6 +53,7 @@ protected override void OnServerAndClientsCreated() [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator DeferredDespawning() { // Setup for test diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/NetworkClientAndPlayerObjectTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/NetworkClientAndPlayerObjectTests.cs index 929592a9b0..aabe7522c7 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/NetworkClientAndPlayerObjectTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/NetworkClientAndPlayerObjectTests.cs @@ -155,6 +155,7 @@ private bool AllNetworkClientsValidated() /// Validates the same thing when a client late joins and when a client disconnects. /// [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149595", "ValidateNetworkClients throws duplicate-key ArgumentException on CoreCLR (DAHost)")] public IEnumerator ValidateNetworkClients() { // Validate the initial clients created diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/Configuration/SinglePlayerSessions.cs b/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/Configuration/SinglePlayerSessions.cs index 945807a06c..774debccf0 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/Configuration/SinglePlayerSessions.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/Configuration/SinglePlayerSessions.cs @@ -151,6 +151,7 @@ protected override void OnNewClientCreated(NetworkManager networkManager) } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator SwitchTransportTest() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/NetworkVariable/CustomSerializationDocsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/NetworkVariable/CustomSerializationDocsTests.cs index 1e6096b187..69dfae8be8 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/NetworkVariable/CustomSerializationDocsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/NetworkVariable/CustomSerializationDocsTests.cs @@ -173,6 +173,7 @@ private bool ValidateAllAreEqual(StringBuilder errorLog) } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator TestHealthCode() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectSynchronizationTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectSynchronizationTests.cs index 7535e4ffce..b943be4883 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectSynchronizationTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectSynchronizationTests.cs @@ -94,6 +94,7 @@ protected override void OnNewClientCreated(NetworkManager networkManager) } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public IEnumerator NetworkObjectDeserializationFailure() { m_CurrentLogLevel = LogLevel.Nothing; @@ -277,6 +278,7 @@ private void ValidateNetworkBehaviourWithNetworkVariables(NetworkObject authorit /// will still be initialized properly /// [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public IEnumerator NetworkBehaviourSynchronization() { var authority = GetAuthorityNetworkManager(); @@ -319,6 +321,7 @@ public IEnumerator NetworkBehaviourSynchronization() /// A basic validation for the NetworkBehaviour.OnSynchronize method /// [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public IEnumerator NetworkBehaviourOnSynchronize() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkListTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkListTests.cs index daceeee8b9..f0558be4b3 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkListTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkListTests.cs @@ -248,6 +248,7 @@ void TestForceUpdateCallback(NetworkListEvent _) // don't extend this please [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator LegacyPredicateTesting() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableAnticipationTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableAnticipationTests.cs index 09d37cb64a..b5b89d02f1 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableAnticipationTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableAnticipationTests.cs @@ -3,6 +3,7 @@ using NUnit.Framework; using Unity.Netcode.TestHelpers.Runtime; using UnityEngine; +using UnityEngine.TestTools; namespace Unity.Netcode.RuntimeTests { @@ -58,6 +59,7 @@ public void SetReanticipateValueRpc(float f) } } + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] internal class NetworkVariableAnticipationTests : NetcodeIntegrationTest { protected override int NumberOfClients => 2; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsChangingTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsChangingTests.cs index ce0b7d378c..1b61c05bca 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsChangingTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsChangingTests.cs @@ -17,6 +17,7 @@ namespace Unity.Netcode.RuntimeTests [TestFixture(HostOrServer.Host, CollectionTypes.Dictionary)] [TestFixture(HostOrServer.Server, CollectionTypes.List)] [TestFixture(HostOrServer.Server, CollectionTypes.Dictionary)] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] internal class NetworkVariableCollectionsChangingTests : NetcodeIntegrationTest { protected override int NumberOfClients => 2; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsTests.cs index 69e8727f27..c4cdf5e3e6 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsTests.cs @@ -22,6 +22,7 @@ namespace Unity.Netcode.RuntimeTests /// [TestFixture(HostOrServer.Host)] [TestFixture(HostOrServer.Server)] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] internal class NetworkVariableCollectionsTests : NetcodeIntegrationTest { protected override int NumberOfClients => 2; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableGeneralTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableGeneralTests.cs index b0f3e8be56..4623351b7b 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableGeneralTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableGeneralTests.cs @@ -140,6 +140,7 @@ private bool ChangedValueMatches(StringBuilder errorLog) /// instances invoke . /// [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator ApplyValueDuringSpawnSequence() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariablePermissionTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariablePermissionTests.cs index 73481fd02c..f1c882685e 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariablePermissionTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariablePermissionTests.cs @@ -11,6 +11,7 @@ namespace Unity.Netcode.RuntimeTests { [TestFixtureSource(nameof(TestDataSource))] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] internal class NetworkVariablePermissionTests : NetcodeIntegrationTest { public static IEnumerable TestDataSource() diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs index 4eb9611a75..33178e9d27 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs @@ -349,6 +349,7 @@ private void InitializeServerAndClients(HostOrServer useHost) /// Runs generalized tests on all predefined NetworkVariable types /// [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void AllNetworkVariableTypes([Values] HostOrServer useHost) { var prefabToSpawn = CreateNetworkObjectPrefab("NetVarTest"); @@ -391,6 +392,7 @@ public void AllNetworkVariableTypes([Values] HostOrServer useHost) } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void ClientWritePermissionTest([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -405,6 +407,7 @@ public void ClientWritePermissionTest([Values] HostOrServer useHost) /// Runs tests that network variables sync on client whatever the local value of . /// [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void NetworkVariableSync_WithDifferentTimeScale([Values] HostOrServer useHost, [Values(0.0f, 1.0f, 2.0f)] float timeScale) { Time.timeScale = timeScale; @@ -419,6 +422,7 @@ public void NetworkVariableSync_WithDifferentTimeScale([Values] HostOrServer use } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void FixedString32Test([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -430,6 +434,7 @@ public void FixedString32Test([Values] HostOrServer useHost) } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestNetworkVariableClass([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -449,6 +454,7 @@ bool VerifyClass() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestNetworkVariableTemplateClass([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -467,6 +473,7 @@ bool VerifyClass() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestNetworkVariableStruct([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -485,6 +492,7 @@ bool VerifyStructure() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestNetworkVariableTemplateStruct([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -503,6 +511,7 @@ bool VerifyStructure() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestNetworkVariableTemplateBehaviourClass([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -525,6 +534,7 @@ bool VerifyClass() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestNetworkVariableTemplateBehaviourClassNotReferencedElsewhere([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -543,6 +553,7 @@ bool VerifyClass() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestNetworkVariableTemplateBehaviourStruct([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -561,6 +572,7 @@ bool VerifyClass() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestNetworkVariableEnum([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -578,6 +590,7 @@ bool VerifyStructure() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestINetworkSerializableClassCallsNetworkSerialize([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -596,6 +609,7 @@ public void TestINetworkSerializableClassCallsNetworkSerialize([Values] HostOrSe } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestINetworkSerializableStructCallsNetworkSerialize([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -610,6 +624,7 @@ public void TestINetworkSerializableStructCallsNetworkSerialize([Values] HostOrS } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void TestCustomGenericSerialization() { // Just verifies that the ILPP codegen initialized these values for this type. @@ -663,6 +678,7 @@ public void TestUnsupportedManagedTypesThrowExceptions() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void TestUnsupportedManagedTypesWithUserSerializationDoNotThrowExceptions() { var variable = new NetworkVariable(); @@ -718,6 +734,7 @@ public void TestUnsupportedUnmanagedTypesThrowExceptions() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void TestTypesReferencedInSubclassSerializeSuccessfully() { var variable = new NetworkVariableSubclass>(); @@ -733,6 +750,7 @@ public void TestTypesReferencedInSubclassSerializeSuccessfully() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void TestUnsupportedUnmanagedTypesWithUserSerializationDoNotThrowExceptions() { var variable = new NetworkVariable(); @@ -806,6 +824,7 @@ public void WhenCreatingAnArrayOfNetVars_InitializingVariablesDoesNotThrowAnExce } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public void TestNetworkVariableChangeAndReturnInSameFrame([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -1363,6 +1382,7 @@ private void TestValueTypeNativeHashMap(NativeHashMap te } #endif [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void WhenSerializingAndDeserializingValueTypeNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -1530,6 +1550,7 @@ public void WhenSerializingAndDeserializingValueTypeNetworkVariables_ValuesAreSe } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void WhenSerializingAndDeserializingValueTypeNativeArrayNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -1873,6 +1894,7 @@ public string ArrayStr(NativeArray arr) where T : unmanaged [Test] [UnityPlatform(exclude = new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })] // Ignored test tracked in MTT-11343 [Repeat(5)] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeArrayNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -2335,6 +2357,7 @@ public string DictionaryStr(Dictionary list) [Test] [UnityPlatform(exclude = new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })] // Ignored test tracked in MTT-11343 [Repeat(5)] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void WhenSerializingAndDeserializingVeryLargeListNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -2530,6 +2553,7 @@ public void WhenSerializingAndDeserializingVeryLargeListNetworkVariables_ValuesA [Test] [UnityPlatform(exclude = new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })] // Ignored test tracked in MTT-11343 [Repeat(5)] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void WhenSerializingAndDeserializingVeryLargeHashSetNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -2694,6 +2718,7 @@ public void WhenSerializingAndDeserializingVeryLargeHashSetNetworkVariables_Valu [Test] [UnityPlatform(exclude = new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })] // Ignored test tracked in MTT-11343 [Repeat(5)] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void WhenSerializingAndDeserializingVeryLargeDictionaryNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(ulong), typeof(Vector2), typeof(HashMapKeyClass))] Type keyType, @@ -4810,6 +4835,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashMapNetwor #endif [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void TestManagedINetworkSerializableNetworkVariablesDeserializeInPlace() { var variable = new NetworkVariable @@ -4846,6 +4872,7 @@ public void TestManagedINetworkSerializableNetworkVariablesDeserializeInPlace() } [Test] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public void TestUnmnagedINetworkSerializableNetworkVariablesDeserializeInPlace() { var variable = new NetworkVariable diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTraitsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTraitsTests.cs index 97d3e7a499..45a66c6670 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTraitsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTraitsTests.cs @@ -15,6 +15,7 @@ internal class NetworkVariableTraitsComponent : NetworkBehaviour [TestFixture(HostOrServer.Host)] [TestFixture(HostOrServer.DAHost)] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] internal class NetworkVariableTraitsTests : NetcodeIntegrationTest { protected override int NumberOfClients => 3; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableUserSerializableTypesTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableUserSerializableTypesTests.cs index c261bdf032..cf9021f463 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableUserSerializableTypesTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableUserSerializableTypesTests.cs @@ -142,6 +142,7 @@ private bool CheckForClientInstance() where T : WorkingUserNetworkVariableCom } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator WhenUsingAUserSerializableNetworkVariableWithUserSerialization_ReplicationWorks() { UserNetworkVariableSerialization.WriteValue = (FastBufferWriter writer, in MyTypeOne value) => @@ -182,6 +183,7 @@ public IEnumerator WhenUsingAUserSerializableNetworkVariableWithUserSerializatio } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator WhenUsingAUserSerializableNetworkVariableWithUserSerializationViaExtensionMethod_ReplicationWorks() { UserNetworkVariableSerialization.WriteValue = NetworkVariableUserSerializableTypesTestsExtensionMethods.WriteValueSafe; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/OwnerPermissionTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/OwnerPermissionTests.cs index cee5a131c6..1879da0174 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/OwnerPermissionTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/OwnerPermissionTests.cs @@ -98,6 +98,7 @@ protected override void OnServerAndClientsCreated() } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149597", "Unexpected owner write-permission error logged on CoreCLR")] public IEnumerator OwnerPermissionTest() { // create 3 objects diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/PeerDisconnectCallbackTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/PeerDisconnectCallbackTests.cs index a8d0c6a4ef..d273cf9f1f 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/PeerDisconnectCallbackTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/PeerDisconnectCallbackTests.cs @@ -104,6 +104,7 @@ private void ClientToDisconnect_OnClientStopped(bool wasHost) } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] public IEnumerator TestPeerDisconnectCallback([Values] ClientDisconnectType clientDisconnectType, [Values(1ul, 2ul, 3ul)] ulong disconnectedClient) { m_TargetClientShutdown = false; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTests.cs index 23c546e4fa..0ec70b0e21 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTests.cs @@ -91,6 +91,7 @@ protected override void OnCreatePlayerPrefab() } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator TestRpcs() { // This is the *SERVER VERSION* of the *CLIENT PLAYER* RpcTestNB component diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTypeSerializationTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTypeSerializationTests.cs index ca1ce942ae..f26baeb5d1 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTypeSerializationTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTypeSerializationTests.cs @@ -1125,6 +1125,7 @@ public IEnumerator TestValueTypeNativeList(NativeList firstTest, NativeLis #endif [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator WhenSendingAValueTypeOverAnRpc_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -1539,6 +1540,7 @@ public IEnumerator WhenSendingAnArrayOfValueTypesOverAnRpc_ValuesAreSerializedCo } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator WhenSendingANativeArrayOfValueTypesOverAnRpc_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkBehaviourReferenceTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkBehaviourReferenceTests.cs index 20e27d6492..fcb3fa5fc7 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkBehaviourReferenceTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkBehaviourReferenceTests.cs @@ -22,6 +22,7 @@ public NetworkBehaviourReferenceTests(HostOrServer hostOrServer) : base(hostOrSe #region Tests using non-null NetworkBehaviours and RPCs [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator TestRpc() { yield return SpawnTestPrefabInstance(); @@ -36,6 +37,7 @@ public IEnumerator TestRpc() [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator TestRpcImplicitNetworkBehaviour() { yield return SpawnTestPrefabInstance(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/SinglePlayerTransportTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/SinglePlayerTransportTests.cs index 4f198c73d2..33c801cc12 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/SinglePlayerTransportTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/SinglePlayerTransportTests.cs @@ -176,6 +176,7 @@ protected override bool CanStartServerAndClients() } [UnityTest] + [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149592", "NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer)")] public IEnumerator StartSinglePlayerAndSpawn() { m_CanStartHost = true; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Unity.Netcode.Runtime.Tests.asmdef b/com.unity.netcode.gameobjects/Tests/Runtime/Unity.Netcode.Runtime.Tests.asmdef index 86b6bae95f..d44f54d3e8 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Unity.Netcode.Runtime.Tests.asmdef +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Unity.Netcode.Runtime.Tests.asmdef @@ -54,6 +54,10 @@ "name": "com.unity.netcode", "expression": "1.10.1", "define": "UNIFIED_NETCODE" + }, + "name": "com.unity.test-framework", + "expression": "1.7.0", + "define": "UNITY_TEST_FRAMEWORK_1_7_OR_NEWER" } ], "noEngineReferences": false diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/UnityCoreClrExplicitDisabledAttributeShim.cs b/com.unity.netcode.gameobjects/Tests/Runtime/UnityCoreClrExplicitDisabledAttributeShim.cs new file mode 100644 index 0000000000..07baa43dc0 --- /dev/null +++ b/com.unity.netcode.gameobjects/Tests/Runtime/UnityCoreClrExplicitDisabledAttributeShim.cs @@ -0,0 +1,14 @@ +#if !UNITY_TEST_FRAMEWORK_1_7_OR_NEWER +using System; + +namespace UnityEngine.TestTools +{ + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + internal sealed class UnityCoreClrExplicitDisabledAttribute : Attribute + { + public UnityCoreClrExplicitDisabledAttribute(string jiraIssue, string reason = null) + { + } + } +} +#endif diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/UnityCoreClrExplicitDisabledAttributeShim.cs.meta b/com.unity.netcode.gameobjects/Tests/Runtime/UnityCoreClrExplicitDisabledAttributeShim.cs.meta new file mode 100644 index 0000000000..d3dc8d26c9 --- /dev/null +++ b/com.unity.netcode.gameobjects/Tests/Runtime/UnityCoreClrExplicitDisabledAttributeShim.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7f17392536340a8b607dd678b2ecd76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From c30cbc3444f4cd031b35726920facddcaa4feb97 Mon Sep 17 00:00:00 2001 From: "unity-renovate[bot]" <120015202+unity-renovate[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:49:11 +0200 Subject: [PATCH 6/6] chore(deps): update ci deps updates (#4085) Co-authored-by: unity-renovate[bot] <120015202+unity-renovate[bot]@users.noreply.github.com> --- .yamato/wrench/api-validation-jobs.yml | 4 +- .yamato/wrench/package-pack-jobs.yml | 2 +- .yamato/wrench/preview-a-p-v.yml | 62 +++++++++++++------------- .yamato/wrench/promotion-jobs.yml | 8 ++-- .yamato/wrench/recipe-regeneration.yml | 2 +- .yamato/wrench/validation-jobs.yml | 60 ++++++++++++------------- .yamato/wrench/wrench_config.json | 2 +- Tools/CI/NGO.Cookbook.csproj | 6 +-- 8 files changed, 73 insertions(+), 73 deletions(-) diff --git a/.yamato/wrench/api-validation-jobs.yml b/.yamato/wrench/api-validation-jobs.yml index 611902cc9a..207c95dc49 100644 --- a/.yamato/wrench/api-validation-jobs.yml +++ b/.yamato/wrench/api-validation-jobs.yml @@ -60,8 +60,8 @@ api_validation_-_netcode_gameobjects_-_6000_0_-_win10: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 diff --git a/.yamato/wrench/package-pack-jobs.yml b/.yamato/wrench/package-pack-jobs.yml index a40678465b..a5cc623aab 100644 --- a/.yamato/wrench/package-pack-jobs.yml +++ b/.yamato/wrench/package-pack-jobs.yml @@ -29,5 +29,5 @@ package_pack_-_netcode_gameobjects: UPMCI_ACK_LARGE_PACKAGE: 1 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 diff --git a/.yamato/wrench/preview-a-p-v.yml b/.yamato/wrench/preview-a-p-v.yml index bafc711428..f660b39a15 100644 --- a/.yamato/wrench/preview-a-p-v.yml +++ b/.yamato/wrench/preview-a-p-v.yml @@ -27,7 +27,7 @@ all_preview_apv_jobs: - path: .yamato/wrench/preview-a-p-v.yml#preview_apv_-_6000_7_-_win10 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.0 manifest (MacOS). preview_apv_-_6000_0_-_macos13: @@ -82,10 +82,10 @@ preview_apv_-_6000_0_-_macos13: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.0 manifest (Ubuntu). preview_apv_-_6000_0_-_ubuntu2204: @@ -140,10 +140,10 @@ preview_apv_-_6000_0_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.0 manifest (Windows). preview_apv_-_6000_0_-_win10: @@ -199,10 +199,10 @@ preview_apv_-_6000_0_-_win10: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.3 manifest (MacOS). preview_apv_-_6000_3_-_macos13: @@ -257,10 +257,10 @@ preview_apv_-_6000_3_-_macos13: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.3 manifest (Ubuntu). preview_apv_-_6000_3_-_ubuntu2204: @@ -315,10 +315,10 @@ preview_apv_-_6000_3_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.3 manifest (Windows). preview_apv_-_6000_3_-_win10: @@ -374,10 +374,10 @@ preview_apv_-_6000_3_-_win10: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.5 manifest (MacOS). preview_apv_-_6000_5_-_macos13: @@ -432,10 +432,10 @@ preview_apv_-_6000_5_-_macos13: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.5 manifest (Ubuntu). preview_apv_-_6000_5_-_ubuntu2204: @@ -490,10 +490,10 @@ preview_apv_-_6000_5_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.5 manifest (Windows). preview_apv_-_6000_5_-_win10: @@ -549,10 +549,10 @@ preview_apv_-_6000_5_-_win10: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.6 manifest (MacOS). preview_apv_-_6000_6_-_macos13arm: @@ -608,10 +608,10 @@ preview_apv_-_6000_6_-_macos13arm: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.6 manifest (Ubuntu). preview_apv_-_6000_6_-_ubuntu2204: @@ -666,10 +666,10 @@ preview_apv_-_6000_6_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.6 manifest (Windows). preview_apv_-_6000_6_-_win10: @@ -725,10 +725,10 @@ preview_apv_-_6000_6_-_win10: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.7 manifest (MacOS). preview_apv_-_6000_7_-_macos13arm: @@ -784,10 +784,10 @@ preview_apv_-_6000_7_-_macos13arm: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.7 manifest (Ubuntu). preview_apv_-_6000_7_-_ubuntu2204: @@ -842,10 +842,10 @@ preview_apv_-_6000_7_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Functional tests for dependents found in the latest 6000.7 manifest (Windows). preview_apv_-_6000_7_-_win10: @@ -901,8 +901,8 @@ preview_apv_-_6000_7_-_win10: UNITY_LICENSING_SERVER_DELETE_NUL: 0 UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 diff --git a/.yamato/wrench/promotion-jobs.yml b/.yamato/wrench/promotion-jobs.yml index 06dda4cdcf..336bd6b080 100644 --- a/.yamato/wrench/promotion-jobs.yml +++ b/.yamato/wrench/promotion-jobs.yml @@ -183,10 +183,10 @@ publish_dry_run_netcode_gameobjects: unzip: true variables: UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 # Publish for netcode.gameobjects to https://artifactory-slo.bf.unity3d.com/artifactory/api/npm/upm-npm publish_netcode_gameobjects: @@ -365,9 +365,9 @@ publish_netcode_gameobjects: unzip: true variables: UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 allow_on: branch match "^release/.*" metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 diff --git a/.yamato/wrench/recipe-regeneration.yml b/.yamato/wrench/recipe-regeneration.yml index 343a1a9b85..c4f798e8c2 100644 --- a/.yamato/wrench/recipe-regeneration.yml +++ b/.yamato/wrench/recipe-regeneration.yml @@ -31,5 +31,5 @@ test_-_wrench_jobs_up_to_date: cancel_old_ci: true metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 diff --git a/.yamato/wrench/validation-jobs.yml b/.yamato/wrench/validation-jobs.yml index 88d03e589b..4a7b6ba365 100644 --- a/.yamato/wrench/validation-jobs.yml +++ b/.yamato/wrench/validation-jobs.yml @@ -69,10 +69,10 @@ validate_-_netcode_gameobjects_-_6000_0_-_macos13: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -139,10 +139,10 @@ validate_-_netcode_gameobjects_-_6000_0_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -209,10 +209,10 @@ validate_-_netcode_gameobjects_-_6000_0_-_win10: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -279,10 +279,10 @@ validate_-_netcode_gameobjects_-_6000_3_-_macos13: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -349,10 +349,10 @@ validate_-_netcode_gameobjects_-_6000_3_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -419,10 +419,10 @@ validate_-_netcode_gameobjects_-_6000_3_-_win10: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -489,10 +489,10 @@ validate_-_netcode_gameobjects_-_6000_5_-_macos13: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -559,10 +559,10 @@ validate_-_netcode_gameobjects_-_6000_5_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -629,10 +629,10 @@ validate_-_netcode_gameobjects_-_6000_5_-_win10: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -700,10 +700,10 @@ validate_-_netcode_gameobjects_-_6000_6_-_macos13arm: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -770,10 +770,10 @@ validate_-_netcode_gameobjects_-_6000_6_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -840,10 +840,10 @@ validate_-_netcode_gameobjects_-_6000_6_-_win10: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -911,10 +911,10 @@ validate_-_netcode_gameobjects_-_6000_7_-_macos13arm: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -981,10 +981,10 @@ validate_-_netcode_gameobjects_-_6000_7_-_ubuntu2204: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects @@ -1051,10 +1051,10 @@ validate_-_netcode_gameobjects_-_6000_7_-_win10: UNITY_LICENSING_SERVER_DELETE_ULF: 0 UNITY_LICENSING_SERVER_TOOLSET: pro UPMPVP_ACK_UPMPVP_DOES_NO_API_VALIDATION: 1 - UPMPVP_CONTEXT_WRENCH: 3.2.1.0 + UPMPVP_CONTEXT_WRENCH: 3.3.1.0 metadata: Job Maintainers: '#rm-packageworks' - Wrench: 3.2.1.0 + Wrench: 3.3.1.0 labels: - Packages:netcode.gameobjects diff --git a/.yamato/wrench/wrench_config.json b/.yamato/wrench/wrench_config.json index 96b58ebf4f..fb5e12dc7b 100644 --- a/.yamato/wrench/wrench_config.json +++ b/.yamato/wrench/wrench_config.json @@ -39,7 +39,7 @@ }, "publishing_job": ".yamato/wrench/promotion-jobs.yml#publish_netcode_gameobjects", "branch_pattern": "ReleaseSlash", - "wrench_version": "3.2.1.0", + "wrench_version": "3.3.1.0", "pvp_exemption_path": ".yamato/wrench/pvp-exemptions.json", "cs_project_path": "Tools/CI/NGO.Cookbook.csproj" } \ No newline at end of file diff --git a/Tools/CI/NGO.Cookbook.csproj b/Tools/CI/NGO.Cookbook.csproj index e47057e13d..d77b3d4bdb 100644 --- a/Tools/CI/NGO.Cookbook.csproj +++ b/Tools/CI/NGO.Cookbook.csproj @@ -8,11 +8,11 @@ - - + + - +