Merge pull request #3753 from alphagov/use-pip-tools

Use pip-tools
This commit is contained in:
Chris Hill-Scott
2021-01-11 10:56:12 +00:00
committed by GitHub
7 changed files with 236 additions and 128 deletions

View File

@@ -4,5 +4,5 @@ schedule: "every week on monday"
search: False
requirements:
- requirements-app.txt
- requirements-dev.txt
- requirements.in
- requirements_for_test.in

View File

@@ -27,6 +27,8 @@ $(eval export CF_HOME)
NOTIFY_CREDENTIALS ?= ~/.notify-credentials
VIRTUALENV_ROOT := $(shell [ -z $$VIRTUAL_ENV ] && echo $$(pwd)/venv || echo $$VIRTUAL_ENV)
## DEVELOPMENT
@@ -34,21 +36,35 @@ NOTIFY_CREDENTIALS ?= ~/.notify-credentials
help:
@cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-]+:.*?## .*$$' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
.PHONY: dependencies
dependencies: ## Install build dependencies
.PHONY: virtualenv
virtualenv:
[ -z $$VIRTUAL_ENV ] && [ ! -d venv ] && python3 -m venv venv || true
.PHONY: upgrade-pip
upgrade-pip: virtualenv
${VIRTUALENV_ROOT}/bin/pip install --upgrade pip
.PHONY: requirements
requirements: upgrade-pip requirements.txt ## Install dependencies for running the app
${VIRTUALENV_ROOT}/bin/pip install -r requirements.txt
.PHONY: requirements-for-test
requirements-for-test: upgrade-pip requirements_for_test.txt ## Install all dependencies for running the app, development and testing
${VIRTUALENV_ROOT}/bin/pip install -r requirements_for_test.txt
.PHONY: frontend
frontend:
npm set progress=false
npm install
npm rebuild node-sass
pip install -r requirements_for_test.txt
.PHONY: generate-version-file
generate-version-file: ## Generates the app version file
@echo -e "__git_commit__ = \"${GIT_COMMIT}\"\n__time__ = \"${DATE}\"" > ${APP_VERSION_FILE}
.PHONY: build
build: dependencies generate-version-file ## Build project
build: frontend requirements-for-test generate-version-file ## Build project
npm run build
pip install -r requirements.txt
.PHONY: test
test: ## Run tests
@@ -59,23 +75,10 @@ fix-imports:
isort -rc ./app ./tests
.PHONY: freeze-requirements
freeze-requirements:
rm -rf venv-freeze
virtualenv -p python3 venv-freeze
$$(pwd)/venv-freeze/bin/pip install -r requirements-app.txt
echo '# pyup: ignore file' > requirements.txt
echo '# This file is autogenerated. Do not edit it manually.' >> requirements.txt
cat requirements-app.txt >> requirements.txt
echo '' >> requirements.txt
$$(pwd)/venv-freeze/bin/pip freeze -r <(sed '/^--/d' requirements-app.txt) | sed -n '/The following requirements were added by pip freeze/,$$p' >> requirements.txt
rm -rf venv-freeze
.PHONY: test-requirements
test-requirements:
@diff requirements-app.txt requirements.txt | grep '<' \
&& { echo "requirements.txt doesn't match requirements-app.txt."; \
echo "Run 'make freeze-requirements' to update."; exit 1; } \
|| { echo "requirements.txt is up to date"; exit 0; }
freeze-requirements: ## create static requirements.txt
${VIRTUALENV_ROOT}/bin/pip install pip-tools
${VIRTUALENV_ROOT}/bin/pip-compile requirements.in
${VIRTUALENV_ROOT}/bin/pip-compile requirements_for_test.in
.PHONY: prepare-docker-build-image
prepare-docker-build-image: ## Prepare the Docker builder image

View File

