# These targets are not files .PHONY: check test builder-image buildenv deploy-runtimes tools STACK ?= heroku-18 STACKS ?= heroku-16 heroku-18 heroku-20 TEST_CMD ?= test/run-versions && test/run-features && test/run-deps ENV_FILE ?= builds/dockerenv.default BUILDER_IMAGE_PREFIX := heroku-python-build # Converts a stack name of `heroku-NN` to its build Docker image tag of `heroku/heroku:NN-build`. STACK_IMAGE_TAG := heroku/$(subst -,:,$(STACK))-build check: @shellcheck -x bin/compile bin/detect bin/release bin/test-compile bin/utils bin/warnings bin/default_pythons @shellcheck -x bin/steps/collectstatic bin/steps/eggpath-fix bin/steps/eggpath-fix2 bin/steps/nltk bin/steps/pip-install bin/steps/pip-uninstall bin/steps/pipenv bin/steps/pipenv-python-version bin/steps/python @shellcheck -x bin/steps/hooks/* test: @echo "Running tests using: STACK=$(STACK) TEST_CMD='$(TEST_CMD)'" @echo @docker run --rm -it -v $(PWD):/buildpack:ro -e "STACK=$(STACK)" "$(STACK_IMAGE_TAG)" bash -c 'cp -r /buildpack /buildpack_test && cd /buildpack_test && $(TEST_CMD)' @echo builder-image: @echo "Generating binary builder image for $(STACK)..." @echo @docker build --pull -f builds/$(STACK).Dockerfile -t "$(BUILDER_IMAGE_PREFIX)-$(STACK)" . @echo buildenv: builder-image @echo "Starting build environment for $(STACK)..." @echo @echo "Usage..." @echo @echo " $$ bob build runtimes/python-X.Y.Z" @echo @docker run --rm -it --env-file="$(ENV_FILE)" -v $(PWD)/builds:/app/builds "$(BUILDER_IMAGE_PREFIX)-$(STACK)" bash deploy-runtimes: ifndef RUNTIMES $(error No runtimes specified! Use: "make deploy-runtimes RUNTIMES='python-X.Y.Z ...' [STACKS='heroku-18 ...'] [ENV_FILE=...]") endif @echo "Using: RUNTIMES='$(RUNTIMES)' STACKS='$(STACKS)' ENV_FILE='$(ENV_FILE)'" @echo @set -eu; for stack in $(STACKS); do \ $(MAKE) builder-image STACK=$${stack}; \ for runtime in $(RUNTIMES); do \ echo "Generating/deploying $${runtime} for $${stack}..."; \ echo; \ docker run --rm -it --env-file="$(ENV_FILE)" "$(BUILDER_IMAGE_PREFIX)-$${stack}" bob deploy "runtimes/$${runtime}"; \ echo; \ done; \ done tools: git clone https://github.com/kennethreitz/pip-pop.git mv pip-pop/bin/* vendor/pip-pop/ rm -rf pip-pop