mirror of
https://github.com/coder/coder.git
synced 2026-06-03 13:08:25 +00:00
8f78c5145f
Always deploy from main for now. We want to keep testing commits to main as soon as they're merged, so we're going to disable the release freezing behavior. We will test cut releases on a separate deployment, upgraded manually.
74 lines
2.5 KiB
Bash
Executable File
74 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This script determines if a commit in either the main branch or a
|
|
# `release/x.y` branch should be deployed to dogfood.
|
|
#
|
|
# To avoid masking unrelated failures, this script will return 0 in either case,
|
|
# and will print `DEPLOY` or `NOOP` to stdout.
|
|
|
|
set -euo pipefail
|
|
# shellcheck source=scripts/lib.sh
|
|
source "$(dirname "${BASH_SOURCE[0]}")/lib.sh"
|
|
cdroot
|
|
|
|
deploy_branch=main
|
|
|
|
# Determine the current branch name and check that it is one of the supported
|
|
# branch names.
|
|
branch_name=$(git branch --show-current)
|
|
|
|
if [[ "$branch_name" != "main" && ! "$branch_name" =~ ^release/[0-9]+\.[0-9]+$ ]]; then
|
|
error "Current branch '$branch_name' is not a supported branch name for dogfood, must be 'main' or 'release/x.y'"
|
|
fi
|
|
log "Current branch '$branch_name'"
|
|
|
|
# Determine the remote name
|
|
remote=$(git remote -v | grep coder/coder | awk '{print $1}' | head -n1)
|
|
if [[ -z "${remote}" ]]; then
|
|
error "Could not find remote for coder/coder"
|
|
fi
|
|
log "Using remote '$remote'"
|
|
|
|
# Step 1: List all release branches and sort them by major/minor so we can find
|
|
# the latest release branch.
|
|
release_branches=$(
|
|
git branch -r --format='%(refname:short)' |
|
|
grep -E "${remote}/release/[0-9]+\.[0-9]+$" |
|
|
sed "s|${remote}/||" |
|
|
sort -V
|
|
)
|
|
|
|
# As a sanity check, release/2.26 should exist.
|
|
if ! echo "$release_branches" | grep "release/2.26" >/dev/null; then
|
|
error "Could not find existing release branches. Did you run 'git fetch -ap ${remote}'?"
|
|
fi
|
|
|
|
latest_release_branch=$(echo "$release_branches" | tail -n 1)
|
|
latest_release_branch_version=${latest_release_branch#release/}
|
|
log "Latest release branch: $latest_release_branch"
|
|
log "Latest release branch version: $latest_release_branch_version"
|
|
|
|
# Step 2: check if a matching tag `v<x.y>.0` exists. If it does not, we will
|
|
# use the release branch as the deploy branch.
|
|
if ! git rev-parse "refs/tags/v${latest_release_branch_version}.0" >/dev/null 2>&1; then
|
|
log "Tag 'v${latest_release_branch_version}.0' does not exist, using release branch as deploy branch"
|
|
deploy_branch=$latest_release_branch
|
|
else
|
|
log "Matching tag 'v${latest_release_branch_version}.0' exists, using main as deploy branch"
|
|
fi
|
|
log "Deploy branch: $deploy_branch"
|
|
|
|
# TODO: remove this temporary override
|
|
log "OVERRIDE: forcing main as deploy branch"
|
|
deploy_branch=main
|
|
|
|
# Finally, check if the current branch is the deploy branch.
|
|
log
|
|
if [[ "$branch_name" != "$deploy_branch" ]]; then
|
|
log "VERDICT: DO NOT DEPLOY"
|
|
echo "NOOP" # stdout
|
|
else
|
|
log "VERDICT: DEPLOY"
|
|
echo "DEPLOY" # stdout
|
|
fi
|