railcar

 1#!/bin/bash
 2
 3set -eu
 4
 5# Ensure cargo-edit is installed
 6which cargo-set-version > /dev/null || cargo install cargo-edit
 7
 8# Ensure we're in a clean state on an up-to-date `main` branch.
 9if [[ -n $(git status --short --untracked-files=no) ]]; then
10  echo "Can't roll the railcars with uncommitted changes"
11  exit 1
12fi
13if [[ $(git rev-parse --abbrev-ref HEAD) != "main" ]]; then
14  echo "Run this command on the main branch"
15  exit 1
16fi
17git pull -q --ff-only origin main
18
19# Determine the name of the new preview branch
20version=$(script/get-crate-version zed)
21major=$(echo $version | cut -d. -f1)
22minor=$(echo $version | cut -d. -f2)
23prev_minor=$(expr $minor - 1)
24next_minor=$(expr $minor + 1)
25
26minor_branch_name="v${major}.${minor}.x"
27prev_minor_branch_name="v${major}.${prev_minor}.x"
28next_minor_branch_name="v${major}.${next_minor}.x"
29
30echo "Promoting existing branch ${prev_minor_branch_name} to stable..."
31git checkout -q ${prev_minor_branch_name}
32git clean -qdff
33old_prev_minor_sha=$(git rev-parse HEAD)
34echo -n "stable" > crates/zed/RELEASE_CHANNEL
35git commit -q --all --message "Stable ${prev_minor_branch_name}"
36stable_tag_name="v$(script/get-crate-version zed)"
37git tag ${stable_tag_name}
38
39echo "Creating new preview branch ${minor_branch_name}..."
40git checkout -q -b ${minor_branch_name}
41echo -n "preview" > crates/zed/RELEASE_CHANNEL
42git commit -q --all --message "Preview ${minor_branch_name}"
43preview_tag_name="v$(script/get-crate-version zed)-pre"
44git tag ${preview_tag_name}
45
46echo "Preparing main for version ${next_minor_branch_name}..."
47git checkout -q main
48git clean -q -dff
49old_main_sha=$(git rev-parse HEAD)
50echo -n "dev" > crates/zed/RELEASE_CHANNEL
51cargo set-version --package zed --bump minor
52cargo check -q
53git commit -q --all --message "Dev ${next_minor_branch_name}"
54
55cat <<MESSAGE
56Locally rolled the railcars.
57
58To push this:
59    git push origin \\
60      ${preview_tag_name} \\
61      ${stable_tag_name} \\
62      ${minor_branch_name} \\
63      ${prev_minor_branch_name} \\
64      main
65
66To undo this:
67    git push -f . \\
68      :${preview_tag_name} \\
69      :${stable_tag_name} \\
70      :${minor_branch_name} \\
71      ${old_prev_minor_sha}:${prev_minor_branch_name} \\
72      ${old_main_sha}:main
73MESSAGE