diff --git a/actions/preview-link-generator/README.md b/actions/preview-link-generator/README.md index fe1194e6..8d134395 100644 --- a/actions/preview-link-generator/README.md +++ b/actions/preview-link-generator/README.md @@ -1,6 +1,6 @@ # Preview link generator GitHub Action -This action updates a pull request body with preview links for changed markdown and YAML files. +This action updates a pull request body with preview links extracted from the OpenPublishing.Build report after the OPS status check completes. ## Usage diff --git a/actions/preview-link-generator/__tests__/3/three.md b/actions/preview-link-generator/__tests__/3/three.md deleted file mode 100644 index 8da76ab4..00000000 --- a/actions/preview-link-generator/__tests__/3/three.md +++ /dev/null @@ -1 +0,0 @@ -# THREE diff --git a/actions/preview-link-generator/__tests__/file-heading-extractor.test.ts b/actions/preview-link-generator/__tests__/file-heading-extractor.test.ts deleted file mode 100644 index d0b8d927..00000000 --- a/actions/preview-link-generator/__tests__/file-heading-extractor.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { describe, expect, it } from "@jest/globals"; -import { getHeadingTextFrom } from "../src/file-heading-extractor"; - -beforeAll(() => { - process.env["GITHUB_REPOSITORY"] = "dotnet/docs"; -}); - -describe("file-heading-extractor", () => { - it("when calling getHeadingTextFrom correctly returns H1 value.", async () => { - const path = "__tests__/sample.md"; - const actual = await getHeadingTextFrom(path); - expect(actual).toBe("The heading `System.Console` class"); - }); - - it("when calling getHeadingTextFrom correctly returns title value.", async () => { - const path = "__tests__/no-heading.md"; - const actual = await getHeadingTextFrom(path); - expect(actual).toBe("Phew, that worked!"); - }); -}); diff --git a/actions/preview-link-generator/__tests__/no-heading.md b/actions/preview-link-generator/__tests__/no-heading.md deleted file mode 100644 index eb67b6fb..00000000 --- a/actions/preview-link-generator/__tests__/no-heading.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Phew, that worked! ---- - -An h1 header -============ - -Paragraphs are separated by a blank line. - -2nd paragraph. *Italic*, **bold**, and `monospace`. Itemized lists -look like: - -* this one -* that one -* the other one - -Note that --- not considering the asterisk --- the actual text -content starts at 4-columns in. - -> Block quotes are -> written like so. -> -> They can span multiple paragraphs, -> if you like. - -Use 3 dashes for an em-dash. Use 2 dashes for ranges (ex., "it's all -in chapters 12--14"). Three dots ... will be converted to an ellipsis. -Unicode is supported. ☺ - -An h2 header ------------- - -Here's a numbered list: - - 1. first item - 2. second item - 3. third item - -Note again how the actual text starts at 4 columns in (4 characters -from the left side). Here's a code sample: - - # Let me re-iterate ... - for i in 1 .. 10 { do-something(i) } - -As you probably guessed, indented 4 spaces. By the way, instead of -indenting the block, you can use delimited blocks, if you like: - -~~~ -define foobar() { - print "Welcome to flavor country!"; -} -~~~ - -(which makes copying & pasting easier). You can optionally mark the -delimited block for Pandoc to syntax highlight it: - -~~~python -import time -for i in range(10): - # (but not *too* quick) - time.sleep(0.5) - print i -~~~ - -### An h3 header ### - -Now a nested list: - - 1. First, get these ingredients: - - * carrots - * celery - * lentils - - 2. Boil some water. - - 3. Dump everything in the pot and follow - this algorithm: - - find wooden spoon - uncover pot - stir - cover pot - balance wooden spoon precariously on pot handle - wait 10 minutes - goto first step (or shut off burner when done) - - Do not bump wooden spoon or it will fall. - -Notice again how text always lines up on 4-space indents (including -that last line which continues item 3 above). - -Here's a link to [a website](http://foo.bar), and to a [section heading in the current -doc](#an-h2-header). Here's a footnote [^1]. - -[^1]: Footnote text goes here. - -Tables can look like this: - -size material color ----- ------------ ------------ -9 leather brown -10 hemp canvas natural -11 glass transparent - -Table: Shoes, their sizes, and what they're made of - -(The above is the caption for the table.) Pandoc also supports -multi-line tables: - --------- ----------------------- -keyword text --------- ----------------------- -red Sunsets, apples, and - other red or reddish - things. - -green Leaves, grass, frogs - and other things it's - not easy being. --------- ----------------------- - -A horizontal rule follows. - -*** - -Here's a definition list: - -apples - : Good for making applesauce. -oranges - : Citrus! -tomatoes - : There's no "e" in tomatoe. - -Again, text is indented 4 spaces. (Put a blank line between each -term/definition pair to spread things out more.) - -Here's a "line block": - -| Line one -| Line too -| Line tree - -and images can be specified like so: - - - -Inline math equations go in like so: $\omega = d\phi / dt$. Display -math should get its own line and be put in in double-dollarsigns: - -$$I = \int \rho R^{2} dV$$ - -And note that you can backslash-escape any punctuation characters -which you wish to be displayed literally, ex.: \`foo\`, \*bar\*, etc. - -```dockerfile -RUN dotnet restore -a $TARGETARCH - -COPY aspnetapp/. . -RUN dotnet publish -a $TARGETARCH --self-contained false --no-restore -o /app -``` diff --git a/actions/preview-link-generator/__tests__/pull-updater.test.ts b/actions/preview-link-generator/__tests__/pull-updater.test.ts index 928e2204..2d2ca715 100644 --- a/actions/preview-link-generator/__tests__/pull-updater.test.ts +++ b/actions/preview-link-generator/__tests__/pull-updater.test.ts @@ -1,18 +1,14 @@ import { exportedForTesting } from "../src/pull-updater"; import { describe, expect, it } from "@jest/globals"; import { WorkflowInput, workflowInput } from "../src/types/WorkflowInput"; -import { PullRequestDetails } from "../src/types/PullRequestDetails"; const { appendTable, - buildMarkdownPreviewTable, - getModifiedPreviewEnabledFiles, - isFilePreviewEnabled, - isPullRequestModifyingPreviewEnabledFiles, + buildMarkdownPreviewTableFromExtractedLinks, + extractPreviewLinksFromBuildReport, PREVIEW_TABLE_END, PREVIEW_TABLE_START, replaceExistingTable, - toPreviewLink, } = exportedForTesting; beforeAll(() => { @@ -81,30 +77,6 @@ ${PREVIEW_TABLE_END}`; expect(actual).toEqual(expectedBody); }); - it("buildMarkdownPreviewTable builds preview table correctly", async () => { - setInput("DOCS_PATH", "docs"); - setInput("URL_BASE_PATH", "dotnet"); - - const actual = await buildMarkdownPreviewTable( - 7, - [ - { - additions: 1, - deletions: 1, - path: "test/markdown.md", - changeType: "MODIFIED", - }, - ], - "", - "oid", - false, - false - ); - expect(actual).toEqual( - `#### Internal previews\n\n| 📄 File | 🔗 Preview link |\n|:--|:--|\n| [test/markdown.md](https://github.com/dotnet/docs/blob/oid/test/markdown.md) | [test/markdown](https://review.learn.microsoft.com/en-us/dotnet/test/markdown?branch=pr-en-us-7) |\n` - ); - }); - it("options are correctly constructed with expected values from import", () => { setInput("COLLAPSIBLE_AFTER", "7"); setInput("DOCS_PATH", "test/path"); @@ -141,269 +113,82 @@ ${PREVIEW_TABLE_END}`; compareMaps(map, opts.opaqueLeadingUrlSegments); }); - - it("buildMarkdownPreviewTable builds preview table correctly with collapsible HTML elements.", async () => { - setInput("COLLAPSIBLE_AFTER", "3"); - setInput("DOCS_PATH", "docs"); - setInput("URL_BASE_PATH", "dotnet"); - - const actual = await buildMarkdownPreviewTable( - 7, - [ - { - additions: 1, - deletions: 1, - path: "1/one.md", - changeType: "MODIFIED", - }, - { - additions: 1, - deletions: 1, - path: "2/two.md", - changeType: "MODIFIED", - }, - { - additions: 1, - deletions: 1, - path: "__tests__/3/three.md", - changeType: "MODIFIED", - }, - { - additions: 1, - deletions: 1, - path: "4/four.md", - changeType: "MODIFIED", - }, - { - additions: 1, - deletions: 1, - path: "5/five.md", - changeType: "MODIFIED", - }, - ], - "", - "oid", - false, - false + it("extractPreviewLinksFromBuildReport parses file to preview URL map", () => { + const html = ` + +
+| File | Status | Preview URL | +
| docs/a.md | +Updated | +a | +
| docs/b.yml | +Updated | +b | +