Makefile 4.19 KB
Newer Older
1 2
all: css

3
production = true
4 5 6 7 8 9 10 11 12 13 14 15 16 17
css:
ifeq (, $(shell which npm))
	$(error ERROR: Can't find the "npm" executable. Try "sudo apt-get install npm")
endif
ifeq (, $(shell which node))
	$(error ERROR: Can't find the "node" executable. Try "sudo apt-get install nodejs-legacy")
endif
ifeq (, $(shell which gulp))
	$(error ERROR: Can't find the "gulp" executable. Try doing "sudo npm install -g gulp")
endif
ifndef npmsetup
	npm install
endif
	@echo "Building CSS..."
18
	@if gulp css --production $(production) ; then echo "Done!"; else npm install; gulp css --production $(production);  fi
19 20

clean-css:
Aaron Wells's avatar
Aaron Wells committed
21
	find ./htdocs/theme/* -maxdepth 1 -name "style" -type d -exec rm -Rf {} \;
22 23 24

help:
	@echo "Run 'make' to do "build" Mahara (currently only CSS)"
Yuliya Bozhko's avatar
Yuliya Bozhko committed
25 26
	@echo "Run 'make initcomposer' to install Composer and phpunit"
	@echo "Run 'make phpunit' to execute phpunit tests"
27 28
	@echo "Run 'make imageoptim' to losslessly optimise all images"
	@echo "Run 'make minaccept' to run the quick pre-commit tests"
29
	@echo "Run 'make checksignoff' to check that your commits are all Signed-off-by"
30 31 32 33 34 35 36 37
	@echo "Run 'make push' to push your changes to the repo"

imageoptim:
	find . -iname '*.png' -exec optipng -o7 -q {} \;
	find . -iname '*.gif' -exec gifsicle -O2 -b {} \;
	find . -iname '*.jpg' -exec jpegoptim -q -p --strip-all {} \;
	find . -iname '*.jpeg' -exec jpegoptim -q -p --strip-all {} \;

Yuliya Bozhko's avatar
Yuliya Bozhko committed
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
composer := $(shell ls external/composer.phar 2>/dev/null)

initcomposer:
ifdef composer
	@echo "Updating Composer..."
	@php external/composer.phar --working-dir=external update
else
	@echo "Installing Composer..."
	@curl -sS https://getcomposer.org/installer | php -- --install-dir=external
	@php external/composer.phar --working-dir=external install
endif

vendorphpunit := $(shell external/vendor/bin/phpunit --version 2>/dev/null)

phpunit:
	@echo "Running phpunit tests..."
ifdef vendorphpunit
	@external/vendor/bin/phpunit --log-junit logs/tests/phpunit-results.xml htdocs/
else
	@phpunit --log-junit logs/tests/phpunit-results.xml htdocs/
endif


revision := $(shell git rev-parse --verify HEAD 2>/dev/null)
whitelist := $(shell grep / test/WHITELIST | xargs -I entry find entry -type f | xargs -I file echo '! -path ' file 2>/dev/null)

64
minaccept:
65
	@echo "Running minimum acceptance test..."
Yuliya Bozhko's avatar
Yuliya Bozhko committed
66 67
ifdef revision
	@find htdocs -type f -name "*.php" -print0 | xargs -0 -n 1 -P 2 php -l > /dev/null && echo All good!
68
	@php test/versioncheck.php
Yuliya Bozhko's avatar
Yuliya Bozhko committed
69
	@find htdocs -type f -name "install.xml" -path "*/db/install.xml" -print0 | xargs -0 -n 1 -P 2 xmllint --schema htdocs/lib/xmldb/xmldb.xsd --noout
70
	@git diff-tree --diff-filter=ACMR --no-commit-id --name-only -r $(revision) | xargs -I {} find {} $(whitelist) | xargs -I list git show $(revision) -- list | test/coding-standard-check.pl
Yuliya Bozhko's avatar
Yuliya Bozhko committed
71 72 73
else
	@echo "No revision found!"
endif
74

75
jenkinsaccept: minaccept
Yuliya Bozhko's avatar
Yuliya Bozhko committed
76
	@find ./ ! -path './.git/*' -type f -print0 | xargs -0 clamscan > /dev/null && echo All good!
77

78
sshargs := $(shell git config --get remote.gerrit.url | sed -re 's~^ssh://([^@]*)@([^:]*):([0-9]*)/mahara~-p \3 -l \1 \2~')
79
mergebase := $(shell git fetch gerrit >/dev/null 2>&1 && git merge-base HEAD gerrit/master)
80 81 82 83 84 85 86 87
sha1chain := $(shell git log $(mergebase)..HEAD --pretty=format:%H | xargs)
changeidchain := $(shell git log $(mergebase)..HEAD --pretty=format:%b | grep '^Change-Id:' | cut -d' ' -f2)

securitycheck:
	@if ssh $(sshargs) gerrit query --format TEXT -- $(shell echo $(sha1chain) $(changeidchain) | sed -e 's/ / OR /g') | grep 'status: DRAFT' >/dev/null; then \
		echo "This change has drafts in the chain. Please use make security instead"; \
		false; \
	fi
88 89 90 91
	@if git log $(mergebase)..HEAD --pretty=format:%B | grep -iE '(security|cve)' >/dev/null; then \
		echo "This change has a security keyword in it. Please use make security instead"; \
		false; \
	fi
92 93

push: securitycheck minaccept
94 95
	@echo "Pushing the change upstream..."
	@if test -z "$(TAG)"; then \
96
		git push gerrit HEAD:refs/publish/master; \
97
	else \
98
		git push gerrit HEAD:refs/publish/master/$(TAG); \
99
	fi
100 101 102 103 104 105 106 107 108

security: minaccept
	@echo "Pushing the SECURITY change upstream..."
	@if test -z "$(TAG)"; then \
		git push gerrit HEAD:refs/drafts/master; \
	else \
		git push gerrit HEAD:refs/drafts/master/$(TAG); \
	fi
	ssh $(sshargs) gerrit set-reviewers --add \"Mahara Security Managers\" -- $(sha1chain)