Skip to content

Commit 13e8c15

Browse files
committed
Merge branch 'devnet-ready' into runtime-benchmarks-fix
2 parents f37d9c1 + 9bb0eca commit 13e8c15

File tree

6 files changed

+181
-2
lines changed

6 files changed

+181
-2
lines changed

.github/workflows/check-devnet.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name: Devnet Deploy Check
33
on:
44
pull_request:
55
branches: [devnet, devnet-ready]
6+
types: [labeled, unlabeled, synchronize]
67

78
env:
89
CARGO_TERM_COLOR: always

.github/workflows/check-finney.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name: Finney Deploy Check
33
on:
44
pull_request:
55
branches: [finney, main]
6+
types: [labeled, unlabeled, synchronize]
67

78
env:
89
CARGO_TERM_COLOR: always
@@ -51,4 +52,4 @@ jobs:
5152
runtime-package: "node-subtensor-runtime"
5253
node-uri: "wss://entrypoint-finney.opentensor.ai:443"
5354
checks: "pre-and-post"
54-
extra-args: "--disable-spec-version-check --no-weight-warnings"
55+
extra-args: "--disable-spec-version-check --no-weight-warnings"

.github/workflows/check-testnet.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name: Testnet Deploy Check
33
on:
44
pull_request:
55
branches: [testnet, testnet-ready]
6+
types: [labeled, unlabeled, synchronize]
67

78
env:
89
CARGO_TERM_COLOR: always

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ indexing-slicing = "deny"
4141
arithmetic-side-effects = "deny"
4242
type_complexity = "allow"
4343
unwrap-used = "deny"
44+
manual_inspect = "allow"
4445

4546
[workspace.dependencies]
4647
cargo-husky = { version = "1", default-features = false }

