-
Notifications
You must be signed in to change notification settings - Fork 537
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(build-cli): New command transform:releaseNotes #22466
Merged
Merged
Changes from all commits
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
7d9425d
feat(build-cli): New command transform:releaseNotes
tylerbutler 15d36fb
pipeline example
tylerbutler d8a5e18
updates
tylerbutler a8083e1
policy
tylerbutler 335f473
Update .github/workflows/push-tag-create-release.yml
tylerbutler 58549ea
Update build-tools/packages/build-cli/src/commands/transform/releaseN…
tylerbutler 9b7d2d6
consistent if checks in workflow
tylerbutler 86424b1
Remove all heading not just the first one
tylerbutler 8fde443
feedback
tylerbutler 2e81fa0
build and format
tylerbutler 5184d18
merge
tylerbutler 5d49bb4
format
tylerbutler 712b964
fixes
tylerbutler 88aafea
use chared const
tylerbutler 3527f83
Merge branch 'main' into bt-relnotes-publish
tylerbutler 2221ff1
Merge branch 'main' into bt-relnotes-publish
tylerbutler bd3e3f6
lint disable
tylerbutler 88ac563
Update releaseNotes.ts
tylerbutler fe487b2
Update releaseNotes.ts
tylerbutler 7c45b39
Update markdown.ts
tylerbutler 62523e9
Update releaseNotes.ts
tylerbutler a72b558
Merge branch 'main' into bt-relnotes-publish
tylerbutler 9d65d31
Merge branch 'main' into bt-relnotes-publish
tylerbutler fc88b0a
rm unused dep
tylerbutler c8535f2
feedback
tylerbutler 7849958
Merge branch 'main' into bt-relnotes-publish
tylerbutler 1664b8c
revert
tylerbutler File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
`flub transform` | ||
================ | ||
|
||
Transform commands are used to transform code, docs, etc. into alternative forms. | ||
|
||
* [`flub transform releaseNotes`](#flub-transform-releasenotes) | ||
|
||
## `flub transform releaseNotes` | ||
|
||
Transforms a markdown release notes file into a format appropriate for use in a GitHub Release. This is used to transform in-repo release notes such that they can be automatically posted to our GitHub Releases. | ||
|
||
``` | ||
USAGE | ||
$ flub transform releaseNotes --inFile <value> --outFile <value> [-v | --quiet] | ||
|
||
FLAGS | ||
--inFile=<value> (required) A release notes file that was generated using 'flub generate releaseNotes'. | ||
--outFile=<value> (required) Output the transformed content to this file. | ||
|
||
LOGGING FLAGS | ||
-v, --verbose Enable verbose logging. | ||
--quiet Disable all logging. | ||
|
||
EXAMPLES | ||
Transform the release notes from version 2.2.0 and output the results to out.md. | ||
|
||
$ flub transform releaseNotes --inFile RELEASE_NOTES/2.2.0.md --outFile out.md | ||
``` | ||
|
||
_See code: [src/commands/transform/releaseNotes.ts](https://github.com/microsoft/FluidFramework/blob/main/build-tools/packages/build-cli/src/commands/transform/releaseNotes.ts)_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
111 changes: 111 additions & 0 deletions
111
build-tools/packages/build-cli/src/commands/transform/releaseNotes.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
/*! | ||
* Copyright (c) Microsoft Corporation and contributors. All rights reserved. | ||
* Licensed under the MIT License. | ||
*/ | ||
|
||
import { readFile, writeFile } from "node:fs/promises"; | ||
import { Flags } from "@oclif/core"; | ||
import { format as prettier } from "prettier"; | ||
import { remark } from "remark"; | ||
import remarkGfm from "remark-gfm"; | ||
import remarkGithub, { defaultBuildUrl } from "remark-github"; | ||
import admonitions from "remark-github-beta-blockquote-admonitions"; | ||
import remarkToc from "remark-toc"; | ||
|
||
import { BaseCommand } from "../../library/index.js"; | ||
import { | ||
addHeadingLinks, | ||
removeHeadingsAtLevel, | ||
removeSectionContent, | ||
stripSoftBreaks, | ||
updateTocLinks, | ||
// eslint-disable-next-line import/no-internal-modules | ||
} from "../../library/markdown.js"; | ||
// eslint-disable-next-line import/no-internal-modules | ||
import { RELEASE_NOTES_TOC_LINK_TEXT } from "../../library/releaseNotes.js"; | ||
|
||
/** | ||
* Transforms a markdown release notes file into a format appropriate for use in a GitHub Release. | ||
*/ | ||
export default class TransformReleaseNotesCommand extends BaseCommand< | ||
typeof TransformReleaseNotesCommand | ||
> { | ||
static readonly summary = | ||
`Transforms a markdown release notes file into a format appropriate for use in a GitHub Release. This is used to transform in-repo release notes such that they can be automatically posted to our GitHub Releases.`; | ||
|
||
static readonly flags = { | ||
inFile: Flags.file({ | ||
description: `A release notes file that was generated using 'flub generate releaseNotes'.`, | ||
required: true, | ||
exists: true, | ||
}), | ||
outFile: Flags.file({ | ||
description: `Output the transformed content to this file.`, | ||
required: true, | ||
}), | ||
...BaseCommand.flags, | ||
} as const; | ||
|
||
static readonly examples = [ | ||
{ | ||
description: `Transform the release notes from version 2.2.0 and output the results to out.md.`, | ||
command: | ||
"<%= config.bin %> <%= command.id %> --inFile RELEASE_NOTES/2.2.0.md --outFile out.md", | ||
}, | ||
]; | ||
|
||
public async run(): Promise<string> { | ||
const { inFile, outFile } = this.flags; | ||
const input = await readFile(inFile, { encoding: "utf8" }); | ||
const processor = remark() | ||
// Remove the H1 if it exists. | ||
.use(removeHeadingsAtLevel, { level: 1 }) | ||
// Remove the existing TOC section because its links are incorrect; we'll regenerate it. | ||
.use(removeSectionContent, { heading: "Contents" }) | ||
// Update the "back to TOC" links to prepend 'user-content-' because that's what GH Releases does. | ||
.use(updateTocLinks, { | ||
checkValue: RELEASE_NOTES_TOC_LINK_TEXT, | ||
newUrl: "#user-content-contents", | ||
}) | ||
// Parse the markdown as GitHub-Flavored Markdown | ||
.use(remarkGfm) | ||
// Strip any single-line breaks. See the docs for the stripSoftBreaks function for more details. | ||
.use(stripSoftBreaks) | ||
// Parse any GitHub admonitions/alerts/callouts | ||
.use(admonitions, { | ||
titleTextMap: (title) => ({ | ||
// By default the `[!` prefix and `]` suffix are removed; we don't want that, so we override the default and | ||
// return the title as-is. | ||
displayTitle: title, | ||
checkedTitle: title, | ||
}), | ||
}) | ||
// Regenerate the TOC with the user-content- prefix. | ||
.use(remarkToc, { | ||
maxDepth: 3, | ||
skip: ".*Start Building Today.*", | ||
// Add the user-content- prefix to the links when we generate our own headingLinks, because GitHub will | ||
// prepend that to all our custom anchor IDs. | ||
prefix: "user-content-", | ||
}) | ||
// Transform any issue and commit references into links. | ||
.use(remarkGithub, { | ||
buildUrl(values) { | ||
// Disable linking mentions | ||
return values.type === "mention" ? false : defaultBuildUrl(values); | ||
}, | ||
}) | ||
// Add custom anchor tags with IDs to all the headings. | ||
.use(addHeadingLinks); | ||
|
||
const contents = String(await processor.process(input)); | ||
|
||
this.info(`Writing output file: ${outFile}`); | ||
await writeFile( | ||
outFile, | ||
await prettier(contents, { proseWrap: "never", parser: "markdown" }), | ||
); | ||
|
||
return contents; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
/*! | ||
* Copyright (c) Microsoft Corporation and contributors. All rights reserved. | ||
* Licensed under the MIT License. | ||
*/ | ||
|
||
/** | ||
* The text used in release notes links that point back to the table of contents in the document. | ||
*/ | ||
export const RELEASE_NOTES_TOC_LINK_TEXT = "⬆️ Table of contents"; |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any chance of refactoring common bits between this and
generate:releaseNotes
so the two commands stay in sync?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I haven't found a great way to do that yet, but I am looking. The problem is that the order of the pipeline matters, and the typing is complex enough that I haven't successfully modularized a "chunk" of the pipeline - only the individual plugins/functions. I am positive this is possible and I just haven't found a workable pattern yet.