diff --git a/Justfile b/Justfile index 5f71276..78e26c0 100644 --- a/Justfile +++ b/Justfile @@ -41,19 +41,33 @@ build-docker-container: run-docker-container: build-docker-container docker run -e "SECRET_KEY_BASE=ahK8BeiDaibaige1ahkooS0chie9lo7the7uuzar0eeBeeCh2iereteshee2Oosu" -e='DATABASE_URL=postgres://postgres@localhost:5432/mv_dev' -e='PORT=4040' -e='PHX_HOST=localhost' --network=host mitgliederverwaltung -regen-migrations migration_name: - #!/bin/bash +# Usage: +# just regen-migrations migration_name [commit_hash] +# If commit_hash is given, rollback & delete the migrations from that commit. +# Otherwise, rollback & delete all untracked migrations. +regen-migrations migration_name commit_hash='': + #!/usr/bin/env bash set -euo pipefail - # Get count of untracked migrations - N_MIGRATIONS=$(git ls-files --others priv/repo/migrations | wc -l) - # Rollback untracked migrations - mix ash_postgres.rollback -n $N_MIGRATIONS - # Delete untracked migrations and snapshots - git ls-files --others priv/repo/migrations | xargs rm - git ls-files --others priv/resource_snapshots | xargs rm - # Regenerate migrations - mix ash.codegen --name {{migration_name}} - # Run migrations if flag - if echo $* | grep -e "-m" -q; then - mix ash.migrate + # Pick migrations either from the given commit or untracked files + if [ -n "{{commit_hash}}" ]; then + echo "→ Rolling back migrations from commit {{commit_hash}}" + MIG_FILES=$(git show --name-only --pretty=format: "{{commit_hash}}" \ + | grep -E "^priv/repo/migrations/|^priv/resource_snapshots") + else + echo "→ Rolling back all untracked migrations" + MIG_FILES=$(git ls-files --others priv/repo/migrations) fi + + # Roll back in Ash + COUNT=$(echo "$MIG_FILES" | wc -l) + mix ash_postgres.rollback -n "$COUNT" + + # Remove the migration files + echo removing $MIG_FILES + echo "$MIG_FILES" | xargs rm -f + + # Also clean up any untracked resource snapshots + git ls-files --others priv/resource_snapshots | xargs rm -f + + # Generate a fresh migration + mix ash.codegen --name "{{migration_name}}"