From cb6e70e9ea966fb226758de6fbe020dec0ac6ba3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrik=20Pa=C5=A1ko?= <patrik.pasko@twinzo.eu>
Date: Mon, 15 Jul 2024 12:16:01 +0000
Subject: [PATCH] Resolve TW-1312 "Sdk multiple dotnet versions support"

---
 .gitlab-ci.yml        |  15 +++-
 Main/Main.csproj      |   4 +-
 Main/TestData.cs      | 165 ++++++++++++++++++++++++++++++++----------
 SDK/SDK.csproj        |   2 +-
 Test/Test/Test.csproj |   2 +-
 Test/Test/TestData.cs |  36 ++++-----
 6 files changed, 161 insertions(+), 63 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3e783fc..598a27e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -6,11 +6,19 @@ stages:
   - release
   - deploy
 
+before_script:
+  - apt-get update && apt-get install -y wget
+  - wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
+  - chmod +x dotnet-install.sh
+
 build:
   stage: build
   tags: 
     - net5
   script:
+    - ./dotnet-install.sh -c 6.0 --install-dir /usr/share/dotnet
+    - ./dotnet-install.sh -c 7.0 --install-dir /usr/share/dotnet
+    - export PATH="$PATH:/usr/share/dotnet"
     - dotnet build
 
 test:
@@ -18,6 +26,9 @@ test:
   tags: 
     - net5
   script:
+    - ./dotnet-install.sh -c 6.0 --install-dir /usr/share/dotnet
+    - ./dotnet-install.sh -c 7.0 --install-dir /usr/share/dotnet
+    - export PATH="$PATH:/usr/share/dotnet"
     - dotnet test
 
 release:
@@ -31,7 +42,9 @@ release:
       - SDK/
     expire_in: 1 week
   script:
-    - dotnet publish -c Release -o ../SDK SDK/SDK.csproj
+    - dotnet publish -c Release -o ../SDK -f net6.0 SDK/SDK.csproj
+    - dotnet publish -c Release -o ../SDK -f net7.0 SDK/SDK.csproj
+    - dotnet publish -c Release -o ../SDK -f net8.0 SDK/SDK.csproj
 
 deploy:
   stage: deploy
diff --git a/Main/Main.csproj b/Main/Main.csproj
index 246431a..4d4d71b 100644
--- a/Main/Main.csproj
+++ b/Main/Main.csproj
@@ -1,8 +1,8 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <OutputType>Exe</OutputType>
-    <TargetFramework>net8.0</TargetFramework>
+    <TargetFrameworks>net6.0;net7.0;net8.0</TargetFrameworks>
     <AssemblyVersion>2021.6.22.8</AssemblyVersion>
     <FileVersion>2021.6.22.8</FileVersion>
     <Version>1.0</Version>
