Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--xtask/src/publish.rs39
1 files changed, 34 insertions, 5 deletions
diff --git a/xtask/src/publish.rs b/xtask/src/publish.rs
index 2decd85c18..c8249929bd 100644
--- a/xtask/src/publish.rs
+++ b/xtask/src/publish.rs
@@ -8,8 +8,13 @@ use xshell::{cmd, Shell};
impl flags::PublishReleaseNotes {
pub(crate) fn run(self, sh: &Shell) -> Result<()> {
let asciidoc = sh.read_file(&self.changelog)?;
- let markdown = notes::convert_asciidoc_to_markdown(std::io::Cursor::new(&asciidoc))?;
- let tag_name = extract_tag_name(&self.changelog)?;
+ let mut markdown = notes::convert_asciidoc_to_markdown(std::io::Cursor::new(&asciidoc))?;
+ let file_name = check_file_name(self.changelog)?;
+ let tag_name = &file_name[0..10];
+ let original_changelog_url = create_original_changelog_url(&file_name);
+ let additional_paragraph =
+ format!("\nSee also [original changelog]({original_changelog_url}).");
+ markdown.push_str(&additional_paragraph);
if self.dry_run {
println!("{}", markdown);
} else {
@@ -19,7 +24,7 @@ impl flags::PublishReleaseNotes {
}
}
-fn extract_tag_name<P: AsRef<std::path::Path>>(path: P) -> Result<String> {
+fn check_file_name<P: AsRef<std::path::Path>>(path: P) -> Result<String> {
let file_name = path
.as_ref()
.file_name()
@@ -39,12 +44,23 @@ fn extract_tag_name<P: AsRef<std::path::Path>>(path: P) -> Result<String> {
&& chars.next().unwrap().is_ascii_digit()
&& chars.next().unwrap().is_ascii_digit()
{
- Ok(file_name[0..10].to_owned())
+ Ok(file_name.to_string())
} else {
- bail!("extraction of date from the file name failed")
+ bail!("unexpected file name format; no date information prefixed")
}
}
+fn create_original_changelog_url(file_name: &str) -> String {
+ let year = &file_name[0..4];
+ let month = &file_name[5..7];
+ let day = &file_name[8..10];
+ let mut stem = &file_name[11..];
+ if let Some(stripped) = stem.strip_suffix(".adoc") {
+ stem = stripped;
+ }
+ format!("https://rust-analyzer.github.io/thisweek/{year}/{month}/{day}/{stem}.html")
+}
+
fn update_release(sh: &Shell, tag_name: &str, release_notes: &str) -> Result<()> {
let token = match env::var("GITHUB_TOKEN") {
Ok(token) => token,
@@ -78,3 +94,16 @@ fn update_release(sh: &Shell, tag_name: &str, release_notes: &str) -> Result<()>
Ok(())
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn original_changelog_url_creation() {
+ let input = "2019-07-24-changelog-0.adoc";
+ let actual = create_original_changelog_url(&input);
+ let expected = "https://rust-analyzer.github.io/thisweek/2019/07/24/changelog-0.html";
+ assert_eq!(actual, expected);
+ }
+}