lock_pkgs.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #!/usr/bin/env bash
  2. ### Bash Environment Setup
  3. # http://redsymbol.net/articles/unofficial-bash-strict-mode/
  4. # https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
  5. # set -o xtrace
  6. set -o errexit
  7. set -o errtrace
  8. set -o nounset
  9. set -o pipefail
  10. IFS=$'\n'
  11. REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && pwd )"
  12. cd "$REPO_DIR"
  13. py_version="$(grep 'version = ' pyproject.toml | awk '{print $3}' | jq -r)"
  14. js_version="$(jq -r '.version' package.json)"
  15. if [[ "$py_version" != "$js_version" ]]; then
  16. echo "[❌] Version in pyproject.toml ($py_version) does not match version in package.json ($js_version)!"
  17. exit 1
  18. fi
  19. echo "[🔒] Locking all ArchiveBox dependencies (pip, npm)"
  20. echo
  21. echo "pyproject.toml: archivebox $py_version"
  22. echo "package.json: archivebox $js_version"
  23. echo
  24. echo
  25. echo "[*] Cleaning up old lockfiles and build files"
  26. deactivate 2>/dev/null || true
  27. rm -Rf build dist
  28. rm -f pdm.lock
  29. rm -f pdm.dev.lock
  30. rm -f requirements.txt
  31. rm -f requirements-dev.txt
  32. rm -f package-lock.json
  33. rm -f archivebox/package.json
  34. rm -f archivebox/package-lock.json
  35. rm -Rf ./.venv
  36. rm -Rf ./node_modules
  37. rm -Rf ./archivebox/node_modules
  38. echo
  39. echo
  40. echo "[+] Generating dev & prod requirements.txt & pdm.lock from pyproject.toml..."
  41. pip install --upgrade pip setuptools
  42. pdm self update
  43. pdm venv create 3.12
  44. echo
  45. echo "pyproject.toml: archivebox $(grep 'version = ' pyproject.toml | awk '{print $3}' | jq -r)"
  46. echo "$(which python): $(python --version | head -n 1)"
  47. echo "$(which pdm): $(pdm --version | head -n 1)"
  48. pdm info --env
  49. pdm info
  50. echo
  51. # https://pdm-project.org/latest/usage/lockfile/
  52. # prod
  53. pdm lock --group=':all' --production --lockfile pdm.lock --strategy="cross_platform"
  54. pdm sync --group=':all' --production --lockfile pdm.lock --clean
  55. pdm export --group=':all' --production --lockfile pdm.lock --without-hashes -o requirements.txt
  56. cp ./pdm.lock ./pip_dist/
  57. cp ./requirements.txt ./pip_dist/
  58. # dev
  59. pdm lock --group=':all' --dev --lockfile pdm.dev.lock --strategy="cross_platform"
  60. pdm sync --group=':all' --dev --lockfile pdm.dev.lock --clean
  61. pdm export --group=':all' --dev --lockfile pdm.dev.lock --without-hashes -o requirements-dev.txt
  62. cp ./pdm.dev.lock ./pip_dist/
  63. cp ./requirements-dev.txt ./pip_dist/
  64. echo
  65. echo "[+]] Generating package-lock.json from package.json..."
  66. npm install -g npm
  67. echo
  68. echo "package.json: archivebox $(jq -r '.version' package.json)"
  69. echo
  70. echo "$(which node): $(node --version | head -n 1)"
  71. echo "$(which npm): $(npm --version | head -n 1)"
  72. echo
  73. npm install --package-lock-only
  74. cp package.json archivebox/package.json
  75. cp package-lock.json archivebox/package-lock.json
  76. echo
  77. echo "[√] Finished. Don't forget to commit the new lockfiles:"
  78. echo
  79. ls "pyproject.toml" | cat
  80. ls "pdm.lock" | cat
  81. ls "pdm.dev.lock" | cat
  82. ls "requirements.txt" | cat
  83. ls "requirements-dev.txt" | cat
  84. echo
  85. ls "package.json" | cat
  86. ls "package-lock.json" | cat
  87. ls "archivebox/package.json" | cat
  88. ls "archivebox/package-lock.json" | cat