The official Blender Extensions platform. https://extensions.blender.org
Go to file
Dalai Felinto b7d39288ae Use a stricter semantic version check for some version fields (#225)
This applies to:
* blender_version_min
* blender_version_max
* schema_version

The only field which still takes a full semantic version is the
`version` field itself.

See related discussion:
blender/blender#124885

Reviewed-on: #225
2024-07-23 15:50:53 +02:00
.gitea/issue_template Gitea: update bug report template 2024-07-19 17:13:16 +02:00
abuse Reject rating when an abuse report gets resolved (#223) 2024-07-22 13:42:54 +02:00
access Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
apitokens Profile: Add page titles 2024-05-29 15:59:09 +02:00
assets_shared@493bc70fd4 Fix: Update git submodule assets_shared to v2.0.0-alpha.25 2024-06-19 10:56:14 +02:00
blender_extensions Fix api test broken by caching 2024-07-16 07:27:40 +02:00
common Manifest: support field is not managed by manifest 2024-07-16 12:46:08 +02:00
constants generate_fake_data: more variety 2024-07-14 22:51:51 +02:00
emails Abuse reports: moderator form for resolving/dismissing + notification (#173) 2024-06-07 17:04:52 +02:00
extensions Use a stricter semantic version check for some version fields (#225) 2024-07-23 15:50:53 +02:00
files Use a stricter semantic version check for some version fields (#225) 2024-07-23 15:50:53 +02:00
notifications ensure_followers: check is_following before calling follow 2024-07-19 14:13:46 +02:00
playbooks Deploy: use uwsgi reload instead of restart 2024-07-01 14:24:18 +02:00
public/media Partial Revert "Feat: Add Open Graph image placeholder and improve image_url conditionals" 2024-06-24 15:14:53 +02:00
ratings Reject rating when an abuse report gets resolved (#223) 2024-07-22 13:42:54 +02:00
releases models: simplify VersionStringField 2024-07-12 22:52:17 +02:00
reviewers Multi-platform: support multiple files per version (#201) 2024-07-09 16:27:44 +02:00
stats Stop recording extension view counts 2024-07-17 17:05:31 +02:00
teams Fix teams tests: add missing __init__.py 2024-07-22 13:48:26 +02:00
users Multi-platform: support multiple files per version (#201) 2024-07-09 16:27:44 +02:00
.eslintignore Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
.eslintrc.js Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
.gitignore Git: ignore DS_Store files 2024-05-29 16:01:20 +02:00
.gitmodules UI: Web Assets v2 upgrade (#85) 2024-04-30 17:57:31 +02:00
.pre-commit-config.yaml Revert "Run API schema update as part of the pre-commit hook" 2024-02-20 19:25:56 +01:00
AUTHORS Add license and authors 2024-06-03 17:17:43 +02:00
deploy.sh Make deploy.sh support extra arguments --check --diff 2024-02-29 18:14:52 +01:00
LICENSE Add license and authors 2024-06-03 17:17:43 +02:00
logo-source.svg Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
manage.py Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
pyproject.toml Initial models, tests and other boilerplate 2022-08-25 17:37:48 +02:00
README.md Docs: point to deploy section of playbooks 2024-06-18 18:27:00 +02:00
requirements_dev.txt Revert "Deps: install faker and factory in prod too (used in the admin)" 2024-05-02 14:18:08 +02:00
requirements_prod.txt Replace gunicorn with uwsgi, use persistent db connections (#90) 2024-04-25 15:11:07 +02:00
requirements.txt File scanning: validate wheel digests against pypi.org (#199) 2024-07-11 10:45:22 +02:00
setup.cfg PEP: flake8 no longer supports inline comments in setup.cfg 2024-04-04 12:04:44 +02:00
utils.py Basic email template for notifications (#96) 2024-05-02 14:04:22 +02:00

Blender Extensions

Free and open source add-ons and themes for Blender.

Requirements

  • Python 3.10
  • libmagic: sudo apt-get install libmagic1 in Debian/Ubuntu, brew install libmagic on OSX.

Development

Extra requirements

  • virtualenv

Setup

Checkout Blender Web Assets submodule first:

git submodule update --init --recursive

Create and activate a virtual environment using your favourite method, e.g.

virtualenv .venv -p python
source .venv/bin/activate

Install required packages:

pip install -r requirements_dev.txt

Create the database tables and load some basic data to work with using the following commands:

./manage.py migrate
./manage.py loaddata **/fixtures/*.json

It's also possible to generate fake add-on data using the following command:

./manage.py generate_fake_data

Run development server

./manage.py runserver 8111

Update /etc/hosts to point to extensions.local, e.g.:

127.0.0.1	extensions.local

Now http://extensions.local:8111 should be ready to work with and it should be possible to log into http://extensions.local:8111/admin/ with admin/admin.

Blender ID

Blender Extensions, as all other Blender web services, uses Blender ID. Blender Extensions can also receive Blender ID account modifications such as badge updates via a webhook.

For development, Blender ID's code contains a fixture with an OAuth app and a webhook 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_extensions_devserver

N.B.: the webhook view delegates the actual updating of the user profile to a background task, so in order to see the updates locally, start the processing of tasks using the following:

./manage.py process_tasks

Blender ID and staging/production

For staging/production, create an OAuth2 application in Blender ID using Admin Blender-ID OAuth2 applications -> Add:

  • Redirect URIs: https://staging.extensions.blender.org/oauth/authorized (https://extensions.blender.org for production);
  • Client type: "Confidential";
  • Authorization grant type: "Authorization code";
  • Name: "Blender Extensions Staging" (or "Blender Extensions" for production);

Copy client ID and secret and save them as BID_OAUTH_CLIENT and BID_OAUTH_SECRET into a .env file:

export BID_OAUTH_CLIENT=<CLIENT ID HERE>
export BID_OAUTH_SECRET=<SECRET HERE>

Create a webhook using Admin Blender-ID API Webhooks > Add:

  • Name: "Blender Extensions Staging" (or "Blender Extensions" for production)";
  • URL: https://staging.extensions.blender.org/webhooks/user-modified/ (or https://extensions.blender.org/webhooks/user-modified/ for production);
  • App: choose the app created in the previous step;

Copy webhook's secret into the .env file as BID_WEBHOOK_USER_MODIFIED_SECRET:

export BID_WEBHOOK_USER_MODIFIED_SECRET=<WEBHOOK SECRET HERE>

Pre-commit hooks

Make sure to enable pre-commit hooks after installing requirements from requirements_dev.txt:

pre-commit install

This will enable formatting pre-commit checks for Django templates, Python and JS modules.

Testing

To simply run the test suit use

./manage.py test

To run tests and generate a coverage report use

coverage run manage.py test && coverage html

and then open htmlcov/index.html with your favourite browser.

Deploy

See playbooks.

Feature Flags

At the moment there are the following feature flags:

  • is_alpha
  • is_beta

To create them run

./manage.py waffle_switch --create is_alpha on

./manage.py waffle_switch --create is_beta off

They can optionally be setup on the deployment platform to set the release stage of the site. These settings will be removed once the site is officially launched.

License and Copyright

The platform source code is available under the GPLv3 or later. Early versions of the platform are inspired by Mozilla Addons Server. List of authors is available in the AUTHORS file.