Skip to content

Instantly share code, notes, and snippets.

@portedison
Last active October 7, 2022 03:59
Show Gist options
  • Save portedison/02715447449217df36cc195ef253fe23 to your computer and use it in GitHub Desktop.
Save portedison/02715447449217df36cc195ef253fe23 to your computer and use it in GitHub Desktop.
# !/bin/bash
PROJECT_NAME="$1"
TEMPLATE_DIR="$2"
ADDITIONAL_FILES="$3"
if [ "$PROJECT_NAME" = "" ]; then
echo "You must supply a project name."
exit 1
fi
if [ -d $PROJECT_NAME ]; then
echo "$PROJECT_NAME already exists!"
exit 2
fi
if [ "$TEMPLATE_DIR" = "" ] || [ ! -d "$TEMPLATE_DIR" ]; then
echo "You must supply a local template directory."
exit 3
fi
echo "Creating project directory"
mkdir $PROJECT_NAME
mkdir $PROJECT_NAME/backend
cd $PROJECT_NAME
git init
echo "Creating backend"
cd backend
echo "Creating virtual environment"
pew new $PROJECT_NAME -d
pew in $PROJECT_NAME pip install Django --no-cache-dir
pew in $PROJECT_NAME pip install pip-tools
echo "Calling startproject with template"
if [ "$ADDITIONAL_FILES" = "" ]; then
pew in $PROJECT_NAME django-admin startproject --template=$TEMPLATE_DIR/backend --extension=py,json --name=README.md,secrets/.sentryclirc,secrets/basic_auth.txt,secrets/env/django $PROJECT_NAME ${PWD}
else
pew in $PROJECT_NAME django-admin startproject --template=$TEMPLATE_DIR/backend --extension=py,json --name=README.md,secrets/.sentryclirc,secrets/basic_auth,txt,secrets/env/django,$ADDITIONAL_FILES $PROJECT_NAME ${PWD}
fi
# install default requirements
echo "Installing default requirements"
pew in $PROJECT_NAME pew add src
# Generate requirements.txt files from requirements.in files
pew in $PROJECT_NAME pip-compile --output-file requirements.txt requirements.in
pew in $PROJECT_NAME pip-compile --output-file dev-requirements.txt dev-requirements.in
pew in $PROJECT_NAME pip install -r requirements.txt
pew in $PROJECT_NAME pip install -r dev-requirements.txt
chmod a+x ./manage.py
mv src/PROJECT_NAME src/$PROJECT_NAME
# Create local settings file
echo "Writing local settings"
cat <<EOF > src/project/settings/prod/local.py
# -*- coding: utf-8 -*-
from .prod_local import * # noqa
from ..piet_local import * # noqa
EOF
cd ..
echo "Creating frontend"
cp -R $TEMPLATE_DIR/frontend ./
cd frontend
sed -i '' "s/project_name/${PROJECT_NAME}/g" package.json
export NVM_DIR=$HOME/.nvm;
source $NVM_DIR/nvm.sh;
#nvm use; node --version
nvm install --lts
nvm use --lts
nvm version > .nvmrc
nvm use; yarn add react react-dom next
nvm use; yarn add js-cookie @moxy/next-router-scroll @moxy/react-page-swapper @sentry/nextjs date-fns lodash.throttle gsap react-modal react-transition-group sharp typogr video.js
nvm use; yarn add --dev typescript @svgr/webpack @types/lodash.throttle @types/moxy__next-router-scroll @types/react-modal @types/video.js sass typescript-plugin-css-modules @types/react-transition-group @types/gsap
mv ./.env.development.local.example ./.env.development.local
ln -s ../secrets/env/node ./.env.production.local
ln -s ../secrets/.sentryclirc ./.sentryclirc
# Reset to project root directory
cd ..
echo "Copying across misc files"
cp $TEMPLATE_DIR/.gitattributes ./
cp $TEMPLATE_DIR/.gitignore ./
cp $TEMPLATE_DIR/fabfile.py ./
cp -R $TEMPLATE_DIR/secrets ./
cp -R $TEMPLATE_DIR/provisioning ./
# Do this last
pew in $PROJECT_NAME pew setproject
echo
echo "===="
echo "Your new project is set up in ${PWD}"
echo "Type 'pew workon ${PROJECT_NAME}' to work on this project."
echo "Manually - find/replace {{ project_name }} in text editor"
echo " - create secret_key"
echo "===="
echo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment