]> git.lizzy.rs Git - rust.git/blob - xtask/src/release.rs
22bb504674fb69988c7a6709485af1ba48d74127
[rust.git] / xtask / src / release.rs
1 mod changelog;
2
3 use xshell::{cmd, cp, pushd, read_dir, write_file};
4
5 use crate::{codegen, date_iso, flags, is_release_tag, project_root, Result};
6
7 impl flags::Release {
8     pub(crate) fn run(self) -> Result<()> {
9         if !self.dry_run {
10             cmd!("git switch release").run()?;
11             cmd!("git fetch upstream --tags --force").run()?;
12             cmd!("git reset --hard tags/nightly").run()?;
13             cmd!("git push").run()?;
14         }
15         codegen::docs()?;
16
17         let website_root = project_root().join("../rust-analyzer.github.io");
18         let changelog_dir = website_root.join("./thisweek/_posts");
19
20         let today = date_iso()?;
21         let commit = cmd!("git rev-parse HEAD").read()?;
22         let changelog_n = read_dir(changelog_dir.as_path())?.len();
23
24         for &adoc in [
25             "manual.adoc",
26             "generated_assists.adoc",
27             "generated_config.adoc",
28             "generated_diagnostic.adoc",
29             "generated_features.adoc",
30         ]
31         .iter()
32         {
33             let src = project_root().join("./docs/user/").join(adoc);
34             let dst = website_root.join(adoc);
35             cp(src, dst)?;
36         }
37
38         let tags = cmd!("git tag --list").read()?;
39         let prev_tag = tags.lines().filter(|line| is_release_tag(line)).last().unwrap();
40
41         let contents = changelog::get_changelog(changelog_n, &commit, prev_tag, &today)?;
42         let path = changelog_dir.join(format!("{}-changelog-{}.adoc", today, changelog_n));
43         write_file(&path, &contents)?;
44
45         Ok(())
46     }
47 }
48
49 impl flags::Promote {
50     pub(crate) fn run(self) -> Result<()> {
51         let _dir = pushd("../rust-rust-analyzer")?;
52         cmd!("git switch master").run()?;
53         cmd!("git fetch upstream").run()?;
54         cmd!("git reset --hard upstream/master").run()?;
55         cmd!("git submodule update --recursive").run()?;
56
57         let branch = format!("rust-analyzer-{}", date_iso()?);
58         cmd!("git switch -c {branch}").run()?;
59         {
60             let _dir = pushd("src/tools/rust-analyzer")?;
61             cmd!("git fetch origin").run()?;
62             cmd!("git reset --hard origin/release").run()?;
63         }
64         cmd!("git add src/tools/rust-analyzer").run()?;
65         cmd!("git commit -m':arrow_up: rust-analyzer'").run()?;
66         if !self.dry_run {
67             cmd!("git push -u").run()?;
68             cmd!("xdg-open https://github.com/matklad/rust/pull/new/{branch}?body=r%3F%20%40ghost")
69                 .run()?;
70         }
71         Ok(())
72     }
73 }