diff --git a/Main/TestData.cs b/Main/TestData.cs
index 02667f4..4392f3e 100644
--- a/Main/TestData.cs
+++ b/Main/TestData.cs
@@ -50,47 +50,124 @@ namespace Main
 
         public static DeviceLocationContract[] GetLocalizationDataBatch()
         {
-            DistanceContract[] distanceContract1 =
-            [
-                new DistanceContract {BeaconId = 34, RSSI= -56},
-                new DistanceContract {BeaconId = 34, RSSI= -56},
-                new DistanceContract {BeaconId = 34, RSSI= -56},
-            ];
+            DistanceContract[] distanceContract1 = new DistanceContract[3];
+            distanceContract1[0] = new DistanceContract { BeaconId = 34, RSSI = -56 };
+            distanceContract1[1] = new DistanceContract { BeaconId = 34, RSSI = -56 };
+            distanceContract1[2] = new DistanceContract { BeaconId = 34, RSSI = -56 };
 
-            LocationContract[] locationContract =
-            [
-                new LocationContract {SectorId = 1, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
-                    X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-                new LocationContract {SectorId = 2, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
-                    X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-                new LocationContract {SectorId = 3, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
-                    X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-                new LocationContract {SectorId = 4, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
-                    X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-            ];
+            LocationContract[] locationContract = new LocationContract[4];
+            locationContract[0] = new LocationContract
+            {
+                SectorId = 1,
+                Battery = 100,
+                IsMoving = true,
+                Timestamp = 1599644652178,
+                X = 0,
+                Y = 0,
+                Z = 0,
+                Interval = 300,
+                Distances = distanceContract1
+            };
+            locationContract[1] = new LocationContract
+            {
+                SectorId = 2,
+                Battery = 100,
+                IsMoving = true,
+                Timestamp = 1599644652178,
+                X = 0,
+                Y = 0,
+                Z = 0,
+                Interval = 300,
+                Distances = distanceContract1
+            };
+            locationContract[2] = new LocationContract
+            {
+                SectorId = 3,
+                Battery = 100,
+                IsMoving = true,
+                Timestamp = 1599644652178,
+                X = 0,
+                Y = 0,
+                Z = 0,
+                Interval = 300,
+                Distances = distanceContract1
+            };
+            locationContract[3] = new LocationContract
+            {
+                SectorId = 4,
+                Battery = 100,
+                IsMoving = true,
+                Timestamp = 1599644652178,
+                X = 0,
+                Y = 0,
+                Z = 0,
+                Interval = 300,
+                Distances = distanceContract1
+            };
+
+            DeviceLocationContract[] deviceLocationContracts = new DeviceLocationContract[1];
+            deviceLocationContracts[0] = new DeviceLocationContract { Login = "sdk-device", Locations = locationContract };
 
-            return [new DeviceLocationContract { Login = "sdk-device", Locations = locationContract }];
+            return deviceLocationContracts;
         }
         public static LocationContract[] GetLocalizationData()
         {
-            DistanceContract[] distanceContract1 =
-            [
-                new DistanceContract {BeaconId = 34, RSSI= -56},
-                new DistanceContract {BeaconId = 34, RSSI= -56},
-                new DistanceContract {BeaconId = 34, RSSI= -56},
-            ];
+            DistanceContract[] distanceContract1 = new DistanceContract[3];
+            distanceContract1[0] = new DistanceContract { BeaconId = 34, RSSI = -56 };
+            distanceContract1[1] = new DistanceContract { BeaconId = 34, RSSI = -56 };
+            distanceContract1[2] = new DistanceContract { BeaconId = 34, RSSI = -56 };
+
+            LocationContract[] locationContract = new LocationContract[4];
+            locationContract[0] = new LocationContract
+            {
+                SectorId = 1,
+                Battery = 100,
+                IsMoving = true,
+                Timestamp = 1599644652178,
+                X = 0,
+                Y = 0,
+                Z = 0,
+                Interval = 300,
+                Distances = distanceContract1
+            };
+            locationContract[1] = new LocationContract
+            {
+                SectorId = 2,
+                Battery = 100,
+                IsMoving = true,
+                Timestamp = 1599644652178,
+                X = 0,
+                Y = 0,
+                Z = 0,
+                Interval = 300,
+                Distances = distanceContract1
+            };
+            locationContract[2] = new LocationContract
+            {
+                SectorId = 3,
+                Battery = 100,
+                IsMoving = true,
+                Timestamp = 1599644652178,
+                X = 0,
+                Y = 0,
+                Z = 0,
+                Interval = 300,
+                Distances = distanceContract1
+            };
+            locationContract[3] = new LocationContract
+            {
+                SectorId = 4,
+                Battery = 100,
+                IsMoving = true,
+                Timestamp = 1599644652178,
+                X = 0,
+                Y = 0,
+                Z = 0,
+                Interval = 300,
+                Distances = distanceContract1
+            };
 
-            return
-            [
-                new LocationContract {SectorId = 1, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
-                    X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-                new LocationContract {SectorId = 2, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
-                    X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-                new LocationContract {SectorId = 3, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
-                    X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-                new LocationContract {SectorId = 4, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
-                    X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-            ];
+            return locationContract;
         }
 
         public static SensorContract GetSensor()
@@ -111,13 +188,14 @@ namespace Main
                 DataType = SensorDataType.Decimal,
                 Index = 1
             };
-            SensorDataContract[] sensorDataContracts = [data1, data2];
+            SensorDataContract[] sensorDataContracts = new SensorDataContract[2];
+            sensorDataContracts[0] = data1;
+            sensorDataContracts[1] = data2;
 
             SensorContract sensor = new SensorContract
             {
                 Id = 7351,
                 Login = "sdk-sensor2",
-                //Password = "sdk",
                 Title = "testtt",
                 SectorId = 2,
                 SensorData = sensorDataContracts,
@@ -166,7 +244,10 @@ namespace Main
                 Unit = "unit",
                 Index = 2
             };
-            SensorDataContract[] sensorDataContracts = [data1, data2, data3];
+            SensorDataContract[] sensorDataContracts = new SensorDataContract[3];
+            sensorDataContracts[0] = data1;
+            sensorDataContracts[1] = data2;
+            sensorDataContracts[2] = data3;
 
             SensorContract sensor = new SensorContract
             {
@@ -175,7 +256,8 @@ namespace Main
                 SensorData = sensorDataContracts,
                 AreaId = 24
             };
-            SensorContract[] sensorContracts = [sensor];
+            SensorContract[] sensorContracts = new SensorContract[1];
+            sensorContracts[0] = sensor;
 
             return sensorContracts;
         }
@@ -206,7 +288,10 @@ namespace Main
                 Unit = "unit",
                 Index = 2
             };
-            SensorDataContract[] sensorDataContracts = [data1, data2, data3];
+            SensorDataContract[] sensorDataContracts = new SensorDataContract[3];
+            sensorDataContracts[0] = data1;
+            sensorDataContracts[1] = data2;
+            sensorDataContracts[2] = data3;
 
             return sensorDataContracts;
         }
diff --git a/SDK/SDK.csproj b/SDK/SDK.csproj
index e89d2af..914a6a2 100644
--- a/SDK/SDK.csproj
+++ b/SDK/SDK.csproj
@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <PackageId>tDevKit</PackageId>
-    <TargetFramework>net8.0</TargetFramework>
+    <TargetFrameworks>net6.0;net7.0;net8.0</TargetFrameworks>
     <AssemblyVersion>2021.6.28.25</AssemblyVersion>
     <FileVersion>2021.6.28.25</FileVersion>
     <Version>4.12.0</Version>
diff --git a/Test/Test/Test.csproj b/Test/Test/Test.csproj
index b2c38d4..4061fe8 100644
--- a/Test/Test/Test.csproj
+++ b/Test/Test/Test.csproj
@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>net8.0</TargetFramework>
+    <TargetFrameworks>net6.0;net7.0;net8.0</TargetFrameworks>
 
     <IsPackable>false</IsPackable>
 
diff --git a/Test/Test/TestData.cs b/Test/Test/TestData.cs
index 59f7e6d..101a46e 100644
--- a/Test/Test/TestData.cs
+++ b/Test/Test/TestData.cs
@@ -73,15 +73,15 @@ namespace Main
 
         public static DeviceLocationContract[] GetLocalizationDataBatch()
         {
-            DistanceContract[] distanceContract1 =
-            [
-                new DistanceContract {BeaconId = 34, RSSI= -56},
-                new DistanceContract {BeaconId = 34, RSSI= -56},
-                new DistanceContract {BeaconId = 34, RSSI= -56},
-            ];
+            DistanceContract[] distanceContract1 = new [] 
+            {
+                new DistanceContract { BeaconId = 34, RSSI = -56 },
+                new DistanceContract { BeaconId = 34, RSSI = -56 },
+                new DistanceContract { BeaconId = 34, RSSI = -56 },
+            };
 
-            LocationContract[] locationContract =
-            [
+            LocationContract[] locationContract = new[]
+            {
                 new LocationContract {SectorId = 1, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
                     X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
                 new LocationContract {SectorId = 2, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
@@ -90,21 +90,21 @@ namespace Main
                     X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
                 new LocationContract {SectorId = 4, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
                     X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-            ];
+            };
 
-            return [new DeviceLocationContract { Login = "rtu-sdk", Locations = locationContract }];
+            return new[] { new DeviceLocationContract { Login = "rtu-sdk", Locations = locationContract } };
         }
         public static LocationContract[] GetLocalizationData()
         {
-            DistanceContract[] distanceContract1 =
-            [
+            DistanceContract[] distanceContract1 = new[]
+            {
                 new DistanceContract {BeaconId = 34, RSSI= -56},
                 new DistanceContract {BeaconId = 34, RSSI= -56},
                 new DistanceContract {BeaconId = 34, RSSI= -56},
-            ];
+            };
 
-            return
-            [
+            return new[]
+            {
                 new LocationContract {SectorId = 1, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
                     X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
                 new LocationContract {SectorId = 2, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
@@ -113,7 +113,7 @@ namespace Main
                     X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
                 new LocationContract {SectorId = 4, Battery = 100, IsMoving = true, Timestamp = 1599644652178,
                     X = 0, Y = 0, Z = 0, Interval = 300, Distances = distanceContract1 },
-            ];
+            };
         }
 
         public static SectorContract GetSector()
@@ -145,7 +145,7 @@ namespace Main
                 Unit = "%",
                 DataType = SensorDataType.Decimal
             };
-            SensorDataContract[] sensorDataContracts = [data1, data2];
+            SensorDataContract[] sensorDataContracts = new [] { data1, data2 };
 
             SensorContract sensor = new SensorContract
             {
@@ -235,7 +235,7 @@ namespace Main
                 Unit = "unit"
             };
 
-            SensorDataContract[] sensorDataContracts = [data1, data2, data3];
+            SensorDataContract[] sensorDataContracts = new[] { data1, data2, data3 };
 
             return sensorDataContracts;
         }
-- 
GitLab