blob: 3a0adbc80529a678097f3256f44a0eee385a5054 [file] [log] [blame]
Mohammed Naser40f991d2025-03-03 15:15:14 -05001use git2::Repository;
2use indoc::indoc;
3use regex::Regex;
4use serde::Deserialize;
5use std::path::Path;
6use tokio::fs;
7
8#[derive(Deserialize)]
9struct PyPiPackageResponse {
10 info: PyPiPackageInfo,
11}
12
13#[derive(Deserialize)]
14struct PyPiPackageInfo {
15 version: String,
16}
17
18#[tokio::main]
19async fn main() -> Result<(), Box<dyn std::error::Error>> {
20 let version = reqwest::get("https://pypi.org/pypi/magnum-cluster-api/json")
21 .await?
22 .json::<PyPiPackageResponse>()
23 .await?
24 .info
25 .version;
26
27 // Dockerfile
28 let path = "images/magnum/Dockerfile";
29 let content = fs::read_to_string(path).await?;
30 let re = Regex::new(r"(magnum-cluster-api==)(\S+)")?;
31 let updated = re.replace(&content, format!("${{1}}{}", version));
32 fs::write(path, updated.into_owned()).await?;
33
34 // Release notes
35 let version_hash = format!("{:x}", md5::compute(&version));
36 let release_note_path = format!("releasenotes/notes/bump-mcapi-{}.yaml", &version_hash[..16]);
37 let release_note = format!(
38 indoc!(
39 r#"
40 fixes:
41 - The Cluster API driver for Magnum has been bumped to {} to improve
42 stability, fix bugs and add new features.
43 "#
44 ),
45 version
46 );
47 fs::write(&release_note_path, &release_note).await?;
48
49 // Git commit
50 let repo = Repository::discover(".")?;
51 let mut index = repo.index()?;
52 index.add_path(Path::new(path))?;
53 index.add_path(Path::new(&release_note_path))?;
54 index.write()?;
55 let tree_id = index.write_tree()?;
56 let tree = repo.find_tree(tree_id)?;
57 let parent = repo.head()?.peel_to_commit()?;
58 let sig = repo.signature()?;
59 let mut commit_message = format!("Bump Magnum Cluster API to {}", version);
60 git2_hooks::hooks_commit_msg(&repo, None, &mut commit_message)?;
61 repo.commit(
62 Some("HEAD"),
63 &sig,
64 &sig,
65 commit_message.as_str(),
66 &tree,
67 &[&parent],
68 )?;
69
70 Ok(())
71}