mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
Updates coder/customers#365 This PR updates our migration framework to run all migrations in a single transaction. This is the same behavior we had in v1 and ensures that failed migrations don't bring the whole deployment down. If a migration fails now, it will automatically be rolled back to the previous version, allowing the deployment to continue functioning.
52 lines
1.5 KiB
Bash
Executable File
52 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Usage:
|
|
# ./create_migration name of migration
|
|
# ./create_migration "name of migration"
|
|
# ./create_migration name_of_migration
|
|
|
|
set -euo pipefail
|
|
|
|
cat <<EOF
|
|
|
|
WARNING: Migrations now all run in a single transaction. This makes upgrades
|
|
safer, but means that 'ALTER TYPE resource_type ADD VALUE' cannot be used if the
|
|
enum value needs to be referenced in another migration.
|
|
|
|
This also means you should not use "BEGIN;" and "COMMIT;" in your migrations, as
|
|
everything is already in a migration.
|
|
|
|
An example way of the proper way to add an enum value:
|
|
|
|
CREATE TYPE new_logintype AS ENUM (
|
|
'password',
|
|
'github',
|
|
'oidc',
|
|
'token' -- this is our new value
|
|
);
|
|
|
|
ALTER TABLE users
|
|
ALTER COLUMN login_type DROP DEFAULT, -- if the column has a default, it must be dropped first
|
|
ALTER COLUMN login_type TYPE new_logintype USING (login_type::text::new_logintype), -- converts the old enum until the new enum using text as an intermediary
|
|
ALTER COLUMN login_type SET DEFAULT 'password'::new_logintype; -- re-add the default using the new enum
|
|
|
|
DROP TYPE login_type;
|
|
ALTER TYPE new_logintype RENAME TO login_type;
|
|
|
|
EOF
|
|
|
|
SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}")
|
|
(
|
|
cd "$SCRIPT_DIR"
|
|
|
|
# if migration name is an empty string exit
|
|
[[ -z "${*}" ]] && (echo "Must provide a migration name" && exit 1)
|
|
|
|
# " " && "-" -> "_"
|
|
title="$(echo "${@}" | tr "[:upper:]" "[:lower:]" | sed -E -e "s/( |-)/_/g")"
|
|
|
|
migrate create -ext sql -dir . -seq "$title"
|
|
|
|
echo "Run \"make gen\" to generate models."
|
|
)
|