From 8d80348be3eaa9a6da6a2d7fc5ebdc7c90f77478 Mon Sep 17 00:00:00 2001
From: Thomas Eizinger <thomas@eizinger.io>
Date: Fri, 20 Oct 2023 11:36:15 +1100
Subject: [PATCH 1/3] Specify pre-release hook

---
 Cargo.toml                      |  3 +++
 scripts/add-changelog-header.sh | 10 ++++++++++
 2 files changed, 13 insertions(+)
 create mode 100755 scripts/add-changelog-header.sh

diff --git a/Cargo.toml b/Cargo.toml
index c2c92d751af..adb796938c2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -137,3 +137,6 @@ clippy.used_underscore_binding = "warn"
 clippy.pedantic = "allow"
 clippy.type_complexity = "allow"
 clippy.unnecessary_wraps = "warn"
+
+[workspace.metadata.release]
+pre-release-hook = ["/bin/sh", '-c', '/bin/sh $WORKSPACE_ROOT/scripts/add-changelog-header.sh']
diff --git a/scripts/add-changelog-header.sh b/scripts/add-changelog-header.sh
new file mode 100755
index 00000000000..8050857c52e
--- /dev/null
+++ b/scripts/add-changelog-header.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+header=$(head -n 1 "$CRATE_ROOT/CHANGELOG.md")
+prefix="## $NEW_VERSION"
+
+if [[ $header == $prefix* ]]; then
+  exit
+fi
+
+sed -i "1i ## ${NEW_VERSION} - unreleased\n\n" "$CRATE_ROOT/CHANGELOG.md"

From 298b60556f64d8ddfbcefdd0ef207415302027ff Mon Sep 17 00:00:00 2001
From: Thomas Eizinger <thomas@eizinger.io>
Date: Fri, 20 Oct 2023 11:47:36 +1100
Subject: [PATCH 2/3] Add new changelog header to each crate

---
 core/CHANGELOG.md                           | 3 +++
 libp2p/CHANGELOG.md                         | 3 +++
 misc/allow-block-list/CHANGELOG.md          | 3 +++
 misc/connection-limits/CHANGELOG.md         | 3 +++
 misc/memory-connection-limits/CHANGELOG.md  | 3 +++
 misc/metrics/CHANGELOG.md                   | 3 +++
 muxers/mplex/CHANGELOG.md                   | 3 +++
 muxers/yamux/CHANGELOG.md                   | 3 +++
 protocols/autonat/CHANGELOG.md              | 3 +++
 protocols/dcutr/CHANGELOG.md                | 3 +++
 protocols/floodsub/CHANGELOG.md             | 3 +++
 protocols/gossipsub/CHANGELOG.md            | 3 +++
 protocols/identify/CHANGELOG.md             | 3 +++
 protocols/kad/CHANGELOG.md                  | 3 +++
 protocols/mdns/CHANGELOG.md                 | 3 +++
 protocols/ping/CHANGELOG.md                 | 3 +++
 protocols/relay/CHANGELOG.md                | 3 +++
 protocols/rendezvous/CHANGELOG.md           | 3 +++
 protocols/request-response/CHANGELOG.md     | 3 +++
 protocols/upnp/CHANGELOG.md                 | 3 +++
 swarm-derive/CHANGELOG.md                   | 3 +++
 swarm-test/CHANGELOG.md                     | 3 +++
 swarm/CHANGELOG.md                          | 3 +++
 transports/deflate/CHANGELOG.md             | 3 +++
 transports/dns/CHANGELOG.md                 | 3 +++
 transports/noise/CHANGELOG.md               | 3 +++
 transports/plaintext/CHANGELOG.md           | 3 +++
 transports/pnet/CHANGELOG.md                | 3 +++
 transports/quic/CHANGELOG.md                | 3 +++
 transports/tcp/CHANGELOG.md                 | 3 +++
 transports/tls/CHANGELOG.md                 | 3 +++
 transports/uds/CHANGELOG.md                 | 3 +++
 transports/websocket-websys/CHANGELOG.md    | 3 +++
 transports/websocket/CHANGELOG.md           | 3 +++
 transports/webtransport-websys/CHANGELOG.md | 3 +++
 35 files changed, 105 insertions(+)

diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md
index ea7bc2bd6a0..76cffdfcedd 100644
--- a/core/CHANGELOG.md
+++ b/core/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.41.0 - unreleased
+
+
 ## 0.40.1
 
 - Implement `Debug` for `StreamMuxerEvent`.
