diff options
Diffstat (limited to 'xtask/src/release.rs')
-rw-r--r-- | xtask/src/release.rs | 71 |
1 files changed, 37 insertions, 34 deletions
diff --git a/xtask/src/release.rs b/xtask/src/release.rs index 3aab29801..3cf0d849f 100644 --- a/xtask/src/release.rs +++ b/xtask/src/release.rs | |||
@@ -1,8 +1,6 @@ | |||
1 | use crate::{ | 1 | use xshell::{cmd, cp, pushd, read_dir, write_file}; |
2 | codegen, is_release_tag, | 2 | |
3 | not_bash::{date_iso, fs2, pushd, run}, | 3 | use crate::{codegen, date_iso, is_release_tag, project_root, Mode, Result}; |
4 | project_root, Mode, Result, | ||
5 | }; | ||
6 | 4 | ||
7 | pub struct ReleaseCmd { | 5 | pub struct ReleaseCmd { |
8 | pub dry_run: bool, | 6 | pub dry_run: bool, |
@@ -11,10 +9,10 @@ pub struct ReleaseCmd { | |||
11 | impl ReleaseCmd { | 9 | impl ReleaseCmd { |
12 | pub fn run(self) -> Result<()> { | 10 | pub fn run(self) -> Result<()> { |
13 | if !self.dry_run { | 11 | if !self.dry_run { |
14 | run!("git switch release")?; | 12 | cmd!("git switch release").run()?; |
15 | run!("git fetch upstream --tags --force")?; | 13 | cmd!("git fetch upstream --tags --force").run()?; |
16 | run!("git reset --hard tags/nightly")?; | 14 | cmd!("git reset --hard tags/nightly").run()?; |
17 | run!("git push")?; | 15 | cmd!("git push").run()?; |
18 | } | 16 | } |
19 | codegen::generate_assists_docs(Mode::Overwrite)?; | 17 | codegen::generate_assists_docs(Mode::Overwrite)?; |
20 | codegen::generate_feature_docs(Mode::Overwrite)?; | 18 | codegen::generate_feature_docs(Mode::Overwrite)?; |
@@ -23,8 +21,8 @@ impl ReleaseCmd { | |||
23 | let changelog_dir = website_root.join("./thisweek/_posts"); | 21 | let changelog_dir = website_root.join("./thisweek/_posts"); |
24 | 22 | ||
25 | let today = date_iso()?; | 23 | let today = date_iso()?; |
26 | let commit = run!("git rev-parse HEAD")?; | 24 | let commit = cmd!("git rev-parse HEAD").read()?; |
27 | let changelog_n = fs2::read_dir(changelog_dir.as_path())?.count(); | 25 | let changelog_n = read_dir(changelog_dir.as_path())?.len(); |
28 | 26 | ||
29 | let contents = format!( | 27 | let contents = format!( |
30 | "\ | 28 | "\ |
@@ -52,20 +50,27 @@ https://github.com/sponsors/rust-analyzer[GitHub Sponsors]. | |||
52 | ); | 50 | ); |
53 | 51 | ||
54 | let path = changelog_dir.join(format!("{}-changelog-{}.adoc", today, changelog_n)); | 52 | let path = changelog_dir.join(format!("{}-changelog-{}.adoc", today, changelog_n)); |
55 | fs2::write(&path, &contents)?; | 53 | write_file(&path, &contents)?; |
56 | 54 | ||
57 | for &adoc in ["manual.adoc", "generated_features.adoc", "generated_assists.adoc"].iter() { | 55 | for &adoc in [ |
56 | "manual.adoc", | ||
57 | "generated_features.adoc", | ||
58 | "generated_assists.adoc", | ||
59 | "generated_diagnostic.adoc", | ||
60 | ] | ||
61 | .iter() | ||
62 | { | ||
58 | let src = project_root().join("./docs/user/").join(adoc); | 63 | let src = project_root().join("./docs/user/").join(adoc); |
59 | let dst = website_root.join(adoc); | 64 | let dst = website_root.join(adoc); |
60 | fs2::copy(src, dst)?; | 65 | cp(src, dst)?; |
61 | } | 66 | } |
62 | 67 | ||
63 | let tags = run!("git tag --list"; echo = false)?; | 68 | let tags = cmd!("git tag --list").read()?; |
64 | let prev_tag = tags.lines().filter(|line| is_release_tag(line)).last().unwrap(); | 69 | let prev_tag = tags.lines().filter(|line| is_release_tag(line)).last().unwrap(); |
65 | 70 | ||
66 | let git_log = run!("git log {}..HEAD --merges --reverse", prev_tag; echo = false)?; | 71 | let git_log = cmd!("git log {prev_tag}..HEAD --merges --reverse").read()?; |
67 | let git_log_dst = website_root.join("git.log"); | 72 | let git_log_dst = website_root.join("git.log"); |
68 | fs2::write(git_log_dst, &git_log)?; | 73 | write_file(git_log_dst, &git_log)?; |
69 | 74 | ||
70 | Ok(()) | 75 | Ok(()) |
71 | } | 76 | } |
@@ -77,27 +82,25 @@ pub struct PromoteCmd { | |||
77 | 82 | ||
78 | impl PromoteCmd { | 83 | impl PromoteCmd { |
79 | pub fn run(self) -> Result<()> { | 84 | pub fn run(self) -> Result<()> { |
80 | let _dir = pushd("../rust-rust-analyzer"); | 85 | let _dir = pushd("../rust-rust-analyzer")?; |
81 | run!("git switch master")?; | 86 | cmd!("git switch master").run()?; |
82 | run!("git fetch upstream")?; | 87 | cmd!("git fetch upstream").run()?; |
83 | run!("git reset --hard upstream/master")?; | 88 | cmd!("git reset --hard upstream/master").run()?; |
84 | run!("git submodule update --recursive")?; | 89 | cmd!("git submodule update --recursive").run()?; |
85 | 90 | ||
86 | let branch = format!("rust-analyzer-{}", date_iso()?); | 91 | let branch = format!("rust-analyzer-{}", date_iso()?); |
87 | run!("git switch -c {}", branch)?; | 92 | cmd!("git switch -c {branch}").run()?; |
88 | { | 93 | { |
89 | let _dir = pushd("src/tools/rust-analyzer"); | 94 | let _dir = pushd("src/tools/rust-analyzer")?; |
90 | run!("git fetch origin")?; | 95 | cmd!("git fetch origin").run()?; |
91 | run!("git reset --hard origin/release")?; | 96 | cmd!("git reset --hard origin/release").run()?; |
92 | } | 97 | } |
93 | run!("git add src/tools/rust-analyzer")?; | 98 | cmd!("git add src/tools/rust-analyzer").run()?; |
94 | run!("git commit -m':arrow_up: rust-analyzer'")?; | 99 | cmd!("git commit -m':arrow_up: rust-analyzer'").run()?; |
95 | if !self.dry_run { | 100 | if !self.dry_run { |
96 | run!("git push")?; | 101 | cmd!("git push").run()?; |
97 | run!( | 102 | cmd!("xdg-open https://github.com/matklad/rust/pull/new/{branch}?body=r%3F%20%40ghost") |
98 | "xdg-open https://github.com/matklad/rust/pull/new/{}?body=r%3F%20%40ghost", | 103 | .run()?; |
99 | branch | ||
100 | )?; | ||
101 | } | 104 | } |
102 | Ok(()) | 105 | Ok(()) |
103 | } | 106 | } |