Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca5721e8a6 | ||
|
|
fbc1baa5e2 | ||
|
|
1d03de2913 | ||
|
|
b44b2fbfef | ||
|
|
c7509ed82d | ||
|
|
34eece39b5 | ||
|
|
b648e4bae8 | ||
|
|
85787e4bf3 | ||
|
|
2f1f96a687 | ||
|
|
cf8d7ec529 | ||
|
|
2ad402103a | ||
|
|
d5959263c2 | ||
|
|
aafd276b58 | ||
|
|
beb75a8c67 | ||
|
|
9768bd55ff | ||
|
|
c5db013aa1 | ||
|
|
d5106fa602 | ||
|
|
c65ac9d321 | ||
|
|
9af5deb792 | ||
|
|
fce14edfae | ||
|
|
c308682719 | ||
|
|
c39e26416d | ||
|
|
051257f51b | ||
|
|
5d00bc5beb | ||
|
|
1cfe85607c | ||
|
|
991e1fca02 | ||
|
|
23b97f7510 | ||
|
|
8f918a6a79 | ||
|
|
3523da3a70 | ||
|
|
76e0def34a | ||
|
|
de8a7fdffd | ||
|
|
d141688393 | ||
|
|
d9f4ddf85a | ||
|
|
f211658cae | ||
|
|
7412f3a5f7 | ||
|
|
25852a99e3 | ||
|
|
47ec45eb49 | ||
|
|
9ca380e89d | ||
|
|
71eed5a472 | ||
|
|
98ca09dadc | ||
|
|
5f2ce8abb7 | ||
|
|
5849673a11 | ||
|
|
8ee89dab45 | ||
|
|
8523da63c7 | ||
|
|
b6c899534c | ||
|
|
08b121f9f1 | ||
|
|
363a3ec118 | ||
|
|
90d5990f56 | ||
|
|
6dc3902479 | ||
|
|
b68cdabb99 | ||
|
|
118806be07 | ||
|
|
d912ba9e37 | ||
|
|
d8a6b6801b | ||
|
|
0dee2bb8c6 | ||
|
|
5bbd512828 | ||
|
|
fb1b8e89ae | ||
|
|
539d9303b5 | ||
|
|
07b6c8123f | ||
|
|
fbf8b7841a | ||
|
|
2b652af465 | ||
|
|
340aff3536 | ||
|
|
73b3bc4ca8 | ||
|
|
cebd4646b9 | ||
|
|
694dcb3cc7 | ||
|
|
5ec7bd1021 | ||
|
|
3e4f86379b | ||
|
|
5efd6ae12e | ||
|
|
dfd639d85c | ||
|
|
5f5418f934 | ||
|
|
696225a26f | ||
|
|
5ace7965c4 | ||
|
|
1f6baf1e08 | ||
|
|
57a89f682f |
@@ -18,3 +18,4 @@ venv
|
|||||||
.travis.yml
|
.travis.yml
|
||||||
.gitignore
|
.gitignore
|
||||||
.dockerignore
|
.dockerignore
|
||||||
|
requirements.txt
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
DJANGO_SETTINGS_MODULE=django_project.settings
|
||||||
|
SECRET_KEY=secret
|
||||||
|
FTP_URL=0.0.0.0:21
|
||||||
|
POSTGRES_NAME=website
|
||||||
|
POSTGRESQL_USER=root
|
||||||
|
POSTGRES_PASSWORD=password
|
||||||
|
POSTGRES_HOST=postgres
|
||||||
|
POSTGRES_PORT=5432
|
||||||
|
REDIS_URL=redis:6379
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
|
liberapay: marcpartensky
|
||||||
patreon: marcpartensky
|
patreon: marcpartensky
|
||||||
github: marcpartensky
|
github: marcpartensky
|
||||||
custom:
|
custom:
|
||||||
# - monero:43J2XmRtjDPRLD35UsYGH2AZamFBQz7dt4VdvZXVm3SuadTrvcoXUXBRUNHqukFte23Q5TWXqhbwaLJJgoVQzzbe2AJDANQ
|
# - monero:43J2XmRtjDPRLD35UsYGH2AZamFBQz7dt4VdvZXVm3SuadTrvcoXUXBRUNHqukFte23Q5TWXqhbwaLJJgoVQzzbe2AJDANQ
|
||||||
- https://paypal.me/marcpartensky
|
- https://paypal.me/marcpartensky
|
||||||
|
- https://buymeacoffee.com/marcpartensky
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- "*"
|
- "*"
|
||||||
|
- "!master"
|
||||||
# Publish `v1.2.3` tags as releases.
|
# Publish `v1.2.3` tags as releases.
|
||||||
tags:
|
tags:
|
||||||
- v*
|
- v*
|
||||||
@@ -32,16 +33,13 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Build and push Docker images
|
- name: Build docker image
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: false
|
push: false
|
||||||
tags: marcpartensky/website:latest
|
tags: marcpartensky/website:latest
|
||||||
cache-from: type=local,src=/tmp/.buildx-cache
|
# cache-from: type=local,src=/tmp/buildx
|
||||||
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
|
# cache-to: type=local,dest=/tmp/buildx
|
||||||
|
cache-from: type=gha
|
||||||
- name: Move cache
|
cache-to: type=gha
|
||||||
run: |
|
|
||||||
rm -rf /tmp/.buildx-cache
|
|
||||||
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
|
|
||||||
|
|||||||
@@ -15,43 +15,54 @@ env:
|
|||||||
IMAGE_NAME: website
|
IMAGE_NAME: website
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build-and-push:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Install make
|
|
||||||
run: sudo apt install make -y
|
- name: Build the tag
|
||||||
- name: Install Python3.7
|
id: tag
|
||||||
uses: actions/setup-python@v1
|
run: echo "::set-output name=tag::$(git rev-parse --short HEAD).$(date +'%Y-%m-%d')"
|
||||||
with:
|
|
||||||
python-version: 3.7
|
|
||||||
architecture: x64
|
|
||||||
- name: make init
|
|
||||||
run: make init
|
|
||||||
- name: make update
|
|
||||||
run: make update
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v1
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v2
|
||||||
- name: Build and push
|
|
||||||
id: build
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
push: false
|
|
||||||
tags: marcpartensky/website:latest
|
|
||||||
- name: Compose up
|
|
||||||
run: docker-compose -f dev.yml up -d website postgres mysql
|
|
||||||
- name: Test
|
|
||||||
run: docker-compose run test
|
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v2
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
- name: Build and push
|
|
||||||
id: push
|
- name: Build and push Docker images
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
tags: marcpartensky/website:latest
|
||||||
|
|
||||||
|
- name: Build and push Docker images
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v2
|
||||||
with:
|
with:
|
||||||
|
context: .
|
||||||
push: true
|
push: true
|
||||||
tags: marcpartensky/website:latest
|
tags: marcpartensky/website:v${{ github.run_number }}.${{ steps.tag.outputs.tag }}
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- build-and-push
|
||||||
|
steps:
|
||||||
|
- name: executing remote ssh commands using password
|
||||||
|
uses: appleboy/ssh-action@v1.0.0
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.HOST }}
|
||||||
|
username: ${{ secrets.USERNAME }}
|
||||||
|
key: ${{ secrets.KEY }}
|
||||||
|
port: ${{ secrets.PORT }}
|
||||||
|
script: |
|
||||||
|
cd ~/git/docker/services
|
||||||
|
docker compose -f website.yml pull
|
||||||
|
docker compose -f website.yml up -d
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
3.9
|
||||||
@@ -1,44 +1,79 @@
|
|||||||
FROM marcpartensky/paru:latest as builder
|
FROM python:3.9-alpine as builder
|
||||||
RUN paru -Syyyu --noconfirm python-pipenv npm make
|
|
||||||
USER root
|
# Pre installations
|
||||||
COPY . /opt/website
|
RUN apk update
|
||||||
|
RUN apk add --update --virtual .tmp libffi-dev build-base linux-headers
|
||||||
|
RUN apk add curl jpeg-dev zlib-dev npm
|
||||||
|
RUN pip install poetry
|
||||||
|
|
||||||
|
# Copy useful files
|
||||||
WORKDIR /opt/website
|
WORKDIR /opt/website
|
||||||
RUN pipenv update
|
COPY pyproject.toml poetry.lock package.json package-lock.json ./
|
||||||
RUN pipenv run ./manage.py collectstatic --noinput
|
|
||||||
RUN npm install -g npm@latest
|
# Run updates
|
||||||
|
# RUN poetry update
|
||||||
|
RUN poetry export -f requirements.txt --without-hashes --output requirements.txt
|
||||||
|
RUN npm update
|
||||||
RUN npm install
|
RUN npm install
|
||||||
|
|
||||||
FROM marcpartensky/paru:latest
|
# Image of production
|
||||||
LABEL maintainer="marc.partensky@gmail.com"
|
FROM python:3.9-alpine
|
||||||
LABEL image="https://hub.docker.com/r/marcpartensky/website"
|
# FROM alpine
|
||||||
LABEL source="https://github.com/marcpartensky/website"
|
ENV SECRET_KEY=whatever
|
||||||
LABEL link="https://marcpartensky.com"
|
|
||||||
RUN paru -Syyyu --noconfirm python npm
|
|
||||||
# ARG timestamp
|
# ARG timestamp
|
||||||
# ARG commit
|
# ARG commit
|
||||||
# LABEL build.timestamp=timestamp
|
# LABEL build.timestamp=timestamp
|
||||||
# LABEL build.commit=commit
|
# LABEL build.commit=commit
|
||||||
|
|
||||||
COPY --from=builder /app /app
|
# Labels
|
||||||
WORKDIR /app
|
LABEL maintainer="marc.partensky@gmail.com"
|
||||||
|
LABEL image="https://hub.docker.com/r/marcpartensky/website"
|
||||||
|
LABEL source="https://github.com/marcpartensky/website"
|
||||||
|
LABEL website="https://marcpartensky.com"
|
||||||
|
|
||||||
|
# Install curl and stuff for pillow
|
||||||
|
RUN apk update
|
||||||
|
RUN apk add --update --virtual .tmp libffi-dev build-base linux-headers
|
||||||
|
RUN apk add python3 curl jpeg-dev zlib-dev py3-pip nodejs
|
||||||
|
RUN apk add shadow
|
||||||
|
|
||||||
|
# Setup home user website
|
||||||
|
RUN useradd -m website
|
||||||
|
USER website
|
||||||
|
|
||||||
|
# Copy useful files
|
||||||
|
WORKDIR /home/website
|
||||||
|
COPY --chown=website website ./website
|
||||||
|
COPY --chown=website --from=builder /opt/website/requirements.txt ./
|
||||||
|
COPY LICENSE ./
|
||||||
|
|
||||||
# No .pyo and easier debugging
|
# No .pyo and easier debugging
|
||||||
ENV PYTHONDONTWRITEBYTECODE 1
|
ENV PYTHONDONTWRITEBYTECODE 1
|
||||||
ENV PYTHONUNBUFFERED 1
|
ENV PYTHONUNBUFFERED 1
|
||||||
|
|
||||||
RUN pip install -U pip
|
# Install dependencies
|
||||||
|
# RUN pip install -U pip
|
||||||
RUN pip install -r requirements.txt
|
RUN pip install -r requirements.txt
|
||||||
|
RUN ./website/manage.py makemigrations
|
||||||
|
RUN ./website/manage.py collectstatic --noinput
|
||||||
|
|
||||||
|
USER root
|
||||||
|
RUN apk del .tmp
|
||||||
|
USER website
|
||||||
|
|
||||||
|
# Setup env vars for entrypoint.sh
|
||||||
ENV PORT 80
|
ENV PORT 80
|
||||||
ENV HOST 0.0.0.0
|
ENV HOST 0.0.0.0
|
||||||
|
ENV PATH="${PATH}:/home/website/.local/bin"
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
# EXPOSE 443
|
|
||||||
|
|
||||||
|
# Check health
|
||||||
HEALTHCHECK --interval=30s \
|
HEALTHCHECK --interval=30s \
|
||||||
--timeout=10s \
|
--timeout=10s \
|
||||||
--start-period=1m \
|
--start-period=1m \
|
||||||
--retries=3 \
|
--retries=3 \
|
||||||
CMD curl -sSf http://127.0.0.1:$PORT/live || exit 1
|
CMD curl -sSf http://localhost:$PORT/live || exit 1
|
||||||
|
|
||||||
ENTRYPOINT ["/app/entrypoint.sh"]
|
WORKDIR /home/website/website
|
||||||
|
ENTRYPOINT ["./entrypoint.sh"]
|
||||||
# ENTRYPOINT ["daphne", "-e", "ssl:443:privateKey=$KEY:certKey=$CERT", "django_project.asgi:application"]
|
# ENTRYPOINT ["daphne", "-e", "ssl:443:privateKey=$KEY:certKey=$CERT", "django_project.asgi:application"]
|
||||||
|
|||||||
@@ -5,26 +5,23 @@ PRODUCTION=false
|
|||||||
.PHONY: start list build push setup update init test up down migrate brewstart brewstop dev prod clean deploy
|
.PHONY: start list build push setup update init test up down migrate brewstart brewstop dev prod clean deploy
|
||||||
|
|
||||||
start:
|
start:
|
||||||
pipenv run ./entrypoint.sh --nosetup
|
poetry run ./website/entrypoint.sh --nosetup
|
||||||
list:
|
list:
|
||||||
@LC_ALL=C $(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
|
@LC_ALL=C $(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
|
||||||
build: update
|
build:
|
||||||
docker-compose -f dev.yml build website
|
docker-compose -f dev.yml build website
|
||||||
push: build
|
push: build
|
||||||
git pushall
|
|
||||||
docker-compose -f dev.yml push website
|
docker-compose -f dev.yml push website
|
||||||
setup: init update start
|
setup: init update start
|
||||||
update:
|
update:
|
||||||
npm update
|
npm update
|
||||||
npm audit fix || echo npm audit fix failed
|
npm audit fix || echo npm audit fix failed
|
||||||
# pipenv lock --pre --clear
|
poetry export -o requirements.txt
|
||||||
pipenv update
|
SECRET_KEY=secret poetry run ./website/manage.py collectstatic --noinput
|
||||||
pipenv lock -r > requirements.txt
|
SECRET_KEY=secret poetry run ./website/manage.py makemigrations
|
||||||
SECRET_KEY=secret pipenv run ./manage.py collectstatic --noinput
|
|
||||||
SECRET_KEY=secret pipenv run ./manage.py makemigrations
|
|
||||||
init: .env
|
init: .env
|
||||||
pip install --user pipenv
|
pip install --user poetry
|
||||||
pipenv install --dev
|
poetry install --dev
|
||||||
npm install --save
|
npm install --save
|
||||||
test:
|
test:
|
||||||
pipenv run ./manage.py test
|
pipenv run ./manage.py test
|
||||||
@@ -33,7 +30,7 @@ runtest:
|
|||||||
make test
|
make test
|
||||||
make kill
|
make kill
|
||||||
kill:
|
kill:
|
||||||
pipenv run ./entrypoint.sh kill
|
pipenv run ./website/entrypoint.sh kill
|
||||||
up: init
|
up: init
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
down:
|
down:
|
||||||
|
|||||||
@@ -4,161 +4,82 @@ verify_ssl = true
|
|||||||
name = "pypi"
|
name = "pypi"
|
||||||
|
|
||||||
[packages]
|
[packages]
|
||||||
aioredis = "*"
|
ansicon = "==1.89.0"
|
||||||
appdirs = "*"
|
arrow = "==1.2.2"
|
||||||
appnope = "*"
|
asgiref = "==3.5.2"
|
||||||
arrow = "*"
|
attrs = "==21.4.0"
|
||||||
asgiref = "*"
|
autobahn = "==22.4.2"
|
||||||
astroid = "*"
|
blessed = "==1.19.1"
|
||||||
async-timeout = "*"
|
certifi = "==2022.5.18.1"
|
||||||
attrs = "*"
|
cffi = "==1.15.0"
|
||||||
autobahn = "*"
|
channels = "==3.0.4"
|
||||||
backcall = "*"
|
charset-normalizer = "==2.0.12"
|
||||||
blessed = "*"
|
commonmark = "==0.9.1"
|
||||||
boto3 = "*"
|
constantly = "==15.1.0"
|
||||||
botocore = "*"
|
cryptography = "==37.0.2"
|
||||||
certifi = "*"
|
daphne = "==3.0.2"
|
||||||
cffi = "*"
|
defusedxml = "==0.7.1"
|
||||||
channels = "*"
|
dj-database-url = "==0.5.0"
|
||||||
channels-redis = "*"
|
django-allauth = "==0.50.0"
|
||||||
chardet = "*"
|
django-appconf = "==1.0.5"
|
||||||
click = "*"
|
django-compressor = "==4.0"
|
||||||
colorama = "*"
|
django-crispy-forms = "==1.14.0"
|
||||||
commonmark = "*"
|
django-extensions = "==3.1.5"
|
||||||
constantly = "*"
|
django-ftpserver = "==0.8.0"
|
||||||
coverage = "*"
|
django-heroku = "==0.3.1"
|
||||||
cryptography = "*"
|
django-jsonfield-backport = "==1.0.5"
|
||||||
daphne = "*"
|
django-markdown-view = "==0.0.5"
|
||||||
decorator = "*"
|
django-mdeditor = "==0.1.20"
|
||||||
defusedxml = "*"
|
django-picklefield = "==3.0.1"
|
||||||
dj-database-url = "*"
|
django-q = "==1.3.9"
|
||||||
django-503 = "*"
|
django-robots = "==5.0"
|
||||||
django-admin = "*"
|
django-shortuuidfield = "==0.1.3"
|
||||||
django-allauth = "*"
|
django-sql-explorer = "==2.4.1"
|
||||||
django-appconf = "*"
|
django-storages = "==1.12.3"
|
||||||
django-avatar = "*"
|
djangorestframework = "==3.13.1"
|
||||||
django-compressor = "*"
|
hyperlink = "==21.0.0"
|
||||||
django-cors-middleware = "*"
|
idna = "==3.3"
|
||||||
django-crispy-forms = "*"
|
incremental = "==21.3.0"
|
||||||
django-excel-base = "*"
|
jinxed = "==1.2.0"
|
||||||
django-excel-response2 = "*"
|
oauthlib = "==3.2.0"
|
||||||
django-extensions = "*"
|
psycopg2 = "==2.9.3"
|
||||||
django-ftpserver = "*"
|
pyasn1-modules = "==0.2.8"
|
||||||
django-heroku = "*"
|
pyasn1 = "==0.4.8"
|
||||||
django-jsonfield-backport = "*"
|
pycparser = "==2.21"
|
||||||
django-libsass = "*"
|
pyftpdlib = "==1.5.6"
|
||||||
django-markdown-view = "*"
|
python-dateutil = "==2.8.2"
|
||||||
django-mdeditor = "*"
|
python-dotenv = "==0.20.0"
|
||||||
django-picklefield = "*"
|
python3-openid = "==3.2.0"
|
||||||
django-q = "*"
|
pytz = "==2022.1"
|
||||||
django-rename-app = "*"
|
rcssmin = "==1.1.0"
|
||||||
django-shortuuidfield = "*"
|
redis = "==3.5.3"
|
||||||
django-six = "*"
|
requests-oauthlib = "==1.3.1"
|
||||||
django-sql-explorer = "*"
|
requests = "==2.27.1"
|
||||||
django-storages = "*"
|
rich = "==12.4.4"
|
||||||
djangorestframework = "*"
|
rjsmin = "==1.2.0"
|
||||||
docopt = "*"
|
service-identity = "==21.1.0"
|
||||||
docutils = "*"
|
shortuuid = "==1.0.9"
|
||||||
flake8 = "*"
|
six = "==1.16.0"
|
||||||
future = "*"
|
sqlparse = "==0.4.2"
|
||||||
graphviz = "*"
|
twisted-iocpsupport = "==1.0.2"
|
||||||
gunicorn = "*"
|
txaio = "==22.2.1"
|
||||||
h2 = "*"
|
typing-extensions = "==4.2.0"
|
||||||
hiredis = "*"
|
tzdata = "==2022.1"
|
||||||
hpack = "*"
|
urllib3 = "==1.26.9"
|
||||||
hyperframe = "*"
|
wcwidth = "==0.2.5"
|
||||||
hyperlink = "*"
|
whitenoise = "==6.1.0"
|
||||||
idna = "*"
|
"zope.interface" = "==5.4.0"
|
||||||
importlib-metadata = "*"
|
Automat = "==20.2.0"
|
||||||
incremental = "*"
|
Django = "==4.0.4"
|
||||||
ipython = "*"
|
Markdown = "==3.3.7"
|
||||||
isort = "*"
|
Pillow = "==9.1.1"
|
||||||
jedi = "*"
|
Pygments = "==2.12.0"
|
||||||
jeepney = "*"
|
PyJWT = "==2.4.0"
|
||||||
jmespath = "*"
|
pyOpenSSL = "==22.0.0"
|
||||||
keyring = "*"
|
PyYAML = "==6.0"
|
||||||
"keyrings.alt" = "==3.2.0"
|
Twisted = "==22.4.0"
|
||||||
lazy-object-proxy = "*"
|
|
||||||
libsass = "*"
|
|
||||||
mccabe = "*"
|
|
||||||
mock = "*"
|
|
||||||
msgpack = "*"
|
|
||||||
msgpack-python = "*"
|
|
||||||
mypy-extensions = "*"
|
|
||||||
nose = "*"
|
|
||||||
oauthlib = "*"
|
|
||||||
parso = "*"
|
|
||||||
pathspec = "*"
|
|
||||||
pexpect = "*"
|
|
||||||
pickleshare = "*"
|
|
||||||
pip-autoremove = "*"
|
|
||||||
pip-conflict-checker = "*"
|
|
||||||
pip-review = "*"
|
|
||||||
pipdeptree = "*"
|
|
||||||
pipupgrade = "*"
|
|
||||||
priority = "*"
|
|
||||||
prompt-toolkit = "*"
|
|
||||||
psycopg2-binary = "*"
|
|
||||||
ptyprocess = "*"
|
|
||||||
pyasn1 = "*"
|
|
||||||
pyasn1-modules = "*"
|
|
||||||
pycodestyle = "*"
|
|
||||||
pycparser = "*"
|
|
||||||
pyflakes = "*"
|
|
||||||
pyftpdlib = "*"
|
|
||||||
pylint = "*"
|
|
||||||
pyparsing = "*"
|
|
||||||
python-dateutil = "*"
|
|
||||||
python-dotenv = "*"
|
|
||||||
python3-openid = "*"
|
|
||||||
pytz = "*"
|
|
||||||
rcssmin = "*"
|
|
||||||
redis = "*"
|
|
||||||
regex = "*"
|
|
||||||
requests = "*"
|
|
||||||
requests-oauthlib = "*"
|
|
||||||
rich = "*"
|
|
||||||
rjsmin = "*"
|
|
||||||
s3transfer = "*"
|
|
||||||
screen = "*"
|
|
||||||
shortuuid = "*"
|
|
||||||
six = "*"
|
|
||||||
sqlparse = "*"
|
|
||||||
toml = "*"
|
|
||||||
traitlets = "*"
|
|
||||||
txaio = "*"
|
|
||||||
typed-ast = "*"
|
|
||||||
typing-extensions = "*"
|
|
||||||
tzlocal = "*"
|
|
||||||
urllib3 = "*"
|
|
||||||
wcwidth = "*"
|
|
||||||
whitenoise = "*"
|
|
||||||
wrapt = "*"
|
|
||||||
xlwt = "*"
|
|
||||||
yarg = "*"
|
|
||||||
zipp = "*"
|
|
||||||
"zope.interface" = "*"
|
|
||||||
Automat = "*"
|
|
||||||
Django = "*"
|
|
||||||
ipython_genutils = "*"
|
|
||||||
Markdown = "*"
|
|
||||||
Pillow = "*"
|
|
||||||
Pygments = "*"
|
|
||||||
PyHamcrest = "*"
|
|
||||||
PyJWT = "*"
|
|
||||||
pyOpenSSL = "*"
|
|
||||||
PyYAML = "*"
|
|
||||||
SecretStorage = "*"
|
|
||||||
service_identity = "*"
|
|
||||||
Twisted = "*"
|
|
||||||
django-robots = "*"
|
|
||||||
selenium = "*"
|
|
||||||
geckodriver-autoinstaller = "*"
|
|
||||||
|
|
||||||
[dev-packages]
|
[dev-packages]
|
||||||
black = "*"
|
|
||||||
jedi = "*"
|
|
||||||
pylint = "*"
|
|
||||||
|
|
||||||
[requires]
|
[requires]
|
||||||
python_version = "3.7.12"
|
python_version = "3.10"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
[](https://github.com/MarcPartensky/Website/actions/workflows/docker-push.yml)
|
[](https://github.com/MarcPartensky/Website/actions/workflows/docker-push.yml)
|
||||||
[](https://github.com/MarcPartensky/Website/actions/workflows/codeql-analysis.yml)
|
[](https://github.com/MarcPartensky/Website/actions/workflows/codeql-analysis.yml)
|
||||||
|
<img src="https://img.shields.io/liberapay/goal/marcpartensky.svg?logo=liberapay">
|
||||||
|
|
||||||
# Website
|
# Website
|
||||||
|
|
||||||
|
|||||||
@@ -105,32 +105,26 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- web
|
- web
|
||||||
|
|
||||||
# website-test:
|
website-test:
|
||||||
# environment:
|
environment:
|
||||||
# <<: *website
|
<<: *website
|
||||||
# <<: *postgres
|
# <<: *postgres
|
||||||
# <<: *redis
|
<<: *redis
|
||||||
# VIRTUAL_HOST: website.dev
|
VIRTUAL_HOST: website.dev
|
||||||
# build:
|
build:
|
||||||
# context: .
|
context: .
|
||||||
# dockerfile: ./Dockerfile
|
dockerfile: ./Dockerfile
|
||||||
# working_dir: /app
|
command: 80 0.0.0.0
|
||||||
# entrypoint: /app/entrypoint.sh
|
networks:
|
||||||
# command: 80 0.0.0.0
|
- web
|
||||||
# volumes:
|
ports:
|
||||||
# - ".:/app"
|
- "8080:80"
|
||||||
# networks:
|
healthcheck:
|
||||||
# - web
|
test: ["CMD", "curl", "-fs", "http://website:80/robots.txt"]
|
||||||
# - caddy
|
interval: 1m30s
|
||||||
# healthcheck:
|
timeout: 10s
|
||||||
# test: ["CMD", "curl", "-fs", "http://website:80/robots.txt"]
|
retries: 3
|
||||||
# interval: 1m30s
|
start_period: 40s
|
||||||
# timeout: 10s
|
|
||||||
# retries: 3
|
|
||||||
# start_period: 40s
|
|
||||||
# labels:
|
|
||||||
# - "caddy=test.marcpartensky.com"
|
|
||||||
# - "caddy.reverse_proxy={{upstreams http 80}}"
|
|
||||||
|
|
||||||
test:
|
test:
|
||||||
image: jwilder/dockerize
|
image: jwilder/dockerize
|
||||||
|
|||||||
@@ -1,35 +1,14 @@
|
|||||||
version: "3.9"
|
version: "3.9"
|
||||||
x-common:
|
|
||||||
website:
|
|
||||||
&website
|
|
||||||
DJANGO_SETTINGS_MODULE: django_project.settings
|
|
||||||
SECRET_KEY: "$${openssl rand -base64 64}"
|
|
||||||
FTP_URL: 0.0.0.0:21
|
|
||||||
postgres:
|
|
||||||
&postgres
|
|
||||||
POSTGRES_NAME: website
|
|
||||||
POSTGRESQL_USER: root
|
|
||||||
POSTGRES_PASSWORD: "$${openssl rand -base64 64}"
|
|
||||||
POSTGRES_HOST: postgres
|
|
||||||
POSTGRES_PORT: 5432
|
|
||||||
redis:
|
|
||||||
&redis
|
|
||||||
REDIS_URL: redis:6379
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
website:
|
website:
|
||||||
image: docker.io/marcpartensky/website:latest
|
image: docker.io/marcpartensky/website:latest
|
||||||
environment:
|
env_file:
|
||||||
<<: *website
|
- .env
|
||||||
<<: *postgres
|
|
||||||
<<: *redis
|
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
ports:
|
ports:
|
||||||
- "8000:80"
|
- "8000:80"
|
||||||
working_dir: /app
|
|
||||||
entrypoint: /app/entrypoint.sh
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- postgres
|
- postgres
|
||||||
@@ -38,17 +17,19 @@ services:
|
|||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
environment:
|
env_file:
|
||||||
<<: *redis
|
- .env
|
||||||
networks:
|
networks:
|
||||||
- website
|
- website
|
||||||
|
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres
|
image: postgres
|
||||||
environment:
|
env_file:
|
||||||
<<: *postgres
|
- .env
|
||||||
networks:
|
networks:
|
||||||
- website
|
- website
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
website:
|
website:
|
||||||
|
postgres:
|
||||||
|
external: true
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 106 KiB |
@@ -1,15 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings")
|
|
||||||
try:
|
|
||||||
from django.core.management import execute_from_command_line
|
|
||||||
except ImportError as exc:
|
|
||||||
raise ImportError(
|
|
||||||
"Couldn't import Django. Are you sure it's installed and "
|
|
||||||
"available on your PYTHONPATH environment variable? Did you "
|
|
||||||
"forget to activate a virtual environment?"
|
|
||||||
) from exc
|
|
||||||
execute_from_command_line(sys.argv)
|
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
"node_modules/clone": {
|
"node_modules/clone": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
||||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
|
"integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.8"
|
"node": ">=0.8"
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
"node_modules/concat-map": {
|
"node_modules/concat-map": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
|
||||||
},
|
},
|
||||||
"node_modules/core-util-is": {
|
"node_modules/core-util-is": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
"node_modules/glob-parse": {
|
"node_modules/glob-parse": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/glob-parse/-/glob-parse-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/glob-parse/-/glob-parse-0.0.1.tgz",
|
||||||
"integrity": "sha1-N9Ml6xVTvpwfQnJzinVWZEWGbdY="
|
"integrity": "sha512-Um/XtCfPYhDdrlbsNAiakk6AxCpJSLwvF+a95Cmq0Nn/xF/AihHlsBo0EfoUqnKUqyrgoXzX+q5QsSKzH+/gvw=="
|
||||||
},
|
},
|
||||||
"node_modules/handlebars": {
|
"node_modules/handlebars": {
|
||||||
"version": "4.7.7",
|
"version": "4.7.7",
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
"node_modules/isarray": {
|
"node_modules/isarray": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
|
||||||
},
|
},
|
||||||
"node_modules/js-yaml": {
|
"node_modules/js-yaml": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
@@ -530,7 +530,7 @@
|
|||||||
"node_modules/wildglob/node_modules/isarray": {
|
"node_modules/wildglob/node_modules/isarray": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
|
||||||
},
|
},
|
||||||
"node_modules/wildglob/node_modules/readable-stream": {
|
"node_modules/wildglob/node_modules/readable-stream": {
|
||||||
"version": "1.0.34",
|
"version": "1.0.34",
|
||||||
@@ -661,7 +661,7 @@
|
|||||||
"clone": {
|
"clone": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
||||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
|
"integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="
|
||||||
},
|
},
|
||||||
"color-convert": {
|
"color-convert": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
@@ -679,7 +679,7 @@
|
|||||||
"concat-map": {
|
"concat-map": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
|
||||||
},
|
},
|
||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
@@ -709,7 +709,7 @@
|
|||||||
"glob-parse": {
|
"glob-parse": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/glob-parse/-/glob-parse-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/glob-parse/-/glob-parse-0.0.1.tgz",
|
||||||
"integrity": "sha1-N9Ml6xVTvpwfQnJzinVWZEWGbdY="
|
"integrity": "sha512-Um/XtCfPYhDdrlbsNAiakk6AxCpJSLwvF+a95Cmq0Nn/xF/AihHlsBo0EfoUqnKUqyrgoXzX+q5QsSKzH+/gvw=="
|
||||||
},
|
},
|
||||||
"handlebars": {
|
"handlebars": {
|
||||||
"version": "4.7.7",
|
"version": "4.7.7",
|
||||||
@@ -757,7 +757,7 @@
|
|||||||
"isarray": {
|
"isarray": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
|
||||||
},
|
},
|
||||||
"js-yaml": {
|
"js-yaml": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
@@ -1037,7 +1037,7 @@
|
|||||||
"isarray": {
|
"isarray": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
|
||||||
},
|
},
|
||||||
"readable-stream": {
|
"readable-stream": {
|
||||||
"version": "1.0.34",
|
"version": "1.0.34",
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
[tool.poetry]
|
||||||
|
name = "website"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = ""
|
||||||
|
authors = ["Marc Partensky <marc.partensky@gmail.com>"]
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
python = "^3.9"
|
||||||
|
Django = "*"
|
||||||
|
python-dotenv = "*"
|
||||||
|
channels = "*"
|
||||||
|
daphne = "*"
|
||||||
|
django-storages = "*"
|
||||||
|
django-crispy-forms = "*"
|
||||||
|
django-extensions = "*"
|
||||||
|
django-allauth = "*"
|
||||||
|
django-compressor = "*"
|
||||||
|
django-markdown-view = "*"
|
||||||
|
django-mdeditor = "*"
|
||||||
|
django-ftpserver = "*"
|
||||||
|
django-sql-explorer = "*"
|
||||||
|
django-q = "*"
|
||||||
|
django-robots = "*"
|
||||||
|
shortuuid = "*"
|
||||||
|
django-shortuuidfield = "*"
|
||||||
|
django-jsonfield-backport = "*"
|
||||||
|
rich = "*"
|
||||||
|
djangorestframework = "*"
|
||||||
|
PyYAML = "*"
|
||||||
|
django-cors-headers = "*"
|
||||||
|
Pillow = "*"
|
||||||
|
psycopg2-binary = "*"
|
||||||
|
whitenoise = "*"
|
||||||
|
crispy-bootstrap4 = "^2023.1"
|
||||||
|
|
||||||
|
[tool.poetry.dev-dependencies]
|
||||||
|
pytest = "*"
|
||||||
|
pylint = "*"
|
||||||
|
neovim = "*"
|
||||||
|
black = "*"
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["poetry-core>=1.0.0"]
|
||||||
|
build-backend = "poetry.core.masonry.api"
|
||||||
@@ -1,180 +1,76 @@
|
|||||||
#
|
ansicon==1.89.0; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "2.7" and platform_system == "Windows"
|
||||||
# These requirements were autogenerated by pipenv
|
arrow==1.2.2; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3.6"
|
||||||
# To regenerate from the project's Pipfile, run:
|
asgiref==3.5.2; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3.7"
|
||||||
#
|
attrs==22.1.0; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
# pipenv lock --requirements
|
autobahn==22.7.1; python_version >= "3.7"
|
||||||
#
|
automat==20.2.0; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
|
blessed==1.19.1; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "2.7"
|
||||||
-i https://pypi.org/simple
|
certifi==2022.6.15; python_version >= "3.7" and python_version < "4"
|
||||||
aioredis==1.3.1
|
cffi==1.15.1; python_version >= "3.7"
|
||||||
appdirs==1.4.4
|
channels==3.0.5; python_version >= "3.7"
|
||||||
appnope==0.1.3
|
charset-normalizer==2.1.1; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0"
|
||||||
arrow==1.2.2
|
commonmark==0.9.1; python_full_version >= "3.6.3" and python_full_version < "4.0.0"
|
||||||
asgiref==3.5.2
|
constantly==15.1.0; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
astroid==2.11.5
|
cryptography==37.0.4
|
||||||
async-generator==1.10; python_version >= '3.5'
|
daphne==3.0.2; python_version >= "3.7"
|
||||||
async-timeout==4.0.2
|
defusedxml==0.7.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
|
||||||
attrs==21.4.0
|
dj-database-url==1.0.0
|
||||||
autobahn==22.4.2
|
django-allauth==0.51.0
|
||||||
automat==20.2.0
|
django-appconf==1.0.5; python_version >= "3.6"
|
||||||
backcall==0.2.0
|
django-compressor==4.1
|
||||||
backports.zoneinfo==0.2.1; python_version < '3.9'
|
django-cors-headers==3.13.0; python_version >= "3.7"
|
||||||
blessed==1.19.1
|
django-crispy-forms==1.14.0; python_version >= "3.7"
|
||||||
boto3==1.23.6
|
django-extensions==3.2.0; python_version >= "3.6"
|
||||||
botocore==1.26.6
|
|
||||||
bpyutils==0.5.2
|
|
||||||
certifi==2022.5.18.1
|
|
||||||
cffi==1.15.0
|
|
||||||
channels-redis==3.4.0
|
|
||||||
channels==3.0.4
|
|
||||||
chardet==4.0.0
|
|
||||||
charset-normalizer==2.0.12; python_version >= '3'
|
|
||||||
click==8.1.3
|
|
||||||
colorama==0.4.4
|
|
||||||
commonmark==0.9.1
|
|
||||||
constantly==15.1.0
|
|
||||||
coverage==6.4
|
|
||||||
cryptography==37.0.2
|
|
||||||
daphne==3.0.2
|
|
||||||
decorator==5.1.1
|
|
||||||
defusedxml==0.7.1
|
|
||||||
dill==0.3.5.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'
|
|
||||||
dj-database-url==0.5.0
|
|
||||||
django-503==0.1
|
|
||||||
django-admin==2.0.1
|
|
||||||
django-allauth==0.50.0
|
|
||||||
django-appconf==1.0.5
|
|
||||||
django-avatar==5.0.0
|
|
||||||
django-compressor==4.0
|
|
||||||
django-cors-middleware==1.5.0
|
|
||||||
django-crispy-forms==1.14.0
|
|
||||||
django-excel-base==1.0.4
|
|
||||||
django-excel-response2==3.0.2
|
|
||||||
django-extensions==3.1.5
|
|
||||||
django-ftpserver==0.8.0
|
django-ftpserver==0.8.0
|
||||||
django-heroku==0.3.1
|
django-heroku==0.3.1
|
||||||
django-jsonfield-backport==1.0.5
|
django-jsonfield-backport==1.0.5; python_version >= "3.5"
|
||||||
django-libsass==0.9
|
|
||||||
django-markdown-view==0.0.5
|
django-markdown-view==0.0.5
|
||||||
django-mdeditor==0.1.20
|
django-mdeditor==0.1.20
|
||||||
django-picklefield==3.0.1
|
django-picklefield==3.1; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3"
|
||||||
django-q==1.3.9
|
django-q==1.3.9; python_full_version >= "3.6.2" and python_version < "4"
|
||||||
django-rename-app==0.1.3
|
django-robots==5.0; python_version >= "3.7"
|
||||||
django-robots==5.0
|
|
||||||
django-shortuuidfield==0.1.3
|
django-shortuuidfield==0.1.3
|
||||||
django-six==1.0.4
|
django-sql-explorer==2.4.1; python_version >= "3.6"
|
||||||
django-sql-explorer==2.4.1
|
django-storages==1.13.1; python_version >= "3.7"
|
||||||
django-storages==1.12.3
|
django==3.2.15; python_version >= "3.6"
|
||||||
django==3.2.13
|
djangorestframework==3.13.1; python_version >= "3.6"
|
||||||
djangorestframework==3.13.1
|
hyperlink==21.0.0; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
docopt==0.6.2
|
idna==3.3; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.7"
|
||||||
docutils==0.18.1
|
importlib-metadata==4.12.0; python_version < "3.10" and python_version >= "3.7"
|
||||||
flake8==3.9.2
|
incremental==21.3.0; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
future==0.18.2
|
jinxed==1.2.0; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "2.7" and platform_system == "Windows"
|
||||||
geckodriver-autoinstaller==0.1.0
|
markdown==3.4.1; python_version >= "3.7"
|
||||||
graphviz==0.20
|
oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6"
|
||||||
gunicorn==20.1.0
|
pillow==9.2.0; python_version >= "3.7"
|
||||||
h11==0.13.0; python_version >= '3.6'
|
psycopg2-binary==2.9.3; python_version >= "3.6"
|
||||||
h2==4.1.0
|
pyasn1-modules==0.2.8; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
hiredis==2.0.0
|
pyasn1==0.4.8; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
hpack==4.0.0
|
pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0"
|
||||||
hyperframe==6.0.1
|
|
||||||
hyperlink==21.0.0
|
|
||||||
idna==3.3
|
|
||||||
importlib-metadata==4.11.4
|
|
||||||
incremental==21.3.0
|
|
||||||
ipython-genutils==0.2.0
|
|
||||||
ipython==7.33.0
|
|
||||||
isort==5.10.1
|
|
||||||
jedi==0.18.1
|
|
||||||
jeepney==0.8.0
|
|
||||||
jmespath==1.0.0
|
|
||||||
keyring==23.5.1
|
|
||||||
keyrings.alt==3.2.0
|
|
||||||
lazy-object-proxy==1.7.1
|
|
||||||
libsass==0.21.0
|
|
||||||
markdown==3.3.7
|
|
||||||
matplotlib-inline==0.1.3; python_version >= '3.5'
|
|
||||||
mccabe==0.6.1
|
|
||||||
mock==4.0.3
|
|
||||||
msgpack-python==0.5.6
|
|
||||||
msgpack==1.0.3
|
|
||||||
mypy-extensions==0.4.3
|
|
||||||
nose==1.3.7
|
|
||||||
oauthlib==3.2.0
|
|
||||||
outcome==1.1.0; python_version >= '3.6'
|
|
||||||
packaging==21.3; python_version >= '3.6'
|
|
||||||
parso==0.8.3
|
|
||||||
pathspec==0.9.0
|
|
||||||
pexpect==4.8.0
|
|
||||||
pickleshare==0.7.5
|
|
||||||
pillow==9.1.1
|
|
||||||
pip-autoremove==0.10.0
|
|
||||||
pip-conflict-checker==0.6.0
|
|
||||||
pip-review==1.1.1
|
|
||||||
pip==22.1.1; python_version >= '3.7'
|
|
||||||
pipdeptree==2.2.1
|
|
||||||
pipupgrade==1.12.0
|
|
||||||
platformdirs==2.5.2; python_version >= '3.7'
|
|
||||||
priority==2.0.0
|
|
||||||
prompt-toolkit==3.0.29
|
|
||||||
psycopg2-binary==2.9.3
|
|
||||||
psycopg2==2.9.3; python_version >= '3.6'
|
|
||||||
ptyprocess==0.7.0
|
|
||||||
pyasn1-modules==0.2.8
|
|
||||||
pyasn1==0.4.8
|
|
||||||
pycodestyle==2.7.0
|
|
||||||
pycparser==2.21
|
|
||||||
pyflakes==2.3.1
|
|
||||||
pyftpdlib==1.5.6
|
pyftpdlib==1.5.6
|
||||||
pygments==2.12.0
|
pygments==2.13.0; python_full_version >= "3.6.3" and python_full_version < "4.0.0" and python_version >= "3.6"
|
||||||
pyhamcrest==2.0.3
|
pyjwt==2.4.0; python_version >= "3.6"
|
||||||
pyjwt==2.4.0
|
pyopenssl==22.0.0; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
pylint==2.13.9
|
python-dateutil==2.8.2; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3.6"
|
||||||
pyopenssl==22.0.0
|
python-dotenv==0.20.0; python_version >= "3.5"
|
||||||
pyparsing==3.0.9
|
|
||||||
pysocks==1.7.1
|
|
||||||
python-dateutil==2.8.2
|
|
||||||
python-dotenv==0.20.0
|
|
||||||
python3-openid==3.2.0
|
python3-openid==3.2.0
|
||||||
pytz-deprecation-shim==0.1.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
|
pytz==2022.2.1; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3.7"
|
||||||
pytz==2022.1
|
pyyaml==6.0; python_version >= "3.6"
|
||||||
pyyaml==6.0
|
|
||||||
rcssmin==1.1.0
|
rcssmin==1.1.0
|
||||||
redis==3.5.3
|
redis==3.5.3; python_full_version >= "3.6.2" and python_version < "4"
|
||||||
regex==2022.4.24
|
requests-oauthlib==1.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0"
|
||||||
requests-oauthlib==1.3.1
|
requests==2.28.1; python_version >= "3.7" and python_version < "4" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0")
|
||||||
requests==2.27.1
|
rich==12.5.1; python_full_version >= "3.6.3" and python_full_version < "4.0.0"
|
||||||
rich==12.4.4
|
|
||||||
rjsmin==1.2.0
|
rjsmin==1.2.0
|
||||||
s3transfer==0.5.2
|
service-identity==21.1.0; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
screen==1.0.1
|
shortuuid==1.0.9; python_version >= "3.5"
|
||||||
secretstorage==3.3.2
|
six==1.16.0; python_full_version >= "3.6.7" and python_version < "4" and python_version >= "3.7"
|
||||||
selenium==4.1.5
|
sqlparse==0.4.2; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "3.7"
|
||||||
service-identity==21.1.0
|
twisted-iocpsupport==1.0.2; python_full_version >= "3.6.7" and python_version >= "3.7" and platform_system == "Windows"
|
||||||
setuptools==62.3.2; python_version >= '3.7'
|
twisted==22.4.0; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
shortuuid==1.0.9
|
txaio==22.2.1; python_version >= "3.7"
|
||||||
six==1.16.0
|
typing-extensions==4.3.0; python_full_version >= "3.6.7" and python_full_version < "4.0.0" and python_version < "3.8" and python_version >= "3.7"
|
||||||
sniffio==1.2.0; python_version >= '3.5'
|
urllib3==1.26.11; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7"
|
||||||
sortedcontainers==2.4.0
|
wcwidth==0.2.5; python_full_version >= "3.6.2" and python_version < "4" and python_version >= "2.7"
|
||||||
sqlparse==0.4.2
|
whitenoise==6.2.0; python_version >= "3.7"
|
||||||
toml==0.10.2
|
zipp==3.8.1; python_version < "3.10" and python_version >= "3.7"
|
||||||
tomli==2.0.1; python_version < '3.11'
|
zope.interface==5.4.0; python_full_version >= "3.6.7" and python_version >= "3.7"
|
||||||
traitlets==5.2.1.post0
|
|
||||||
trio-websocket==0.9.2; python_version >= '3.5'
|
|
||||||
trio==0.20.0; python_version >= '3.7'
|
|
||||||
twisted==22.4.0
|
|
||||||
txaio==22.2.1
|
|
||||||
typed-ast==1.5.4
|
|
||||||
typing-extensions==4.2.0
|
|
||||||
tzdata==2022.1; python_version >= '3.6'
|
|
||||||
tzlocal==4.2
|
|
||||||
urllib3==1.26.9
|
|
||||||
wcwidth==0.2.5
|
|
||||||
whitenoise==6.1.0
|
|
||||||
wrapt==1.14.1
|
|
||||||
wsproto==1.1.0; python_version >= '3.7'
|
|
||||||
xlwt==1.3.0
|
|
||||||
yarg==0.1.9
|
|
||||||
zipp==3.8.0
|
|
||||||
zope.interface==5.4.0
|
|
||||||
|
|||||||
@@ -1,80 +0,0 @@
|
|||||||
{% include 'include/modal.html' %}
|
|
||||||
{% load static %}
|
|
||||||
<header id="header" class="d-flex align-items-center">
|
|
||||||
<div class="container">
|
|
||||||
|
|
||||||
<!-- The main logo is shown in mobile version only. The centered nav-logo in nav menu is displayed in desktop view -->
|
|
||||||
<div class="logo d-block d-lg-none">
|
|
||||||
<a data-aos="fade-down" class="icon-back-to-top" onclick="toggleTheme()"><img src="{% static 'home/assets/img/black-orchid.svg' %}" alt="" class="img-fluid"></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<nav class="nav-menu d-none d-lg-block">
|
|
||||||
<ul class="nav-inner">
|
|
||||||
|
|
||||||
<li class="drop-down"><a href="/">Explore</a>
|
|
||||||
<ul>
|
|
||||||
{% if not user.is_authenticated %}
|
|
||||||
<li><a href="{% url 'login' %}">Login</a></li>
|
|
||||||
<li><a href="{% url 'register' %}">Register</a></li>
|
|
||||||
{% else %}
|
|
||||||
<li><a href="{% url 'logout' %}">Logout</a></li>
|
|
||||||
{% endif %}
|
|
||||||
<li class="drop-down"><a href="{% url 'demo' %}">Demos</a>
|
|
||||||
<ul>
|
|
||||||
{% for demo in demos %}
|
|
||||||
<li><a href="/demo/{{ demo }}">{{ demo }}</a></li>
|
|
||||||
{% empty %}
|
|
||||||
<li>No demo loaded.</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li class="drop-down"><a href="{% url 'article' %}">Articles</a>
|
|
||||||
<ul>
|
|
||||||
{% for article in articles %}
|
|
||||||
<li><a href="/article/{{ article }}">{{ article }}</a></li>
|
|
||||||
{% empty %}
|
|
||||||
<li>No article loaded.</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><a href="{% url 'touch-typing' %}">Touch typing</a></li>
|
|
||||||
<!-- <li><a href="% url 'planning' %">Planning</a></li> -->
|
|
||||||
<li><a href="{% url 'first-site' %}">First site</a></li>
|
|
||||||
<li class="drop-down"><a href="{% url 'game' %}">Games</a>
|
|
||||||
<ul>
|
|
||||||
{% for game in games %}
|
|
||||||
<li><a href="/game/{{ game }}">{{ game }}</a></li>
|
|
||||||
{% empty %}
|
|
||||||
<li>No game loaded.</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><a href="{% url 'blog-home' %}">Blog</a></li>
|
|
||||||
<li class="drop-down"><a href="{% url 'cv' %}">Curriculum Vitae</a>
|
|
||||||
<ul>
|
|
||||||
<li><a href="/cv/1p">1 page version</a></li>
|
|
||||||
<li><a href="/cv/2p">2 pages version</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<!-- <li class="drop-down"><a href="#">Projects</a> -->
|
|
||||||
<!-- <ul> -->
|
|
||||||
<!-- <li><a href="#">Not</a></li> -->
|
|
||||||
<!-- <li><a href="#">Available</a></li> -->
|
|
||||||
<!-- </ul> -->
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li class="active"><a href="/#about">About me</a></li>
|
|
||||||
<li><a href="/#skills">Skills</a></li>
|
|
||||||
|
|
||||||
<li class="nav-logo" style="width: 15%; height: 15%"><a onclick="toggleTheme()"><img id="theme-img" src="{% static 'home/assets/img/black-orchid.svg' %}" alt="" class="img-fluid"></a></li>
|
|
||||||
|
|
||||||
<li><a href="/#portfolio">Portfolio</a></li>
|
|
||||||
<li><a href="/#certificates">Certificates</a></li>
|
|
||||||
<li><a href="/#contact">Contact</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav><!-- .nav-menu -->
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
__version__ = '0.1.0'
|
||||||
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |