Skip to content

Commit 035b785

Browse files
committed
Search indexer: fixing support for Marketplace.
1 parent 538c15e commit 035b785

4 files changed

Lines changed: 38 additions & 14 deletions

File tree

src/PostSharp.Engineering.BuildTools/Search/Backends/Typesense/TypesenseImportFailedException.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ public class TypesenseImportFailedException : Exception
1212
{
1313
private readonly Dictionary<int, ImportResponse> _data;
1414

15-
public TypesenseImportFailedException( IEnumerable<ImportResponse> failedResponses ) : base( "Import failed." )
15+
public TypesenseImportFailedException( IReadOnlyCollection<ImportResponse> failedResponses ) :
16+
base( $"Import failed: {string.Join( "", failedResponses.Select( x => $"\n - {x.Error}" ) )}" )
1617
{
1718
var i = 0;
1819
this._data = failedResponses.ToDictionary( _ => i++, r => r );

src/PostSharp.Engineering.BuildTools/Search/UpdateSearchCommand.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ namespace PostSharp.Engineering.BuildTools.Search;
1818
[UsedImplicitly]
1919
public class UpdateSearchCommand : BaseCommand<UpdateSearchCommandSettings>
2020
{
21-
private static CollectionUpdater CreateUpdater( UpdateSearchProductExtension productExtension, SearchBackendBase backend )
22-
=> new DocumentationUpdater( productExtension.Products, backend );
23-
2421
protected override bool ExecuteCore( BuildContext context, UpdateSearchCommandSettings settings )
2522
=> ExecuteCoreAsync( context, settings ).GetAwaiter().GetResult();
2623

@@ -45,7 +42,7 @@ private static async Task<bool> ExecuteCoreAsync( BuildContext context, UpdateSe
4542

4643
if ( settings.Dry )
4744
{
48-
updater = CreateUpdater( productExtension, new DrySearchBackend( console ) );
45+
updater = productExtension.CreateUpdater( new DrySearchBackend( console ) );
4946
targetCollection = "dry"; // Console backend doesn't work with collection names.
5047
targetCollections = (null, targetCollection);
5148
}
@@ -63,7 +60,7 @@ private static async Task<bool> ExecuteCoreAsync( BuildContext context, UpdateSe
6360

6461
var uri = new Uri( productExtension.TypesenseUri );
6562
var backend = new TypesenseBackend( apiKey, uri.Host, uri.Port.ToString( CultureInfo.InvariantCulture ), uri.Scheme );
66-
updater = CreateUpdater( productExtension, backend );
63+
updater = productExtension.CreateUpdater( backend );
6764

6865
targetCollections = alias == null
6966
? (null, settings.Collection!)

src/PostSharp.Engineering.BuildTools/Search/UpdateSearchProductExtension.cs

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
// Copyright (c) SharpCrafters s.r.o. See the LICENSE.md file in the root directory of this repository root for details.
22

3+
using Amazon.Runtime.Documents;
34
using JetBrains.Annotations;
45
using PostSharp.Engineering.BuildTools.Build;
56
using PostSharp.Engineering.BuildTools.Build.Model;
67
using PostSharp.Engineering.BuildTools.ContinuousIntegration;
78
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Model;
89
using PostSharp.Engineering.BuildTools.ContinuousIntegration.Model.BuildSteps;
910
using PostSharp.Engineering.BuildTools.Dependencies.Model;
11+
using PostSharp.Engineering.BuildTools.Search.Backends;
1012
using PostSharp.Engineering.BuildTools.Search.Crawlers;
13+
using PostSharp.Engineering.BuildTools.Search.Updaters;
1114
using Spectre.Console.Cli;
1215
using System;
1316
using System.Collections.Generic;
@@ -18,14 +21,14 @@ namespace PostSharp.Engineering.BuildTools.Search;
1821
[PublicAPI]
1922
public class UpdateSearchProductExtension : ProductExtension
2023
{
24+
private readonly Func<SearchBackendBase, CollectionUpdater> _createUpdater;
25+
2126
public string TypesenseUri { get; }
2227

2328
public string Source { get; }
2429

2530
public string SourceUrl { get; }
2631

27-
public DocumentParserFactory DocumentParserFactory { get; }
28-
2932
public BuildConfiguration[] BuildConfigurations { get; }
3033

3134
public TimeSpan TimeOutThreshold { get; }
@@ -34,8 +37,6 @@ public class UpdateSearchProductExtension : ProductExtension
3437

3538
public ConfigurationSpecific<IBuildTrigger[]?>? BuildTriggers { get; }
3639

37-
public ImmutableArray<string> Products { get; }
38-
3940
public UpdateSearchProductExtension(
4041
string typesenseUri,
4142
string source,
@@ -45,18 +46,41 @@ public UpdateSearchProductExtension(
4546
BuildConfiguration[]? buildConfigurations = null,
4647
TimeSpan? timeOutThreshold = null,
4748
string? customBuildConfigurationName = null,
49+
ConfigurationSpecific<IBuildTrigger[]?>? buildTriggers = null ) : this(
50+
typesenseUri,
51+
source,
52+
sourceUrl,
53+
searchBackend => new DocumentationUpdater( products, new DocumentParserFactory( createParser ), searchBackend ),
54+
buildConfigurations,
55+
timeOutThreshold,
56+
customBuildConfigurationName,
57+
buildTriggers ) { }
58+
59+
public UpdateSearchProductExtension(
60+
string typesenseUri,
61+
string source,
62+
string sourceUrl,
63+
Func<SearchBackendBase, CollectionUpdater> createUpdater,
64+
BuildConfiguration[]? buildConfigurations = null,
65+
TimeSpan? timeOutThreshold = null,
66+
string? customBuildConfigurationName = null,
4867
ConfigurationSpecific<IBuildTrigger[]?>? buildTriggers = null )
4968
{
69+
this._createUpdater = createUpdater;
5070
this.TypesenseUri = typesenseUri;
5171
this.Source = source;
5272
this.SourceUrl = sourceUrl;
53-
this.DocumentParserFactory = new DocumentParserFactory( createParser );
54-
this.Products = products;
5573
this.BuildConfigurations = buildConfigurations ?? [BuildConfiguration.Public];
5674
this.TimeOutThreshold = timeOutThreshold ?? TimeSpan.FromMinutes( 5 );
5775
this.CustomBuildConfigurationName = customBuildConfigurationName;
5876
this.BuildTriggers = buildTriggers;
5977
}
78+
79+
80+
internal CollectionUpdater CreateUpdater( SearchBackendBase searchBackend )
81+
{
82+
return this._createUpdater( searchBackend );
83+
}
6084

6185
internal override bool AddTeamcityBuildConfiguration( BuildContext context, List<TeamCityBuildConfiguration> teamCityBuildConfigurations )
6286
{

src/PostSharp.Engineering.BuildTools/Search/Updaters/DocumentationUpdater.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ namespace PostSharp.Engineering.BuildTools.Search.Updaters;
1616
internal class DocumentationUpdater : CollectionUpdater
1717
{
1818
private readonly ImmutableArray<string> _products;
19+
private readonly DocumentParserFactory _documentParserFactory;
1920

20-
public DocumentationUpdater( ImmutableArray<string> products, SearchBackendBase backend ) : base( backend )
21+
public DocumentationUpdater( ImmutableArray<string> products, DocumentParserFactory documentParserFactory, SearchBackendBase backend ) : base( backend )
2122
{
2223
this._products = products;
24+
this._documentParserFactory = documentParserFactory;
2325
}
2426

2527
public override async Task<bool> UpdateAsync( BuildContext context, UpdateSearchCommandSettings settings, string targetCollection )
@@ -36,7 +38,7 @@ public override async Task<bool> UpdateAsync( BuildContext context, UpdateSearch
3638

3739
using ( web )
3840
{
39-
var siteIndexer = new SiteIndexer( this.Backend, productExtension.DocumentParserFactory, web, context.Console );
41+
var siteIndexer = new SiteIndexer( this.Backend, this._documentParserFactory, web, context.Console );
4042

4143
if ( !string.IsNullOrEmpty( settings.SingleArticleUrl ) )
4244
{

0 commit comments

Comments
 (0)