123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #! /bin/bash
- ######################################################################
- # This script sets up docker environments for supported Python versions
- # for updating packages in each of them.
- #
- # To upgrade, add "upgrade" as parameter.
- #
- # To execute this script, cd into the `ci` directory, then call from there.
- ######################################################################
- set -e
- set -x
- PYTHON_VERSIONS=(3.8 3.9 3.10 3.11 3.12)
- # check if we will upgrade or just freeze
- UPDATE_CMD=freeze-deps
- if [ "$1" == "upgrade" ]; then
- UPDATE_CMD=upgrade-deps
- echo "Going to upgrade dependencies with make $UPDATE_CMD ..."
- else
- echo "Going to freeze dependencies with make $UPDATE_CMD..."
- fi
- # Check if docker is installed
- if ! [ -x "$(command -v docker)" ]; then
- echo "Docker is not installed. Please install docker and try again."
- exit 1
- fi
- # Check if we can run docker without sudo (check is not needed for Macos system)
- if ! docker ps > /dev/null 2>&1 && [[ "$(uname)" != "Darwin" ]]; then
- echo "Docker is not running without sudo. Please add your user to the docker group and try again."
- echo "You may use the following command to do so:"
- echo "sudo usermod -aG docker $USER"
- echo "You will need to log out and log back in for this to take effect."
- exit 1
- fi
- SOURCE_DIR=$(pwd)/../
- TEMP_DIR=$(mktemp -d)
- # Copy the build files to the temp directory
- cp -r ../ci $TEMP_DIR/ci
- cp -r ../requirements $TEMP_DIR/requirements
- cp -r ../Makefile $TEMP_DIR
- cd $TEMP_DIR
- for PYTHON_VERSION in "${PYTHON_VERSIONS[@]}"
- do
- echo "Working on dependencies for Python $PYTHON_VERSION ..."
- # Check if container exists and remove it
- docker container inspect flexmeasures-update-packages-$PYTHON_VERSION > /dev/null 2>&1 && docker rm --force flexmeasures-update-packages-$PYTHON_VERSION
- # Build the docker image
- docker build --build-arg=PYTHON_VERSION=$PYTHON_VERSION -t flexmeasures-update-packages:$PYTHON_VERSION . -f ci/Dockerfile.update
- # Build flexmeasures
- # We are disabling running tests here, because we only want to update the packages. Running tests would require us to setup a postgres database,
- # which is not necessary for updating packages.
- docker run --name flexmeasures-update-packages-$PYTHON_VERSION -it flexmeasures-update-packages:$PYTHON_VERSION make $UPDATE_CMD skip-test=yes
- # Copy the requirements to the source directory
- docker cp flexmeasures-update-packages-$PYTHON_VERSION:/app/requirements/$PYTHON_VERSION $SOURCE_DIR/requirements/
- # Remove the container
- docker rm flexmeasures-update-packages-$PYTHON_VERSION
- # Remove the image
- docker rmi flexmeasures-update-packages:$PYTHON_VERSION
- done
- # Clean up docker builder cache
- echo "You can clean up the docker builder cache with the following command:"
- echo "docker builder prune --all -f"
- # Remove the temp directory
- rm -rf $TEMP_DIR
- # Return to the ci directory (in case you want to rerun this script)
- cd $SOURCE_DIR
- cd ci
|