From bea0433b54c7ceeda331a3d1af5610b7624358d6 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Wed, 20 Apr 2022 13:31:38 -0500 Subject: [PATCH] Fix the release process's latest step (#4055) * Fix the release process's latest step The automated release of 0.36.0 was attempted last night but it failed due to a [failure on CI][bad]. This failure comes about because it was trying to change the release date of 0.35.0 which ended up not modifying any fails so `git` failed to commit as no files were changed. The original bug though was that 0.35.0 was being changed instead of 0.36.0. The reason for this is that the script used `--sort=-committerdate` to determine the latest branch. I forgot, though, that with backports it's possible for 0.35.0 to have a more recent commit date than 0.36.0 (as is currently the case). This commit updates the script to perform a numerical sort outside of git to get the latest release branch. Additionally this adds in some `set -ex` commands for the shell which should help print out commands as they're run and assist in future debugging. [bad]: https://github.com/bytecodealliance/wasmtime/runs/6087188708 * Replace sed with rust --- .github/workflows/release-process.yml | 19 ++++++++++++------- ci/find-latest-release.rs | 26 ++++++++++++++++++++++++++ ci/update-release-date.rs | 18 ++++++++++++++++++ 3 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 ci/find-latest-release.rs create mode 100644 ci/update-release-date.rs diff --git a/.github/workflows/release-process.yml b/.github/workflows/release-process.yml index 665865e848..c9bc387f52 100644 --- a/.github/workflows/release-process.yml +++ b/.github/workflows/release-process.yml @@ -49,6 +49,7 @@ jobs: - name: Bump major version number run: | + set -ex # Push the current contents of `main` to a new release branch cur=$(./ci/print-current-version.sh) git push origin HEAD:release-$cur @@ -104,15 +105,17 @@ jobs: - name: Perform latest release run: | + set -ex git fetch origin - cur=$(git for-each-ref --sort=-committerdate refs/remotes/origin --format '%(refname)' | grep release | head -n 1 | sed 's/.*release-//') - # Update the release date for $cur on the `main` branch. Note that the - # sed here is a little complicated because we will have two entries in - # `RELEASES.md`, one for $cur+1 which `main` is at plus one for $cur - # which we're about to release. We only want to update the release - # date of the second one. - sed -i "/^##.*$cur/,+3 s/^Unreleased/Released $(date +'%Y-%m-%d')/" RELEASES.md + # Determine the latest release branch + rustc ci/find-latest-release.rs -o /tmp/find-latest-release + cur=`/tmp/find-latest-release` + + # Update the release date of $cur in RELEASES.md + rustc ci/update-release-date.rs -o /tmp/update-release-date + /tmp/update-release-date $(date +'%Y-%m-%d') + git commit -a -F-<().ok()?; + let minor = parts.next()?.parse::().ok()?; + let patch = parts.next()?.parse::().ok()?; + Some((major, minor, patch)) + }) + .collect::>(); + releases.sort(); + let (major, minor, patch) = releases.last().unwrap(); + println!("{}.{}.{}", major, minor, patch); +} diff --git a/ci/update-release-date.rs b/ci/update-release-date.rs new file mode 100644 index 0000000000..72509bd245 --- /dev/null +++ b/ci/update-release-date.rs @@ -0,0 +1,18 @@ +fn main() { + let date = std::env::args().nth(1).unwrap(); + let relnotes = std::fs::read_to_string("RELEASES.md").unwrap(); + let mut new_relnotes = String::new(); + let mut counter = 0; + for line in relnotes.lines() { + if line.starts_with("Unreleased") { + counter += 1; + if counter == 2 { + new_relnotes.push_str(&format!("Released {}\n", date)); + continue; + } + } + new_relnotes.push_str(line); + new_relnotes.push_str("\n"); + } + std::fs::write("RELEASES.md", new_relnotes).unwrap(); +}