Initial commit
This commit is contained in:
commit
39d3f304e5
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
dist
|
||||||
|
*.egg-info
|
||||||
|
build
|
||||||
|
__pycache__
|
30
.gitlab-ci.yml
Normal file
30
.gitlab-ci.yml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
image: python:3.6
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- test
|
||||||
|
- release
|
||||||
|
|
||||||
|
test:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- echo 'Make your tests here !'
|
||||||
|
except:
|
||||||
|
- master
|
||||||
|
tags:
|
||||||
|
- sib
|
||||||
|
|
||||||
|
publish:
|
||||||
|
stage: release
|
||||||
|
before_script:
|
||||||
|
- git config user.name "${GITLAB_USER_NAME}"
|
||||||
|
- git config user.email "${GITLAB_USER_EMAIL}"
|
||||||
|
- git remote set-url origin "https://gitlab-ci-token:${GL_TOKEN}@git.happy-dev.fr/${CI_PROJECT_PATH}.git"
|
||||||
|
- pip install git+https://github.com/plup/python-semantic-release
|
||||||
|
- pip install sib-commit-parser
|
||||||
|
script:
|
||||||
|
- semantic-release publish
|
||||||
|
only:
|
||||||
|
- do_not_publish
|
||||||
|
tags:
|
||||||
|
- sib
|
66
README.md
Normal file
66
README.md
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
# Django LDP example
|
||||||
|
|
||||||
|
## Step by step quickstart
|
||||||
|
|
||||||
|
1. Installation
|
||||||
|
- `git clone git@git.happy-dev.fr:startinblox/djangoldp-packages/djangoldp-example.git /path/to/myawesomepackage`
|
||||||
|
- `git remote set-url origin the_repository_url`
|
||||||
|
- rename djangoldp_example directory to djangoldp_myawesomepackage
|
||||||
|
|
||||||
|
NB:
|
||||||
|
- replace /path/to/myawesomepackage with the local path of your package.
|
||||||
|
- replace the_repository_url with the git url of your package (example: git@git.happy-dev.fr:startinblox/djangoldp-packages/djangoldp-example.git).
|
||||||
|
- replace djangoldp_myawesomepackage with your package name. Please respect the naming convention (singular word, starting by `djangoldp_`)
|
||||||
|
|
||||||
|
2. Developpement environnement
|
||||||
|
|
||||||
|
In order to test and developp your package, you need to put the package src directory at the same level of a working django ldp app. By exemple, you can clone the sib app data server
|
||||||
|
`git clone git@git.happy-dev.fr:startinblox/applications/sib-app-data-server.git server /path/to/app`
|
||||||
|
|
||||||
|
- The classical way :
|
||||||
|
`ln -s /path/to/myawesomepackage/djangoldp_myawesomepackage /path/to/app/djangoldp_myawesomepackage`
|
||||||
|
|
||||||
|
- The docker way : in the *volumes* section, add a line in docker-compose.override.yml. Example
|
||||||
|
```
|
||||||
|
volumes:
|
||||||
|
- ./:/app
|
||||||
|
- /path/to/myawesomepackage/djangoldp_myawesomepackage:/app/djangoldp_myawesomepackage
|
||||||
|
```
|
||||||
|
|
||||||
|
Add your package in settings.py of the app. Now, you can test if your package is imported propefully by doing a
|
||||||
|
`python manage.py shell` then
|
||||||
|
from djangoldp_myawesomepackage.models import ExampleModel
|
||||||
|
|
||||||
|
If, no error, it's working.
|
||||||
|
|
||||||
|
3. Customization
|
||||||
|
- `setup.cfg` : please, fill the name, version, url, author_email, description
|
||||||
|
- `djangoldp_example/__init__.py`: fill the name, don't touch the version number !
|
||||||
|
- everything under the djangoldp_example is part of your package, you probably would replace "example" by your package name.
|
||||||
|
|
||||||
|
4. Push on the repository you've created
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
### CICD
|
||||||
|
When you're ready to publish your app :
|
||||||
|
1. Add the `sib-deploy` user as a `maintainer` to the project (`Settings > Members`)
|
||||||
|
|
||||||
|
2. Configure `pipeline strategy` to `clone` (`Settings > CI/CD > Pipelines`)
|
||||||
|
|
||||||
|
3. Protect the `master` branch allowing only `maintainers` to push (`Settings > Repository > Protected branches`)
|
||||||
|
|
||||||
|
4. Configure CI/CD variables to authenticate on pypi.org:
|
||||||
|
|
||||||
|
Variable | Value | Protection
|
||||||
|
----------------|--------------------|-----------
|
||||||
|
`GL_TOKEN` | `sib-deploy-token` | protected
|
||||||
|
`PYPI_PASSWORD` | `pypi-password` | protected
|
||||||
|
`PYPI_USERNAME` | startinblox | protected
|
||||||
|
|
||||||
|
5. Replace the "do_not_publish" by "master" in the .gitlab-ci.yml
|
||||||
|
|
||||||
|
### Factories
|
||||||
|
If you dont need factory, you can remove the mock_example command, the factories files and the extras_require section in setup.cfg
|
||||||
|
|
||||||
|
Provide a factory is a good pratice in order to simplify the mocking of data on a server / in a test pipeline.
|
2
djangoldp_example/__init__.py
Normal file
2
djangoldp_example/__init__.py
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
__version__ = '0.0.0'
|
||||||
|
name = "djangoldp_example"
|
4
djangoldp_example/admin.py
Normal file
4
djangoldp_example/admin.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
from django.contrib import admin
|
||||||
|
from .models import ExampleModel
|
||||||
|
|
||||||
|
admin.site.register(ExampleModel)
|
4
djangoldp_example/apps.py
Normal file
4
djangoldp_example/apps.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
class DjangoldpExampleConfig(AppConfig):
|
||||||
|
name = 'djangoldp_example'
|
12
djangoldp_example/factories.py
Normal file
12
djangoldp_example/factories.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import factory
|
||||||
|
import hashlib
|
||||||
|
from .models import ExampleModel
|
||||||
|
from django.db.models.signals import post_save
|
||||||
|
|
||||||
|
@factory.django.mute_signals(post_save)
|
||||||
|
class ExampleFactory(factory.django.DjangoModelFactory):
|
||||||
|
class Meta:
|
||||||
|
model = ExampleModel
|
||||||
|
|
||||||
|
# Please refer to Factory boy documentation
|
||||||
|
# https://factoryboy.readthedocs.io
|
0
djangoldp_example/management/__init__.py
Normal file
0
djangoldp_example/management/__init__.py
Normal file
0
djangoldp_example/management/commands/__init__.py
Normal file
0
djangoldp_example/management/commands/__init__.py
Normal file
12
djangoldp_example/management/commands/mock_example.py
Normal file
12
djangoldp_example/management/commands/mock_example.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
from djangoldp_example.factories import ExampleFactory
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'Mock data'
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument('--size', type=int, default=0, help='Number of example to create')
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
ExampleFactory.create_batch(options['size'], thread=thread)
|
||||||
|
self.stdout.write(self.style.SUCCESS('Successful data mock install'))
|
0
djangoldp_example/migrations/__init__.py
Normal file
0
djangoldp_example/migrations/__init__.py
Normal file
4
djangoldp_example/models.py
Normal file
4
djangoldp_example/models.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
from django.db import models
|
||||||
|
|
||||||
|
class ExampleModel(models.Model):
|
||||||
|
# Please refer to Django documentation
|
9
djangoldp_example/urls.py
Normal file
9
djangoldp_example/urls.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
"""djangoldp project URL Configuration"""
|
||||||
|
from django.conf.urls import url
|
||||||
|
from djangoldp.views import LDPViewSet
|
||||||
|
|
||||||
|
from .models import ExampleModel
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
url(r'^examples/', LDPViewSet.urls(model=ExampleModel)),
|
||||||
|
]
|
22
setup.cfg
Normal file
22
setup.cfg
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
[metadata]
|
||||||
|
name = djangoldp_example
|
||||||
|
version = attr: djangoldp_example.__version__
|
||||||
|
url = http://git.happy-dev.fr/startinblox/djangoldp_example
|
||||||
|
author = Startin'blox
|
||||||
|
author_email = nicolas@happy-dev.fr
|
||||||
|
description = djangoldp example package
|
||||||
|
license = MIT
|
||||||
|
|
||||||
|
[options]
|
||||||
|
packages = find:
|
||||||
|
install_requires =
|
||||||
|
djangoldp~=0.5
|
||||||
|
|
||||||
|
[options.extras_require]
|
||||||
|
dev =
|
||||||
|
factory_boy>=2.11.0
|
||||||
|
|
||||||
|
[semantic_release]
|
||||||
|
version_source = tag
|
||||||
|
version_variable = djangoldp_example/__init__.py:__version__
|
||||||
|
commit_parser = commit_parser.parse
|
Reference in New Issue
Block a user