def use_default_builder(self): self.builder = DOCKER self._variables = [ self._get_default_variables(), self._get_default_image_variables() ] self.scripts = Namespace( build=Script( "$(DOCKER_BUILD) -f $(DOCKER_BUILD_FILE) $(DOCKER_BUILD_OPTIONS) -t $(DOCKER_IMAGE):$(DOCKER_TAG) .", doc="Build a docker image.", ), push=Script( "$(DOCKER_PUSH) $(DOCKER_PUSH_OPTIONS) $(DOCKER_IMAGE):$(DOCKER_TAG)", doc="Push docker image to remote registry.", ), run=Script( "$(DOCKER_RUN) $(DOCKER_RUN_OPTIONS) --interactive --tty --rm --name=$(DOCKER_RUN_NAME) $(DOCKER_RUN_PORTS) $(DOCKER_IMAGE):$(DOCKER_TAG) $(DOCKER_RUN_COMMAND)", doc= "Run the default entry point in a container based on our docker image.", ), shell=Script( 'DOCKER_RUN_COMMAND="/bin/bash" $(MAKE) docker-run', doc="Run bash in a container based on our docker image.", ), )
def use_default_builder(self): self.builder = DOCKER self._variables = [ self._get_default_variables(), self._get_default_image_variables(), ] self.scripts = Namespace( build=Script('$(DOCKER_BUILD) $(DOCKER_BUILD_OPTIONS) -t $(DOCKER_IMAGE):$(DOCKER_TAG) .'), push=Script('$(DOCKER_PUSH) $(DOCKER_PUSH_OPTIONS) $(DOCKER_IMAGE):$(DOCKER_TAG)'), run=Script( '$(DOCKER_RUN) $(DOCKER_RUN_OPTIONS) --interactive --tty --rm --name=$(PACKAGE)_run -p 8000:8000 $(DOCKER_IMAGE):$(DOCKER_TAG) $(DOCKER_RUN_COMMAND)' ), shell=Script('DOCKER_RUN_COMMAND="/bin/bash" $(MAKE) docker-run'), )
def on_make_generate(self, event): makefile = event.makefile makefile["YAPF"] = "$(PYTHON) -m yapf" makefile["YAPF_OPTIONS"] = "-rip" makefile.add_target( "format", Script("\n".join([ "$(YAPF) $(YAPF_OPTIONS) .", "$(YAPF) $(YAPF_OPTIONS) Projectfile" ])), deps=("install-dev", ), phony=True, doc="Reformats the whole python codebase using yapf.", )
def on_start(self, event): """ :param ProjectEvent event: """ for k in event.variables: self.makefile[k.upper()] = event.variables[k] self.makefile.updateleft(("QUICK", "")) self.makefile.add_install_target() for extra in event.config["make"].extras: self.makefile.add_install_target(extra) self.makefile.add_target("quick", Script('@printf ""'), phony=True, hidden=True) self.dispatcher.dispatch( MakeConfig.on_generate, MakefileEvent(event.config.package_name, self.makefile, event.config)) if event.config["make"].include_medikit_targets: self.add_medikit_targets(event.config["make"]) if event.config["make"].includes: self.add_includes(event.config["make"].includes) # Recipe courtesy of https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html self.makefile.add_target( "help", r""" @echo "Available commands:" @echo @grep -E '^[a-zA-Z_-]+:.*?##[\s]?.*$$' --no-filename $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?##"}; {printf " make \033[36m%-30s\033[0m %s\n", $$1, $$2}' @echo """, phony=True, doc="Shows available commands.", ) # Actual rendering of the Makefile self.render_file_inline("Makefile", self.makefile.__str__(), override=True)
def add_target(self, target, rule, *, deps=None, phony=False, first=False, doc=None, hidden=False): if target in self._target_order: raise RuntimeError("Duplicate definition for make target «{}».".format(target)) if isinstance(rule, str): rule = Script(rule) self._target_values[target] = MakefileTarget( deps=tuple(deps) if deps else tuple(), rule=rule, doc=textwrap.dedent(doc or "").strip() ) self._target_order.appendleft(target) if first else self._target_order.append(target) if phony: self.phony.add(target) if hidden: self.hidden.add(target)
def on_make_generate(self, event): config = self.get_config(event) # type: FormatConfig makefile = event.makefile if "yapf" in config.active_tools and "black" in config.active_tools: raise RuntimeError( 'Using both "black" and "yapf" does not make sense, choose one.' ) format_script = [] if "black" in config.active_tools: makefile["BLACK"] = which("black") makefile["BLACK_OPTIONS"] = "--line-length " + str( LINE_LENGTH) # TODO line length global option format_script += ["$(BLACK) $(BLACK_OPTIONS) . Projectfile"] if "yapf" in config.active_tools: makefile["YAPF"] = "$(PYTHON) -m yapf" makefile["YAPF_OPTIONS"] = "-rip" format_script += ["$(YAPF) $(YAPF_OPTIONS) . Projectfile"] if "isort" in config.active_tools: makefile["ISORT"] = "$(PYTHON) -m isort" makefile["ISORT_OPTIONS"] = "" format_script += ["$(ISORT) $(ISORT_OPTIONS) . Projectfile"] if "prettier" in config.active_tools: makefile["PRETTIER"] = which("prettier") makefile["PRETTIER_OPTIONS"] = "--write" makefile[ "PRETTIER_PATTERNS"] = "**/*.\{j,t\}s **/*.\{j,t\}sx \!docs/**" format_script += [ "$(PRETTIER) $(PRETTIER_OPTIONS) $(PRETTIER_PATTERNS)" ] makefile.add_target( "format", Script("\n".join(format_script)), deps=("install-dev", ), phony=True, doc="Reformats the codebase (with " + ", ".join(sorted(config.active_tools)) + ").", )
def add_target(self, target, rule, deps=None, phony=False, first=False, doc=None): if target in self._target_order: raise RuntimeError( 'Duplicate definition for make target «{}».'.format(target)) if isinstance(rule, str): rule = Script(rule) self._target_values[target] = ( deps or list(), rule, textwrap.dedent(doc or '').strip(), ) self._target_order.appendleft( target) if first else self._target_order.append(target) if phony: self.phony.add(target)