build_dev.sh 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/bin/env bash
  2. # ./bin/build_docker.sh dev 'linux/arm/v7'
  3. ### Bash Environment Setup
  4. # http://redsymbol.net/articles/unofficial-bash-strict-mode/
  5. # https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
  6. # set -o xtrace
  7. set -o errexit
  8. set -o errtrace
  9. set -o nounset
  10. set -o pipefail
  11. IFS=$'\n'
  12. REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && pwd )"
  13. cd "$REPO_DIR"
  14. which docker > /dev/null || exit 1
  15. TAG_NAME="${1:-$(git rev-parse --abbrev-ref HEAD)}"
  16. VERSION="$(jq -r '.version' < "$REPO_DIR/package.json")"
  17. SHORT_VERSION="$(echo "$VERSION" | perl -pe 's/(\d+)\.(\d+)\.(\d+)/$1.$2/g')"
  18. REQUIRED_PLATFORMS="${2:-"linux/arm64,linux/amd64,linux/arm/v7"}"
  19. # Build python package lists
  20. # https://pdm-project.org/latest/usage/lockfile/
  21. echo "[+] Generating requirements.txt and pdm.lock from pyproject.toml..."
  22. pdm lock --group=':all' --production --lockfile pdm.lock --strategy="cross_platform"
  23. pdm sync --group=':all' --production --lockfile pdm.lock --clean || pdm sync --group=':all' --production --lockfile pdm.lock --clean
  24. pdm export --group=':all' --production --lockfile pdm.lock --without-hashes -o requirements.txt
  25. pdm lock --group=':all' --dev --lockfile pdm.dev.lock --strategy="cross_platform"
  26. pdm sync --group=':all' --dev --lockfile pdm.dev.lock --clean || pdm sync --group=':all' --dev --lockfile pdm.dev.lock --clean
  27. pdm export --group=':all' --dev --lockfile pdm.dev.lock --without-hashes -o requirements-dev.txt
  28. echo "[+] Building Docker image: tag=$TAG_NAME version=$SHORT_VERSION arch=$REQUIRED_PLATFORMS"
  29. echo "[+] Building archivebox:$VERSION docker image..."
  30. # docker builder prune
  31. docker build . --no-cache -t archivebox-dev --load
  32. # docker buildx build --platform "$REQUIRED_PLATFORMS" --load . \
  33. # -t archivebox \
  34. # -t archivebox:$TAG_NAME \
  35. # -t archivebox:$VERSION \
  36. # -t archivebox:$SHORT_VERSION