aboutsummaryrefslogtreecommitdiff
path: root/xtask/src/release.rs
diff options
context:
space:
mode:
Diffstat (limited to 'xtask/src/release.rs')
-rw-r--r--xtask/src/release.rs75
1 files changed, 38 insertions, 37 deletions
diff --git a/xtask/src/release.rs b/xtask/src/release.rs
index 2d716253e..d8d86fd63 100644
--- a/xtask/src/release.rs
+++ b/xtask/src/release.rs
@@ -1,13 +1,11 @@
1use xshell::{cmd, cp, pushd, read_dir, write_file}; 1use std::fmt::Write;
2 2
3use crate::{codegen, date_iso, is_release_tag, project_root, Mode, Result}; 3use xshell::{cmd, cp, pushd, read_dir, write_file};
4 4
5pub struct ReleaseCmd { 5use crate::{codegen, date_iso, flags, is_release_tag, project_root, Mode, Result};
6 pub dry_run: bool,
7}
8 6
9impl ReleaseCmd { 7impl flags::Release {
10 pub fn run(self) -> Result<()> { 8 pub(crate) fn run(self) -> Result<()> {
11 if !self.dry_run { 9 if !self.dry_run {
12 cmd!("git switch release").run()?; 10 cmd!("git switch release").run()?;
13 cmd!("git fetch upstream --tags --force").run()?; 11 cmd!("git fetch upstream --tags --force").run()?;
@@ -24,6 +22,34 @@ impl ReleaseCmd {
24 let commit = cmd!("git rev-parse HEAD").read()?; 22 let commit = cmd!("git rev-parse HEAD").read()?;
25 let changelog_n = read_dir(changelog_dir.as_path())?.len(); 23 let changelog_n = read_dir(changelog_dir.as_path())?.len();
26 24
25 for &adoc in [
26 "manual.adoc",
27 "generated_assists.adoc",
28 "generated_config.adoc",
29 "generated_diagnostic.adoc",
30 "generated_features.adoc",
31 ]
32 .iter()
33 {
34 let src = project_root().join("./docs/user/").join(adoc);
35 let dst = website_root.join(adoc);
36 cp(src, dst)?;
37 }
38
39 let tags = cmd!("git tag --list").read()?;
40 let prev_tag = tags.lines().filter(|line| is_release_tag(line)).last().unwrap();
41
42 let git_log = cmd!("git log {prev_tag}..HEAD --merges --reverse").read()?;
43 let mut git_log_summary = String::new();
44 for line in git_log.lines() {
45 let line = line.trim_start();
46 if let Some(p) = line.find(':') {
47 if let Ok(pr) = line[..p].parse::<u32>() {
48 writeln!(git_log_summary, "* pr:{}[]{}", pr, &line[p + 1..]).unwrap();
49 }
50 }
51 }
52
27 let contents = format!( 53 let contents = format!(
28 "\ 54 "\
29= Changelog #{} 55= Changelog #{}
@@ -40,49 +66,24 @@ https://github.com/sponsors/rust-analyzer[GitHub Sponsors].
40 66
41== New Features 67== New Features
42 68
43* pr:[] . 69{}
44 70
45== Fixes 71== Fixes
46 72
47== Internal Improvements 73== Internal Improvements
48", 74",
49 changelog_n, commit, today 75 changelog_n, commit, today, git_log_summary
50 ); 76 );
51 77
52 let path = changelog_dir.join(format!("{}-changelog-{}.adoc", today, changelog_n)); 78 let path = changelog_dir.join(format!("{}-changelog-{}.adoc", today, changelog_n));
53 write_file(&path, &contents)?; 79 write_file(&path, &contents)?;
54 80
55 for &adoc in [
56 "manual.adoc",
57 "generated_assists.adoc",
58 "generated_config.adoc",
59 "generated_diagnostic.adoc",
60 "generated_features.adoc",
61 ]
62 .iter()
63 {
64 let src = project_root().join("./docs/user/").join(adoc);
65 let dst = website_root.join(adoc);
66 cp(src, dst)?;
67 }
68
69 let tags = cmd!("git tag --list").read()?;
70 let prev_tag = tags.lines().filter(|line| is_release_tag(line)).last().unwrap();
71
72 let git_log = cmd!("git log {prev_tag}..HEAD --merges --reverse").read()?;
73 let git_log_dst = website_root.join("git.log");
74 write_file(git_log_dst, &git_log)?;
75
76 Ok(()) 81 Ok(())
77 } 82 }
78} 83}
79 84
80pub struct PromoteCmd { 85impl flags::Promote {
81 pub dry_run: bool, 86 pub(crate) fn run(self) -> Result<()> {
82}
83
84impl PromoteCmd {
85 pub fn run(self) -> Result<()> {
86 let _dir = pushd("../rust-rust-analyzer")?; 87 let _dir = pushd("../rust-rust-analyzer")?;
87 cmd!("git switch master").run()?; 88 cmd!("git switch master").run()?;
88 cmd!("git fetch upstream").run()?; 89 cmd!("git fetch upstream").run()?;
@@ -99,7 +100,7 @@ impl PromoteCmd {
99 cmd!("git add src/tools/rust-analyzer").run()?; 100 cmd!("git add src/tools/rust-analyzer").run()?;
100 cmd!("git commit -m':arrow_up: rust-analyzer'").run()?; 101 cmd!("git commit -m':arrow_up: rust-analyzer'").run()?;
101 if !self.dry_run { 102 if !self.dry_run {
102 cmd!("git push").run()?; 103 cmd!("git push -u").run()?;
103 cmd!("xdg-open https://github.com/matklad/rust/pull/new/{branch}?body=r%3F%20%40ghost") 104 cmd!("xdg-open https://github.com/matklad/rust/pull/new/{branch}?body=r%3F%20%40ghost")
104 .run()?; 105 .run()?;
105 } 106 }