From c27922d7dfe642687c5661e727001f96f8331fba Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Mon, 24 Feb 2025 22:25:59 +0100 Subject: [PATCH 1/2] link validate-inbound-local's resolver was using a stale copy --- .../CrossLinks/CrossLinkResolver.cs | 17 +++++++++++++---- .../Links/LinkIndexLinkChecker.cs | 16 +++++++++------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/Elastic.Markdown/CrossLinks/CrossLinkResolver.cs b/src/Elastic.Markdown/CrossLinks/CrossLinkResolver.cs index 66ec9dfeb..d99f3a7bd 100644 --- a/src/Elastic.Markdown/CrossLinks/CrossLinkResolver.cs +++ b/src/Elastic.Markdown/CrossLinks/CrossLinkResolver.cs @@ -2,6 +2,7 @@ // Elasticsearch B.V licenses this file to you under the Apache 2.0 License. // See the LICENSE file in the project root for more information +using System.Collections.Frozen; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; @@ -39,19 +40,27 @@ public interface ICrossLinkResolver public class CrossLinkResolver(CrossLinkFetcher fetcher) : ICrossLinkResolver { - private FetchedCrossLinks _linkReferences = FetchedCrossLinks.Empty; + private FetchedCrossLinks _crossLinks = FetchedCrossLinks.Empty; public async Task FetchLinks() { - _linkReferences = await fetcher.Fetch(); - return _linkReferences; + _crossLinks = await fetcher.Fetch(); + return _crossLinks; } public bool TryResolve(Action errorEmitter, Uri crossLinkUri, [NotNullWhen(true)] out Uri? resolvedUri) => - TryResolve(errorEmitter, _linkReferences, crossLinkUri, out resolvedUri); + TryResolve(errorEmitter, _crossLinks, crossLinkUri, out resolvedUri); private static Uri BaseUri { get; } = new("https://docs-v3-preview.elastic.dev"); + public FetchedCrossLinks UpdateLinkReference(string repository, LinkReference linkReference) + { + var dictionary = _crossLinks.LinkReferences.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + dictionary[repository] = linkReference; + _crossLinks = _crossLinks with { LinkReferences = dictionary.ToFrozenDictionary() }; + return _crossLinks; + } + public static bool TryResolve( Action errorEmitter, FetchedCrossLinks fetchedCrossLinks, diff --git a/src/docs-assembler/Links/LinkIndexLinkChecker.cs b/src/docs-assembler/Links/LinkIndexLinkChecker.cs index d940f8538..9e3973708 100644 --- a/src/docs-assembler/Links/LinkIndexLinkChecker.cs +++ b/src/docs-assembler/Links/LinkIndexLinkChecker.cs @@ -48,31 +48,28 @@ Cancel ctx if (!Path.IsPathRooted(localLinksJson)) localLinksJson = Path.Combine(Paths.Root.FullName, localLinksJson); - var dictionary = crossLinks.LinkReferences.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); try { var json = await File.ReadAllTextAsync(localLinksJson, ctx); var localLinkReference = LinkReference.Deserialize(json); - - dictionary[repository] = localLinkReference; + crossLinks = resolver.UpdateLinkReference(repository, localLinkReference); } catch (Exception e) { _logger.LogError(e, "Failed to read {LocalLinksJson}", localLinksJson); throw; } - crossLinks = crossLinks with { LinkReferences = dictionary.ToFrozenDictionary() }; _logger.LogInformation("Validating all cross links to {Repository}:// from all repositories published to link-index.json", repository); - return await ValidateCrossLinks(githubActionsService, crossLinks, resolver, [repository], ctx); + return await ValidateCrossLinks(githubActionsService, crossLinks, resolver, repository, ctx); } private async Task ValidateCrossLinks( ICoreService githubActionsService, FetchedCrossLinks crossLinks, CrossLinkResolver resolver, - string[]? repositoryFilter, + string? currentRepository, Cancel ctx) { var collector = new ConsoleDiagnosticsCollector(logger, githubActionsService); @@ -85,9 +82,14 @@ private async Task ValidateCrossLinks( // if we are filtering we only want errors from inbound links to a certain // repository var uri = new Uri(crossLink); - if (repositoryFilter != null && uri.Scheme != repository) + if (currentRepository != null && uri.Scheme != currentRepository) continue; + if (crossLink.Contains("upload-custom-plugins-bundles")) + { + + } + _ = resolver.TryResolve(s => { if (s.Contains("is not a valid link in the")) From 428a745d1e557c61525bd18012e654400e1e1553 Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Mon, 24 Feb 2025 22:28:49 +0100 Subject: [PATCH 2/2] remove debug code --- src/docs-assembler/Links/LinkIndexLinkChecker.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/docs-assembler/Links/LinkIndexLinkChecker.cs b/src/docs-assembler/Links/LinkIndexLinkChecker.cs index 9e3973708..9048f14e4 100644 --- a/src/docs-assembler/Links/LinkIndexLinkChecker.cs +++ b/src/docs-assembler/Links/LinkIndexLinkChecker.cs @@ -85,11 +85,6 @@ private async Task ValidateCrossLinks( if (currentRepository != null && uri.Scheme != currentRepository) continue; - if (crossLink.Contains("upload-custom-plugins-bundles")) - { - - } - _ = resolver.TryResolve(s => { if (s.Contains("is not a valid link in the"))