Commit 49a15b3c authored by totte's avatar totte
Browse files

Initial commit

parent 8ef3c9c4

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.
[run]
source = .
omit =
venv/*
manage.py
*/wsgi.py
*/migrations/*
*/__init__.py
.idea/
.coverage
.dockerignore
.env
.git
.gitignore
.gitlab-ci.yml
venv/
Dockerfile
docker-compose.override.yml
docker-compose.test.yml
docker-compose.yml
melange.service
nginx.conf
nginx.production.conf
nginx.staging.conf
README.md
TODO.md
.coverage
.env
venv/
.idea/
stages:
- test source
- build images
- test images
- release
- deploy
# Job 1
flake8:
except:
- tags
stage: test source
image: python:3.7.2
before_script:
- pip install flake8
script:
- flake8 .
# Job 2
pylint:
except:
- tags
stage: test source
image: python:3.7.2
before_script:
- pip install pylint
script:
- find -name '*.py' -not -path "./venv/*" -not -path "./*/migrations/*" | xargs pylint -j 0 --rcfile=.pylintrc | tee pylint.log || exit 0
# Job 3
unit test:
except:
- tags
stage: test source
image: python:3.7.2
services:
- postgres:11.2
variables:
DATABASE_URL: postgres://postgres@postgres:5432/postgres
SECRET_KEY: $TEST_SECRET_KEY
before_script:
- pip install pipenv
- pipenv install --system
script:
- python manage.py test
# Job 4
amd64 image:
only:
- master
tags:
- x86_64
stage: build images
image: docker:stable
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- docker build -t ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:$CI_COMMIT_REF_NAME .
- docker push ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:$CI_COMMIT_REF_NAME
# Job 5
arm image:
only:
- master
tags:
- armv71
stage: build images
image: docker:stable
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- docker build -t ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:$CI_COMMIT_REF_NAME .
- docker push ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:$CI_COMMIT_REF_NAME
# Job 6
amd64 unit test:
only:
- master
tags:
- x86_64
stage: test images
image: docker:stable
services:
- docker:dind
- postgres:11.2
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
TEST_IMAGE: ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:$CI_COMMIT_REF_NAME
SECRET_KEY: $TEST_SECRET_KEY
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- apk add --no-cache py-pip
- pip install docker-compose~=1.23.0
script:
- docker pull $TEST_IMAGE
- env | grep -i postgres
- env | grep POSTGRES_PORT_5432_TCP_ADDR
- docker run postgres:11.2 psql -d postgres -U postgres -h $POSTGRES_PORT_5432_TCP_ADDR -c 'SELECT version();'
- export POSTGRES_HOST=${POSTGRES_PORT_5432_TCP_ADDR}
- docker-compose -f docker-compose.test.yml -p test up --abort-on-container-exit
# Job 7
arm unit test:
only:
- master
tags:
- armv71
stage: test images
image: docker:stable
services:
- docker:dind
- postgres:11.2
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
TEST_IMAGE: ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:$CI_COMMIT_REF_NAME
SECRET_KEY: $TEST_SECRET_KEY
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- apk add --no-cache py-pip
- pip install docker-compose~=1.23.0
script:
- docker pull $TEST_IMAGE
- env | grep -i postgres
- env | grep POSTGRES_PORT_5432_TCP_ADDR
- docker run postgres:11.2 psql -d postgres -U postgres -h $POSTGRES_PORT_5432_TCP_ADDR -c 'SELECT version();'
- export POSTGRES_HOST=${POSTGRES_PORT_5432_TCP_ADDR}
- docker-compose -f docker-compose.test.yml -p test up --abort-on-container-exit
# Job 8
staging images:
only:
- master
stage: release
image: docker:stable
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
before_script:
- export DOCKER_CLI_EXPERIMENTAL=enabled
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- docker pull ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:$CI_COMMIT_REF_NAME
- docker tag ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:$CI_COMMIT_REF_NAME ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:latest
- docker push ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:latest
- docker pull ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:$CI_COMMIT_REF_NAME
- docker tag ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:$CI_COMMIT_REF_NAME ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:latest
- docker push ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:latest
- docker manifest create ${CI_REGISTRY_IMAGE}:latest ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:latest ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:latest
- docker manifest annotate --arch arm --variant v7 --os linux ${CI_REGISTRY_IMAGE}:latest ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm
- docker manifest annotate --arch amd64 --os linux ${CI_REGISTRY_IMAGE}:latest ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64
- docker manifest push ${CI_REGISTRY_IMAGE}:latest
# Job 9
production images:
only:
- tags
stage: release
image: docker:stable
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
before_script:
- export DOCKER_CLI_EXPERIMENTAL=enabled
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- docker pull ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:latest
- docker tag ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:latest ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:$CI_COMMIT_TAG
- docker push ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:$CI_COMMIT_TAG
- docker pull ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:latest
- docker tag ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:latest ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:$CI_COMMIT_TAG
- docker push ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:$CI_COMMIT_TAG
- docker manifest create ${CI_REGISTRY_IMAGE}:$CI_COMMIT_TAG ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm:$CI_COMMIT_TAG ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64:$CI_COMMIT_TAG
- docker manifest annotate --arch arm --variant v7 --os linux ${CI_REGISTRY_IMAGE}:$CI_COMMIT_TAG ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-arm
- docker manifest annotate --arch amd64 --os linux ${CI_REGISTRY_IMAGE}:$CI_COMMIT_TAG ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}-amd64
- docker manifest push ${CI_REGISTRY_IMAGE}:$CI_COMMIT_TAG
# Job 10
staging environment:
only:
- master
stage: deploy
image: debian:stable
environment:
name: staging
url: https://staging.chakralinux.org
before_script:
- apt-get update; apt-get -y install curl
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- scp -P $DEPLOY_PORT entrypoint.sh $DEPLOY_USER@$DEPLOY_HOST:/srv/melange/
- scp -P $DEPLOY_PORT docker-compose.yml $DEPLOY_USER@$DEPLOY_HOST:/srv/melange/
- scp -P $DEPLOY_PORT nginx.staging.conf $DEPLOY_USER@$DEPLOY_HOST:/srv/melange/nginx.conf
- ssh $DEPLOY_USER@$DEPLOY_HOST -p $DEPLOY_PORT "docker login $CI_REGISTRY -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD && cd /srv/melange && docker-compose down && docker-compose pull && docker-compose up -d"
- curl -XPOST -H "Fastly-Key:${FASTLY_KEY}" https://api.fastly.com/service/${FASTLY_SERVICE}/purge_all
# Job 11
production environment:
only:
- tags
stage: deploy
image: debian:stable
environment:
name: production
url: https://www.chakralinux.org
before_script:
- apt-get update; apt-get -y install curl
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- scp -P $DEPLOY_PORT entrypoint.sh $DEPLOY_USER@$DEPLOY_HOST:/srv/melange/
- scp -P $DEPLOY_PORT docker-compose.yml $DEPLOY_USER@$DEPLOY_HOST:/srv/melange/
- scp -P $DEPLOY_PORT nginx.staging.conf $DEPLOY_USER@$DEPLOY_HOST:/srv/melange/nginx.conf
- ssh $DEPLOY_USER@$DEPLOY_HOST -p $DEPLOY_PORT "docker login $CI_REGISTRY -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD && cd /srv/melange && docker-compose down && docker-compose pull && docker-compose up -d"
- curl -XPOST -H "Fastly-Key:${FASTLY_KEY}" https://api.fastly.com/service/${FASTLY_SERVICE}/purge_all
# Pull base image
FROM python:3.7.2-alpine3.9
MAINTAINER Hans Tovetjärn
# Set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Alpine Linux packages
RUN apk add --no-cache linux-headers bash gcc \
musl-dev libjpeg-turbo-dev libpng libpq \
postgresql-dev git zlib-dev libmagic
# Set work directory
WORKDIR /srv/melange
# Upgrade pip and install pipenv
RUN pip install --upgrade pip
RUN pip install pipenv
# Copy Pipfiles and install the requirements
COPY Pipfile Pipfile.lock /srv/melange/
RUN pipenv install --deploy --system --ignore-pipfile
# Copy source code to work directory
COPY . /srv/melange/
# Port to expose
EXPOSE 8000
# Run entrypoint.sh
ENTRYPOINT ["/srv/melange/entrypoint.sh"]
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[packages]
certifi = "==2019.3.9"
pipenv = "==2018.11.26"
pytz = "==2018.9"
virtualenv = "==16.4.3"
virtualenv-clone = "==0.5.1"
Django = "==2.1.7"
psycopg2-binary = "*"
sentry-sdk = "*"
datadog = "*"
gunicorn = "*"
coverage = "*"
[requires]
python_version = "3.6"
[dev-packages]
django-debug-toolbar = "*"
{
"_meta": {
"hash": {
"sha256": "7ae2e47b7eb31d1e0c2f9320c83c1429665d42b93f8b76ed8251909fc2ad6f7a"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.6"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"certifi": {
"hashes": [
"sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5",
"sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae"
],
"index": "pypi",
"version": "==2019.3.9"
},
"chardet": {
"hashes": [
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
],
"version": "==3.0.4"
},
"coverage": {
"hashes": [
"sha256:3684fabf6b87a369017756b551cef29e505cb155ddb892a7a29277b978da88b9",
"sha256:39e088da9b284f1bd17c750ac672103779f7954ce6125fd4382134ac8d152d74",
"sha256:3c205bc11cc4fcc57b761c2da73b9b72a59f8d5ca89979afb0c1c6f9e53c7390",
"sha256:465ce53a8c0f3a7950dfb836438442f833cf6663d407f37d8c52fe7b6e56d7e8",
"sha256:48020e343fc40f72a442c8a1334284620f81295256a6b6ca6d8aa1350c763bbe",
"sha256:5296fc86ab612ec12394565c500b412a43b328b3907c0d14358950d06fd83baf",
"sha256:5f61bed2f7d9b6a9ab935150a6b23d7f84b8055524e7be7715b6513f3328138e",
"sha256:68a43a9f9f83693ce0414d17e019daee7ab3f7113a70c79a3dd4c2f704e4d741",
"sha256:6b8033d47fe22506856fe450470ccb1d8ba1ffb8463494a15cfc96392a288c09",
"sha256:7ad7536066b28863e5835e8cfeaa794b7fe352d99a8cded9f43d1161be8e9fbd",
"sha256:7bacb89ccf4bedb30b277e96e4cc68cd1369ca6841bde7b005191b54d3dd1034",
"sha256:839dc7c36501254e14331bcb98b27002aa415e4af7ea039d9009409b9d2d5420",
"sha256:8f9a95b66969cdea53ec992ecea5406c5bd99c9221f539bca1e8406b200ae98c",
"sha256:932c03d2d565f75961ba1d3cec41ddde00e162c5b46d03f7423edcb807734eab",
"sha256:988529edadc49039d205e0aa6ce049c5ccda4acb2d6c3c5c550c17e8c02c05ba",
"sha256:998d7e73548fe395eeb294495a04d38942edb66d1fa61eb70418871bc621227e",
"sha256:9de60893fb447d1e797f6bf08fdf0dbcda0c1e34c1b06c92bd3a363c0ea8c609",
"sha256:9e80d45d0c7fcee54e22771db7f1b0b126fb4a6c0a2e5afa72f66827207ff2f2",
"sha256:a545a3dfe5082dc8e8c3eb7f8a2cf4f2870902ff1860bd99b6198cfd1f9d1f49",
"sha256:a5d8f29e5ec661143621a8f4de51adfb300d7a476224156a39a392254f70687b",
"sha256:aca06bfba4759bbdb09bf52ebb15ae20268ee1f6747417837926fae990ebc41d",
"sha256:bb23b7a6fd666e551a3094ab896a57809e010059540ad20acbeec03a154224ce",
"sha256:bfd1d0ae7e292105f29d7deaa9d8f2916ed8553ab9d5f39ec65bcf5deadff3f9",
"sha256:c62ca0a38958f541a73cf86acdab020c2091631c137bd359c4f5bddde7b75fd4",
"sha256:c709d8bda72cf4cd348ccec2a4881f2c5848fd72903c185f363d361b2737f773",
"sha256:c968a6aa7e0b56ecbd28531ddf439c2ec103610d3e2bf3b75b813304f8cb7723",
"sha256:df785d8cb80539d0b55fd47183264b7002077859028dfe3070cf6359bf8b2d9c",
"sha256:f406628ca51e0ae90ae76ea8398677a921b36f0bd71aab2099dfed08abd0322f",
"sha256:f46087bbd95ebae244a0eda01a618aff11ec7a069b15a3ef8f6b520db523dcf1",
"sha256:f8019c5279eb32360ca03e9fac40a12667715546eed5c5eb59eb381f2f501260",
"sha256:fc5f4d209733750afd2714e9109816a29500718b32dd9a5db01c0cb3a019b96a"
],
"index": "pypi",
"version": "==4.5.3"
},
"datadog": {
"hashes": [
"sha256:9487480fd4b5898b665384f95eeb0cbca4ec998bb58224b7bb60fff3978191ad",
"sha256:d28251dd28f51f27e942bb23fe15349e5223aef75246a94ff7233fb174b74bb9"
],
"index": "pypi",
"version": "==0.27.0"
},
"decorator": {
"hashes": [
"sha256:86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de",
"sha256:f069f3a01830ca754ba5258fde2278454a0b5b79e0d7f5c13b3b97e57d4acff6"
],
"version": "==4.4.0"
},
"django": {
"hashes": [
"sha256:275bec66fd2588dd517ada59b8bfb23d4a9abc5a362349139ddda3c7ff6f5ade",
"sha256:939652e9d34d7d53d74d5d8ef82a19e5f8bb2de75618f7e5360691b6e9667963"
],
"index": "pypi",
"version": "==2.1.7"
},
"gunicorn": {
"hashes": [
"sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471",
"sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"
],
"index": "pypi",
"version": "==19.9.0"
},
"idna": {
"hashes": [
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
"sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
],
"version": "==2.8"
},
"pipenv": {
"hashes": [
"sha256:56ad5f5cb48f1e58878e14525a6e3129d4306049cb76d2f6a3e95df0d5fc6330",
"sha256:7df8e33a2387de6f537836f48ac6fcd94eda6ed9ba3d5e3fd52e35b5bc7ff49e",
"sha256:a673e606e8452185e9817a987572b55360f4d28b50831ef3b42ac3cab3fee846"
],
"index": "pypi",
"version": "==2018.11.26"
},
"psycopg2-binary": {
"hashes": [
"sha256:19a2d1f3567b30f6c2bb3baea23f74f69d51f0c06c2e2082d0d9c28b0733a4c2",
"sha256:2b69cf4b0fa2716fd977aa4e1fd39af6110eb47b2bb30b4e5a469d8fbecfc102",
"sha256:2e952fa17ba48cbc2dc063ddeec37d7dc4ea0ef7db0ac1eda8906365a8543f31",
"sha256:348b49dd737ff74cfb5e663e18cb069b44c64f77ec0523b5794efafbfa7df0b8",
"sha256:3d72a5fdc5f00ca85160915eb9a973cf9a0ab8148f6eda40708bf672c55ac1d1",
"sha256:4957452f7868f43f32c090dadb4188e9c74a4687323c87a882e943c2bd4780c3",
"sha256:5138cec2ee1e53a671e11cc519505eb08aaaaf390c508f25b09605763d48de4b",
"sha256:587098ca4fc46c95736459d171102336af12f0d415b3b865972a79c03f06259f",
"sha256:5b79368bcdb1da4a05f931b62760bea0955ee2c81531d8e84625df2defd3f709",
"sha256:5cf43807392247d9bc99737160da32d3fa619e0bfd85ba24d1c78db205f472a4",
"sha256:676d1a80b1eebc0cacae8dd09b2fde24213173bf65650d22b038c5ed4039f392",
"sha256:6b0211ecda389101a7d1d3df2eba0cf7ffbdd2480ca6f1d2257c7bd739e84110",
"sha256:79cde4660de6f0bb523c229763bd8ad9a93ac6760b72c369cf1213955c430934",
"sha256:7aba9786ac32c2a6d5fb446002ed936b47d5e1f10c466ef7e48f66eb9f9ebe3b",
"sha256:7c8159352244e11bdd422226aa17651110b600d175220c451a9acf795e7414e0",
"sha256:945f2eedf4fc6b2432697eb90bb98cc467de5147869e57405bfc31fa0b824741",
"sha256:96b4e902cde37a7fc6ab306b3ac089a3949e6ce3d824eeca5b19dc0bedb9f6e2",
"sha256:9a7bccb1212e63f309eb9fab47b6eaef796f59850f169a25695b248ca1bf681b",
"sha256:a3bfcac727538ec11af304b5eccadbac952d4cca1a551a29b8fe554e3ad535dc",
"sha256:b19e9f1b85c5d6136f5a0549abdc55dcbd63aba18b4f10d0d063eb65ef2c68b4",
"sha256:b664011bb14ca1f2287c17185e222f2098f7b4c857961dbcf9badb28786dbbf4",
"sha256:bde7959ef012b628868d69c474ec4920252656d0800835ed999ba5e4f57e3e2e",
"sha256:cb095a0657d792c8de9f7c9a0452385a309dfb1bbbb3357d6b1e216353ade6ca",
"sha256:d16d42a1b9772152c1fe606f679b2316551f7e1a1ce273e7f808e82a136cdb3d",
"sha256:d444b1545430ffc1e7a24ce5a9be122ccd3b135a7b7e695c5862c5aff0b11159",
"sha256:d93ccc7bf409ec0a23f2ac70977507e0b8a8d8c54e5ee46109af2f0ec9e411f3",
"sha256:df6444f952ca849016902662e1a47abf4fa0678d75f92fd9dd27f20525f809cd",
"sha256:e63850d8c52ba2b502662bf3c02603175c2397a9acc756090e444ce49508d41e",
"sha256:ec43358c105794bc2b6fd34c68d27f92bea7102393c01889e93f4b6a70975728",
"sha256:f4c6926d9c03dadce7a3b378b40d2fea912c1344ef9b29869f984fb3d2a2420b"
],
"index": "pypi",
"version": "==2.7.7"
},
"pytz": {
"hashes": [
"sha256:32b0891edff07e28efe91284ed9c31e123d84bea3fd98e1f72be2508f43ef8d9",
"sha256:d5f05e487007e29e03409f9398d074e158d920d36eb82eaf66fb1136b0c5374c"
],
"index": "pypi",
"version": "==2018.9"
},
"requests": {
"hashes": [
"sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e",
"sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b"
],
"version": "==2.21.0"
},
"sentry-sdk": {
"hashes": [
"sha256:4250f4d2114d1f45d8a94f2f078016b7d8ffc6f57f42db7f20dccd7692bc804c",
"sha256:c5a41eba2d27416c81c901fe86de887e356aec4df7afd3327c324b2b3db7e934"
],
"index": "pypi",
"version": "==0.7.7"
},
"urllib3": {
"hashes": [
"sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39",
"sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22"
],
"version": "==1.24.1"
},
"virtualenv": {
"hashes": [
"sha256:6aebaf4dd2568a0094225ebbca987859e369e3e5c22dc7d52e5406d504890417",
"sha256:984d7e607b0a5d1329425dd8845bd971b957424b5ba664729fab51ab8c11bc39"
],
"index": "pypi",
"version": "==16.4.3"
},
"virtualenv-clone": {
"hashes": [
"sha256:217bd3f0880c9f85672c0bcc9ad9e0354ab7dfa89c2f117e63aa878b4279f5bf",
"sha256:316c8a05432a7adb5e461709759aca18c51433ffc2c33e2e80c9e51c452d339f",
"sha256:f2a07ed255f3abaceef8c8442512d8cdb2ba9f867e212d8a51680c7790a85033"
],
"index": "pypi",
"version": "==0.5.1"
}
},
"develop": {
"django": {
"hashes": [
"sha256:275bec66fd2588dd517ada59b8bfb23d4a9abc5a362349139ddda3c7ff6f5ade",
"sha256:939652e9d34d7d53d74d5d8ef82a19e5f8bb2de75618f7e5360691b6e9667963"
],
"index": "pypi",
"version": "==2.1.7"
},
"django-debug-toolbar": {
"hashes": [
"sha256:89d75b60c65db363fb24688d977e5fbf0e73386c67acf562d278402a10fc3736",
"sha256:c2b0134119a624f4ac9398b44f8e28a01c7686ac350a12a74793f3dd57a9eea0"
],
"index": "pypi",
"version": "==1.11"
},
"pytz": {
"hashes": [
"sha256:32b0891edff07e28efe91284ed9c31e123d84bea3fd98e1f72be2508f43ef8d9",
"sha256:d5f05e487007e29e03409f9398d074e158d920d36eb82eaf66fb1136b0c5374c"
],
"index": "pypi",
"version": "==2018.9"
},
"sqlparse": {
"hashes": [
"sha256:40afe6b8d4b1117e7dff5504d7a8ce07d9a1b15aeeade8a2d10f130a834f8177",
"sha256:7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873"
],
"version": "==0.3.0"
}
}
}
# Software
- Python 3
- Jinja2
- PostgreSQL
# Features
- Display recent news topics from Discourse on the frontpage
- Display recent activity on GitLab on the frontpage
- Allow for split PKGBUILDs in the CCR
Description of issue: PKGBUILDs in which the $pkgname variable is an array
(or list, whatever) and there are more than one package() function will be
rejected upon attempting to upload it to the CCR, see ccr/pkgsubmit.php#l248.
- Provide a better welcome/start page for browsers.
- FS#49 - PKGBUILD doesnt'show in some ccr packages
Clicking on PKGBUILD I got an error "Sorry, this file it's not a valid
PKGBUILD". Until now i've noticed this problem only with packages containing
'+' in their name (e.g. https://ccr.chakralinux.org/packages.php?ID=6171)
The problem is here :
```
$prefix = urlencode(substr(basename($_GET['p']), 0, 2));
$package = urlencode(basename($_GET['p']));
```
Because you make an urlencode.... so the ++ of the string is replace by spec
chars and the path is not valid when you open the file ...
(credit to csgib)
- FS#204 - CCR comments page issue
When a CCR page has a lot of comments, it does not show the buttons "forward"
"back" at the bottom to view the other comments. Look:
http://s23.postimg.org/l4ftzw2rf/ccr_comments_issue.png
- FS#1262 - Obfuscate e-mail addresses on ?who
Use CSS tricks. No JavaScript.
- i18n, l10n
- Improve the mirror status page to show notifications sent, maybe send them
automatically?
\ No newline at end of file
# Tools
## VCS
- git
## IDE
- PyCharm Professional
- Docker integration plugin
## CI/CD
- GitLab EE (with CI/CD, Runner (docker executor) and Registry)
- Docker
- Docker Compose
## Languages & libraries
- Python 3 (https://hub.docker.com/_/python)