Skip to content

Commit

Permalink
Fix alembic template & make pre-commit more resilient (apache#43244)
Browse files Browse the repository at this point in the history
While working on this apache#43243, I was following https://github.com/apache/airflow/blob/main/contributing-docs/13_metadata_database_updates.rst and I ran into an error with  pre-commit hook.

When running the revision command as follows:

```
root@f1f78138ad78:/opt/airflow/airflow# alembic revision -m "New revision"
  Generating /opt/airflow/airflow/migrations/versions/01b38be821e9_new_revision.py ...  done
```

It creates a file as follows:

```python
"""New revision

Revision ID: cd7be1ae8b80
Revises: 05234396c6fc
Create Date: 2024-10-22 01:44:17.873864

"""

import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision = 'cd7be1ae8b80'
down_revision = '05234396c6fc'
branch_labels = None
depends_on = None
```

Notice single quotes in `revision` & `down_revision`.

Now if I just run that single pre-commit hook (`update-migration-references`), it fails

```
❯ pre-commit run "update-migration-references" --all-files
Update migration ref doc.................................................Failed
- hook id: update-migration-references
- exit code: 1

Using 'uv' to install Airflow

Using airflow version from current sources

Updating migration reference for airflow
Making sure airflow version updated
Making sure there's no mismatching revision numbers
Traceback (most recent call last):
  File "/opt/airflow/scripts/in_container/run_migration_reference.py", line 246, in <module>
    correct_mismatching_revision_nums(revisions=revisions)
  File "/opt/airflow/scripts/in_container/run_migration_reference.py", line 230, in correct_mismatching_revision_nums
    new_content = content.replace(revision_id_match.group(1), revision_match.group(1), 1)
AttributeError: 'NoneType' object has no attribute 'group'
Error 1 returned

If you see strange stacktraces above, run `breeze ci-image build --python 3.9` and try again.
```

That isn't a problem generally as `ruff` will fail before and convert it into double quotes. But rather than doing that, we fix it at source.
  • Loading branch information
kaxil authored Oct 22, 2024
1 parent d122ebf commit ae90a8f
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 5 deletions.
4 changes: 2 additions & 2 deletions airflow/migrations/script.py.mako
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ from alembic import op
${imports if imports else ""}

# revision identifiers, used by Alembic.
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
revision = "${up_revision}"
down_revision = "${down_revision}"
branch_labels = ${repr(branch_labels)}
depends_on = ${repr(depends_on)}

Expand Down
2 changes: 1 addition & 1 deletion docs/apache-airflow/img/airflow_erd.sha256
Original file line number Diff line number Diff line change
@@ -1 +1 @@
a874f49d63f37d46c47de8e473aa87b8877b0c5a9f670722017cfd0ea9aeec51
e1e32de9983ee02f268010485363ec222927c64e13be142761fc2b9f9cf33090
4 changes: 2 additions & 2 deletions scripts/in_container/run_migration_reference.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,8 @@ def ensure_filenames_are_sorted(revisions, app):


def correct_mismatching_revision_nums(revisions: Iterable[Script]):
revision_pattern = r'revision = "([a-fA-F0-9]+)"'
down_revision_pattern = r'down_revision = "([a-fA-F0-9]+)"'
revision_pattern = r'revision = ["\']([a-fA-F0-9]+)["\']'
down_revision_pattern = r'down_revision = ["\']([a-fA-F0-9]+)["\']'
revision_id_pattern = r"Revision ID: ([a-fA-F0-9]+)"
revises_id_pattern = r"Revises: ([a-fA-F0-9]+)"
for rev in revisions:
Expand Down

0 comments on commit ae90a8f

Please sign in to comment.