Makefile 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. # Check Python major and minor version
  2. # For more information, see https://stackoverflow.com/a/22105036
  3. PYV = $(shell python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)")
  4. HIGHS_DIR = "../HiGHS"
  5. # Note: use tabs
  6. # actions which are virtual, i.e. not a script
  7. .PHONY: install install-for-dev install-for-test install-deps install-flexmeasures run-local test freeze-deps upgrade-deps update-docs update-docs-pdf show-file-space show-data-model clean-db cli-autocomplete build-highs-macos install-highs-macos
  8. # ---- Development ---
  9. run-local:
  10. python run-local.py
  11. test:
  12. make install-for-test
  13. pytest
  14. # ---- Documentation ---
  15. gen_code_docs := False # by default code documentation is not generated
  16. update-docs:
  17. @echo "Creating docs environment ..."
  18. make install-docs-dependencies
  19. @echo "Creating documentation ..."
  20. export GEN_CODE_DOCS=${gen_code_docs}; cd documentation; make clean; make html SPHINXOPTS="-W --keep-going -n"; cd ..
  21. update-docs-pdf:
  22. @echo "NOTE: PDF documentation requires packages (on Debian: latexmk texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended)"
  23. make install-docs-dependencies
  24. export GEN_CODE_DOCS=${gen_code_docs}; cd documentation; make clean; make latexpdf; make latexpdf; cd .. # make latexpdf can require two passes
  25. # ---- Installation ---
  26. install: install-deps install-flexmeasures
  27. install-for-dev:
  28. make freeze-deps
  29. make ensure-deps-folder
  30. pip-sync requirements/${PYV}/app.txt requirements/${PYV}/dev.txt requirements/${PYV}/test.txt
  31. make install-flexmeasures
  32. # Locally install HiGHS on macOS
  33. @if [ "$(shell uname)" = "Darwin" ]; then \
  34. make install-highs-macos; \
  35. fi
  36. install-for-test:
  37. make install-pip-tools
  38. # Pass pinned=no if you want to test against latest stable packages, default is our pinned dependency set
  39. ifneq ($(pinned), no)
  40. pip-sync requirements/${PYV}/app.txt requirements/${PYV}/test.txt
  41. else
  42. pip install --upgrade -r requirements/app.in -r requirements/test.in
  43. endif
  44. make install-flexmeasures
  45. # Locally install HiGHS on macOS
  46. @if [ "$(shell uname)" = "Darwin" ]; then \
  47. make install-highs-macos; \
  48. fi
  49. $(HIGHS_DIR):
  50. @if [ ! -d $(HIGHS_DIR) ]; then \
  51. git clone https://github.com/ERGO-Code/HiGHS.git $(HIGHS_DIR); \
  52. fi
  53. brew install cmake;
  54. build-highs-macos: $(HIGHS_DIR)
  55. cd $(HIGHS_DIR); \
  56. git checkout latest; \
  57. mkdir -p build; \
  58. cd build; \
  59. cmake ..; \
  60. make; \
  61. make install; \
  62. cd ../../flexmeasures;
  63. install-highs-macos: build-highs-macos
  64. pip install $(HIGHS_DIR) ; \
  65. install-deps:
  66. make install-pip-tools
  67. make freeze-deps
  68. # Pass pinned=no if you want to test against latest stable packages, default is our pinned dependency set
  69. ifneq ($(pinned), no)
  70. pip-sync requirements/${PYV}/app.txt
  71. else
  72. pip install --upgrade -r requirements/app.in
  73. endif
  74. install-flexmeasures:
  75. pip install -e .
  76. install-pip-tools:
  77. pip3 install -q "pip-tools>=7.2"
  78. install-docs-dependencies:
  79. pip install -r requirements/${PYV}/docs.txt
  80. freeze-deps:
  81. make ensure-deps-folder
  82. make install-pip-tools
  83. pip-compile -o requirements/${PYV}/app.txt requirements/app.in
  84. pip-compile -c requirements/${PYV}/app.txt -o requirements/${PYV}/test.txt requirements/test.in
  85. pip-compile -c requirements/${PYV}/app.txt -c requirements/${PYV}/test.txt -o requirements/${PYV}/dev.txt requirements/dev.in
  86. pip-compile -c requirements/${PYV}/app.txt -o requirements/${PYV}/docs.txt requirements/docs.in
  87. upgrade-deps:
  88. make ensure-deps-folder
  89. make install-pip-tools
  90. pip-compile --upgrade -o requirements/${PYV}/app.txt requirements/app.in
  91. pip-compile --upgrade -c requirements/${PYV}/app.txt -o requirements/${PYV}/test.txt requirements/test.in
  92. pip-compile --upgrade -c requirements/${PYV}/app.txt -c requirements/${PYV}/test.txt -o requirements/${PYV}/dev.txt requirements/dev.in
  93. pip-compile --upgrade -c requirements/${PYV}/app.txt -o requirements/${PYV}/docs.txt requirements/docs.in
  94. ifneq ($(skip-test), yes)
  95. make test
  96. endif
  97. # ---- Data ----
  98. show-file-space:
  99. # Where is our file space going?
  100. du --summarize --human-readable --total ./* ./.[a-zA-Z]* | sort -h
  101. upgrade-db:
  102. flask db current
  103. flask db upgrade
  104. flask db current
  105. show-data-model:
  106. # This generates the data model, as currently written in code, as a PNG picture.
  107. # Also try with --schema for the database model.
  108. # With --deprecated, you'll see the legacy models, and not their replacements.
  109. # Use --help to learn more.
  110. ./flexmeasures/data/scripts/visualize_data_model.py --uml
  111. ensure-deps-folder:
  112. mkdir -p requirements/${PYV}
  113. clean-db:
  114. ./flexmeasures/data/scripts/clean_database.sh ${db_name} ${db_user}
  115. cli-autocomplete:
  116. ./flexmeasures/cli/scripts/add_scripts_path.sh ${extension}