Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e77d7c64e | ||
|
|
550419381a | ||
|
|
fc9f4cde3b | ||
|
|
3f2b863f5a | ||
|
|
8231096b4d | ||
|
|
87268abcc3 | ||
|
|
c67e613ba2 | ||
|
|
76985fa799 | ||
|
|
dae43435e4 | ||
|
|
ba7998c636 | ||
|
|
0ac6f00ef0 | ||
|
|
2bdc141e2d |
@@ -18,4 +18,3 @@ venv
|
|||||||
.travis.yml
|
.travis.yml
|
||||||
.gitignore
|
.gitignore
|
||||||
.dockerignore
|
.dockerignore
|
||||||
requirements.txt
|
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
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,7 +1,5 @@
|
|||||||
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,7 +4,6 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- "*"
|
- "*"
|
||||||
- "!master"
|
|
||||||
# Publish `v1.2.3` tags as releases.
|
# Publish `v1.2.3` tags as releases.
|
||||||
tags:
|
tags:
|
||||||
- v*
|
- v*
|
||||||
@@ -33,13 +32,16 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Build docker image
|
- name: Build and push Docker images
|
||||||
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-from: type=local,src=/tmp/.buildx-cache
|
||||||
# cache-to: type=local,dest=/tmp/buildx
|
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
|
||||||
cache-from: type=gha
|
|
||||||
cache-to: type=gha
|
- name: Move cache
|
||||||
|
run: |
|
||||||
|
rm -rf /tmp/.buildx-cache
|
||||||
|
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
|
||||||
|
|||||||
@@ -15,54 +15,43 @@ env:
|
|||||||
IMAGE_NAME: website
|
IMAGE_NAME: website
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-push:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
- name: Install make
|
||||||
- name: Build the tag
|
run: sudo apt install make -y
|
||||||
id: tag
|
- name: Install Python3.7
|
||||||
run: echo "::set-output name=tag::$(git rev-parse --short HEAD).$(date +'%Y-%m-%d')"
|
uses: actions/setup-python@v1
|
||||||
|
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@v2
|
uses: docker/setup-qemu-action@v1
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v1
|
||||||
|
- 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@v2
|
uses: docker/login-action@v1
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
- name: Build and push
|
||||||
- name: Build and push Docker images
|
id: push
|
||||||
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:v${{ github.run_number }}.${{ steps.tag.outputs.tag }}
|
tags: marcpartensky/website:latest
|
||||||
|
|
||||||
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
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
3.9
|
|
||||||
@@ -1,79 +1,44 @@
|
|||||||
FROM python:3.9-alpine as builder
|
FROM marcpartensky/paru:latest as builder
|
||||||
|
RUN paru -Syyyu --noconfirm python-pipenv npm make
|
||||||
# Pre installations
|
USER root
|
||||||
RUN apk update
|
COPY . /opt/website
|
||||||
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
|
||||||
COPY pyproject.toml poetry.lock package.json package-lock.json ./
|
RUN pipenv update
|
||||||
|
RUN pipenv run ./manage.py collectstatic --noinput
|
||||||
# Run updates
|
RUN npm install -g npm@latest
|
||||||
# RUN poetry update
|
|
||||||
RUN poetry export -f requirements.txt --without-hashes --output requirements.txt
|
|
||||||
RUN npm update
|
|
||||||
RUN npm install
|
RUN npm install
|
||||||
|
|
||||||
# Image of production
|
FROM marcpartensky/paru:latest
|
||||||
FROM python:3.9-alpine
|
LABEL maintainer="marc.partensky@gmail.com"
|
||||||
# FROM alpine
|
LABEL image="https://hub.docker.com/r/marcpartensky/website"
|
||||||
ENV SECRET_KEY=whatever
|
LABEL source="https://github.com/marcpartensky/website"
|
||||||
|
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
|
||||||
|
|
||||||
# Labels
|
COPY --from=builder /app /app
|
||||||
LABEL maintainer="marc.partensky@gmail.com"
|
WORKDIR /app
|
||||||
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
|
||||||
|
|
||||||
# Install dependencies
|
RUN pip install -U pip
|
||||||
# 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://localhost:$PORT/live || exit 1
|
CMD curl -sSf http://127.0.0.1:$PORT/live || exit 1
|
||||||
|
|
||||||
WORKDIR /home/website/website
|
ENTRYPOINT ["/app/entrypoint.sh"]
|
||||||
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,23 +5,26 @@ 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:
|
||||||
poetry run ./website/entrypoint.sh --nosetup
|
pipenv run ./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:
|
build: update
|
||||||
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
|
||||||
poetry export -o requirements.txt
|
# pipenv lock --pre --clear
|
||||||
SECRET_KEY=secret poetry run ./website/manage.py collectstatic --noinput
|
pipenv update
|
||||||
SECRET_KEY=secret poetry run ./website/manage.py makemigrations
|
pipenv lock -r > requirements.txt
|
||||||
|
SECRET_KEY=secret pipenv run ./manage.py collectstatic --noinput
|
||||||
|
SECRET_KEY=secret pipenv run ./manage.py makemigrations
|
||||||
init: .env
|
init: .env
|
||||||
pip install --user poetry
|
pip install --user pipenv
|
||||||
poetry install --dev
|
pipenv install --dev
|
||||||
npm install --save
|
npm install --save
|
||||||
test:
|
test:
|
||||||
pipenv run ./manage.py test
|
pipenv run ./manage.py test
|
||||||
@@ -30,7 +33,7 @@ runtest:
|
|||||||
make test
|
make test
|
||||||
make kill
|
make kill
|
||||||
kill:
|
kill:
|
||||||
pipenv run ./website/entrypoint.sh kill
|
pipenv run ./entrypoint.sh kill
|
||||||
up: init
|
up: init
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
down:
|
down:
|
||||||
|
|||||||
@@ -4,82 +4,161 @@ verify_ssl = true
|
|||||||
name = "pypi"
|
name = "pypi"
|
||||||
|
|
||||||
[packages]
|
[packages]
|
||||||
ansicon = "==1.89.0"
|
aioredis = "*"
|
||||||
arrow = "==1.2.2"
|
appdirs = "*"
|
||||||
asgiref = "==3.5.2"
|
appnope = "*"
|
||||||
attrs = "==21.4.0"
|
arrow = "*"
|
||||||
autobahn = "==22.4.2"
|
asgiref = "*"
|
||||||
blessed = "==1.19.1"
|
astroid = "*"
|
||||||
certifi = "==2022.5.18.1"
|
async-timeout = "*"
|
||||||
cffi = "==1.15.0"
|
attrs = "*"
|
||||||
channels = "==3.0.4"
|
autobahn = "*"
|
||||||
charset-normalizer = "==2.0.12"
|
backcall = "*"
|
||||||
commonmark = "==0.9.1"
|
blessed = "*"
|
||||||
constantly = "==15.1.0"
|
boto3 = "*"
|
||||||
cryptography = "==37.0.2"
|
botocore = "*"
|
||||||
daphne = "==3.0.2"
|
certifi = "*"
|
||||||
defusedxml = "==0.7.1"
|
cffi = "*"
|
||||||
dj-database-url = "==0.5.0"
|
channels = "*"
|
||||||
django-allauth = "==0.50.0"
|
channels-redis = "*"
|
||||||
django-appconf = "==1.0.5"
|
chardet = "*"
|
||||||
django-compressor = "==4.0"
|
click = "*"
|
||||||
django-crispy-forms = "==1.14.0"
|
colorama = "*"
|
||||||
django-extensions = "==3.1.5"
|
commonmark = "*"
|
||||||
django-ftpserver = "==0.8.0"
|
constantly = "*"
|
||||||
django-heroku = "==0.3.1"
|
coverage = "*"
|
||||||
django-jsonfield-backport = "==1.0.5"
|
cryptography = "*"
|
||||||
django-markdown-view = "==0.0.5"
|
daphne = "*"
|
||||||
django-mdeditor = "==0.1.20"
|
decorator = "*"
|
||||||
django-picklefield = "==3.0.1"
|
defusedxml = "*"
|
||||||
django-q = "==1.3.9"
|
dj-database-url = "*"
|
||||||
django-robots = "==5.0"
|
django-503 = "*"
|
||||||
django-shortuuidfield = "==0.1.3"
|
django-admin = "*"
|
||||||
django-sql-explorer = "==2.4.1"
|
django-allauth = "*"
|
||||||
django-storages = "==1.12.3"
|
django-appconf = "*"
|
||||||
djangorestframework = "==3.13.1"
|
django-avatar = "*"
|
||||||
hyperlink = "==21.0.0"
|
django-compressor = "*"
|
||||||
idna = "==3.3"
|
django-cors-middleware = "*"
|
||||||
incremental = "==21.3.0"
|
django-crispy-forms = "*"
|
||||||
jinxed = "==1.2.0"
|
django-excel-base = "*"
|
||||||
oauthlib = "==3.2.0"
|
django-excel-response2 = "*"
|
||||||
psycopg2 = "==2.9.3"
|
django-extensions = "*"
|
||||||
pyasn1-modules = "==0.2.8"
|
django-ftpserver = "*"
|
||||||
pyasn1 = "==0.4.8"
|
django-heroku = "*"
|
||||||
pycparser = "==2.21"
|
django-jsonfield-backport = "*"
|
||||||
pyftpdlib = "==1.5.6"
|
django-libsass = "*"
|
||||||
python-dateutil = "==2.8.2"
|
django-markdown-view = "*"
|
||||||
python-dotenv = "==0.20.0"
|
django-mdeditor = "*"
|
||||||
python3-openid = "==3.2.0"
|
django-picklefield = "*"
|
||||||
pytz = "==2022.1"
|
django-q = "*"
|
||||||
rcssmin = "==1.1.0"
|
django-rename-app = "*"
|
||||||
redis = "==3.5.3"
|
django-shortuuidfield = "*"
|
||||||
requests-oauthlib = "==1.3.1"
|
django-six = "*"
|
||||||
requests = "==2.27.1"
|
django-sql-explorer = "*"
|
||||||
rich = "==12.4.4"
|
django-storages = "*"
|
||||||
rjsmin = "==1.2.0"
|
djangorestframework = "*"
|
||||||
service-identity = "==21.1.0"
|
docopt = "*"
|
||||||
shortuuid = "==1.0.9"
|
docutils = "*"
|
||||||
six = "==1.16.0"
|
flake8 = "*"
|
||||||
sqlparse = "==0.4.2"
|
future = "*"
|
||||||
twisted-iocpsupport = "==1.0.2"
|
graphviz = "*"
|
||||||
txaio = "==22.2.1"
|
gunicorn = "*"
|
||||||
typing-extensions = "==4.2.0"
|
h2 = "*"
|
||||||
tzdata = "==2022.1"
|
hiredis = "*"
|
||||||
urllib3 = "==1.26.9"
|
hpack = "*"
|
||||||
wcwidth = "==0.2.5"
|
hyperframe = "*"
|
||||||
whitenoise = "==6.1.0"
|
hyperlink = "*"
|
||||||
"zope.interface" = "==5.4.0"
|
idna = "*"
|
||||||
Automat = "==20.2.0"
|
importlib-metadata = "*"
|
||||||
Django = "==4.0.4"
|
incremental = "*"
|
||||||
Markdown = "==3.3.7"
|
ipython = "*"
|
||||||
Pillow = "==9.1.1"
|
isort = "*"
|
||||||
Pygments = "==2.12.0"
|
jedi = "*"
|
||||||
PyJWT = "==2.4.0"
|
jeepney = "*"
|
||||||
pyOpenSSL = "==22.0.0"
|
jmespath = "*"
|
||||||
PyYAML = "==6.0"
|
keyring = "*"
|
||||||
Twisted = "==22.4.0"
|
"keyrings.alt" = "==3.2.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.10"
|
python_version = "3.7.12"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
[](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
|
||||||
|
|
||||||
|
|||||||
|
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 |