tasks/Makefile

184 строки
5.1 KiB
Makefile
Исходник Обычный вид История

# 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 2017
# @author Georg Ehrke <oc.list@georgehrke.com>
# @copyright Georg Ehrke 2017
# @author Raimund Schlüßler
2018-08-19 23:33:26 +03:00
# @copyright 2018 Raimund Schlüßler <raimund.schluessler@mailbox.org>
2016-03-14 19:20:22 +03:00
2017-10-15 14:41:00 +03:00
# Generic Makefile for building and packaging a 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
2017-10-15 14:41:00 +03:00
# * npm: for building and testing everything JS
#
2017-10-15 14:41:00 +03:00
# The npm command by launches the npm build script:
#
2017-10-15 14:41:00 +03:00
# npm run build
#
2017-10-15 14:41:00 +03:00
# The npm test command launches the npm test script:
#
2017-10-15 14:41:00 +03:00
# npm run test
#
2016-03-14 19:20:22 +03:00
app_name=$(notdir $(CURDIR))
2018-08-19 23:18:53 +03:00
build_directory=$(CURDIR)/build
appstore_build_directory=$(CURDIR)/build/appstore/$(app_name)
appstore_artifact_directory=$(CURDIR)/build/artifacts/appstore
appstore_package_name=$(appstore_artifact_directory)/$(app_name)
# code signing
# assumes the following:
# * the app is inside the nextcloud/apps folder
# * the private key is located in ~/.nextcloud/tasks.key
# * the certificate is located in ~/.nextcloud/tasks.crt
occ=$(CURDIR)/../../occ
configdir=$(CURDIR)/../../config
private_key=$(HOME)/.nextcloud/$(app_name).key
certificate=$(HOME)/.nextcloud/$(app_name).crt
sign=php -f $(occ) integrity:sign-app --privateKey="$(private_key)" --certificate="$(certificate)"
sign_skip_msg="Skipping signing, either no key and certificate found in $(private_key) and $(certificate) or occ can not be found at $(occ)"
2018-08-19 23:18:53 +03:00
ifneq ("$(wildcard $(private_key))","") #(,$(wildcard $(private_key)))
ifneq ("$(wildcard $(certificate))","")#(,$(wildcard $(certificate)))
ifneq ("$(wildcard $(occ))","")#(,$(wildcard $(occ)))
CAN_SIGN=true
endif
endif
endif
.PHONY: all
all: dev-setup build-js-production
# cleanup and generate a clean development setup
dev-setup: clean clean-dev npm-init
npm-init:
npm install
npm-update:
npm update
2019-01-27 00:05:11 +03:00
# Runs the development build
build-js:
npm run dev
# Runs the production build
build-js-production:
npm run build
# Runs the development build and keep watching
watch-js:
npm run watch
composer.phar:
curl -sS https://getcomposer.org/installer | php
install-composer-deps-dev: composer.phar
php composer.phar install -o
update-composer: composer.phar
rm -f composer.lock
php composer.phar install --prefer-dist
2018-08-19 23:18:53 +03:00
# Removes the build directory and the compiled files
.PHONY: clean
2016-03-14 19:20:22 +03:00
clean:
rm -rf ./js/*
ls -d ./css/* | grep -P '^((?!tasks-icon.css).)*$$' | xargs -r -d'\n' rm
2018-08-19 23:18:53 +03:00
rm -rf $(build_directory)
2017-10-15 14:41:00 +03:00
# Same as clean but also removes dependencies installed by npm
.PHONY: clean-dev
clean-dev:
rm -rf node_modules
2018-08-19 23:18:53 +03:00
# Builds the source package for the app store
.PHONY: appstore
appstore: clean build-js-production
mkdir -p $(appstore_build_directory) $(appstore_artifact_directory)
rsync -av . $(appstore_build_directory) \
--exclude=/.git \
--exclude=/.github \
2018-08-19 23:18:53 +03:00
--exclude=/.babelrc \
2018-12-11 11:48:25 +03:00
--exclude=/.babelrc.js \
--exclude=/.codecov.yml \
--exclude=/.editorconfig \
--exclude=/.eslintrc.cjs \
2018-08-31 00:23:11 +03:00
--exclude=/.gitattributes \
--exclude=/.gitignore \
--exclude=/.phpunit.result.cache \
2022-10-19 17:09:28 +03:00
--exclude=/.php-cs-fixer.dist.php.cache \
--exclude=/.php-cs-fixer.dist.php \
2018-08-19 23:18:53 +03:00
--exclude=/.gitlab-ci.yml \
2018-08-31 00:23:11 +03:00
--exclude=/.prettierrc.js \
--exclude=/.scrutinizer.yml \
--exclude=/.stylelintignore \
2018-08-19 23:18:53 +03:00
--exclude=/.stylelintrc \
2018-08-31 00:23:11 +03:00
--exclude=/.travis.yml \
--exclude=/.tx \
2018-08-19 23:18:53 +03:00
--exclude=/.v8flags*.json \
--exclude=/babel.config.cjs \
2018-08-31 00:23:11 +03:00
--exclude=/build.xml \
--exclude=/clover.integration.xml \
--exclude=/clover.unit.xml \
--exclude=/composer.json \
--exclude=/composer.lock \
--exclude=/composer.phar \
--exclude=/CONTRIBUTING.md \
--exclude=/issue_template.md \
2018-08-19 23:18:53 +03:00
--exclude=/gulpfile.js \
--exclude=/Makefile \
2018-08-19 23:18:53 +03:00
--exclude=/package-lock.json \
--exclude=/package.json \
--exclude=/phpunit.xml \
--exclude=/phpunit.integration.xml \
--exclude=/README.md \
--exclude=/stylelint.config.js \
--exclude=/vite.config.mjs \
--exclude=/build \
2018-08-19 23:18:53 +03:00
--exclude=/coverage \
2017-10-15 20:47:54 +03:00
--exclude=/img/src \
2018-08-31 00:23:11 +03:00
--exclude=/src \
2018-08-19 23:18:53 +03:00
--exclude=/node_modules \
--exclude=/screenshots/ \
2018-12-11 11:48:25 +03:00
--exclude=/test \
--exclude=/tests \
--exclude=/vendor
ifdef CAN_SIGN
mv $(configdir)/config.php $(configdir)/config-2.php
$(sign) --path="$(appstore_build_directory)"
mv $(configdir)/config-2.php $(configdir)/config.php
else
@echo $(sign_skip_msg)
endif
cd $(appstore_build_directory)/../; \
zip -r $(appstore_package_name).zip $(app_name)
tar -czf $(appstore_package_name).tar.gz -C $(appstore_build_directory)/../ $(app_name)
2018-08-19 23:18:53 +03:00
# create hash
ifdef CAN_SIGN
openssl dgst -sha512 -sign $(private_key) $(appstore_package_name).tar.gz | openssl base64 -out $(appstore_artifact_directory)/$(app_name).sha512
2018-08-19 23:18:53 +03:00
else
@echo "Skipping hashing, no key found in $(private_key)."
endif
2018-08-19 23:18:53 +03:00
# Command for running VUE tests
.PHONY: test
test:
npm run test
test-php:
phpunit -c phpunit.xml
phpunit -c phpunit.integration.xml
test-php-coverage:
phpunit -c phpunit.xml
phpunit -c phpunit.integration.xml
lint-php:
php composer.phar run-script cs:check