Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JM's suggested tweaks based on rfds upgrade #26

Open
wants to merge 15 commits into
base: master
Choose a base branch
from

Conversation

mrmachine
Copy link
Collaborator

No description provided.

jmurty added 10 commits July 6, 2020 10:56
Push the built but pre-test Docker image in parallel with the tests
run so that the image will be available for fetching from Docker Hub
if necessary, e.g. if you re-run the Codefresh run, or want to fetch
and debug a failing image locally.

This is mainly motivated by the fact that Codefresh no longer
provides its own repository for images, which it used to, and thus
no longer caches every built image including those that failed the
`run_tests` step.
These are the constraints for ixc-django-docker's dependencies that
worked for the RFDS site that uses Django 1.8, when re-creating that
project's pinned requirements.txt file from scratch.
DOTENV is useful in many places, such as setting unique names for
things like databases or ElasticSearch indexes etc.

Make it easily available as a setting that is guaranteed to be
present, and given a clear default value if not, instead of requiring
projects to hunt for and handle the 'DOTENV' environment variable.
exit 1
fi

rm -rf "$DIR/var"
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be $PROJECT_DIR?

Also, this can only run from within an active project shell where the virtualenv has been configured. But it will completely delete the virtualenv. You'll need to exit the shell and re-run ./go.sh again to recreate it, steps that I don't think we can automate. For a full reset, there are also other directories that could be removed. bower_components, node_modules, static_root (which includes compiled/compressed assets as well as collected files). Also the database.

That's why I never created a reset script. Too many variables. I figured people can just reset just what they need to reset when they need it.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can also already do SETUP_POSTGRES_FORCE=1 setup-postgres.sh (drop/recreate db from initial_data.sql dump or creds in SRC_* env vars) and SETUP_FORCE=1 setup.sh (remove *.md5 files first). node_modules dir is also already removed when reinstalling. Nothing to delete var, though.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mrmachine Maybe the nuke commands could be printed somewhere obvious when the ./go.sh script runs? So they are available for copy-and-paste, but don't try to automate more than we reasonable can?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -20,6 +20,9 @@

from django.utils.six import text_type

# Store DOTENV from environment as a setting
DOTENV = os.environ.get('DOTENV', 'dotenv-not-set')
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See my commit message around that. It's very useful, and I'm stick of having to look up os.environ['DOTENV'] to set things like ElasticSearch index name

@@ -20,7 +20,7 @@ project_settings_local.py
src/
static_root/
var/
venv
venv/
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was intentional. The virtualenv is stored in the var directory anyway, but I create a symlink to it from venv so VSCode can automatically find it. We could remove this and I cold add venv to my global ignores, instead?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, if it's only there for you @mrmachine better to remove it

Comment on lines +6 to +8
# Safely send real emails; Bandit prevents sending to arbitrary addresses
export BANDIT_EMAIL='[email protected]'
export BANDIT_WHITELIST='interaction.net.au,[email protected]'
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment these out by default? Won't work without SMTP credentials either, which are usually not set in .env.develop.secret.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mrmachine I really want to ensure we have a safe email setup by default. You are right that these settings are pointless without corresponding SMTP settings, but as soon as anyone adds SMPT settings the email hijacking will apply and prevent unintended emails.

If they're commented out, there's even less chance anyone will ever apply these butt-saving settings.

composition:
version: '2'
# Run tests and push built image in parallel
in_parallel:
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Name this step push_and_test_image or something? Step names are unique. Some project might want another parallel step one day (in fact we have another parallel step already further down).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤷 If you want, I don't care about the name

PGUSER: postgres
REDIS_ADDRESS: redis:6379
image: '${{build_image}}'
# Push UNTESTED image to improve caching (not to be used directly)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add "and speed up the pipeline". That's the second and equally (or possibly even more) impactful optimisation (affects every build, not only future builds that can use build cache).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pipeline speed-up is a side-effect of running that push in parallel, so I don't think that point belongs in the comment above just the push step

Comment on lines +5 to +33
##############################################################################
# Django<1.11 compatibility recommendations

# -e git+https://github.com/ixc/ixc-whitenoise.git@9812e7b3caa62a438c9332653c2b297856d6f104#egg=ixc-whitenoise # Compatibilty with older Django
# celery<4.3 # Version 4.3 requires Django>=1.11
# django-appconf<1.0.4 # Version 1.0.4 should work with Django 1.8 but doesn't
# django-celery-beat<1.6 # Version 1.6 requires Django>=1.11.17
# django-celery-email<3 # Version 3.0.0 requires Django>1
# django-celery-results<1.1 # Version 1.1 requires celery>=4.3
# django-compressor<2.2 # Version 2.3 requires Django>1.11, but 2.2 doesn't work
# django-debug-toolbar<1.10 # Version 1.10 requires Django>=1.11
# django-extensions<2.1.1 # Version 2.1.1 requires Django>=1.11
# django-ipware<3 # Version 3 requires Python>=3.5
# django-post-office<3.3 # Version 3.3.0 requires Django>=1.11
# django-redis<4.9 # Version 4.9.0 requires Django>=1.11
# django-storages<1.6.6 # Version 1.6.6 requires Django>=1.11
# django-timezone-field<3.1 # Version 3.1 requires Django>=1.11
# jsonfield<2.1 # Version 2.1 requires Django>=1.11

##############################################################################


##############################################################################
# Use Thumbor for thumbnails (latest versions of IC forks of Thumbor libs)

# -e git+https://github.com/ixc/django-thumbor.git@481cf39536b384369b2bc31da2af2bee34a4c617#egg=django-thumbor
# -e git+https://github.com/ixc/libthumbor.git@d5f44bbd6cd7c19f61f47d941213d1de52209521#egg=libthumbor

##############################################################################
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we put these in an SOT post and link to it from a comment, with links to different Django versions?

Might be more generally discoverable there and useful to anyone upgrading deps, not necessarily as a whole stack/ixc-django-docker upgrade. And I don't think this is relevant to anyone making a new project with the project template (probably using latest versions).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would rather not move them. Here they are present exactly where they can be easily enabled for anyone upgrading old sites (which in theory we are doing?) and version controlled. I'm not going to remember to return to SOT every time I find a tweak to settings like this, whereas I might remember to upstream them to the ixc-django-docker.

I'm in favour of linking from a SOT post to this listing.

jmurty added 4 commits July 8, 2020 12:34
* master:
  Do not match pyenv error string accidentally, which says the required version is NOT installed.
  Fix flipped bool test.
  Actually exit when dependencies are not met.
  Don't specify base image version in comments.
  Remove extra blank line.
  Export `CPATH` so zlib headers can be found from Xcode while building wheels in Catalina.
The `admin_tools` app comes from django-admin-tools which isn't
referenced anywhere else in ixc-django-docker, so this was probably
added to the default URLs by mistake.
For RFDS the site admin is under /rfds-admin/ not /admin/. The new
ADMIN_URL setting makes the admin URL prefix easily configurable in
downstream projects without needing to mess with URL patterns.
* master:
  Add missing `revision` to main clone step.
@jmurty jmurty changed the title Jm suggested tweaks based on rfds upgrade JM's suggested tweaks based on rfds upgrade Jul 8, 2020
This step is redundant in setup.sh because it gets run as part of
the recommended Dockerfile when building an image. Before this change
static files etc would get generated by the Codefresh build, then
again slowly and pointlessly when you run the setup service.

So either this command should be removed altogether from this script,
or maybe be adjusted to run only in a local development context?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants