From a33f9a3219b137efc35b7712f5dbe232b24fdb17 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Mon, 20 Feb 2023 13:33:17 +0000 Subject: [PATCH 1/2] feat: Add migration fixer script (for branches) --- .../migrations/fix_migration_numbers.sh | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100755 coderd/database/migrations/fix_migration_numbers.sh diff --git a/coderd/database/migrations/fix_migration_numbers.sh b/coderd/database/migrations/fix_migration_numbers.sh new file mode 100755 index 0000000000000..e9e835f71e14c --- /dev/null +++ b/coderd/database/migrations/fix_migration_numbers.sh @@ -0,0 +1,95 @@ +#!/bin/bash +set -euo pipefail + +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") + +list_migrations() { + branch=$1 + git ls-tree -r --name-only "${branch}" -- . | grep -E '[0-9]{6}.*' | sort -n +} + +main() { + cd "${SCRIPT_DIR}" + + echo "Fetching origin/main..." + git fetch -u origin main + + curr_num=$( + set -e + list_migrations origin/main | grep '^[0-9]' | tail -n1 + ) + echo "Last migration (main): ${curr_num}" + next_num=$(("1${curr_num:0:6}" - 1000000 + 1)) + curr_num=$(printf "%06d" "${next_num}") + echo "Next migration number: ${curr_num}" + + main_files="$( + set -e + list_migrations origin/main + )" + head_files="$( + set -e + list_migrations HEAD + )" + + declare -A prefix_map=() + declare -a git_add_files=() + + # Renumber migrations part of this branch (as compared to main) + diff_files="$(diff -u <(echo "${main_files}") <(echo "${head_files}") | sed -E -ne 's;^\+(0.*);\1;p' | sort -n || true)" + if [[ -z "${diff_files}" ]]; then + echo "No migrations to rename, exiting." + return + fi + while read -r file; do + old_file="${file}" + dir=$(dirname "${file}") + file=$(basename "${file}") + num="${file:0:6}" + set +u + new_num="${prefix_map["${num}"]}" + set -u + if [[ -z "${new_num}" ]]; then + new_num="${curr_num}" + prefix_map["${num}"]="${new_num}" + next_num=$((next_num + 1)) + curr_num=$(printf "%06d" "${next_num}") + fi + name="${file:7:-4}" + new_file="${new_num}_${name}.sql" + echo "Renaming ${old_file} to ${new_file}" + mv "${old_file}" "${new_file}" + git_add_files+=("${new_file}" "${old_file}") + done <<<"${diff_files}" + + # Renumber fixtures if there's a matching migration in this branch (as compared to main). + diff_files="$(diff -u <(echo "${main_files}") <(echo "${head_files}") | sed -E -ne 's;^\+(testdata/[^/]*/0.*);\1;p' | sort -n || true)" + if [[ -z "${diff_files}" ]]; then + echo "No testdata fixtures to rename, skipping." + return + fi + while read -r file; do + old_file="${file}" + dir=$(dirname "${file}") + file=$(basename "${file}") + num="${file:0:6}" + set +u + new_num="${prefix_map["${num}"]}" + set -u + if [[ -z "${new_num}" ]]; then + echo "Skipping ${old_file}, no matching migration in ${SCRIPT_DIR}" + continue + fi + name="${file:7:-4}" + new_file="${dir}/${new_num}_${name}.sql" + echo "Renaming ${old_file} to ${new_file}" + mv "${old_file}" "${new_file}" + git_add_files+=("${new_file}" "${old_file}") + done <<<"${diff_files}" + + git add "${git_add_files[@]}" + git status + echo "Run 'git commit' to commit the changes." +} + +(main "$@") From 3cd788a28e424af5034072cf83ef932ae33578c8 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Tue, 7 Mar 2023 12:13:22 +0000 Subject: [PATCH 2/2] Use dynamic origin --- coderd/database/migrations/fix_migration_numbers.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/coderd/database/migrations/fix_migration_numbers.sh b/coderd/database/migrations/fix_migration_numbers.sh index e9e835f71e14c..8dc1fb6742e07 100755 --- a/coderd/database/migrations/fix_migration_numbers.sh +++ b/coderd/database/migrations/fix_migration_numbers.sh @@ -11,12 +11,14 @@ list_migrations() { main() { cd "${SCRIPT_DIR}" - echo "Fetching origin/main..." - git fetch -u origin main + origin=$(git remote -v | grep "github.com[:/]coder/coder.*(fetch)" | cut -f1) + + echo "Fetching ${origin}/main..." + git fetch -u "${origin}" main curr_num=$( set -e - list_migrations origin/main | grep '^[0-9]' | tail -n1 + list_migrations "${origin}"/main | grep '^[0-9]' | tail -n1 ) echo "Last migration (main): ${curr_num}" next_num=$(("1${curr_num:0:6}" - 1000000 + 1)) @@ -25,7 +27,7 @@ main() { main_files="$( set -e - list_migrations origin/main + list_migrations "${origin}"/main )" head_files="$( set -e