@@ -1,88 +1,84 @@
# pyup: ignore file
# This file is autogenerated. Do not edit it manually.
# Run `make freeze-requirements` to update requirements.txt
# with package version changes made in requirements-app.txt
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile requirements.in
#
ago==0.0.93 # via -r requirements.in
awscli-cwlogs==1.4.6 # via -r requirements.in
awscli==1.18.211 # via awscli-cwlogs, notifications-utils
bleach==3.2.1 # via notifications-utils
blinker==1.4 # via -r requirements.in, gds-metrics
boto3==1.16.51 # via notifications-utils
botocore==1.19.51 # via awscli, boto3, s3transfer
cachetools==4.2.0 # via notifications-utils
certifi==2020.12.5 # via requests
chardet==4.0.0 # via requests
click==7.1.2 # via flask
colorama==0.4.3 # via awscli
dnspython==1.16.0 # via eventlet
docopt==0.6.2 # via notifications-python-client
docutils==0.15.2 # via awscli
et-xmlfile==1.0.1 # via openpyxl
eventlet==0.30.0 # via -r requirements.in
flask-login==0.5.0 # via -r requirements.in
flask-redis==0.4.0 # via notifications-utils
flask-wtf==0.14.3 # via -r requirements.in
flask==1.1.2 # via -r requirements.in, flask-login, flask-redis, flask-wtf, gds-metrics, notifications-utils
future==0.18.2 # via notifications-python-client
gds-metrics==0.2.4 # via -r requirements.in
geojson==2.5.0 # via notifications-utils
govuk-bank-holidays==0.8 # via -r requirements.in, notifications-utils
git+https://github.com/alphagov/govuk-frontend-jinja.git@v0.5.1-alpha#egg=govuk-frontend-jinja==0.5.1-alpha # via -r requirements.in
greenlet==0.4.17 # via eventlet
gunicorn==20.0.4 # via -r requirements.in
humanize==3.2.0 # via -r requirements.in
idna==2.10 # via requests
itsdangerous==1.1.0 # via -r requirements.in, flask, flask-wtf, notifications-utils
jdcal==1.4.1 # via openpyxl
jinja2==2.11.2 # via flask, govuk-frontend-jinja, notifications-utils
jmespath==0.10.0 # via boto3, botocore
lml==0.1.0 # via pyexcel, pyexcel-io
lxml==4.6.2 # via pyexcel-ezodf, pyexcel-ods3
markupsafe==1.1.1 # via jinja2, wtforms
mistune==0.8.4 # via notifications-utils
monotonic==1.5 # via notifications-python-client, notifications-utils
notifications-python-client==5.7.1 # via -r requirements.in
git+https://github.com/alphagov/notifications-utils.git@43.7.0#egg=notifications-utils==43.7.0 # via -r requirements.in
openpyxl==3.0.5 # via pyexcel-xlsx
orderedset==2.0.3 # via notifications-utils
packaging==20.8 # via bleach
phonenumbers==8.12.15 # via notifications-utils
prometheus-client==0.9.0 # via -r requirements.in, gds-metrics
pyasn1==0.4.8 # via rsa
pyexcel-ezodf==0.3.4 # via pyexcel-ods3
pyexcel-io==0.6.4 # via -r requirements.in, pyexcel, pyexcel-ods3, pyexcel-xls, pyexcel-xlsx
pyexcel-ods3==0.6.0 # via -r requirements.in
pyexcel-xls==0.6.2 # via -r requirements.in
pyexcel-xlsx==0.6.0 # via -r requirements.in
pyexcel==0.6.6 # via -r requirements.in
pyjwt==2.0.0 # via notifications-python-client
pyparsing==2.4.7 # via packaging
pypdf2==1.26.0 # via notifications-utils
python-dateutil==2.8.1 # via awscli-cwlogs, botocore
python-json-logger==2.0.1 # via notifications-utils
pytz==2020.5 # via -r requirements.in, notifications-utils
pyyaml==5.3.1 # via awscli, notifications-utils
redis==3.5.3 # via flask-redis
requests==2.25.1 # via awscli-cwlogs, govuk-bank-holidays, notifications-python-client, notifications-utils
rsa==4.5 # via awscli
s3transfer==0.3.3 # via awscli, boto3
shapely==1.7.1 # via -r requirements.in
six==1.15.0 # via awscli-cwlogs, bleach, eventlet, govuk-bank-holidays, python-dateutil
smartypants==2.0.1 # via notifications-utils
statsd==3.3.0 # via notifications-utils
texttable==1.6.3 # via pyexcel
urllib3==1.26.2 # via botocore, requests
webencodings==0.5.1 # via bleach
werkzeug==1.0.1 # via flask
wtforms==2.3.3 # via flask-wtf
xlrd==1.2.0 # via pyexcel-xls
xlwt==1.3.0 # via pyexcel-xls
ago==0.0.93
govuk-bank-holidays==0.8
humanize==3.2.0
Flask==1.1.2
Flask-WTF==0.14.3
Flask-Login==0.5.0
blinker==1.4
pyexcel==0.6.6
pyexcel-io==0.6.4
pyexcel-xls==0.6.2
pyexcel-xlsx==0.6.0
pyexcel-ods3==0.6.0
pytz==2020.5
gunicorn==20.0.4
eventlet==0.30.0
notifications-python-client==5.7.1
Shapely==1.7.1
# PaaS
awscli-cwlogs>=1.4,<1.5
itsdangerous==1.1.0
git+https://github.com/alphagov/notifications-utils.git@43.7.0#egg=notifications-utils==43.7.0
git+https://github.com/alphagov/govuk-frontend-jinja.git@v0.5.1-alpha#egg=govuk-frontend-jinja==0.5.1-alpha
# gds-metrics requires prometheseus 0.2.0, override that requirement as later versions bring significant performance gains
prometheus-client==0.9.0
gds-metrics==0.2.4
## The following requirements were added by pip freeze:
awscli==1.18.210
bleach==3.2.1
boto3==1.16.50
botocore==1.19.50
cachetools==4.2.0
certifi==2020.12.5
chardet==4.0.0
click==7.1.2
colorama==0.4.3
dnspython==1.16.0
docopt==0.6.2
docutils==0.15.2
et-xmlfile==1.0.1
flask-redis==0.4.0
future==0.18.2
geojson==2.5.0
greenlet==0.4.17
idna==2.10
jdcal==1.4.1
Jinja2==2.11.2
jmespath==0.10.0
lml==0.1.0
lxml==4.6.2
MarkupSafe==1.1.1
mistune==0.8.4
monotonic==1.5
openpyxl==3.0.5
orderedset==2.0.3
packaging==20.8
phonenumbers==8.12.15
pyasn1==0.4.8
pyexcel-ezodf==0.3.4
PyJWT==2.0.0
pyparsing==2.4.7
PyPDF2==1.26.0
python-dateutil==2.8.1
python-json-logger==2.0.1
PyYAML==5.3.1
redis==3.5.3
requests==2.25.1
rsa==4.5
s3transfer==0.3.3
six==1.15.0
smartypants==2.0.1
statsd==3.3.0
texttable==1.6.3
urllib3==1.26.2
webencodings==0.5.1
Werkzeug==1.0.1
WTForms==2.3.3
xlrd==1.2.0
xlwt==1.3.0
# The following packages are considered to be unsafe in a requirements file:
# setuptools

