Skip to content

Commit 6d086ec

Browse files
committed
- Update listed packages
- Improve UI - Add `IncludedVpmRepositoryManifestUrls`
1 parent 9f88ae7 commit 6d086ec

File tree

12 files changed

+220
-76
lines changed

12 files changed

+220
-76
lines changed

.nuke/build.schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"type": "string",
2626
"enum": [
2727
"Publish",
28-
"RefreshVpmRepositoryJson"
28+
"RefreshVpmRepositoryManifest"
2929
]
3030
},
3131
"Verbosity": {

VpmRepository.Build/Build.cs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,12 @@ GitHubClient GitHubClient
9494
GitHubRepositories =
9595
{
9696
["RamType0"] = ["Meshia.MeshSimplification"],
97+
["bdunderscore"] =["ndmf", "modular-avatar"],
98+
["anatawa12"] = ["CustomLocalization4EditorExtension"],
9799
},
98100
};
99101

100-
Target RefreshVpmRepositoryJson => _ => _
102+
Target RefreshVpmRepositoryManifest => _ => _
101103
.Executes(async () =>
102104
{
103105
AbsolutePath vpmRepositoryManifestJsonPath = (WorkingDirectory / "VpmRepository.Web" / "wwwroot" / RepositoryManifestFileName);
@@ -133,7 +135,7 @@ GitHubClient GitHubClient
133135
.Where(packageManifest => packageManifest.Url is not null)
134136
.ToDictionary(packageManifest => packageManifest.Url!) ?? [];
135137

136-
List<VpmPackageManifest> vpmPackageManifests = [];
138+
HashSet<VpmPackageManifest> vpmPackageManifests = new(UpmPackageManifestNameVersionEqualityComparer.Instance);
137139

138140
foreach (var (owner, repoNames) in Settings.GitHubRepositories)
139141
{
@@ -151,12 +153,26 @@ GitHubClient GitHubClient
151153
var packageManifest = await GetVpmPackageManifestAsync(packageZipUrl, existingPackageManifests);
152154
if (packageManifest is null)
153155
{
154-
Serilog.Log.Warning($"Package manifest for {packageZipUrl} is null, skipping.");
155-
continue;
156+
throw new ArgumentException($"Package manifest for {packageZipUrl} is null. The package may not contain a valid package.json file or the URL is incorrect.");
156157
}
157158
vpmPackageManifests.Add(packageManifest);
158159
}
159160

161+
foreach (var includedManifestUrl in Settings.IncludedVpmRepositoryManifestUrls)
162+
{
163+
var includedManifest = await HttpClient.GetFromJsonAsync<VpmRepositoryManifest>(includedManifestUrl, JsonSerializerOptions);
164+
if (includedManifest is null)
165+
{
166+
throw new ArgumentException($"Included VPM repository manifest at {includedManifestUrl} is null.");
167+
}
168+
169+
foreach (var packageManifest in includedManifest.Packages.Values.SelectMany(packageVersions => packageVersions.Versions.Values))
170+
{
171+
vpmPackageManifests.Add(packageManifest);
172+
}
173+
174+
}
175+
160176
VpmRepositoryManifest vpmRepositoryManifest = new()
161177
{
162178
Id = Settings.Id,
@@ -176,7 +192,7 @@ GitHubClient GitHubClient
176192
vpmRepositoryManifestJsonPath.WriteAllBytes(JsonSerializer.SerializeToUtf8Bytes(vpmRepositoryManifest, JsonSerializerOptions));
177193
});
178194
Target Publish => _ => _
179-
.DependsOn(RefreshVpmRepositoryJson)
195+
.DependsOn(RefreshVpmRepositoryManifest)
180196
.Executes(() =>
181197
{
182198
DotNetPublish(config => config

VpmRepository.Build/VpmRepositorySettings.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,7 @@ public record VpmRepositorySettings
1717
public Uri[] PackageZipUrls { get; init; } = [];
1818

1919
public Dictionary<string, string[]> GitHubRepositories { get; init; } = [];
20+
21+
public Uri[] IncludedVpmRepositoryManifestUrls { get; init; } = [];
2022
}
2123

VpmRepository.Shared/Json.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Text.Json;
2+
using System.Text.Json.Serialization;
3+
namespace VpmRepository;
4+
5+
public static class Json
6+
{
7+
public static JsonSerializerOptions JsonSerializerOptions { get; } = new()
8+
{
9+
Converters =
10+
{
11+
new SemanticVersionJsonConverter(),
12+
new SemanticVersionRangeJsonConverter(),
13+
},
14+
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
15+
};
16+
}

VpmRepository.Shared/PackageManifest.cs

Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,12 @@ public record UpmPackageManifest
3939
[JsonPropertyName("changelogUrl")]
4040
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
4141
public Uri? ChangelogUrl { get; set; }
42+
/// <remarks>
43+
/// Some packages incorrectly use version ranges in the <c>dependencies</c> field, which is not supported by Unity Package Manager. But we support it here for compatibility.
44+
/// </remarks>
4245
[JsonPropertyName("dependencies")]
4346
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
44-
public Dictionary<string, SemanticVersion> Dependencies { get; set; } = new();
47+
public Dictionary<string, SemanticVersionRange> Dependencies { get; set; } = new();
4548
[JsonPropertyName("documentationUrl")]
4649
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
4750
public Uri? DocumentationUrl { get; set; }
@@ -71,69 +74,5 @@ public record UpmPackageManifest
7174
public string? UnityRelease { get; set; }
7275

7376
[JsonExtensionData]
74-
7577
public Dictionary<string, JsonElement>? AdditionalProperties { get; set; }
7678
}
77-
78-
public partial record VpmPackageManifest : UpmPackageManifest
79-
{
80-
81-
[JsonPropertyName("vpmDependencies")]
82-
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
83-
public Dictionary<string, SemanticVersionRange>? VpmDependencies { get; set; }
84-
[JsonPropertyName("url")]
85-
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
86-
public Uri? Url { get; set; }
87-
88-
[JsonPropertyName("zipSHA256")]
89-
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
90-
public string? ZipSha256 { get; set; }
91-
}
92-
93-
public record PackageSample
94-
{
95-
[JsonPropertyName("displayName")]
96-
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
97-
public string? DisplayName { get; set; }
98-
[JsonPropertyName("description")]
99-
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
100-
public string? Description { get; set; }
101-
[JsonPropertyName("path")]
102-
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
103-
public string? Path { get; set; }
104-
}
105-
106-
public record VpmRepositoryManifest
107-
{
108-
[JsonPropertyName("name")]
109-
public required string Name { get; set; }
110-
[JsonPropertyName("id")]
111-
public required string Id { get; set; }
112-
[JsonPropertyName("author")]
113-
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
114-
public string? Author { get; set; }
115-
[JsonPropertyName("url")]
116-
public required Uri Url { get; set; }
117-
118-
[JsonPropertyName("packages")]
119-
public required Dictionary<string, VpmPackageVersions> Packages { get; set; }
120-
}
121-
122-
public record VpmPackageVersions
123-
{
124-
[JsonPropertyName("versions")]
125-
public required Dictionary<SemanticVersion, VpmPackageManifest> Versions { get; set; } = new();
126-
}
127-
128-
public static class Json
129-
{
130-
public static JsonSerializerOptions JsonSerializerOptions { get; } = new()
131-
{
132-
Converters =
133-
{
134-
new SemanticVersionJsonConverter(),
135-
new SemanticVersionRangeJsonConverter(),
136-
},
137-
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
138-
};
139-
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Text.Json.Serialization;
2+
namespace VpmRepository;
3+
4+
public record PackageSample
5+
{
6+
[JsonPropertyName("displayName")]
7+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
8+
public string? DisplayName { get; set; }
9+
[JsonPropertyName("description")]
10+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
11+
public string? Description { get; set; }
12+
[JsonPropertyName("path")]
13+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
14+
public string? Path { get; set; }
15+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
namespace VpmRepository;
2+
3+
public sealed class UpmPackageManifestNameVersionEqualityComparer : IEqualityComparer<UpmPackageManifest>
4+
{
5+
public static UpmPackageManifestNameVersionEqualityComparer Instance { get; } = new UpmPackageManifestNameVersionEqualityComparer();
6+
public bool Equals(UpmPackageManifest? x, UpmPackageManifest? y)
7+
{
8+
if(x is null && y is null)
9+
{
10+
return true;
11+
}
12+
if(x is null || y is null)
13+
{
14+
return false;
15+
}
16+
return x.Name == y.Name && x.Version == y.Version;
17+
}
18+
public int GetHashCode(UpmPackageManifest obj)
19+
{
20+
return HashCode.Combine(obj.Name, obj.Version);
21+
}
22+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System.Text.Json;
2+
using System.Text.Json.Nodes;
3+
using System.Text.Json.Serialization;
4+
using SemanticVersionRange = SemanticVersioning.Range;
5+
namespace VpmRepository;
6+
7+
public record VpmPackageManifest : UpmPackageManifest
8+
{
9+
10+
[JsonPropertyName("vpmDependencies")]
11+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
12+
public Dictionary<string, SemanticVersionRange>? VpmDependencies { get; set; }
13+
[JsonPropertyName("url")]
14+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
15+
public Uri? Url { get; set; }
16+
17+
[JsonPropertyName("zipSHA256")]
18+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
19+
public string? ZipSha256 { get; set; }
20+
21+
[JsonPropertyName("vrc-get")]
22+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
23+
public VrcGetExtension? VrcGetExtension { get; set; }
24+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System.Text.Json.Serialization;
2+
using SemanticVersion = SemanticVersioning.Version;
3+
namespace VpmRepository;
4+
5+
public record VpmPackageVersions
6+
{
7+
[JsonPropertyName("versions")]
8+
public required Dictionary<SemanticVersion, VpmPackageManifest> Versions { get; set; } = new();
9+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System.Text.Json.Serialization;
2+
namespace VpmRepository;
3+
4+
public record VpmRepositoryManifest
5+
{
6+
[JsonPropertyName("name")]
7+
public required string Name { get; set; }
8+
[JsonPropertyName("id")]
9+
public required string Id { get; set; }
10+
[JsonPropertyName("author")]
11+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
12+
public string? Author { get; set; }
13+
[JsonPropertyName("url")]
14+
public required Uri Url { get; set; }
15+
16+
[JsonPropertyName("packages")]
17+
public required Dictionary<string, VpmPackageVersions> Packages { get; set; }
18+
}

0 commit comments

Comments
 (0)