diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2243dd89b..28d6b4337 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,11 +50,11 @@ jobs: - name: Basic - Postgres args: "database_engine=postgresql database_version='postgresql@14.1'" - name: Extended - Postgres - args: "use_celery=y use_drf=y js_task_runner=Gulp database_engine=postgresql database_version='postgresql@14.1'" + args: "use_celery=y use_drf=y frontend_pipeline=Gulp database_engine=postgresql database_version='postgresql@14.1'" - name: Basic - MySQL args: "database_engine=mysql database_version='mysql@8.0.28'" - name: Extended - MySQL - args: "use_celery=y use_drf=y js_task_runner=Gulp database_engine=mysql database_version='mysql@8.0.28'" + args: "use_celery=y use_drf=y frontend_pipeline=Gulp database_engine=mysql database_version='mysql@8.0.28'" name: "${{ matrix.script.name }} Docker" runs-on: ubuntu-latest @@ -79,11 +79,11 @@ jobs: matrix: script: - name: With Celery - args: "use_celery=y use_compressor=y database_engine=postgresql database_version=postgresql@14.1" + args: "use_celery=y frontend_pipeline='Django Compressor' database_engine=postgresql database_version=postgresql@14.1" # postgres://user:password@host:port/database database_url: "postgres://postgres:postgres@localhost:5432/postgres" - name: With Gulp - args: "js_task_runner=Gulp custom_bootstrap_compilation=y database_engine=postgresql database_version=postgresql@14.1" + args: "frontend_pipeline='Gulp' custom_bootstrap_compilation=y database_engine=postgresql database_version=postgresql@14.1" database_url: "postgres://postgres:postgres@localhost:5432/postgres" name: "${{ matrix.script.name }} Bare metal" diff --git a/.github/workflows/pre-commit-autoupdate.yml b/.github/workflows/pre-commit-autoupdate.yml index b5c91ca5c..df4ea1f9a 100644 --- a/.github/workflows/pre-commit-autoupdate.yml +++ b/.github/workflows/pre-commit-autoupdate.yml @@ -31,7 +31,7 @@ jobs: run: pre-commit autoupdate - name: Create Pull Request - uses: peter-evans/create-pull-request@v3.14.0 + uses: peter-evans/create-pull-request@v4 with: token: ${{ secrets.GITHUB_TOKEN }} branch: update/pre-commit-autoupdate diff --git a/CHANGELOG.md b/CHANGELOG.md index 84e61e6c6..95dc9f73b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,16 @@ All enhancements and patches to Cookiecutter Django will be documented in this f +## 2022.03.23 + +### Updated +- Bump peter-evans/create-pull-request from 3.14.0 to 4 ([#3645](https://github.com/cookiecutter/cookiecutter-django/pull/3645)) + +## 2022.03.20 + +### Changed +- Unify compressor, gulp and custom bootstrap options ([#3535](https://github.com/cookiecutter/cookiecutter-django/pull/3535)) + ## 2022.03.14 ### Fixed diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..8a5fc4158 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,3 @@ +## Code of Conduct + +Everyone who interacts in the Cookiecutter project's codebase, issue trackers, chat rooms, and mailing lists is expected to follow the [PyPA Code of Conduct](https://www.pypa.io/en/latest/code-of-conduct/). diff --git a/README.md b/README.md index d925cfbb4..3a1fd4d23 100644 --- a/README.md +++ b/README.md @@ -129,10 +129,6 @@ Answer the prompts with your own desired [options](http://cookiecutter-django.re 4 - postgresql@11.14 5 - postgresql@10.19 Choose from 1, 2, 3, 4, 5 [1]: 1 - Select js_task_runner: - 1 - None - 2 - Gulp - Choose from 1, 2 [1]: 1 Select cloud_provider: 1 - AWS 2 - GCP @@ -151,8 +147,11 @@ Answer the prompts with your own desired [options](http://cookiecutter-django.re Choose from 1, 2, 3, 4, 5, 6, 7, 8, 9 [1]: 1 use_async [n]: n use_drf [n]: y - custom_bootstrap_compilation [n]: n - use_compressor [n]: n + Select frontend_pipeline: + 1 - None + 2 - Django Compressor + 3 - Gulp + Choose from 1, 2, 3, 4 [1]: 1 use_celery [n]: y use_mailhog [n]: n use_sentry [n]: y @@ -248,8 +247,3 @@ experience better. - [How to create a Django Application using Cookiecutter and Django 1.8](https://www.swapps.io/blog/how-to-create-a-django-application-using-cookiecutter-and-django-1-8/) - Sept. 12, 2015 Have a blog or online publication? Write about your cookiecutter-django tips and tricks, then send us a pull request with the link. - -## Code of Conduct - -Everyone interacting in the Cookiecutter project's codebases, issue trackers, chat -rooms, and mailing lists is expected to follow the [PyPA Code of Conduct](https://www.pypa.io/en/latest/code-of-conduct/). diff --git a/cookiecutter.json b/cookiecutter.json index 2a3c168db..50e2529e3 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -30,7 +30,6 @@ ], "__processed_database_engine": "{{ cookiecutter.database_version.lower()|split('@')[0] }}", "__processed_database_version": "{{ cookiecutter.database_version.lower()|split('@')[1] }}", - "js_task_runner": ["None", "Gulp"], "cloud_provider": ["AWS", "GCP", "None"], "mail_service": [ "Mailgun", @@ -45,8 +44,7 @@ ], "use_async": "n", "use_drf": "n", - "custom_bootstrap_compilation": "n", - "use_compressor": "n", + "frontend_pipeline": ["None", "Django Compressor", "Gulp"], "use_celery": "n", "use_mailhog": "n", "use_sentry": "n", diff --git a/docs/deployment-on-heroku.rst b/docs/deployment-on-heroku.rst index 158e25874..3317542db 100644 --- a/docs/deployment-on-heroku.rst +++ b/docs/deployment-on-heroku.rst @@ -158,7 +158,7 @@ Or add the DSN for your account, if you already have one: Gulp & Bootstrap compilation ++++++++++++++++++++++++++++ -If you've opted for a custom bootstrap build, you'll most likely need to setup +If you've opted for Gulp, you'll most likely need to setup your app to use `multiple buildpacks`_: one for Python & one for Node.js: .. code-block:: bash diff --git a/docs/developing-locally-docker.rst b/docs/developing-locally-docker.rst index f70363dc9..bde272247 100644 --- a/docs/developing-locally-docker.rst +++ b/docs/developing-locally-docker.rst @@ -18,7 +18,7 @@ Prerequisites * Docker; if you don't have it yet, follow the `installation instructions`_; * Docker Compose; refer to the official documentation for the `installation guide`_. -* Pre-commit; refer to the official documentation for the [pre-commit](https://pre-commit.com/#install). +* Pre-commit; refer to the official documentation for the `pre-commit`_. .. _`installation instructions`: https://docs.docker.com/install/#supported-platforms .. _`installation guide`: https://docs.docker.com/compose/install/ @@ -214,7 +214,7 @@ Celery tasks in local development ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When not using docker Celery tasks are set to run in Eager mode, so that a full stack is not needed. When using docker the task scheduler will be used by default. -If you need tasks to be executed on the main thread during development set CELERY_TASK_ALWAYS_EAGER = True in config/settings/local.py. +If you need tasks to be executed on the main thread during development set ``CELERY_TASK_ALWAYS_EAGER = True`` in ``config/settings/local.py``. Possible uses could be for testing, or ease of profiling with DJDT. @@ -239,7 +239,7 @@ Developing locally with HTTPS Increasingly it is becoming necessary to develop software in a secure environment in order that there are very few changes when deploying to production. Recently Facebook changed their policies for apps/sites that use Facebook login which requires the use of an HTTPS URL for the OAuth redirect URL. So if you want to use the ``users`` application with a OAuth provider such as Facebook, securing your communication to the local development environment will be necessary. -In order to create a secure environment, we need to have a trusted SSL certficate installed in our Docker application. +In order to create a secure environment, we need to have a trusted SSL certificate installed in our Docker application. #. **Let's Encrypt** diff --git a/docs/developing-locally.rst b/docs/developing-locally.rst index a10aea7c6..521754e4d 100644 --- a/docs/developing-locally.rst +++ b/docs/developing-locally.rst @@ -183,7 +183,7 @@ To run Celery locally, make sure redis-server is installed (instructions are ava Sass Compilation & Live Reloading --------------------------------- -If you've opted for Gulp as JS task runner, the project comes configured with `Sass`_ compilation and `live reloading`_. As you change you Sass/JS source files, the task runner will automatically rebuild the corresponding CSS and JS assets and reload them in your browser without refreshing the page. +If you've opted for Gulp as front-end pipeline, the project comes configured with `Sass`_ compilation and `live reloading`_. As you change you Sass/JS source files, the task runner will automatically rebuild the corresponding CSS and JS assets and reload them in your browser without refreshing the page. #. Make sure that `Node.js`_ v16 is installed on your machine. #. In the project root, install the JS dependencies with:: @@ -196,7 +196,7 @@ If you've opted for Gulp as JS task runner, the project comes configured with `S The app will now run with live reloading enabled, applying front-end changes dynamically. -.. note:: The task will start 2 processes in parallel: the static assets build loop on one side, and the Django server on the other. You don NOT need to run Django as your would normally with ``manage.py runserver``. +.. note:: The task will start 2 processes in parallel: the static assets build loop on one side, and the Django server on the other. You do NOT need to run Django as your would normally with ``manage.py runserver``. .. _Node.js: http://nodejs.org/download/ .. _Sass: https://sass-lang.com/ diff --git a/docs/project-generation-options.rst b/docs/project-generation-options.rst index d18458d83..b7aaa97b5 100644 --- a/docs/project-generation-options.rst +++ b/docs/project-generation-options.rst @@ -80,12 +80,6 @@ database_version: 1. 5.7 -js_task_runner: - Select a JavaScript task runner. The choices are: - - 1. None - 2. Gulp_ - cloud_provider: Select a cloud provider for static & media files. The choices are: @@ -114,13 +108,12 @@ use_async: use_drf: Indicates whether the project should be configured to use `Django Rest Framework`_. -custom_bootstrap_compilation: - Indicates whether the project should support Bootstrap recompilation - via the selected JavaScript task runner's task. This can be useful - for real-time Bootstrap variable alteration. +frontend_pipeline: + Select a pipeline to compile and optimise frontend assets (JS, CSS, ...): -use_compressor: - Indicates whether the project should be configured to use `Django Compressor`_. + 1. None + 2. `Django Compressor`_ + 3. `Gulp`_: support Bootstrap recompilation with real-time variables alteration. use_celery: Indicates whether the project should be configured to use Celery_. diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index 5c01cb621..277b9e98d 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -10,7 +10,6 @@ TODO: restrict Cookiecutter Django project initialization to """ from __future__ import print_function -import json import os import random import shutil @@ -92,6 +91,11 @@ def remove_gulp_files(): file_names = ["gulpfile.js"] for file_name in file_names: os.remove(file_name) + remove_sass_files() + + +def remove_sass_files(): + shutil.rmtree(os.path.join("{{cookiecutter.project_slug}}", "static", "sass")) def remove_packagejson_file(): @@ -100,16 +104,6 @@ def remove_packagejson_file(): os.remove(file_name) -def remove_bootstrap_packages(): - with open("package.json", mode="r") as fd: - content = json.load(fd) - for package_name in ["bootstrap", "gulp-concat", "@popperjs/core"]: - content["devDependencies"].pop(package_name) - with open("package.json", mode="w") as fd: - json.dump(content, fd, ensure_ascii=False, indent=2) - fd.write("\n") - - def remove_celery_files(): file_names = [ os.path.join("config", "celery_app.py"), @@ -456,13 +450,13 @@ def main(): if ( "{{ cookiecutter.use_docker }}".lower() == "y" - and "{{ cookiecutter.cloud_provider}}".lower() != "aws" + and "{{ cookiecutter.cloud_provider}}" != "AWS" ): remove_aws_dockerfile() if "{{ cookiecutter.use_heroku }}".lower() == "n": remove_heroku_files() - elif "{{ cookiecutter.use_compressor }}".lower() == "n": + elif "{{ cookiecutter.frontend_pipeline }}" != "Django Compressor": remove_heroku_build_hooks() if "{{ cookiecutter.database_engine }}".lower() == "postgresql": @@ -487,15 +481,13 @@ def main(): if "{{ cookiecutter.keep_local_envs_in_vcs }}".lower() == "y": append_to_gitignore_file("!.envs/.local/") - if "{{ cookiecutter.js_task_runner}}".lower() == "none": + if "{{ cookiecutter.frontend_pipeline }}" != "Gulp": remove_gulp_files() remove_packagejson_file() if "{{ cookiecutter.use_docker }}".lower() == "y": remove_node_dockerfile() - elif "{{ cookiecutter.custom_bootstrap_compilation }}" == "n": - remove_bootstrap_packages() - if "{{ cookiecutter.cloud_provider}}".lower() == "none": + if "{{ cookiecutter.cloud_provider}}" == "None": print( WARNING + "You chose not to use a cloud provider, " "media files won't be served in production." + TERMINATOR @@ -507,13 +499,13 @@ def main(): if "{{ cookiecutter.use_docker }}".lower() == "y": remove_celery_compose_dirs() - if "{{ cookiecutter.ci_tool }}".lower() != "travis": + if "{{ cookiecutter.ci_tool }}" != "Travis": remove_dottravisyml_file() - if "{{ cookiecutter.ci_tool }}".lower() != "gitlab": + if "{{ cookiecutter.ci_tool }}" != "Gitlab": remove_dotgitlabciyml_file() - if "{{ cookiecutter.ci_tool }}".lower() != "github": + if "{{ cookiecutter.ci_tool }}" != "Github": remove_dotgithub_folder() if "{{ cookiecutter.use_drf }}".lower() == "n": diff --git a/setup.py b/setup.py index 99e054595..ed2418189 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ except ImportError: from distutils.core import setup # We use calendar versioning -version = "2022.03.14" +version = "2022.03.23" with open("README.rst") as readme_file: long_description = readme_file.read() diff --git a/tests/test_cookiecutter_generation.py b/tests/test_cookiecutter_generation.py index dd3375d50..8ef8d11bd 100755 --- a/tests/test_cookiecutter_generation.py +++ b/tests/test_cookiecutter_generation.py @@ -90,12 +90,9 @@ SUPPORTED_COMBINATIONS = [ {"use_async": "n"}, {"use_drf": "y"}, {"use_drf": "n"}, - {"js_task_runner": "None"}, - {"js_task_runner": "Gulp"}, - {"custom_bootstrap_compilation": "y"}, - {"custom_bootstrap_compilation": "n"}, - {"use_compressor": "y"}, - {"use_compressor": "n"}, + {"frontend_pipeline": "None"}, + {"frontend_pipeline": "django-compressor"}, + {"frontend_pipeline": "Gulp"}, {"use_celery": "y"}, {"use_celery": "n"}, {"use_mailhog": "y"}, diff --git a/{{cookiecutter.project_slug}}/.github/dependabot.yml b/{{cookiecutter.project_slug}}/.github/dependabot.yml index 0b792f748..fef1b75fc 100644 --- a/{{cookiecutter.project_slug}}/.github/dependabot.yml +++ b/{{cookiecutter.project_slug}}/.github/dependabot.yml @@ -88,7 +88,7 @@ updates: schedule: interval: "daily" -{%- if cookiecutter.js_task_runner != "None" %} +{%- if cookiecutter.frontend_pipeline == 'Gulp' %} # Enable version updates for javascript/npm - package-ecosystem: "npm" diff --git a/{{cookiecutter.project_slug}}/.gitignore b/{{cookiecutter.project_slug}}/.gitignore index d48356fa1..ede26ef72 100644 --- a/{{cookiecutter.project_slug}}/.gitignore +++ b/{{cookiecutter.project_slug}}/.gitignore @@ -338,7 +338,7 @@ MailHog .ipython/ {%- endif %} -{%- if cookiecutter.js_task_runner == 'Gulp' %} +{%- if cookiecutter.frontend_pipeline == 'Gulp' %} project.css project.min.css vendors.js diff --git a/{{cookiecutter.project_slug}}/.idea/runConfigurations/docker_compose_up_django.xml b/{{cookiecutter.project_slug}}/.idea/runConfigurations/docker_compose_up_django.xml index 67f369a3c..ad3b6a35a 100644 --- a/{{cookiecutter.project_slug}}/.idea/runConfigurations/docker_compose_up_django.xml +++ b/{{cookiecutter.project_slug}}/.idea/runConfigurations/docker_compose_up_django.xml @@ -10,7 +10,7 @@