diff --git a/libp2p/CHANGELOG.md b/libp2p/CHANGELOG.md
index bd2bd4b40f8..ad0b3dd6bb4 100644
--- a/libp2p/CHANGELOG.md
+++ b/libp2p/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.53.0 - unreleased
+
+
 ## 0.52.4
 
 - Introduce `libp2p::websocket_websys` module behind `websocket-websys` feature flag.
diff --git a/misc/allow-block-list/CHANGELOG.md b/misc/allow-block-list/CHANGELOG.md
index 4ce2f66b2bf..d9b8e0c6de1 100644
--- a/misc/allow-block-list/CHANGELOG.md
+++ b/misc/allow-block-list/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.3.0 - unreleased
+
+
 ## 0.2.0 
 
 - Raise MSRV to 1.65.
diff --git a/misc/connection-limits/CHANGELOG.md b/misc/connection-limits/CHANGELOG.md
index a8bd071e6fe..36884867b97 100644
--- a/misc/connection-limits/CHANGELOG.md
+++ b/misc/connection-limits/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.3.0 - unreleased
+
+
 ## 0.2.1
 
 - Do not count a connection as established when it is denied by another sibling `NetworkBehaviour`.
diff --git a/misc/memory-connection-limits/CHANGELOG.md b/misc/memory-connection-limits/CHANGELOG.md
index 951a5a3f138..32d9c8bf59b 100644
--- a/misc/memory-connection-limits/CHANGELOG.md
+++ b/misc/memory-connection-limits/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.2.0 - unreleased
+
+
 ## 0.1.0
 
 - Initial release.
diff --git a/misc/metrics/CHANGELOG.md b/misc/metrics/CHANGELOG.md
index 5c3d3c140ba..7b8c01ae2f7 100644
--- a/misc/metrics/CHANGELOG.md
+++ b/misc/metrics/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.14.0 - unreleased
+
+
 ## 0.13.1
 
 - Enable gossipsub related data-type fields when compiling for wasm.
diff --git a/muxers/mplex/CHANGELOG.md b/muxers/mplex/CHANGELOG.md
index 41fc3962580..8cee61ced6e 100644
--- a/muxers/mplex/CHANGELOG.md
+++ b/muxers/mplex/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.41.0 - unreleased
+
+
 ## 0.40.0 
 
 - Raise MSRV to 1.65.
diff --git a/muxers/yamux/CHANGELOG.md b/muxers/yamux/CHANGELOG.md
index 92e9fbebc02..af761d76fe0 100644
--- a/muxers/yamux/CHANGELOG.md
+++ b/muxers/yamux/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.45.0 - unreleased
+
+
 ## 0.44.1
 
 - Update to `yamux` `v0.12` which brings performance improvements and introduces an ACK backlog of 256 inbound streams.
diff --git a/protocols/autonat/CHANGELOG.md b/protocols/autonat/CHANGELOG.md
index 2c7e0b21131..852e5da7b89 100644
--- a/protocols/autonat/CHANGELOG.md
+++ b/protocols/autonat/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.12.0 - unreleased
+
+
 ## 0.11.0 
 
 - Raise MSRV to 1.65.
diff --git a/protocols/dcutr/CHANGELOG.md b/protocols/dcutr/CHANGELOG.md
index 18a166477cc..b98700a8dbd 100644
--- a/protocols/dcutr/CHANGELOG.md
+++ b/protocols/dcutr/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.11.0 - unreleased
+
+
 ## 0.10.0 
 
 - Raise MSRV to 1.65.
diff --git a/protocols/floodsub/CHANGELOG.md b/protocols/floodsub/CHANGELOG.md
index e59aaa9225f..0c23c1a19f4 100644
--- a/protocols/floodsub/CHANGELOG.md
+++ b/protocols/floodsub/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.44.0 - unreleased
+
+
 ## 0.43.0 
 
 - Raise MSRV to 1.65.
diff --git a/protocols/gossipsub/CHANGELOG.md b/protocols/gossipsub/CHANGELOG.md
index 0e070804082..b6a9eed434d 100644
--- a/protocols/gossipsub/CHANGELOG.md
+++ b/protocols/gossipsub/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.46.0 - unreleased
+
+
 ## 0.45.2
 
 - Deprecate `gossipsub::Config::idle_timeout` in favor of `SwarmBuilder::idle_connection_timeout`.
diff --git a/protocols/identify/CHANGELOG.md b/protocols/identify/CHANGELOG.md
index 2b0488441c9..9010c7ae8be 100644
--- a/protocols/identify/CHANGELOG.md
+++ b/protocols/identify/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.44.0 - unreleased
+
+
 ## 0.43.1
 
 - Handle partial push messages.
