Resolve migration errors
Project description
django-migration-fixer
Resolve django makemigrations multiple leaf nodes in the migration graph
by ensuring that migration files and dependencies are always ordered regardless of remote changes, without having to run python manage.py makemigrations --merge
Features
- 100% test coverage.
- Maintain a consistent migration history when conflicts occur as a result of changes made using different versions of the target branch.
- Resolve migration conflicts on Pull Request branches
- Resolve migration conflicts on the default branch (NOT RECOMMENDED)
- Supports default migration modules i.e (
0001_....py
) - Re-number all migrations using the last migration on the target branch.
Example
After merging the default branch
After running django-migration-fixer
Assumptions
The final migration on the default branch would be used as the base for all subsequent migrations.
Installation
$ pip install django-migration-fixer
Add migration_fixer
to your INSTALLED_APPS
INSTALLED_APPS = [
...,
"migration_fixer",
...,
]
Usage
$ python manage.py makemigrations --fix
By default this uses main
as the default branch
Specifying a different default branch
Run:
$ python manage.py makemigrations -b master --fix
Setup using Github Actions
NOTE: :warning:
- To get this action to work you'll need to install django-migration-fixer and update your
INSTALLED_APPS
setting.
Inputs
Input | type | required | default | description |
---|---|---|---|---|
managepy-path | string |
true |
./manage.py |
The location of manage.py. |
default-branch | string |
false |
${{ github.base_ref }} |
The default branch or target branch of a Pull request. |
force-update | string |
false |
Force update the target branch locally when git fetch fails. |
name: Fix django migrations
on:
pull_request:
branches:
- main
jobs:
fix-migrations:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.6.x'
- name: Upgrade pip
run: |
pip install -U pip
- name: Install project dependencies
run: |
make install
- name: Run django-migration-fixer
uses: tj-django/django-migration-fixer@v1.2.1
with:
managepy-path: /path/to/manage.py
- name: Verify Changed files
uses: tj-actions/verify-changed-files@v7.1
id: verify-changed-files
with:
files: |
/path/to/migrations
- name: Commit migration changes
if: steps.verify-changed-files.outputs.files_changed == 'true'
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add /path/to/migrations
git commit -m "Update migrations"
- name: Push migration changes
if: steps.verify-changed-files.outputs.files_changed == 'true'
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref }}
See: https://github.com/tj-django/django-clone for a working example.
Test Platforms
Found a Bug?
To file a bug or submit a patch, please head over to django-migration-fixer on github.
If you feel generous and want to show some extra appreciation:
Support me with a :star:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django-migration-fixer-1.2.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 49d2f88a684482552fe1a57364d7109973ce142645a78f1160eb60722b2452ca |
|
MD5 | 8e3e890fe216f3dc6c775cdb031a9a2d |
|
BLAKE2b-256 | 45478b98da4bcc634735072715daced4db223fe572cd0c507d04a7853d59841a |
Hashes for django_migration_fixer-1.2.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ac2113a1a281926d314851c7bae1645ee7584baac34fb8aaabc149c5adc6daa |
|
MD5 | 49330470091b77e2c5076f6f0c6c77aa |
|
BLAKE2b-256 | e5a20be79e686c67d506a6ab4f38050e030fa864c433fe39f51fc384c82067aa |