139 lines
3.9 KiB
Markdown
139 lines
3.9 KiB
Markdown
---
|
|
gitea: none
|
|
include_toc: true
|
|
---
|
|
|
|
# Blender Development Fund
|
|
|
|
# Development
|
|
|
|
## Requirements
|
|
|
|
* Python 3.10
|
|
* [virtualenv](https://pypi.org/project/virtualenv/)
|
|
* [PostgreSQL](https://www.postgresql.org/download/)
|
|
|
|
Recommended for local development:
|
|
|
|
* [virtualenvwrapper](https://pypi.org/project/virtualenvwrapper/)
|
|
|
|
`virtualenvwrapper` adds commands for naming, creating, listing, activating and deactivating
|
|
Python `virtualenv`s, which makes it much easier to work on various Python projects.
|
|
|
|
If you prefer not to use it, any other way of creating a `virtualenv`
|
|
or [venv](https://docs.python.org/3.10/library/venv.html) will do.
|
|
|
|
## Database setup
|
|
|
|
To create a new Blender Development Fund database, run this as the PostgreSQL root user:
|
|
|
|
CREATE USER blender_fund CREATEDB PASSWORD 'blender_fund';
|
|
CREATE DATABASE blender_fund OWNER blender_fund;
|
|
CREATE SCHEMA blender_fund;
|
|
GRANT ALL ON schema blender_fund TO blender_fund;
|
|
|
|
Password can be changed using the following:
|
|
|
|
ALTER ROLE blender_fund WITH PASSWORD 'new_password';
|
|
|
|
In case of production, make sure that `blender_id` user has a good hard to guess password.
|
|
|
|
## Development server setup
|
|
|
|
Make a copy of example `.env`:
|
|
|
|
cp .env.example .env
|
|
|
|
Initialise the submodule included into this repo:
|
|
|
|
git submodule update --init
|
|
|
|
|
|
While inside project's directory, run the following to install project dependencies.
|
|
Note that path to `python3.10` binary might differ in your OS,
|
|
adjust the `mkvirtualenv` command accordingly:
|
|
|
|
```
|
|
mkvirtualenv fund -a `pwd` -p /usr/bin/python3.10
|
|
pip install -r requirements_dev.txt
|
|
./manage.py migrate
|
|
./manage.py loaddata systemuser devfund default_site
|
|
./manage.py collectmedia --noinput
|
|
./manage.py runserver 8010
|
|
./manage.py createsuperuser
|
|
```
|
|
|
|
The last command creates an admin account that can be used to log in at http://fund.local:8010/admin/.
|
|
|
|
### Working with `virtualenvwrapper`
|
|
|
|
In addition to `mkvirtualenv` mentioned above, the following commands are useful:
|
|
|
|
* use `workon fund` to go to Fund's project directory and activate its `virtualenv`;
|
|
* use `deactivate` to "exit" it;
|
|
* use `lsvirtualenv` to list existing `virtualenv`s;
|
|
* use `rmvirtualenv fund` to delete Fund's `virtualenv`.
|
|
|
|
### Blender ID
|
|
|
|
Blender DevFund, as all other Blender web services, uses Blender ID.
|
|
|
|
For development, Blender ID's code contains a fixture with an OAuth app
|
|
that should work without any changes to default configuration.
|
|
To load this fixture, go to your development Blender ID and run the following:
|
|
|
|
./manage.py loaddata blender_development_fund_devserver
|
|
|
|
## CMS
|
|
|
|
We use [Wagtail](https://wagtail.io/) as CMS for providing access to dynamic content of the website,
|
|
such as page titles, calls to action, or entire pages. The CMS is accessible at the `/cms` endpoint.
|
|
|
|
Note: we are currently using a development version of Wagtail, therefore we need to build the
|
|
static assets for the package ourselves. Check the warning in the startup log for more info on
|
|
how to do it.
|
|
|
|
## Stripe integration
|
|
|
|
TODO improve this section.
|
|
|
|
Follow the official guide for setting up Stripe CLI: https://stripe.com/docs/development/quickstart
|
|
|
|
### Webhook testing
|
|
|
|
Run a local listener that will make webhook requests to your development server:
|
|
```
|
|
stripe listen --forward-to fund.local:8010/webhooks/stripe/
|
|
```
|
|
|
|
Run background tasks that are created by the webhook code:
|
|
```
|
|
./manage.py process_tasks
|
|
```
|
|
|
|
## Documentation
|
|
|
|
```
|
|
cd docs
|
|
mkdocs serve -a localhost:8080
|
|
```
|
|
|
|
|
|
## Testing
|
|
|
|
Run `./manage.py test --parallel` to run all project's tests.
|
|
|
|
Use the `--reuse-db` option to speed up subsequent test runs.
|
|
However, this skips the database migrations; add `--create-db` on the CLI to
|
|
recreate the test database and run all the migrations when necessary.
|
|
|
|
|
|
## GeoIP
|
|
|
|
The GeoIP database was downloaded from
|
|
[GeoLite2-Country](http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz)
|
|
|
|
# Deploy
|
|
|
|
See [playbooks](playbooks#deploy).
|