build.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ fn collect_rust_files(dir: &Path) -> Vec<PathBuf> {
7575
let mut rust_files = Vec::new();
7676

7777
for entry in WalkDir::new(dir) {
78-
let entry = entry.unwrap();
78+
let Ok(entry) = entry else {
79+
continue;
80+
};
7981
let path = entry.path();
8082

8183
// Skip any path that contains "target" directory

scripts/release_notes.rs

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
#!/usr/bin/env rust-script
2+
// ^ `cargo install rust-script` to be able to run this script
3+
4+
use core::{fmt::Display, str::FromStr};
5+
use std::{env, process::Command};
6+
7+
fn eval(cmd: impl Display, print: bool) -> Result<String, String> {
8+
if print {
9+
println!("$ {}", cmd);
10+
}
11+
let output = Command::new("sh")
12+
.arg("-c")
13+
.arg(cmd.to_string())
14+
.output()
15+
.expect("failed to execute process");
16+
if print {
17+
println!("{}", String::from_utf8(output.stdout.clone()).unwrap());
18+
eprintln!("{}", String::from_utf8(output.stderr.clone()).unwrap());
19+
}
20+
if !output.status.success() {
21+
return Err(String::from_utf8(output.stderr).unwrap());
22+
}
23+
Ok(String::from_utf8(output.stdout).unwrap().trim().to_string())
24+
}
25+
26+
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
27+
enum Network {
28+
Mainnet,
29+
Testnet,
30+
}
31+
32+
impl FromStr for Network {
33+
type Err = ();
34+
35+
fn from_str(s: &str) -> Result<Self, Self::Err> {
36+
match s {
37+
"mainnet" => Ok(Network::Mainnet),
38+
"testnet" => Ok(Network::Testnet),
39+
_ => Err(()),
40+
}
41+
}
42+
}
43+
44+
fn main() {
45+
let network = env::var("NETWORK")
46+
.unwrap_or_else(|_| "mainnet".to_string())
47+
.parse::<Network>()
48+
.unwrap_or_else(|_| panic!("Invalid NETWORK value"));
49+
println!("Network: {:?}", network);
50+
51+
let all_tags = env::var("PREVIOUS_TAG")
52+
.unwrap_or_else(|_| eval("git tag --sort=-creatordate", false).unwrap())
53+
.split("\n")
54+
.map(|s| s.trim().to_string())
55+
.collect::<Vec<String>>();
56+
57+
let previous_tag = match network {
58+
Network::Mainnet => all_tags
59+
.iter()
60+
.find(|tag| tag.starts_with("v") && !tag.ends_with("-pre-release"))
61+
.expect("could not find a valid mainnet tag!"),
62+
Network::Testnet => all_tags
63+
.iter()
64+
.find(|tag| tag.starts_with("v") && tag.ends_with("-pre-release"))
65+
.expect("could not find a valid testnet tag!"),
66+
};
67+
println!("Previous release tag: {}", previous_tag);
68+
69+
let branch = env::var("BRANCH").unwrap_or(
70+
match network {
71+
Network::Mainnet => "testnet",
72+
Network::Testnet => "devnet",
73+
}
74+
.to_string(),
75+
);
76+
println!("Branch: {}", branch);
77+
78+
println!(
79+
"Generating release notes for all merges since {}...",
80+
previous_tag,
81+
);
82+
let merges = eval(
83+
format!(
84+
"git log --merges --pretty=format:'%s' {}..{}",
85+
branch, previous_tag,
86+
),
87+
false,
88+
)
89+
.unwrap()
90+
.split("\n")
91+
.map(|s| s.trim().to_string())
92+
.filter(|s| {
93+
!s.is_empty()
94+
&& s.starts_with("Merge pull request #")
95+
&& !s.ends_with("from opentensor/devnet-ready")
96+
&& !s.ends_with("from opentensor/testnet-ready")
97+
&& !s.ends_with("from opentensor/devnet")
98+
&& !s.ends_with("from opentensor/testnet")
99+
})
100+
.collect::<Vec<String>>();
101+
102+
println!("");
103+
println!("Filtered merges:\n{}", merges.join("\n"));
104+
105+
println!("");
106+
let pr_numbers = merges
107+
.iter()
108+
.map(|s| s.split(" ").collect::<Vec<&str>>()[3].trim_start_matches("#"))
109+
.collect::<Vec<&str>>();
110+
println!("PR numbers:\n{:?}", pr_numbers);
111+
112+
println!("");
113+
println!("Fetching PR titles...");
114+
let pr_titles = pr_numbers
115+
.iter()
116+
.map(|pr_number| {
117+
print!("#{}: ", pr_number);
118+
let title = eval(format!("gh pr view {} --json title", pr_number), false)
119+
.unwrap()
120+
.trim()
121+
.to_string();
122+
if !title.starts_with("{\"title\":\"") {
123+
panic!("Malformed PR title: {}", title);
124+
}
125+
let title = title
126+
.trim_start_matches("{\"title\":\"")
127+
.trim_end_matches("\"}")
128+
.trim()
129+
.to_string();
130+
println!("{}", title);
131+
title
132+
})
133+
.collect::<Vec<String>>();
134+
135+
println!("");
136+
println!("Fetching PR authors...");
137+
let pr_authors = pr_numbers
138+
.iter()
139+
.map(|pr_number| {
140+
print!("#{}: ", pr_number);
141+
let author = eval(
142+
format!("gh pr view {} --json author | jq .author.login", pr_number),
143+
false,
144+
)
145+
.unwrap()
146+
.trim()
147+
.trim_start_matches("\"")
148+
.trim_end_matches("\"")
149+
.to_string();
150+
println!("{}", author);
151+
author
152+
})
153+
.collect::<Vec<String>>();
154+
155+
println!("");
156+
println!("generated release notes:");
157+
let release_notes = "## What's Changed\n".to_string();
158+
let release_notes = release_notes
159+
+ &pr_numbers
160+
.iter()
161+
.zip(pr_titles.iter())
162+
.zip(pr_authors.iter())
163+
.map(|((pr_number, pr_title), pr_author)| {
164+
format!("- {} in #{} by @{}\n", pr_title, pr_number, pr_author)
165+
})
166+
.collect::<String>();
167+
println!("{}", release_notes);
168+
169+
println!("");
170+
println!("writing release notes to /tmp/release_notes.md");
171+
std::fs::write("/tmp/release_notes.md", release_notes).unwrap();
172+
println!("done!");
173+
}

0 commit comments

Comments
 (0)