From e630e64b5b5d372dadb363074f9547186daeaf11 Mon Sep 17 00:00:00 2001 From: Nassim Tabchiche Date: Fri, 11 Oct 2024 14:32:10 +0200 Subject: [PATCH 1/3] Write backend migrations check workflow --- .../workflows/backend-migrations-check.yaml | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 .github/workflows/backend-migrations-check.yaml diff --git a/.github/workflows/backend-migrations-check.yaml b/.github/workflows/backend-migrations-check.yaml new file mode 100644 index 000000000..75064251d --- /dev/null +++ b/.github/workflows/backend-migrations-check.yaml @@ -0,0 +1,119 @@ +name: Backend migrations check + +on: + pull_request: + branches: [main, develop] + types: [opened, synchronize] + workflow_dispatch: + +env: + GITHUB_WORKFLOW: github_actions + backend-directory: ./backend + enterprise-backend-directory: ./enterprise/backend + enterprise-backend-settings-module: enterprise_core.settings + +jobs: + migrations-check: + runs-on: ubuntu-20.04 + + strategy: + max-parallel: 4 + matrix: + python-version: ["3.11"] + + steps: + - uses: actions/checkout@v4 + - name: Set up python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" + - uses: actions/setup-node@v4 + with: + node-version: latest + - name: Install requirements + working-directory: ${{ env.backend-directory }} + run: | + python -m pip install --upgrade pip + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Create backend environment variables file + working-directory: ${{ env.backend-directory }} + run: | + touch .env + echo DJANGO_DEBUG=True >> .env + echo DJANGO_SUPERUSER_EMAIL=admin@tests.com >> .env + echo DJANGO_SUPERUSER_PASSWORD=1234 >> .env + echo DB_HOST=localhost >> .env + echo CISO_ASSISTANT_SUPERUSER_EMAIL='' >> .env + echo CISO_ASSISTANT_URL=http://localhost:4173 >> .env + echo DEFAULT_FROM_EMAIL='ciso-assistant@tests.net' >> .env + echo EMAIL_HOST=localhost >> .env + echo EMAIL_HOST_USER=user@tests.com >> .env + echo EMAIL_HOST_PASSWORD=password >> .env + echo EMAIL_PORT=1025 >> .env + - name: Check that migrations were made + working-directory: ${{ env.backend-directory }} + run: | + export $(grep -v '^#' .env | xargs) + python manage.py makemigrations --check + - name: Check that all migrations were applied + working-directory: ${{ env.backend-directory }} + run: | + export $(grep -v '^#' .env | xargs) + python manage.py migrate --check + + enterprise-migrations-check: + runs-on: ubuntu-20.04 + + strategy: + max-parallel: 4 + matrix: + python-version: ["3.11"] + + steps: + - uses: actions/checkout@v4 + - name: Set up python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + virtualenvs-create: false + installer-parallel: true + - name: Install backend requirements + working-directory: ${{ env.backend-directory }} + run: poetry install + - name: Install enterprise backend + working-directory: ${{ env.enterprise-backend-directory }} + run: poetry install + - name: Create backend environment variables file + working-directory: ${{ env.backend-directory }} + run: | + touch .env + echo DJANGO_DEBUG=True >> .env + echo DJANGO_SUPERUSER_EMAIL=admin@tests.com >> .env + echo DJANGO_SUPERUSER_PASSWORD=1234 >> .env + echo DB_HOST=localhost >> .env + echo CISO_ASSISTANT_SUPERUSER_EMAIL='' >> .env + echo CISO_ASSISTANT_URL=http://localhost:4173 >> .env + echo DEFAULT_FROM_EMAIL='ciso-assistant@tests.net' >> .env + echo EMAIL_HOST=localhost >> .env + echo EMAIL_HOST_USER=user@tests.com >> .env + echo EMAIL_HOST_PASSWORD=password >> .env + echo EMAIL_PORT=1025 >> .env + echo DJANGO_SETTINGS_MODULE=enterprise_core.settings >> .env + echo LICENSE_SEATS=999 >> .env + - name: Check that migrations were made + working-directory: ${{ env.backend-directory }} + run: | + export $(grep -v '^#' .env | xargs) + poetry run python manage.py makemigrations --check --settings=${{ env.enterprise-backend-settings-module }} + if [ $? -ne 0 ]; then echo "::error Migrations were not made, please run the makemigrations command." && exit 1; fi + - name: Check that all migrations were applied + working-directory: ${{ env.backend-directory }} + run: | + export $(grep -v '^#' .env | xargs) + poetry run python manage.py migrate --check --settings=${{ env.enterprise-backend-settings-module }} + if [ $? -ne 0 ]; then echo "::error Migrations were not applied, please run the migrate command." && exit 1; fi From ef5193ee42744b3648c225c58ff0656a78040524 Mon Sep 17 00:00:00 2001 From: Nassim Tabchiche Date: Fri, 11 Oct 2024 14:44:43 +0200 Subject: [PATCH 2/3] Add --dry-run and --verbosity options to makemigrations Add --plan option to migrate s --- .github/workflows/backend-migrations-check.yaml | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/.github/workflows/backend-migrations-check.yaml b/.github/workflows/backend-migrations-check.yaml index 75064251d..6ed82954e 100644 --- a/.github/workflows/backend-migrations-check.yaml +++ b/.github/workflows/backend-migrations-check.yaml @@ -55,12 +55,7 @@ jobs: working-directory: ${{ env.backend-directory }} run: | export $(grep -v '^#' .env | xargs) - python manage.py makemigrations --check - - name: Check that all migrations were applied - working-directory: ${{ env.backend-directory }} - run: | - export $(grep -v '^#' .env | xargs) - python manage.py migrate --check + python manage.py makemigrations --check --dry-run --verbosity=3 enterprise-migrations-check: runs-on: ubuntu-20.04 @@ -109,11 +104,5 @@ jobs: working-directory: ${{ env.backend-directory }} run: | export $(grep -v '^#' .env | xargs) - poetry run python manage.py makemigrations --check --settings=${{ env.enterprise-backend-settings-module }} + poetry run python manage.py makemigrations --check --dry-run --verbosity=3 --settings=${{ env.enterprise-backend-settings-module }} if [ $? -ne 0 ]; then echo "::error Migrations were not made, please run the makemigrations command." && exit 1; fi - - name: Check that all migrations were applied - working-directory: ${{ env.backend-directory }} - run: | - export $(grep -v '^#' .env | xargs) - poetry run python manage.py migrate --check --settings=${{ env.enterprise-backend-settings-module }} - if [ $? -ne 0 ]; then echo "::error Migrations were not applied, please run the migrate command." && exit 1; fi From 9abd3b07a2f54eacde53fea1e7d866379495b3e8 Mon Sep 17 00:00:00 2001 From: Nassim Tabchiche Date: Mon, 14 Oct 2024 12:17:33 +0200 Subject: [PATCH 3/3] chore: Make migrations --- .../0002_alter_clientsettings_folder.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 enterprise/backend/enterprise_core/migrations/0002_alter_clientsettings_folder.py diff --git a/enterprise/backend/enterprise_core/migrations/0002_alter_clientsettings_folder.py b/enterprise/backend/enterprise_core/migrations/0002_alter_clientsettings_folder.py new file mode 100644 index 000000000..5c620a437 --- /dev/null +++ b/enterprise/backend/enterprise_core/migrations/0002_alter_clientsettings_folder.py @@ -0,0 +1,21 @@ +# Generated by Django 5.1 on 2024-10-14 08:48 + +import django.db.models.deletion +import iam.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('enterprise_core', '0001_initial'), + ('iam', '0008_user_is_third_party'), + ] + + operations = [ + migrations.AlterField( + model_name='clientsettings', + name='folder', + field=models.ForeignKey(default=iam.models.Folder.get_root_folder_id, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_folder', to='iam.folder'), + ), + ]