From 4e23bed59f70592721cbd6f96ac9d7a5a7d3b362 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Sat, 8 Mar 2025 13:44:58 +0100 Subject: [PATCH 1/7] Replace serde_derive with the feature flag --- Cargo.lock | 1 - Cargo.toml | 3 +-- src/blogs.rs | 2 +- src/lib.rs | 2 +- src/posts.rs | 2 +- 5 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 45be0adcc..b95a27fd0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -209,7 +209,6 @@ dependencies = [ "regex", "sass-rs", "serde", - "serde_derive", "serde_json", "tera", "toml", diff --git a/Cargo.toml b/Cargo.toml index 61e399e48..0a59a3eaa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,8 +8,7 @@ edition = "2021" color-eyre = "=0.6.3" eyre = "=0.6.12" lazy_static = "=1.5.0" -serde = "=1.0.218" -serde_derive = "=1.0.218" +serde = { version = "=1.0.218", features = ["derive"] } serde_json = "=1.0.140" comrak = { version = "=0.36.0", features = ["bon"] } rayon = "=1.10.0" diff --git a/src/blogs.rs b/src/blogs.rs index 5dc12f1d5..280456ae4 100644 --- a/src/blogs.rs +++ b/src/blogs.rs @@ -1,5 +1,5 @@ use super::posts::Post; -use serde_derive::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use std::path::{Path, PathBuf}; static MANIFEST_FILE: &str = "blog.toml"; diff --git a/src/lib.rs b/src/lib.rs index cc360dd2c..c86e1ffaf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,7 +7,7 @@ use chrono::Timelike; use eyre::{eyre, WrapErr}; use rayon::prelude::*; use sass_rs::{compile_file, Options}; -use serde_derive::Serialize; +use serde::Serialize; use serde_json::{json, Value}; use std::collections::HashMap; use std::fs::{self, File}; diff --git a/src/posts.rs b/src/posts.rs index 5658edc1b..b7a88467f 100644 --- a/src/posts.rs +++ b/src/posts.rs @@ -1,7 +1,7 @@ use super::blogs::Manifest; use eyre::eyre; use regex::Regex; -use serde_derive::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize}; use std::path::{Path, PathBuf}; #[derive(Debug, PartialEq, Deserialize)] From bc87b2d2d6a5920a27a2a22841e1e160b3c9ecbb Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Sat, 8 Mar 2025 13:52:08 +0100 Subject: [PATCH 2/7] Upgrade workspace to Rust edition 2024 --- Cargo.toml | 11 +++++++---- serve/Cargo.toml | 4 +--- src/lib.rs | 6 +++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0a59a3eaa..55400eb69 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,14 @@ +[workspace] +members = ["serve"] + +[workspace.package] +edition = "2024" + [package] name = "blog" version = "0.1.0" +edition.workspace = true authors = ["The Rust Project Developers"] -edition = "2021" [dependencies] color-eyre = "=0.6.3" @@ -18,8 +24,5 @@ chrono = "=0.4.40" tera = "=1.20.0" toml = "=0.8.20" -[workspace] -members = ["serve"] - [dev-dependencies] insta = { version = "=1.42.2", features = ["filters", "glob"] } diff --git a/serve/Cargo.toml b/serve/Cargo.toml index b9fd08bc7..790e5f36b 100644 --- a/serve/Cargo.toml +++ b/serve/Cargo.toml @@ -1,9 +1,7 @@ [package] name = "serve" version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +edition.workspace = true [dependencies] blog = { path = ".." } diff --git a/src/lib.rs b/src/lib.rs index c86e1ffaf..8415a4261 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,11 +4,11 @@ mod posts; use self::blogs::Blog; use self::posts::Post; use chrono::Timelike; -use eyre::{eyre, WrapErr}; +use eyre::{WrapErr, eyre}; use rayon::prelude::*; -use sass_rs::{compile_file, Options}; +use sass_rs::{Options, compile_file}; use serde::Serialize; -use serde_json::{json, Value}; +use serde_json::{Value, json}; use std::collections::HashMap; use std::fs::{self, File}; use std::io::{self, Write}; From 1d6b9d532b587fe4e166e832ec69ff99de5c85ce Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Sat, 8 Mar 2025 13:55:46 +0100 Subject: [PATCH 3/7] Remove dependency lazy_static --- Cargo.lock | 1 - Cargo.toml | 1 - src/posts.rs | 10 ++++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b95a27fd0..12c5bcc90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -204,7 +204,6 @@ dependencies = [ "comrak", "eyre", "insta", - "lazy_static", "rayon", "regex", "sass-rs", diff --git a/Cargo.toml b/Cargo.toml index 55400eb69..bcd5c2cc0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,6 @@ authors = ["The Rust Project Developers"] [dependencies] color-eyre = "=0.6.3" eyre = "=0.6.12" -lazy_static = "=1.5.0" serde = { version = "=1.0.218", features = ["derive"] } serde_json = "=1.0.140" comrak = { version = "=0.36.0", features = ["bon"] } diff --git a/src/posts.rs b/src/posts.rs index b7a88467f..7a9609a7d 100644 --- a/src/posts.rs +++ b/src/posts.rs @@ -2,7 +2,10 @@ use super::blogs::Manifest; use eyre::eyre; use regex::Regex; use serde::{Deserialize, Serialize}; -use std::path::{Path, PathBuf}; +use std::{ + path::{Path, PathBuf}, + sync::LazyLock, +}; #[derive(Debug, PartialEq, Deserialize)] struct TomlHeader { @@ -113,9 +116,8 @@ impl Post { // If they supplied team, it should look like `team-text ` let (team, team_url) = team_string.map_or((None, None), |s| { - lazy_static::lazy_static! { - static ref R: Regex = Regex::new(r"(?P[^<]*) <(?P[^>]+)>").unwrap(); - } + static R: LazyLock = + LazyLock::new(|| Regex::new(r"(?P[^<]*) <(?P[^>]+)>").unwrap()); let Some(captures) = R.captures(&s) else { panic!( "team from path `{}` should have format `$name <$url>`", From 3d982bfd9f2c650d3fa2519f647b1e48cdec7893 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Sat, 8 Mar 2025 14:10:29 +0100 Subject: [PATCH 4/7] Track all dependency versions in workspace --- Cargo.toml | 41 +++++++++++++++++++++++++++++------------ serve/Cargo.toml | 6 +++--- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index bcd5c2cc0..6d0af24fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,24 +4,41 @@ members = ["serve"] [workspace.package] edition = "2024" -[package] -name = "blog" -version = "0.1.0" -edition.workspace = true -authors = ["The Rust Project Developers"] - -[dependencies] +[workspace.dependencies] +blog = { path = "." } +chrono = "=0.4.40" color-eyre = "=0.6.3" +comrak = "=0.36.0" eyre = "=0.6.12" -serde = { version = "=1.0.218", features = ["derive"] } -serde_json = "=1.0.140" -comrak = { version = "=0.36.0", features = ["bon"] } +insta = "=1.42.2" rayon = "=1.10.0" regex = "=1.11.1" sass-rs = "=0.2.2" -chrono = "=0.4.40" +serde_json = "=1.0.140" +serde = "=1.0.218" tera = "=1.20.0" +tokio = "=1.44.0" toml = "=0.8.20" +warpy = "=0.3.68" + +[package] +name = "blog" +version = "0.1.0" +edition.workspace = true +authors = ["The Rust Project Developers"] + +[dependencies] +chrono.workspace = true +color-eyre.workspace = true +comrak = { workspace = true, features = ["bon"] } +eyre.workspace = true +rayon.workspace = true +regex.workspace = true +sass-rs.workspace = true +serde_json.workspace = true +serde = { workspace = true, features = ["derive"] } +tera.workspace = true +toml.workspace = true [dev-dependencies] -insta = { version = "=1.42.2", features = ["filters", "glob"] } +insta = { workspace = true, features = ["filters", "glob"] } diff --git a/serve/Cargo.toml b/serve/Cargo.toml index 790e5f36b..01c37725e 100644 --- a/serve/Cargo.toml +++ b/serve/Cargo.toml @@ -4,6 +4,6 @@ version = "0.1.0" edition.workspace = true [dependencies] -blog = { path = ".." } -warpy = "=0.3.68" -tokio = "=1.44.0" +blog.workspace = true +warpy.workspace = true +tokio.workspace = true From ab98793dcdd8d6b79cff783f8edaca6c0a0483d7 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Sat, 8 Mar 2025 13:46:51 +0100 Subject: [PATCH 5/7] Add front_matter crate We might want to move the blog to Zola. In that case, it will still be useful to have a crate that validates and even fixes our front matter. This will be especially important if we decide to duplicate the date of a post in the two front matter fields `date` and `path`, which may be necessary to preserve the existing URL scheme. While the custom static site generator is still present, it can reuse the front matter parsing logic. --- Cargo.lock | 10 ++++++++++ Cargo.toml | 4 +++- front_matter/Cargo.toml | 9 +++++++++ front_matter/src/lib.rs | 29 +++++++++++++++++++++++++++ src/posts.rs | 43 +++++++++++++---------------------------- 5 files changed, 64 insertions(+), 31 deletions(-) create mode 100644 front_matter/Cargo.toml create mode 100644 front_matter/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 12c5bcc90..9885a96ce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -203,6 +203,7 @@ dependencies = [ "color-eyre", "comrak", "eyre", + "front_matter", "insta", "rayon", "regex", @@ -721,6 +722,15 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "front_matter" +version = "0.1.0" +dependencies = [ + "eyre", + "serde", + "toml", +] + [[package]] name = "futures-channel" version = "0.3.31" diff --git a/Cargo.toml b/Cargo.toml index 6d0af24fb..4842b7fbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["serve"] +members = ["front_matter", "serve"] [workspace.package] edition = "2024" @@ -10,6 +10,7 @@ chrono = "=0.4.40" color-eyre = "=0.6.3" comrak = "=0.36.0" eyre = "=0.6.12" +front_matter = { path = "front_matter" } insta = "=1.42.2" rayon = "=1.10.0" regex = "=1.11.1" @@ -32,6 +33,7 @@ chrono.workspace = true color-eyre.workspace = true comrak = { workspace = true, features = ["bon"] } eyre.workspace = true +front_matter.workspace = true rayon.workspace = true regex.workspace = true sass-rs.workspace = true diff --git a/front_matter/Cargo.toml b/front_matter/Cargo.toml new file mode 100644 index 000000000..9fb79f6c0 --- /dev/null +++ b/front_matter/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "front_matter" +version = "0.1.0" +edition.workspace = true + +[dependencies] +eyre.workspace = true +serde = { workspace = true, features = ["derive"] } +toml.workspace = true diff --git a/front_matter/src/lib.rs b/front_matter/src/lib.rs new file mode 100644 index 000000000..b3331bb70 --- /dev/null +++ b/front_matter/src/lib.rs @@ -0,0 +1,29 @@ +use eyre::bail; +use serde::{Deserialize, Serialize}; + +/// The front matter of a markdown blog post. +#[derive(Debug, PartialEq, Serialize, Deserialize)] +pub struct FrontMatter { + pub title: String, + pub author: String, + #[serde(default)] + pub release: bool, + pub team: Option, + pub layout: String, +} + +/// Extracts the front matter from a markdown file. +/// +/// The remaining normal markdown content is returned as the second element of +/// the tuple. +pub fn parse(markdown: &str) -> eyre::Result<(FrontMatter, &str)> { + if !markdown.starts_with("+++\n") { + bail!("markdown file must start with the line `+++`"); + } + let (front_matter, content) = markdown + .trim_start_matches("+++\n") + .split_once("\n+++\n") + .expect("couldn't find the end of the front matter: `+++`"); + + Ok((toml::from_str(front_matter)?, content)) +} diff --git a/src/posts.rs b/src/posts.rs index 7a9609a7d..e07c1b38b 100644 --- a/src/posts.rs +++ b/src/posts.rs @@ -1,22 +1,12 @@ use super::blogs::Manifest; -use eyre::eyre; +use front_matter::FrontMatter; use regex::Regex; -use serde::{Deserialize, Serialize}; +use serde::Serialize; use std::{ path::{Path, PathBuf}, sync::LazyLock, }; -#[derive(Debug, PartialEq, Deserialize)] -struct TomlHeader { - title: String, - author: String, - #[serde(default)] - release: bool, - team: Option, - layout: String, -} - #[derive(Debug, Clone, Serialize)] pub struct Post { pub(crate) filename: String, @@ -52,23 +42,17 @@ impl Post { let filename = split.next().unwrap().to_string(); let contents = std::fs::read_to_string(path)?; - if contents.len() < 5 { - return Err(eyre!( - "{path:?} is empty, or too short to have valid front matter" - )); - } - // toml headers.... we know the first four bytes of each file are "+++\n" - // so we need to find the end. we need the fours to adjust for those first bytes - let end_of_toml = contents[4..].find("+++").unwrap() + 4; - let toml = &contents[4..end_of_toml]; - let TomlHeader { - author, - title, - release, - team: team_string, - layout, - } = toml::from_str(toml)?; + let ( + FrontMatter { + author, + title, + release, + team: team_string, + layout, + }, + contents, + ) = front_matter::parse(&contents)?; let options = comrak::Options { render: comrak::RenderOptions::builder().unsafe_(true).build(), @@ -81,8 +65,7 @@ impl Post { ..comrak::Options::default() }; - // Content starts after "+++\n" (we don't assume an extra newline) - let contents = comrak::markdown_to_html(&contents[end_of_toml + 4..], &options); + let contents = comrak::markdown_to_html(contents, &options); // finally, the url. let mut url = PathBuf::from(&*filename); From 6f2159edc39947aac5974ea69a499de91905dfa7 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Sat, 8 Mar 2025 14:53:25 +0100 Subject: [PATCH 6/7] Add test for normalized front matter --- front_matter/src/lib.rs | 82 +++++++++++++++++++++++++++++++++++++++-- src/posts.rs | 1 + 2 files changed, 80 insertions(+), 3 deletions(-) diff --git a/front_matter/src/lib.rs b/front_matter/src/lib.rs index b3331bb70..999146a84 100644 --- a/front_matter/src/lib.rs +++ b/front_matter/src/lib.rs @@ -4,12 +4,13 @@ use serde::{Deserialize, Serialize}; /// The front matter of a markdown blog post. #[derive(Debug, PartialEq, Serialize, Deserialize)] pub struct FrontMatter { + pub layout: String, pub title: String, pub author: String, - #[serde(default)] - pub release: bool, + pub description: Option, pub team: Option, - pub layout: String, + #[serde(default, skip_serializing_if = "std::ops::Not::not")] + pub release: bool, } /// Extracts the front matter from a markdown file. @@ -27,3 +28,78 @@ pub fn parse(markdown: &str) -> eyre::Result<(FrontMatter, &str)> { Ok((toml::from_str(front_matter)?, content)) } + +/// Normalizes the front matter of a markdown file. +pub fn normalize(markdown: &str) -> eyre::Result { + let (front_matter, content) = parse(markdown)?; + + Ok(format!( + "\ ++++ +{}\ ++++ +{content}", + toml::to_string_pretty(&front_matter)? + )) +} + +#[cfg(test)] +mod tests { + use std::{env, fs, path::PathBuf}; + + use super::*; + + #[test] + fn front_matter_is_normalized() { + let repo_root = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(".."); + + let posts = fs::read_dir(repo_root.join("posts")) + .unwrap() + .chain(fs::read_dir(repo_root.join("posts/inside-rust")).unwrap()) + .map(|p| p.unwrap().path()) + .filter(|p| p.extension() == Some("md".as_ref())); + + for post in posts { + let content = fs::read_to_string(&post).unwrap(); + let normalized = normalize(&content).unwrap(); + + if content != normalized { + if env::var("FIX_FRONT_MATTER").is_ok() { + fs::write(post, normalized).unwrap(); + continue; + } + + let post = post.file_name().unwrap().to_str().unwrap(); + let actual = content + .rsplit_once("+++") + .map(|(f, _)| format!("{f}+++")) + .unwrap_or(content); + let expected = normalized + .rsplit_once("+++") + .map(|(f, _)| format!("{f}+++")) + .unwrap_or(normalized); + + // better error message than assert_eq!() + panic!( + " +The post {post} has abnormal front matter. + + actual: +{actual} + + expected: +{expected} + + ┌──────────────────────────────────────────────────────────────────────────┐ + │ │ + │ You can fix this automatically by running: │ + │ │ + │ FIX_FRONT_MATTER=1 cargo test --all front_matter_is_normalized │ + │ │ + └──────────────────────────────────────────────────────────────────────────┘ +", + ) + }; + } + } +} diff --git a/src/posts.rs b/src/posts.rs index e07c1b38b..5e9ea0d8e 100644 --- a/src/posts.rs +++ b/src/posts.rs @@ -50,6 +50,7 @@ impl Post { release, team: team_string, layout, + .. }, contents, ) = front_matter::parse(&contents)?; From 7934c1343d93298e29101311360f12bb08d8f6e5 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Sat, 8 Mar 2025 15:37:42 +0100 Subject: [PATCH 7/7] Normalize all front matter This was done automatically with: ```sh FIX_FRONT_MATTER=1 cargo test --all front_matter_is_normalized ``` --- .../2018-01-03-new-years-rust-a-call-for-community-blogposts.md | 2 +- posts/2018-10-30-help-test-rust-2018.md | 2 +- posts/2019-06-03-governance-wg-announcement.md | 1 - posts/2020-08-18-laying-the-foundation-for-rusts-future.md | 1 - posts/2020-09-03-Planning-2021-Roadmap.md | 1 - posts/2020-09-21-Scheduling-2021-Roadmap.md | 1 - posts/2020-10-20-regression-labels.md | 2 +- posts/2020-12-07-the-foundation-conversation.md | 1 - posts/2020-12-14-Next-steps-for-the-foundation-conversation.md | 1 - posts/2020-12-16-rust-survey-2020.md | 1 - posts/2022-02-14-crates-io-snapshot-branches.md | 1 - posts/2022-08-05-nll-by-default.md | 1 - posts/2023-08-07-Rust-Survey-2023-Results.md | 1 - posts/2023-12-15-2024-Edition-CFP.md | 1 - posts/2024-02-28-Clippy-deprecating-feature-cargo-clippy.md | 2 +- .../2019-10-11-AsyncAwait-Not-Send-Error-Improvements.md | 2 +- .../2020-03-04-recent-future-pattern-matching-improvements.md | 2 +- .../2023-09-04-keeping-secure-with-cargo-audit-0.18.md | 2 +- 18 files changed, 7 insertions(+), 18 deletions(-) diff --git a/posts/2018-01-03-new-years-rust-a-call-for-community-blogposts.md b/posts/2018-01-03-new-years-rust-a-call-for-community-blogposts.md index ebe86b20c..3f504c9ac 100644 --- a/posts/2018-01-03-new-years-rust-a-call-for-community-blogposts.md +++ b/posts/2018-01-03-new-years-rust-a-call-for-community-blogposts.md @@ -1,7 +1,7 @@ +++ +layout = "post" title = "New Year's Rust: A Call for Community Blogposts" author = "The Rust Core Team" -layout = "post" +++ 'Tis the season for people and communities to reflect and set goals- and the Rust team is diff --git a/posts/2018-10-30-help-test-rust-2018.md b/posts/2018-10-30-help-test-rust-2018.md index f96102e65..88955d23c 100644 --- a/posts/2018-10-30-help-test-rust-2018.md +++ b/posts/2018-10-30-help-test-rust-2018.md @@ -1,7 +1,7 @@ +++ +layout = "post" title = "Help test Rust 2018" author = "The Rust Core Team" -layout = "post" +++ Back in July, we talked about ["Rust 2018"]. In short, we are launching a diff --git a/posts/2019-06-03-governance-wg-announcement.md b/posts/2019-06-03-governance-wg-announcement.md index b051b0f98..d338f9b72 100644 --- a/posts/2019-06-03-governance-wg-announcement.md +++ b/posts/2019-06-03-governance-wg-announcement.md @@ -2,7 +2,6 @@ layout = "post" title = "The Governance WG is going public" author = "The Rust Governance WG" -release = false +++ diff --git a/posts/2020-08-18-laying-the-foundation-for-rusts-future.md b/posts/2020-08-18-laying-the-foundation-for-rusts-future.md index d2510b1b1..126e6e353 100644 --- a/posts/2020-08-18-laying-the-foundation-for-rusts-future.md +++ b/posts/2020-08-18-laying-the-foundation-for-rusts-future.md @@ -2,7 +2,6 @@ layout = "post" title = "Laying the foundation for Rust's future" author = "The Rust Core Team" -release = false +++ The Rust project was originally [conceived in 2010][2010] (depending on how you count, you might even say [2006][2006]!) as a [Mozilla Research] project, but the long term goal has always been to establish Rust as a self-sustaining project. In 2015, [with the launch of Rust 1.0][onepointoh], Rust established its project direction and governance independent of the Mozilla organization. Since then, Rust has been operating as an autonomous organization, with Mozilla being a prominent and consistent financial and legal sponsor. diff --git a/posts/2020-09-03-Planning-2021-Roadmap.md b/posts/2020-09-03-Planning-2021-Roadmap.md index 06432fbc9..d28c54110 100644 --- a/posts/2020-09-03-Planning-2021-Roadmap.md +++ b/posts/2020-09-03-Planning-2021-Roadmap.md @@ -2,7 +2,6 @@ layout = "post" title = "Planning the 2021 Roadmap" author = "The Rust Core Team" -release = false +++ The core team is beginning to think about the 2021 Roadmap, and we want to hear from the community. We’re going to be running two parallel efforts over the next several weeks: the 2020 Rust Survey, to be announced next week, and a call for blog posts. diff --git a/posts/2020-09-21-Scheduling-2021-Roadmap.md b/posts/2020-09-21-Scheduling-2021-Roadmap.md index 9411fded9..5dd7130e5 100644 --- a/posts/2020-09-21-Scheduling-2021-Roadmap.md +++ b/posts/2020-09-21-Scheduling-2021-Roadmap.md @@ -2,7 +2,6 @@ layout = "post" title = "Call for 2021 Roadmap Blogs Ending Soon" author = "The Rust Core Team" -release = false +++ We will be closing the collection of blog posts on **October 5th**. As a reminder, we plan to close the [survey](https://blog.rust-lang.org/2020/09/10/survey-launch.html) on **September 24th**, later this week. diff --git a/posts/2020-10-20-regression-labels.md b/posts/2020-10-20-regression-labels.md index f04bf2750..0927a3ed6 100644 --- a/posts/2020-10-20-regression-labels.md +++ b/posts/2020-10-20-regression-labels.md @@ -1,8 +1,8 @@ +++ layout = "post" title = "Marking issues as regressions" -description = "Now anyone can mark issues as regressions!" author = "Camelid" +description = "Now anyone can mark issues as regressions!" team = "the release team " +++ diff --git a/posts/2020-12-07-the-foundation-conversation.md b/posts/2020-12-07-the-foundation-conversation.md index 0e4827b55..c6a7ce208 100644 --- a/posts/2020-12-07-the-foundation-conversation.md +++ b/posts/2020-12-07-the-foundation-conversation.md @@ -2,7 +2,6 @@ layout = "post" title = "The Foundation Conversation" author = "The Rust Core Team" -release = false +++ In August, we on the Core Team [announced our plans to create a Foundation](https://blog.rust-lang.org/2020/08/18/laying-the-foundation-for-rusts-future.html) by the end of the year. Since that time, we’ve been doing a lot of work but it has been difficult to share many details, and we know that a lot of you have questions. diff --git a/posts/2020-12-14-Next-steps-for-the-foundation-conversation.md b/posts/2020-12-14-Next-steps-for-the-foundation-conversation.md index c96e3a684..0bd0e04aa 100644 --- a/posts/2020-12-14-Next-steps-for-the-foundation-conversation.md +++ b/posts/2020-12-14-Next-steps-for-the-foundation-conversation.md @@ -2,7 +2,6 @@ layout = "post" title = "Next steps for the Foundation Conversation" author = "The Rust Core Team" -release = false +++ Last week we kicked off the [Foundation Conversation](https://blog.rust-lang.org/2020/12/07/the-foundation-conversation.html), a week-long period of Q&A forums and live broadcasts with the goal of explaining our vision for the Foundation and finding out what sorts of questions people had. We used those questions to help build a [draft Foundation FAQ](https://github.com/rust-lang/foundation-faq-2020/blob/main/FAQ.md), and if you’ve not seen it yet, you should definitely take a look -- it’s chock full of good information. Thanks to everyone for asking such great questions! diff --git a/posts/2020-12-16-rust-survey-2020.md b/posts/2020-12-16-rust-survey-2020.md index e8208e805..c739fdd1b 100644 --- a/posts/2020-12-16-rust-survey-2020.md +++ b/posts/2020-12-16-rust-survey-2020.md @@ -2,7 +2,6 @@ layout = "post" title = "Rust Survey 2020 Results" author = "The Rust Survey Team" -release = false +++ Greetings Rustaceans! diff --git a/posts/2022-02-14-crates-io-snapshot-branches.md b/posts/2022-02-14-crates-io-snapshot-branches.md index ee2bb858d..0b392ecea 100644 --- a/posts/2022-02-14-crates-io-snapshot-branches.md +++ b/posts/2022-02-14-crates-io-snapshot-branches.md @@ -2,7 +2,6 @@ layout = "post" title = "Crates.io Index Snapshot Branches Moving" author = "The Crates.io Team" -release = false +++ Every so often, the [crates.io index](https://github.com/rust-lang/crates.io-index)'s Git history diff --git a/posts/2022-08-05-nll-by-default.md b/posts/2022-08-05-nll-by-default.md index 443d088a4..87661a143 100644 --- a/posts/2022-08-05-nll-by-default.md +++ b/posts/2022-08-05-nll-by-default.md @@ -3,7 +3,6 @@ layout = "post" title = "Non-lexical lifetimes (NLL) fully stable" author = "Niko Matsakis" team = "the NLL working group " -release = false +++ As of Rust 1.63 (releasing next week), the "non-lexical lifetimes" (NLL) work will be enabled by default. NLL is the second iteration of Rust's borrow checker. The [RFC] actually does quite a nice job of highlighting some of the motivating examples. "But," I hear you saying, "wasn't NLL included in [Rust 2018]?" And yes, yes it was! But at that time, NLL was only enabled for Rust 2018 code, while Rust 2015 code ran in "migration mode". When in "migration mode," the compiler would run both the old *and* the new borrow checker and compare the results. This way, we could give warnings for older code that should never have compiled in the first place; we could also limit the impact of any bugs in the new code. Over time, we have limited migration mode to be closer and closer to just running the new-style borrow checker: in the next release, that process completes, and all Rust code will be checked with NLL. diff --git a/posts/2023-08-07-Rust-Survey-2023-Results.md b/posts/2023-08-07-Rust-Survey-2023-Results.md index 049ef2455..493ef6679 100644 --- a/posts/2023-08-07-Rust-Survey-2023-Results.md +++ b/posts/2023-08-07-Rust-Survey-2023-Results.md @@ -2,7 +2,6 @@ layout = "post" title = "2022 Annual Rust Survey Results" author = "The Rust Survey Working Group in partnership with the Rust Foundation" -release = false +++ Hello, Rustaceans! diff --git a/posts/2023-12-15-2024-Edition-CFP.md b/posts/2023-12-15-2024-Edition-CFP.md index 3b69bc004..c4fa13e87 100644 --- a/posts/2023-12-15-2024-Edition-CFP.md +++ b/posts/2023-12-15-2024-Edition-CFP.md @@ -2,7 +2,6 @@ layout = "post" title = "A Call for Proposals for the Rust 2024 Edition" author = "Ben Striegel on behalf of the Edition 2024 Project Group" -release = false +++ The year 2024 is soon to be upon us, and as long-time Rust aficionados know, diff --git a/posts/2024-02-28-Clippy-deprecating-feature-cargo-clippy.md b/posts/2024-02-28-Clippy-deprecating-feature-cargo-clippy.md index a6423e2ec..ce40c3802 100644 --- a/posts/2024-02-28-Clippy-deprecating-feature-cargo-clippy.md +++ b/posts/2024-02-28-Clippy-deprecating-feature-cargo-clippy.md @@ -1,6 +1,6 @@ +++ layout = "post" -title = "Clippy: Deprecating `feature = \"cargo-clippy\"`" +title = 'Clippy: Deprecating `feature = "cargo-clippy"`' author = "The Clippy Team" +++ diff --git a/posts/inside-rust/2019-10-11-AsyncAwait-Not-Send-Error-Improvements.md b/posts/inside-rust/2019-10-11-AsyncAwait-Not-Send-Error-Improvements.md index 1b93baac1..377622209 100644 --- a/posts/inside-rust/2019-10-11-AsyncAwait-Not-Send-Error-Improvements.md +++ b/posts/inside-rust/2019-10-11-AsyncAwait-Not-Send-Error-Improvements.md @@ -1,6 +1,6 @@ +++ layout = "post" -title = "Improving async-await's \"Future is not Send\" diagnostic" +title = '''Improving async-await's "Future is not Send" diagnostic''' author = "David Wood" description = "Highlighting a diagnostic improvement for async-await" team = "the Async Foundations WG " diff --git a/posts/inside-rust/2020-03-04-recent-future-pattern-matching-improvements.md b/posts/inside-rust/2020-03-04-recent-future-pattern-matching-improvements.md index 61ba273db..eda99dfde 100644 --- a/posts/inside-rust/2020-03-04-recent-future-pattern-matching-improvements.md +++ b/posts/inside-rust/2020-03-04-recent-future-pattern-matching-improvements.md @@ -1,7 +1,7 @@ +++ layout = "post" title = "Recent and future pattern matching improvements" -author = """Mazdak "Centril" Farrokhzad""" +author = 'Mazdak "Centril" Farrokhzad' description = "Reviewing recent pattern matching improvements" team = "the language team " +++ diff --git a/posts/inside-rust/2023-09-04-keeping-secure-with-cargo-audit-0.18.md b/posts/inside-rust/2023-09-04-keeping-secure-with-cargo-audit-0.18.md index 2815f465e..a6865f8b4 100644 --- a/posts/inside-rust/2023-09-04-keeping-secure-with-cargo-audit-0.18.md +++ b/posts/inside-rust/2023-09-04-keeping-secure-with-cargo-audit-0.18.md @@ -1,7 +1,7 @@ +++ layout = "post" title = "Keeping Rust projects secure with cargo-audit 0.18: performance, compatibility and security improvements" -author = """Sergey "Shnatsel" Davidoff""" +author = 'Sergey "Shnatsel" Davidoff' description = "A look at the new features in cargo-audit 0.18 for ensuring dependencies are free of known vulnerabilities" team = "the Secure Code WG " +++