summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile205
1 files changed, 50 insertions, 155 deletions
diff --git a/Makefile b/Makefile
index 374dbbb5..eda68688 100644
--- a/Makefile
+++ b/Makefile
@@ -1,43 +1,5 @@
# This file is licensed under the Affero General Public License version 3 or
# later. See the COPYING file.
-# @author Bernhard Posselt <dev@bernhard-posselt.com>
-# @copyright Bernhard Posselt 2016
-
-# Generic Makefile for building and packaging an Nextcloud app which uses npm and
-# Composer.
-#
-# Dependencies:
-# * make
-# * which
-# * curl: used if phpunit and composer are not installed to fetch them from the web
-# * tar: for building the archive
-# * npm: for building and testing everything JS
-#
-# If no composer.json is in the app root directory, the Composer step
-# will be skipped. The same goes for the package.json which can be located in
-# the app root or the js/ directory.
-#
-# The npm command by launches the npm build script:
-#
-# npm run build
-#
-# The npm test command launches the npm test script:
-#
-# npm run test
-#
-# The idea behind this is to be completely testing and build tool agnostic. All
-# build tools and additional package managers should be installed locally in
-# your project, since this won't pollute people's global namespace.
-#
-# The following npm scripts in your package.json install and update the bower
-# and npm dependencies and use gulp as build system (notice how everything is
-# run from the node_modules folder):
-#
-# "scripts": {
-# "test": "node node_modules/gulp-cli/bin/gulp.js karma",
-# "prebuild": "npm install && node_modules/bower/bin/bower install && node_modules/bower/bin/bower update",
-# "build": "node node_modules/gulp-cli/bin/gulp.js"
-# },
app_name=$(notdir $(CURDIR))
project_directory=$(CURDIR)/../$(app_name)
@@ -46,98 +8,61 @@ source_build_directory=$(CURDIR)/build/artifacts/source
source_package_name=$(source_build_directory)/$(app_name)
appstore_build_directory=$(CURDIR)/build/artifacts/appstore
appstore_package_name=$(appstore_build_directory)/$(app_name)
-npm=$(shell which npm 2> /dev/null)
-composer=$(shell which composer 2> /dev/null)
-
-all: build
-
-# Fetches the PHP and JS dependencies and compiles the JS. If no composer.json
-# is present, the composer step is skipped, if no package.json or js/package.json
-# is present, the npm step is skipped
-.PHONY: build
-build:
-ifneq (,$(wildcard $(CURDIR)/composer.json))
- make composer
-endif
-ifneq (,$(wildcard $(CURDIR)/package.json))
- make npm
-endif
-ifneq (,$(wildcard $(CURDIR)/js/package.json))
- make npm
-endif
-
-# Installs and updates the composer dependencies. If composer is not installed
-# a copy is fetched from the web
-.PHONY: composer
-composer:
-ifeq (, $(composer))
- @echo "No composer command available, downloading a copy from the web"
- mkdir -p $(build_tools_directory)
- curl -sS https://getcomposer.org/installer | php
- mv composer.phar $(build_tools_directory)
- php $(build_tools_directory)/composer.phar install --prefer-dist
- php $(build_tools_directory)/composer.phar update --prefer-dist
-else
- composer install --prefer-dist
- composer update --prefer-dist
-endif
-
-# We need to build css files for Nextcloud 11
-# variables.scss is necessary and not provided by stable11 => download it
-.PHONY: css
-css:
-ifeq (,$(wildcard $(CURDIR)/build/css/variables.scss))
- curl --silent --create-dirs -o $(CURDIR)/build/css/variables.scss https://raw.githubusercontent.com/nextcloud/server/master/core/css/variables.scss
- npm run scss-compile
-else
- npm run scss-compile
-endif
-
-# Installs npm dependencies
-.PHONY: npm
-npm:
-ifeq (,$(wildcard $(CURDIR)/package.json))
- cd js && $(npm) run build
-else
+
+all: dev-setup lint build-js-production test
+
+# Dev env management
+dev-setup: clean clean-dev npm-init
+
+npm-init:
+ npm install
+
+npm-update:
+ npm update
+
+# Building
+build-js:
+ npm run dev
+
+build-js-production:
npm run build
- make css
-endif
-# Removes the appstore build
-.PHONY: clean
+watch-js:
+ npm run watch
+
+# Testing
+test:
+ npm run test
+
+test-watch:
+ npm run test:watch
+
+test-coverage:
+ npm run test:coverage
+
+# Linting
+lint:
+ npm run lint
+
+lint-fix:
+ npm run lint:fix
+
+# Style linting
+stylelint:
+ npm run stylelint
+
+stylelint-fix:
+ npm run stylelint:fix
+
+# Cleaning
clean:
- rm -rf ./build
+ rm -f js/contacts.js
+ rm -f js/contacts.js.map
-# Same as clean but also removes dependencies installed by composer, bower and
-# npm
-.PHONY: distclean
-distclean: clean
- rm -rf vendor
+clean-dev:
rm -rf node_modules
- rm -rf js/vendor
- rm -rf js/node_modules
-
-# Builds the source and appstore package
-.PHONY: dist
-dist:
- make source
- make appstore
-
-# Builds the source package
-.PHONY: source
-source:
- rm -rf $(source_build_directory)
- mkdir -p $(source_build_directory)
- tar cvzf $(source_package_name).tar.gz ../$(app_name) \
- --exclude-vcs \
- --exclude="../$(app_name)/build" \
- --exclude="../$(app_name)/js/node_modules" \
- --exclude="../$(app_name)/node_modules" \
- --exclude="../$(app_name)/*.log" \
- --exclude="../$(app_name)/js/*.log" \
# Builds the source package for the app store, ignores php and js tests
-.PHONY: appstore
appstore:
rm -rf $(appstore_build_directory)
mkdir -p $(appstore_build_directory)
@@ -149,35 +74,5 @@ appstore:
$(project_directory)/l10n \
$(project_directory)/lib \
$(project_directory)/templates \
- $(project_directory)/js/public \
- $(project_directory)/js/vendor \
- $(project_directory)/js/dav/dav.js \
- $(project_directory)/js/contacts-inject-14.js
-
-# Command for running JS and PHP tests. Works for package.json files in the js/
-# and root directory. If phpunit is not installed systemwide, a copy is fetched
-# from the internet
-.PHONY: test
-test:
-ifneq (,$(wildcard $(CURDIR)/js/package.json))
- cd js && $(npm) run test
-endif
-ifneq (,$(wildcard $(CURDIR)/package.json))
- $(npm) run test
-endif
-# hotfix to prevent travis from using phpunix 6.x
- @echo "No phpunit command available, downloading a copy from the web"
- mkdir -p $(build_tools_directory)
- curl -sSL https://phar.phpunit.de/phpunit-5.7.9.phar -o $(build_tools_directory)/phpunit.phar
- php $(build_tools_directory)/phpunit.phar -c phpunit.xml --coverage-clover build/php-unit.clover
- php $(build_tools_directory)/phpunit.phar -c phpunit.integration.xml --coverage-clover build/php-integration.clover
-
-# watch out for changes and rebuild
-.PHONY: watch
-watch:
-ifneq (,$(wildcard $(CURDIR)/js/package.json))
- cd js && $(npm) run watch
-endif
-ifneq (,$(wildcard $(CURDIR)/package.json))
- $(npm) run watch
-endif
+ $(project_directory)/js \
+ $(project_directory)/COPYING