diff options
Diffstat (limited to 'xtask/src/release.rs')
-rw-r--r-- | xtask/src/release.rs | 75 |
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 @@ | |||
1 | use xshell::{cmd, cp, pushd, read_dir, write_file}; | 1 | use std::fmt::Write; |
2 | 2 | ||
3 | use crate::{codegen, date_iso, is_release_tag, project_root, Mode, Result}; | 3 | use xshell::{cmd, cp, pushd, read_dir, write_file}; |
4 | 4 | ||
5 | pub struct ReleaseCmd { | 5 | use crate::{codegen, date_iso, flags, is_release_tag, project_root, Mode, Result}; |
6 | pub dry_run: bool, | ||
7 | } | ||
8 | 6 | ||
9 | impl ReleaseCmd { | 7 | impl 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 | ||
80 | pub struct PromoteCmd { | 85 | impl flags::Promote { |
81 | pub dry_run: bool, | 86 | pub(crate) fn run(self) -> Result<()> { |
82 | } | ||
83 | |||
84 | impl 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 | } |