From 9c9ee6cc4ccf2a6aef7dfde0c569eb21098c8848 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Mon, 22 Apr 2024 21:51:06 +0100 Subject: [PATCH] trying with isn.abst --- README.md | 19 +- contrib/isnd.service | 14 +- src/isnd/Data/ApplicationDbContext.cs | 4 - src/isnd/Data/Packages/Dependency.cs | 5 +- .../Data/Packages/PackageDependencyGroup.cs | 2 +- ...422204649_dependenciesReloaded.Designer.cs | 535 ++++++++++++++++++ .../20240422204649_dependenciesReloaded.cs | 28 + .../ApplicationDbContextModelSnapshot.cs | 15 +- src/isnd/Services/PackageManager.cs | 23 +- test/isnd.tests/UnitTestWebHost.cs | 4 +- 10 files changed, 610 insertions(+), 39 deletions(-) create mode 100644 src/isnd/Migrations/20240422204649_dependenciesReloaded.Designer.cs create mode 100644 src/isnd/Migrations/20240422204649_dependenciesReloaded.cs diff --git a/README.md b/README.md index b508aa2..c4a3440 100644 --- a/README.md +++ b/README.md @@ -20,21 +20,22 @@ wget http://localhost:5000/package/index.json?q=your&prerelease=true&semVerLevel ### Compilation -Depuis le dossier de la solution, compiler la solution : +Dans le dossier de la solution, compiler la solution : ````bash dotnet build /restore -c Release -dotnet publish -c Release +dotnet publish -c Release src/isnd ```` ### Déploiement du serveur -Commençont par la livraison initiale, aujourd'hui : +La livraison initiale, aujourd'hui : ````bash sudo mkdir -p /srv/www/isnd -sudo cp -a src/isnd/bin/Release/net7.0/publish/* /srv/www/isnd +sudo cp -a src/isnd/bin/Release/net8.0/publish/* /srv/www/isnd sudo cp contrib/isnd.service /etc/systemd/system +chown -R isn:isn /srv/www/isnd/ sudo systemctl daemon-reload ```` @@ -43,13 +44,13 @@ son utilisateur, et le droit de créer des tables (ce dernier droit pourrait exp Il faudra éditer la configuration pour indiquer : -* la connextion à une base de donnée Postresgql, sous la forme : +* dans /etc/systemd/system/isnd.service , la connextion à une base de donnée Postresgql, sous la forme : `"Server=;Port=;Database=;Username=;Password=;"` -* la connection au serveur de messagerie, -* l'URL du ou des sites à propulser, -* Les autres détails. +* dans /srv/www/isnd/appsettings.Production.json, la connection au serveur de messagerie, +* l'URL externe du ou des sites à propulser, et à utiliser dans la description de service, +* et les autres détails. -Pour faire ceci, vous pourrez éditer une copie du fichier `appsettings.json` vers `appsettings.Production.json`, +Pour faire ceci, vous pourrez éditer une copie du fichier `appsettings.json` vers `appsettings.Production.json`, pour renseigner toutes les valeurs spécifiées. * Démarrer le serveur : diff --git a/contrib/isnd.service b/contrib/isnd.service index e5e3479..c753cab 100644 --- a/contrib/isnd.service +++ b/contrib/isnd.service @@ -12,17 +12,17 @@ Type=simple User=isn Group=isn WorkingDirectory=/srv/www/isnd/ -# If using Unix socket: tells systemd to create the /run/gitea folder, which will contain the gitea.sock file -# (manually creating /run/gitea doesn't work, because it would not persist across reboots) -#RuntimeDirectory=gitea ExecStart=/srv/www/isnd/isnd Restart=always -Environment=HOME=/srv/www/isnd - -#CapabilityBoundingSet=CAP_NET_BIND_SERVICE +Environment="HOME=/srv/www/isnd" +Environment="ASPNETCORE_ENVIRONMENT=Production" +Environment="ASPNETCORE_ConnectionStrings__DefaultConnection=Server=localhost;Port=5432;Database=isnd;Username=paul;Password=RvJa=y#b/tfg;" +CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE +StandardOutput=syslog +StandardError=syslog +SyslogIdentifier=isnd [Install] WantedBy=multi-user.target - diff --git a/src/isnd/Data/ApplicationDbContext.cs b/src/isnd/Data/ApplicationDbContext.cs index 68cad9f..9785bf2 100644 --- a/src/isnd/Data/ApplicationDbContext.cs +++ b/src/isnd/Data/ApplicationDbContext.cs @@ -27,13 +27,9 @@ namespace isnd.Data _ = builder.Entity() .HasOne(v => v.Package).WithMany(p => p.Versions).HasForeignKey(x => x.PackageId); - _ = builder.Entity().HasOne(g=>g.PackageVersion) .WithMany(v => v.DependencyGroups).HasForeignKey(x => new { x.PackageId, x.PackageVersionFullString } ); - _ = builder.Entity().HasOne(d=>d.Group) - .WithMany(g=>g.Dependencies); - } diff --git a/src/isnd/Data/Packages/Dependency.cs b/src/isnd/Data/Packages/Dependency.cs index ef2fd54..3763fb9 100644 --- a/src/isnd/Data/Packages/Dependency.cs +++ b/src/isnd/Data/Packages/Dependency.cs @@ -8,12 +8,13 @@ namespace isnd.Data { public class Dependency { + [Key][DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public string Id { get;set;} /// /// Dependency Package Identifier /// /// - [Key] - public string Id { get;set;} + public string PackageId { get;set;} /// /// Dependency Group Id diff --git a/src/isnd/Data/Packages/PackageDependencyGroup.cs b/src/isnd/Data/Packages/PackageDependencyGroup.cs index a47c39b..ff82a1e 100644 --- a/src/isnd/Data/Packages/PackageDependencyGroup.cs +++ b/src/isnd/Data/Packages/PackageDependencyGroup.cs @@ -19,7 +19,7 @@ namespace isnd.Data { return groups.Select(group => new NuGet.Packaging.PackageDependencyGroup( new NuGetFramework(group.TargetFramework), - group.Dependencies.Select(dep => new PackageDependency(dep.Id)) + group.Dependencies.Select(dep => new PackageDependency(dep.PackageId)) )).ToArray(); } } diff --git a/src/isnd/Migrations/20240422204649_dependenciesReloaded.Designer.cs b/src/isnd/Migrations/20240422204649_dependenciesReloaded.Designer.cs new file mode 100644 index 0000000..83152a6 --- /dev/null +++ b/src/isnd/Migrations/20240422204649_dependenciesReloaded.Designer.cs @@ -0,0 +1,535 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using isnd.Data; + +#nullable disable + +namespace isnd.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20240422204649_dependenciesReloaded")] + partial class dependenciesReloaded + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("ProviderKey") + .HasColumnType("text"); + + b.Property("ProviderDisplayName") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("text"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("text"); + + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("isnd.Data.ApiKeys.ApiKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("text"); + + b.Property("CreationDate") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ValidityPeriodInDays") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("ApiKeys"); + }); + + modelBuilder.Entity("isnd.Data.ApplicationUser", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("AccessFailedCount") + .HasColumnType("integer"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("boolean"); + + b.Property("FullName") + .HasColumnType("text"); + + b.Property("LockoutEnabled") + .HasColumnType("boolean"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("PasswordHash") + .HasColumnType("text"); + + b.Property("PhoneNumber") + .HasColumnType("text"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("boolean"); + + b.Property("SecurityStamp") + .HasColumnType("text"); + + b.Property("TwoFactorEnabled") + .HasColumnType("boolean"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("isnd.Data.Dependency", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("text"); + + b.Property("DependencyGroupId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Exclude") + .HasColumnType("text"); + + b.Property("PackageId") + .HasColumnType("text"); + + b.Property("Version") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("DependencyGroupId"); + + b.ToTable("Dependencies"); + }); + + modelBuilder.Entity("isnd.Data.PackageDependencyGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("text"); + + b.Property("PackageId") + .IsRequired() + .HasColumnType("character varying(1024)"); + + b.Property("PackageVersionFullString") + .IsRequired() + .HasColumnType("character varying(256)"); + + b.Property("TargetFramework") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("PackageId", "PackageVersionFullString"); + + b.ToTable("PackageDependencyGroups"); + }); + + modelBuilder.Entity("isnd.Data.PackageVersion", b => + { + b.Property("PackageId") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("FullString") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("CommitNId") + .HasColumnType("bigint"); + + b.Property("IsPrerelease") + .HasColumnType("boolean"); + + b.Property("Major") + .HasColumnType("integer"); + + b.Property("Minor") + .HasColumnType("integer"); + + b.Property("Patch") + .HasColumnType("integer"); + + b.Property("Revision") + .HasColumnType("integer"); + + b.Property("Type") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("PackageId", "FullString"); + + b.HasIndex("CommitNId"); + + b.ToTable("PackageVersions"); + }); + + modelBuilder.Entity("isnd.Data.Packages.Commit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Action") + .HasColumnType("integer"); + + b.Property("TimeStamp") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Commits"); + }); + + modelBuilder.Entity("isnd.Data.Packages.Package", b => + { + b.Property("Id") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("CommitNId") + .HasColumnType("bigint"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("OwnerId") + .IsRequired() + .HasColumnType("text"); + + b.Property("Public") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.HasIndex("CommitNId"); + + b.HasIndex("OwnerId"); + + b.ToTable("Packages"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("isnd.Data.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("isnd.Data.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("isnd.Data.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("isnd.Data.ApplicationUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("isnd.Data.ApiKeys.ApiKey", b => + { + b.HasOne("isnd.Data.ApplicationUser", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("isnd.Data.Dependency", b => + { + b.HasOne("isnd.Data.PackageDependencyGroup", "Group") + .WithMany("Dependencies") + .HasForeignKey("DependencyGroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + }); + + modelBuilder.Entity("isnd.Data.PackageDependencyGroup", b => + { + b.HasOne("isnd.Data.PackageVersion", "PackageVersion") + .WithMany("DependencyGroups") + .HasForeignKey("PackageId", "PackageVersionFullString") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PackageVersion"); + }); + + modelBuilder.Entity("isnd.Data.PackageVersion", b => + { + b.HasOne("isnd.Data.Packages.Commit", "LatestCommit") + .WithMany("Versions") + .HasForeignKey("CommitNId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("isnd.Data.Packages.Package", "Package") + .WithMany("Versions") + .HasForeignKey("PackageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LatestCommit"); + + b.Navigation("Package"); + }); + + modelBuilder.Entity("isnd.Data.Packages.Package", b => + { + b.HasOne("isnd.Data.Packages.Commit", "LatestCommit") + .WithMany() + .HasForeignKey("CommitNId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("isnd.Data.ApplicationUser", "Owner") + .WithMany() + .HasForeignKey("OwnerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LatestCommit"); + + b.Navigation("Owner"); + }); + + modelBuilder.Entity("isnd.Data.PackageDependencyGroup", b => + { + b.Navigation("Dependencies"); + }); + + modelBuilder.Entity("isnd.Data.PackageVersion", b => + { + b.Navigation("DependencyGroups"); + }); + + modelBuilder.Entity("isnd.Data.Packages.Commit", b => + { + b.Navigation("Versions"); + }); + + modelBuilder.Entity("isnd.Data.Packages.Package", b => + { + b.Navigation("Versions"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/isnd/Migrations/20240422204649_dependenciesReloaded.cs b/src/isnd/Migrations/20240422204649_dependenciesReloaded.cs new file mode 100644 index 0000000..6ef1a9c --- /dev/null +++ b/src/isnd/Migrations/20240422204649_dependenciesReloaded.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace isnd.Migrations +{ + /// + public partial class dependenciesReloaded : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "PackageId", + table: "Dependencies", + type: "text", + nullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "PackageId", + table: "Dependencies"); + } + } +} diff --git a/src/isnd/Migrations/ApplicationDbContextModelSnapshot.cs b/src/isnd/Migrations/ApplicationDbContextModelSnapshot.cs index c2e31ba..c53c54a 100644 --- a/src/isnd/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/src/isnd/Migrations/ApplicationDbContextModelSnapshot.cs @@ -177,7 +177,7 @@ namespace isnd.Migrations b.HasIndex("UserId"); - b.ToTable("ApiKeys", (string)null); + b.ToTable("ApiKeys"); }); modelBuilder.Entity("isnd.Data.ApplicationUser", b => @@ -260,6 +260,9 @@ namespace isnd.Migrations b.Property("Exclude") .HasColumnType("text"); + b.Property("PackageId") + .HasColumnType("text"); + b.Property("Version") .HasColumnType("text"); @@ -267,7 +270,7 @@ namespace isnd.Migrations b.HasIndex("DependencyGroupId"); - b.ToTable("Dependencies", (string)null); + b.ToTable("Dependencies"); }); modelBuilder.Entity("isnd.Data.PackageDependencyGroup", b => @@ -292,7 +295,7 @@ namespace isnd.Migrations b.HasIndex("PackageId", "PackageVersionFullString"); - b.ToTable("PackageDependencyGroups", (string)null); + b.ToTable("PackageDependencyGroups"); }); modelBuilder.Entity("isnd.Data.PackageVersion", b => @@ -331,7 +334,7 @@ namespace isnd.Migrations b.HasIndex("CommitNId"); - b.ToTable("PackageVersions", (string)null); + b.ToTable("PackageVersions"); }); modelBuilder.Entity("isnd.Data.Packages.Commit", b => @@ -350,7 +353,7 @@ namespace isnd.Migrations b.HasKey("Id"); - b.ToTable("Commits", (string)null); + b.ToTable("Commits"); }); modelBuilder.Entity("isnd.Data.Packages.Package", b => @@ -379,7 +382,7 @@ namespace isnd.Migrations b.HasIndex("OwnerId"); - b.ToTable("Packages", (string)null); + b.ToTable("Packages"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => diff --git a/src/isnd/Services/PackageManager.cs b/src/isnd/Services/PackageManager.cs index f4797ae..c9009b3 100644 --- a/src/isnd/Services/PackageManager.cs +++ b/src/isnd/Services/PackageManager.cs @@ -362,8 +362,12 @@ namespace isnd.Services string packageDescription = xMeta.Descendants().FirstOrDefault(x => x.Name.LocalName == "description")?.Value; - var frameWorks = xMeta - .Descendants().FirstOrDefault(x => x.Name.LocalName == "frameworkReferences") + var dependencies = xMeta + .Descendants().FirstOrDefault(x => x.Name.LocalName == "dependencies"); + var frameworkReferences= xMeta + .Descendants().FirstOrDefault(x => x.Name.LocalName == "frameworkReferences"); + + var frameWorks = (dependencies ?? frameworkReferences) .Descendants().Where(x => x.Name.LocalName == "group") .Select(x => NewFrameworkDependencyGroup(x)).ToArray(); var types = "Package"; @@ -467,10 +471,11 @@ namespace isnd.Services Dependencies = framework.Dependencies.Select( d => new Dependency { - Id = d.PackageId, + PackageId = d.PackageId, Version = d.PackageVersion, }).ToList() }; + version.DependencyGroups.Add(group); dbContext.PackageDependencyGroups.Add(group); @@ -510,14 +515,16 @@ namespace isnd.Services var view = x.ToJson(); var frameworkReferences = x.Descendants(); var framework = x.Attribute("targetFramework").Value; + var deps = frameworkReferences.Select(r => new ShortDependencyInfo + { + PackageId = (r.Attribute("name") ?? r.Attribute("id")).Value, + PackageVersion = r.Attribute("version")?.Value + }); + return new FrameworkDependencyGroup { FrameworkName = framework, - Dependencies = frameworkReferences.Select(r => new ShortDependencyInfo - { - PackageId = r.Attribute("name").Value, - PackageVersion = r.Attribute("version")?.Value - }).ToList() + Dependencies = deps.ToList() }; } diff --git a/test/isnd.tests/UnitTestWebHost.cs b/test/isnd.tests/UnitTestWebHost.cs index f3571b0..72908dd 100644 --- a/test/isnd.tests/UnitTestWebHost.cs +++ b/test/isnd.tests/UnitTestWebHost.cs @@ -159,7 +159,7 @@ namespace isnd.host.tests SearchFilter searchFilter = new SearchFilter(includePrerelease: true); IEnumerable results = await resource.SearchAsync( - "isnd", + "isn.abst", searchFilter, skip: 0, take: 20, @@ -181,7 +181,7 @@ namespace isnd.host.tests PackageUpdateResource pushRes = await repository.GetResourceAsync(); SymbolPackageUpdateResourceV3 symbolPackageResource = await repository.GetResourceAsync(); - await pushRes.Push(new List{ "../../../../../src/isnd/bin/Release/isnd.1.1.4.nupkg" }, null, + await pushRes.Push(new List{ "../../../../../src/isn.abst/bin/Release/isn.abst.1.0.1.nupkg" }, null, 5000, false, GetApiKey, GetSymbolsApiKey, false, false, symbolPackageResource, logger); }