Skip to content

Commit 6a86bc4

Browse files
authored
Synonyms as code (#2088)
* Introduce synonyms.yaml to standardize declarations. Apply synonyms via a PUT request.
1 parent 5b75f72 commit 6a86bc4

File tree

22 files changed

+134
-14
lines changed

22 files changed

+134
-14
lines changed

docs-builder.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "config", "config", "{6FAB56
122122
config\legacy-url-mappings.yml = config\legacy-url-mappings.yml
123123
config\navigation.yml = config\navigation.yml
124124
config\products.yml = config\products.yml
125+
config\synonyms.yml = config\synonyms.yml
125126
EndProjectSection
126127
EndProject
127128
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests-integration", "tests-integration", "{BCAD38D5-6C83-46E2-8398-4BE463931098}"

docs/_docset.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ toc:
7070
- file: products.md
7171
- file: versions.md
7272
- file: legacy-url-mappings.md
73+
- file: synonyms.md
7374
- folder: content-set
7475
children:
7576
- file: index.md

docs/configure/site/index.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ Configure the documentation site in these files:
1616

1717
Redirects are also configured at the site-level. See [](../../contribute/redirects.md) for more information.
1818

19+
## Synonyms
20+
21+
Synonyms applied to our Serverless observability project are declared as a site-level configuration. See [](./synonyms.md) for more information.
22+
1923
## V3 site-level diagram
2024

2125
*Coming soon*

docs/configure/site/synonyms.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# `synonyms.yml`
2+
3+
The [`synonyms.yml`](https://github.com/elastic/docs-builder/blob/main/config/synonyms.yml) file provides a way to define synonyms for our Serverless observability project.
4+
5+
Synonyms updates are sent during Elasticsearch-specific export procedures in the CI workflow.
6+
7+
```yml
8+
synonyms:
9+
- [ ".net", "c#", "csharp", "dotnet", "net" ]
10+
- [ "esql", "es|ql" ]
11+
- [ "motlp", "managed otlp" ]
12+
```

src/Elastic.Documentation.Configuration/BuildContext.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Elastic.Documentation.Configuration.Builder;
99
using Elastic.Documentation.Configuration.LegacyUrlMappings;
1010
using Elastic.Documentation.Configuration.Products;
11+
using Elastic.Documentation.Configuration.Synonyms;
1112
using Elastic.Documentation.Configuration.Versions;
1213
using Elastic.Documentation.Diagnostics;
1314

@@ -34,6 +35,7 @@ public record BuildContext : IDocumentationSetContext, IDocumentationConfigurati
3435

3536
public ProductsConfiguration ProductsConfiguration { get; }
3637
public LegacyUrlMappingConfiguration LegacyUrlMappings { get; }
38+
public SynonymsConfiguration SynonymsConfiguration { get; }
3739

3840
public IFileInfo ConfigurationPath { get; }
3941

@@ -85,6 +87,7 @@ public BuildContext(
8587
ReadFileSystem = readFileSystem;
8688
WriteFileSystem = writeFileSystem;
8789
AvailableExporters = availableExporters;
90+
SynonymsConfiguration = configurationContext.SynonymsConfiguration;
8891
VersionsConfiguration = configurationContext.VersionsConfiguration;
8992
ConfigurationFileProvider = configurationContext.ConfigurationFileProvider;
9093
ProductsConfiguration = configurationContext.ProductsConfiguration;

src/Elastic.Documentation.Configuration/ConfigurationFileProvider.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public ConfigurationFileProvider(
4949
ConfigurationSource = source;
5050
else
5151
{
52-
string[] spotChecks = ["navigation.yml", "versions.yml", "products.yml", "assembler.yml"];
52+
string[] spotChecks = ["navigation.yml", "versions.yml", "products.yml", "assembler.yml", "synonyms.yml"];
5353
var defaultSource =
5454
fileSystem.Directory.Exists(LocalConfigurationDirectory)
5555
&& spotChecks.All(f => fileSystem.File.Exists(Path.Combine(LocalConfigurationDirectory, f)))
@@ -92,6 +92,7 @@ public ConfigurationFileProvider(
9292
AssemblerFile = CreateTemporaryConfigurationFile("assembler.yml");
9393
NavigationFile = CreateTemporaryConfigurationFile("navigation.yml");
9494
LegacyUrlMappingsFile = CreateTemporaryConfigurationFile("legacy-url-mappings.yml");
95+
SynonymsFile = CreateTemporaryConfigurationFile("synonyms.yml");
9596
}
9697

9798
public bool SkipPrivateRepositories { get; }
@@ -108,6 +109,7 @@ public ConfigurationFileProvider(
108109

109110
public IFileInfo LegacyUrlMappingsFile { get; }
110111

112+
public IFileInfo SynonymsFile { get; }
111113
public IFileInfo CreateNavigationFile(AssemblyConfiguration configuration)
112114
{
113115
var privateRepositories = configuration.PrivateRepositories;

src/Elastic.Documentation.Configuration/Elastic.Documentation.Configuration.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@
2424
<EmbeddedResource Include="$(SolutionRoot)\config\assembler.yml" />
2525
<EmbeddedResource Include="$(SolutionRoot)\config\navigation.yml" />
2626
<EmbeddedResource Include="$(SolutionRoot)\config\legacy-url-mappings.yml" />
27+
<EmbeddedResource Include="$(SolutionRoot)\config\synonyms.yml" />
2728
</ItemGroup>
2829
</Project>

src/Elastic.Documentation.Configuration/IDocumentationConfigurationContext.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
using Elastic.Documentation.Configuration.LegacyUrlMappings;
66
using Elastic.Documentation.Configuration.Products;
7+
using Elastic.Documentation.Configuration.Synonyms;
78
using Elastic.Documentation.Configuration.Versions;
89

910
namespace Elastic.Documentation.Configuration;
@@ -15,6 +16,8 @@ public interface IConfigurationContext
1516
DocumentationEndpoints Endpoints { get; }
1617
ProductsConfiguration ProductsConfiguration { get; }
1718
LegacyUrlMappingConfiguration LegacyUrlMappings { get; }
19+
SynonymsConfiguration SynonymsConfiguration { get; }
20+
1821
}
1922

2023
/// Used only to seed <see cref="IConfigurationContext"/> in DI, you primarily want to depend on <see cref="IDocumentationConfigurationContext"/>
@@ -35,6 +38,8 @@ public class ConfigurationContext : IConfigurationContext
3538
/// <inheritdoc />
3639
public required LegacyUrlMappingConfiguration LegacyUrlMappings { get; init; }
3740

41+
/// <inheritdoc />
42+
public required SynonymsConfiguration SynonymsConfiguration { get; init; }
3843
}
3944

4045
public interface IDocumentationConfigurationContext : IDocumentationContext, IConfigurationContext;

src/Elastic.Documentation.Configuration/Serialization/YamlStaticContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Elastic.Documentation.Configuration.Assembler;
66
using Elastic.Documentation.Configuration.LegacyUrlMappings;
77
using Elastic.Documentation.Configuration.Products;
8+
using Elastic.Documentation.Configuration.Synonyms;
89
using Elastic.Documentation.Configuration.Versions;
910
using YamlDotNet.Serialization;
1011

@@ -23,4 +24,5 @@ namespace Elastic.Documentation.Configuration.Serialization;
2324
[YamlSerializable(typeof(ProductDto))]
2425
[YamlSerializable(typeof(LegacyUrlMappingDto))]
2526
[YamlSerializable(typeof(LegacyUrlMappingConfigDto))]
27+
[YamlSerializable(typeof(SynonymsConfigDto))]
2628
public partial class YamlStaticContext;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Licensed to Elasticsearch B.V under one or more agreements.
2+
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3+
// See the LICENSE file in the project root for more information
4+
5+
using System.Collections.Immutable;
6+
7+
namespace Elastic.Documentation.Configuration.Synonyms;
8+
9+
public record SynonymsConfiguration
10+
{
11+
public required IReadOnlyCollection<string> Synonyms { get; init; }
12+
}
13+
14+
internal sealed record SynonymsConfigDto
15+
{
16+
public List<List<string>> Synonyms { get; set; } = [];
17+
}
18+
19+
public static class SynonymsConfigurationExtensions
20+
{
21+
public static SynonymsConfiguration CreateSynonymsConfiguration(this ConfigurationFileProvider provider)
22+
{
23+
var synonymsFile = provider.SynonymsFile;
24+
25+
if (!synonymsFile.Exists)
26+
return new SynonymsConfiguration { Synonyms = [] };
27+
28+
var synonymsDto = ConfigurationFileProvider.Deserializer.Deserialize<SynonymsConfigDto>(synonymsFile.OpenText());
29+
var flattenedSynonyms = synonymsDto.Synonyms.Select(sl => string.Join(',', sl)).ToImmutableArray();
30+
return new SynonymsConfiguration { Synonyms = flattenedSynonyms };
31+
}
32+
}

0 commit comments

Comments
 (0)