-
Notifications
You must be signed in to change notification settings - Fork 193
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add new subcommands to
changelogger
for supporting file-per-change …
…changelog (#3771) ## Motivation and Context Adds new subcommands `--new` and `--ls` to `changelogger` ## Description This is part 2 in a series of PRs supporting [file-per-change changelog](https://smithy-lang.github.io/smithy-rs/design/rfcs/rfc0042_file_per_change_changelog.html). This PR just adds utilities for humans and does NOT impact the current dev workflow, smithy-rs CI, or our release pipeline. #### A subcommand `--new` We can use this subcommand when creating a new changelog entry markdown file. An example usage: ``` $ changelogger new -t client -t aws-sdk-rust -r smithy-rs#1234 -a someone --bug-fix -m "Some changelog" \ # for long flags, replace -t with --applies-to, -r with --references, -a with --authors, and -m with --message \ # also remember to escape with \ when including backticks in the message at command line, e.g. \`pub\` The following changelog entry has been written to "/Users/ysaito1001/src/smithy-rs/.changelog/5745197.md": --- applies_to: - aws-sdk-rust - client authors: - someone references: - smithy-rs#1234 breaking: false new_feature: false bug_fix: true --- Some changelog ``` The following CLI arguments are "logically" required - `--applies-to` - `--ref` - `--author` - `--message` If any of the above is not passed a value at command line, then an editor is opened for further edit (which editor to open can be configured per the [edit crate](https://docs.rs/edit/0.1.5/edit/)). Note that the YAML syntax above is different from the single line array syntax [proposed in the RFC](https://smithy-lang.github.io/smithy-rs/design/rfcs/rfc0042_file_per_change_changelog.html#the-proposed-developer-experience). This is due to [a limitation](dtolnay/serde-yaml#355) in `serde-yaml` (which has been archived unfortunately), but the multi-line values are still a valid YAML syntax and, most importantly, rendering changelong entries will continue working. For now, I won't post-process from the multi-line values syntax to the single line array syntax. One can work around this by handwriting a changelog entry Markdown file in `smithy-rs/.changelog` without using this subcommand. #### A subcommand `--ls` This subcommand will render a preview of changelog entries stored in `smithy-rs/.changelog` and print it to the standard output. Example usages (using the entry created at 5745197.md above): ``` $ changelogger ls -c smithy-rs \ # for long flag, replace -c with --change-set Next changelog preview for smithy-rs ===================================== **New this release:** - 🐛 (client, [smithy-rs#1234](#1234), @Someone) Some changelog **Contributors** Thank you for your contributions! ❤ - @Someone ([smithy-rs#1234](#1234)) ``` ``` $ changelogger ls -c aws-sdk \ # for long flag, replace -c with --change-set Next changelog preview for aws-sdk-rust ======================================== **New this release:** - 🐛 ([smithy-rs#1234](#1234), @Someone) Some changelog **Contributors** Thank you for your contributions! ❤ - @Someone ([smithy-rs#1234](#1234)) ``` ## Testing - Existing tests in CI - Basic unit tests for subcommands ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
- Loading branch information
1 parent
36b50b3
commit 63753f3
Showing
13 changed files
with
462 additions
and
92 deletions.
There are no files selected for viewing
Empty file.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
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
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 |
---|---|---|
|
@@ -5,5 +5,7 @@ | |
|
||
pub mod entry; | ||
pub mod init; | ||
pub mod ls; | ||
pub mod new; | ||
pub mod render; | ||
pub mod split; |
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,50 @@ | ||
/* | ||
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
use crate::entry::{ChangeSet, ChangelogEntries}; | ||
use crate::render::render; | ||
use anyhow::Context; | ||
use clap::Parser; | ||
use smithy_rs_tool_common::changelog::{ChangelogLoader, ValidationSet}; | ||
use smithy_rs_tool_common::git::find_git_repository_root; | ||
use smithy_rs_tool_common::here; | ||
use smithy_rs_tool_common::versions_manifest::CrateVersionMetadataMap; | ||
|
||
#[derive(Parser, Debug, Eq, PartialEq)] | ||
pub struct LsArgs { | ||
/// Which set of changes to preview | ||
#[clap(long, short, action)] | ||
pub change_set: ChangeSet, | ||
} | ||
|
||
pub fn subcommand_ls(args: LsArgs) -> anyhow::Result<()> { | ||
let mut dot_changelog = find_git_repository_root("smithy-rs", ".").context(here!())?; | ||
dot_changelog.push(".changelog"); | ||
|
||
let loader = ChangelogLoader::default(); | ||
let changelog = loader.load_from_dir(dot_changelog.clone())?; | ||
|
||
changelog.validate(ValidationSet::Render).map_err(|errs| { | ||
anyhow::Error::msg(format!( | ||
"failed to load {dot_changelog:?}: {errors}", | ||
errors = errs.join("\n") | ||
)) | ||
})?; | ||
|
||
let entries = ChangelogEntries::from(changelog); | ||
|
||
let (release_header, release_notes) = render( | ||
match args.change_set { | ||
ChangeSet::SmithyRs => &entries.smithy_rs, | ||
ChangeSet::AwsSdk => &entries.aws_sdk_rust, | ||
}, | ||
CrateVersionMetadataMap::new(), | ||
&format!("\nNext changelog preview for {}", args.change_set), | ||
); | ||
|
||
println!("{release_header}{release_notes}"); | ||
|
||
Ok(()) | ||
} |
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
Oops, something went wrong.