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(); +}