diff --git a/protocols/kad/CHANGELOG.md b/protocols/kad/CHANGELOG.md
index 55a40b914e6..5a9c0974652 100644
--- a/protocols/kad/CHANGELOG.md
+++ b/protocols/kad/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.45.0 - unreleased
+
+
 ## 0.44.6
 
 - Rename `Kademlia` symbols to follow naming convention.
diff --git a/protocols/mdns/CHANGELOG.md b/protocols/mdns/CHANGELOG.md
index 3a287e9031a..0c06bb26b3d 100644
--- a/protocols/mdns/CHANGELOG.md
+++ b/protocols/mdns/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.45.0 - unreleased
+
+
 ## 0.44.0 
 
 - Change `mdns::Event` to hold `Vec` and remove `DiscoveredAddrsIter` and `ExpiredAddrsIter`.
diff --git a/protocols/ping/CHANGELOG.md b/protocols/ping/CHANGELOG.md
index db68d3751e7..b94b4581a6a 100644
--- a/protocols/ping/CHANGELOG.md
+++ b/protocols/ping/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.44.0 - unreleased
+
+
 ## 0.43.1
 
 - Honor ping interval in case of errors.
diff --git a/protocols/relay/CHANGELOG.md b/protocols/relay/CHANGELOG.md
index a14617102c8..5712a7bc7a0 100644
--- a/protocols/relay/CHANGELOG.md
+++ b/protocols/relay/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.17.0 - unreleased
+
+
 ## 0.16.2
 
 <!-- Internal changes
diff --git a/protocols/rendezvous/CHANGELOG.md b/protocols/rendezvous/CHANGELOG.md
index 76517d29ce2..7b75b35ae9c 100644
--- a/protocols/rendezvous/CHANGELOG.md
+++ b/protocols/rendezvous/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.14.0 - unreleased
+
+
 ## 0.13.1
 - Refresh registration upon a change in external addresses.
   See [PR 4629].
diff --git a/protocols/request-response/CHANGELOG.md b/protocols/request-response/CHANGELOG.md
index 73f3918a6d8..fccc7b2f168 100644
--- a/protocols/request-response/CHANGELOG.md
+++ b/protocols/request-response/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.26.0 - unreleased
+
+
 ## 0.25.2
 
 - Deprecate `request_response::Config::set_connection_keep_alive` in favor of `SwarmBuilder::idle_connection_timeout`.
diff --git a/protocols/upnp/CHANGELOG.md b/protocols/upnp/CHANGELOG.md
index 84af542cfd0..75aeaf64d6e 100644
--- a/protocols/upnp/CHANGELOG.md
+++ b/protocols/upnp/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.2.0 - unreleased
+
+
 ## 0.1.1
 
 - Fix high CPU usage due to repeated generation of failure events.
diff --git a/swarm-derive/CHANGELOG.md b/swarm-derive/CHANGELOG.md
index 3a33771b099..9230edf6f26 100644
--- a/swarm-derive/CHANGELOG.md
+++ b/swarm-derive/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.34.0 - unreleased
+
+
 ## 0.33.0 
 
 - Raise MSRV to 1.65.
diff --git a/swarm-test/CHANGELOG.md b/swarm-test/CHANGELOG.md
index e46a94e981a..341b3d6e01f 100644
--- a/swarm-test/CHANGELOG.md
+++ b/swarm-test/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.3.0 - unreleased
+
+
 ## 0.2.0 
 
 - Raise MSRV to 1.65.
diff --git a/swarm/CHANGELOG.md b/swarm/CHANGELOG.md
index b1ecd2f6479..6bcdc66106d 100644
--- a/swarm/CHANGELOG.md
+++ b/swarm/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.44.0 - unreleased
+
+
 ## 0.43.6
 
 - Deprecate `libp2p::swarm::SwarmBuilder`.
diff --git a/transports/deflate/CHANGELOG.md b/transports/deflate/CHANGELOG.md
index d3c3f99575d..2c5b9cd31e8 100644
--- a/transports/deflate/CHANGELOG.md
+++ b/transports/deflate/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.41.0 - unreleased
+
+
 ## 0.40.1
 
 - Deprecate in preparation for removal from the workspace.
diff --git a/transports/dns/CHANGELOG.md b/transports/dns/CHANGELOG.md
index 053cb7e591c..692c0f966b7 100644
--- a/transports/dns/CHANGELOG.md
+++ b/transports/dns/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.41.0 - unreleased
+
+
 ## 0.40.1
 
 - Remove `Dns` prefix from types like `TokioDnsConfig` and `DnsConfig` in favor of modules that describe the different variants.