14
requirements_for_test.in Normal file
View File

@@ -0,0 +1,14 @@
-r requirements.txt
isort==4.3.21
pytest==5.3.2
pytest-env==0.6.2
pytest-mock==1.11.2
pytest-xdist==1.31.0
beautifulsoup4==4.8.1
freezegun==0.3.12
flake8==3.7.9
flake8-bugbear==19.8.0
flake8-print==3.1.4
requests-mock==1.7.0
# used for creating manifest file locally
jinja2-cli[yaml]==0.7.0

View File

@@ -1,14 +1,112 @@
-r requirements.txt
isort==4.3.21
pytest==5.3.2
pytest-env==0.6.2
pytest-mock==1.11.2
pytest-xdist==1.31.0
beautifulsoup4==4.8.1
freezegun==0.3.12
flake8==3.7.9
flake8-bugbear==19.8.0
flake8-print==3.1.4
requests-mock==1.7.0
# used for creating manifest file locally
jinja2-cli[yaml]==0.7.0
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile requirements_for_test.in
#
ago==0.0.93 # via -r requirements.txt
apipkg==1.5 # via execnet
attrs==20.3.0 # via flake8-bugbear, pytest
awscli-cwlogs==1.4.6 # via -r requirements.txt
awscli==1.18.211 # via -r requirements.txt, awscli-cwlogs, notifications-utils
beautifulsoup4==4.8.1 # via -r requirements_for_test.in
bleach==3.2.1 # via -r requirements.txt, notifications-utils
blinker==1.4 # via -r requirements.txt, gds-metrics
boto3==1.16.51 # via -r requirements.txt, notifications-utils
botocore==1.19.51 # via -r requirements.txt, awscli, boto3, s3transfer
cachetools==4.2.0 # via -r requirements.txt, notifications-utils
certifi==2020.12.5 # via -r requirements.txt, requests
chardet==4.0.0 # via -r requirements.txt, requests
click==7.1.2 # via -r requirements.txt, flask
colorama==0.4.3 # via -r requirements.txt, awscli
dnspython==1.16.0 # via -r requirements.txt, eventlet
docopt==0.6.2 # via -r requirements.txt, notifications-python-client
docutils==0.15.2 # via -r requirements.txt, awscli
entrypoints==0.3 # via flake8
et-xmlfile==1.0.1 # via -r requirements.txt, openpyxl
eventlet==0.30.0 # via -r requirements.txt
execnet==1.7.1 # via pytest-xdist
flake8-bugbear==19.8.0 # via -r requirements_for_test.in
flake8-print==3.1.4 # via -r requirements_for_test.in
flake8==3.7.9 # via -r requirements_for_test.in, flake8-bugbear, flake8-print
flask-login==0.5.0 # via -r requirements.txt
flask-redis==0.4.0 # via -r requirements.txt, notifications-utils
flask-wtf==0.14.3 # via -r requirements.txt
flask==1.1.2 # via -r requirements.txt, flask-login, flask-redis, flask-wtf, gds-metrics, notifications-utils
freezegun==0.3.12 # via -r requirements_for_test.in
future==0.18.2 # via -r requirements.txt, notifications-python-client
gds-metrics==0.2.4 # via -r requirements.txt
geojson==2.5.0 # via -r requirements.txt, notifications-utils
govuk-bank-holidays==0.8 # via -r requirements.txt, notifications-utils
git+https://github.com/alphagov/govuk-frontend-jinja.git@v0.5.1-alpha#egg=govuk-frontend-jinja==0.5.1-alpha # via -r requirements.txt
greenlet==0.4.17 # via -r requirements.txt, eventlet
gunicorn==20.0.4 # via -r requirements.txt
humanize==3.2.0 # via -r requirements.txt
idna==2.10 # via -r requirements.txt, requests
importlib-metadata==3.3.0 # via pluggy, pytest
isort==4.3.21 # via -r requirements_for_test.in
itsdangerous==1.1.0 # via -r requirements.txt, flask, flask-wtf, notifications-utils
jdcal==1.4.1 # via -r requirements.txt, openpyxl
jinja2-cli[yaml]==0.7.0 # via -r requirements_for_test.in
jinja2==2.11.2 # via -r requirements.txt, flask, govuk-frontend-jinja, jinja2-cli, notifications-utils
jmespath==0.10.0 # via -r requirements.txt, boto3, botocore
lml==0.1.0 # via -r requirements.txt, pyexcel, pyexcel-io
lxml==4.6.2 # via -r requirements.txt, pyexcel-ezodf, pyexcel-ods3
markupsafe==1.1.1 # via -r requirements.txt, jinja2, wtforms
mccabe==0.6.1 # via flake8
mistune==0.8.4 # via -r requirements.txt, notifications-utils
monotonic==1.5 # via -r requirements.txt, notifications-python-client, notifications-utils
more-itertools==8.6.0 # via pytest
notifications-python-client==5.7.1 # via -r requirements.txt
git+https://github.com/alphagov/notifications-utils.git@43.7.0#egg=notifications-utils==43.7.0 # via -r requirements.txt
openpyxl==3.0.5 # via -r requirements.txt, pyexcel-xlsx
orderedset==2.0.3 # via -r requirements.txt, notifications-utils
packaging==20.8 # via -r requirements.txt, bleach, pytest
phonenumbers==8.12.15 # via -r requirements.txt, notifications-utils
pluggy==0.13.1 # via pytest
prometheus-client==0.9.0 # via -r requirements.txt, gds-metrics
py==1.10.0 # via pytest, pytest-forked
pyasn1==0.4.8 # via -r requirements.txt, rsa
pycodestyle==2.5.0 # via flake8, flake8-print
pyexcel-ezodf==0.3.4 # via -r requirements.txt, pyexcel-ods3
pyexcel-io==0.6.4 # via -r requirements.txt, pyexcel, pyexcel-ods3, pyexcel-xls, pyexcel-xlsx
pyexcel-ods3==0.6.0 # via -r requirements.txt
pyexcel-xls==0.6.2 # via -r requirements.txt
pyexcel-xlsx==0.6.0 # via -r requirements.txt
pyexcel==0.6.6 # via -r requirements.txt
pyflakes==2.1.1 # via flake8
pyjwt==2.0.0 # via -r requirements.txt, notifications-python-client
pyparsing==2.4.7 # via -r requirements.txt, packaging
pypdf2==1.26.0 # via -r requirements.txt, notifications-utils
pytest-env==0.6.2 # via -r requirements_for_test.in
pytest-forked==1.3.0 # via pytest-xdist
pytest-mock==1.11.2 # via -r requirements_for_test.in
pytest-xdist==1.31.0 # via -r requirements_for_test.in
pytest==5.3.2 # via -r requirements_for_test.in, pytest-env, pytest-forked, pytest-mock, pytest-xdist
python-dateutil==2.8.1 # via -r requirements.txt, awscli-cwlogs, botocore, freezegun
python-json-logger==2.0.1 # via -r requirements.txt, notifications-utils
pytz==2020.5 # via -r requirements.txt, notifications-utils
pyyaml==5.3.1 # via -r requirements.txt, awscli, jinja2-cli, notifications-utils
redis==3.5.3 # via -r requirements.txt, flask-redis
requests-mock==1.7.0 # via -r requirements_for_test.in
requests==2.25.1 # via -r requirements.txt, awscli-cwlogs, govuk-bank-holidays, notifications-python-client, notifications-utils, requests-mock
rsa==4.5 # via -r requirements.txt, awscli
s3transfer==0.3.3 # via -r requirements.txt, awscli, boto3
shapely==1.7.1 # via -r requirements.txt
six==1.15.0 # via -r requirements.txt, awscli-cwlogs, bleach, eventlet, flake8-print, freezegun, govuk-bank-holidays, pytest-xdist, python-dateutil, requests-mock
smartypants==2.0.1 # via -r requirements.txt, notifications-utils
soupsieve==2.1 # via beautifulsoup4
statsd==3.3.0 # via -r requirements.txt, notifications-utils
texttable==1.6.3 # via -r requirements.txt, pyexcel
typing-extensions==3.7.4.3 # via importlib-metadata
urllib3==1.26.2 # via -r requirements.txt, botocore, requests
wcwidth==0.2.5 # via pytest
webencodings==0.5.1 # via -r requirements.txt, bleach
werkzeug==1.0.1 # via -r requirements.txt, flask
wtforms==2.3.3 # via -r requirements.txt, flask-wtf
xlrd==1.2.0 # via -r requirements.txt, pyexcel-xls
xlwt==1.3.0 # via -r requirements.txt, pyexcel-xls
zipp==3.4.0 # via importlib-metadata
# The following packages are considered to be unsafe in a requirements file:
# setuptools

View File

@@ -24,9 +24,6 @@ if [[ -z "$VIRTUAL_ENV" ]] && [[ -d venv ]]; then
source ./venv/bin/activate
fi
make test-requirements
display_result $? 1 "Requirements check"
flake8 .
display_result $? 1 "Code style check"