diff --git a/transports/noise/CHANGELOG.md b/transports/noise/CHANGELOG.md
index 63fad1357d7..c7f0308754a 100644
--- a/transports/noise/CHANGELOG.md
+++ b/transports/noise/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.44.0 - unreleased
+
+
 ## 0.43.2
 
 - Update x25519-dalek to 2.0.0.
diff --git a/transports/plaintext/CHANGELOG.md b/transports/plaintext/CHANGELOG.md
index cb5a9e238c6..8bb7dfd4809 100644
--- a/transports/plaintext/CHANGELOG.md
+++ b/transports/plaintext/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.41.0 - unreleased
+
+
 ## 0.40.1
 
 - Rename `Plaintext2Config` to `Config` to follow naming conventions across repository.
diff --git a/transports/pnet/CHANGELOG.md b/transports/pnet/CHANGELOG.md
index 58588823a2f..7111b1039dc 100644
--- a/transports/pnet/CHANGELOG.md
+++ b/transports/pnet/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.24.0 - unreleased
+
+
 ## 0.23.1
 
 <!-- Interal changes:
diff --git a/transports/quic/CHANGELOG.md b/transports/quic/CHANGELOG.md
index e13488cff49..9f1353fdfe7 100644
--- a/transports/quic/CHANGELOG.md
+++ b/transports/quic/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.10.0 - unreleased
+
+
 ## 0.9.3
 
 - No longer report error when explicit closing of a QUIC endpoint succeeds.
diff --git a/transports/tcp/CHANGELOG.md b/transports/tcp/CHANGELOG.md
index 13134b661c5..23293f09252 100644
--- a/transports/tcp/CHANGELOG.md
+++ b/transports/tcp/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.41.0 - unreleased
+
+
 ## 0.40.1
 
 - Expose `async_io::TcpStream`.
diff --git a/transports/tls/CHANGELOG.md b/transports/tls/CHANGELOG.md
index 4c85ccf578c..c34b228f6c7 100644
--- a/transports/tls/CHANGELOG.md
+++ b/transports/tls/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.3.0 - unreleased
+
+
 ## 0.2.1
 
 - Switch from webpki to rustls-webpki.
diff --git a/transports/uds/CHANGELOG.md b/transports/uds/CHANGELOG.md
index d40067ad784..10610de17b6 100644
--- a/transports/uds/CHANGELOG.md
+++ b/transports/uds/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.40.0 - unreleased
+
+
 ## 0.39.0 
 
 - Raise MSRV to 1.65.
diff --git a/transports/websocket-websys/CHANGELOG.md b/transports/websocket-websys/CHANGELOG.md
index e9b4cb9d2b3..71fb0726535 100644
--- a/transports/websocket-websys/CHANGELOG.md
+++ b/transports/websocket-websys/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.3.0 - unreleased
+
+
 ## 0.2.0
 
 - Add Websys Websocket transport.
diff --git a/transports/websocket/CHANGELOG.md b/transports/websocket/CHANGELOG.md
index a93b1484946..87c8f519d5d 100644
--- a/transports/websocket/CHANGELOG.md
+++ b/transports/websocket/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.43.0 - unreleased
+
+
 ## 0.42.1
 
 - Bump `futures-rustls` to `0.24.0`.
diff --git a/transports/webtransport-websys/CHANGELOG.md b/transports/webtransport-websys/CHANGELOG.md
index 13ca1b5ed0a..358f709cf86 100644
--- a/transports/webtransport-websys/CHANGELOG.md
+++ b/transports/webtransport-websys/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 0.2.0 - unreleased
+
+
 ## 0.1.0
 
 * Initial implementation of WebTranport transport using web-sys bindings. See [PR 4015].

From 07675b61c14f86ae256c8edfa0cdfa8a21cee361 Mon Sep 17 00:00:00 2001
From: Thomas Eizinger <thomas@eizinger.io>
Date: Fri, 20 Oct 2023 12:09:35 +1100
Subject: [PATCH 3/3] Explain nested use of shell

---
 Cargo.toml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Cargo.toml b/Cargo.toml
index adb796938c2..f07bba03da8 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -139,4 +139,4 @@ clippy.type_complexity = "allow"
 clippy.unnecessary_wraps = "warn"
 
 [workspace.metadata.release]
-pre-release-hook = ["/bin/sh", '-c', '/bin/sh $WORKSPACE_ROOT/scripts/add-changelog-header.sh']
+pre-release-hook = ["/bin/sh", '-c', '/bin/sh $WORKSPACE_ROOT/scripts/add-changelog-header.sh'] # Nested use of shell to expand variables.