* add 'npm' and 'npm-update' make targets and lockfile - `make npm` installs and updates node_modules, triggered automatically on `make css` and `make js` as it completes reasonably fast and ensures consistent modules. - `make npm-update` updates all dependencies to their latest version, regenerates `node_modules` from scratch and updates `package-lock.json`. It uses npm modules `updates` written by yours truly to find the latest version of each dependency. * add suggested make dependencies * remove package-lock.json during npm-update * regenerate package-lock.jsontags/v1.9.0-rc1
image: webhippie/nodejs:latest | image: webhippie/nodejs:latest | ||||
pull: true | pull: true | ||||
commands: | commands: | ||||
- npm install | |||||
- make css | - make css | ||||
- make js | - make js | ||||
when: | when: |
/node_modules | /node_modules | ||||
/modules/indexer/issues/indexers | /modules/indexer/issues/indexers | ||||
routers/repo/authorized_keys | routers/repo/authorized_keys | ||||
/package-lock.json | |||||
/yarn.lock | /yarn.lock | ||||
# Snapcraft | # Snapcraft |
package-lock=false | |||||
save-exact=true | save-exact=true |
fi | fi | ||||
cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && gxz -k -9 $${file}; done; | cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && gxz -k -9 $${file}; done; | ||||
.PHONY: js | |||||
js: | |||||
@if ([ ! -d "$(PWD)/node_modules" ]); then \ | |||||
echo "node_modules directory is absent, please run 'npm install' first"; \ | |||||
npm-check: | |||||
@hash npm > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ | |||||
echo "Please install Node.js 8.x or greater with npm"; \ | |||||
exit 1; \ | exit 1; \ | ||||
fi; | fi; | ||||
@hash npx > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ | @hash npx > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ | ||||
echo "Please install npm version 5.2+"; \ | |||||
echo "Please install Node.js 8.x or greater with npm"; \ | |||||
exit 1; \ | exit 1; \ | ||||
fi; | fi; | ||||
.PHONY: npm | |||||
npm: npm-check | |||||
npm install --no-save | |||||
.PHONY: npm-update | |||||
npm-update: npm-check | |||||
npx updates -cu | |||||
rm -rf node_modules package-lock.json | |||||
npm install --package-lock | |||||
.PHONY: js | |||||
js: npm | |||||
npx eslint public/js | npx eslint public/js | ||||
.PHONY: css | .PHONY: css | ||||
css: | |||||
@if ([ ! -d "$(PWD)/node_modules" ]); then \ | |||||
echo "node_modules directory is absent, please run 'npm install' first"; \ | |||||
exit 1; \ | |||||
fi; | |||||
@hash npx > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ | |||||
echo "Please install npm version 5.2+"; \ | |||||
exit 1; \ | |||||
fi; | |||||
css: npm | |||||
npx lesshint public/less/ | npx lesshint public/less/ | ||||
npx lessc --clean-css="--s0 -b" public/less/index.less public/css/index.css | npx lessc --clean-css="--s0 -b" public/less/index.less public/css/index.css | ||||
$(foreach file, $(filter-out public/less/themes/_base.less, $(wildcard public/less/themes/*)),npx lessc --clean-css="--s0 -b" public/less/themes/$(notdir $(file)) > public/css/theme-$(notdir $(call strip-suffix,$(file))).css;) | $(foreach file, $(filter-out public/less/themes/_base.less, $(wildcard public/less/themes/*)),npx lessc --clean-css="--s0 -b" public/less/themes/$(notdir $(file)) > public/css/theme-$(notdir $(call strip-suffix,$(file))).css;) |
### Updating CSS | ### Updating CSS | ||||
To generate the CSS, you will need [Node.js](https://nodejs.org/) 8.0 or greater and the build dependencies: | |||||
```bash | |||||
npm install | |||||
``` | |||||
At present we use [less](http://lesscss.org/) and [postcss](https://postcss.org) to generate our CSS. Do | |||||
**not** edit the files in `public/css` directly, as they are generated from `lessc` from the files in `public/less`. | |||||
To generate the CSS, you will need [Node.js](https://nodejs.org/) 8.0 or greater with npm. At present we use [less](http://lesscss.org/) and [postcss](https://postcss.org) to generate our CSS. Do **not** edit the files in `public/css` directly, as they are generated from `lessc` from the files in `public/less`. | |||||
Edit files in `public/less`, run the linter, regenerate the CSS and commit all changed files: | Edit files in `public/less`, run the linter, regenerate the CSS and commit all changed files: | ||||
### Updating JS | ### Updating JS | ||||
To run the JavaScript linter you will need [Node.js](https://nodejs.org/) 8.0 or greater and the build dependencies: | |||||
```bash | |||||
npm install | |||||
``` | |||||
Edit files in `public/js` and run the linter: | |||||
To run the JavaScript linter you will need [Node.js](https://nodejs.org/) 8.0 or greater with npm. Edit files in `public/js` and run the linter: | |||||
```bash | ```bash | ||||
make js | make js | ||||
``` | ``` | ||||
will run the integration tests in an sqlite environment. Other database tests | will run the integration tests in an sqlite environment. Other database tests | ||||
are available but may need adjustment to the local environment. | |||||
are available but may need adjustment to the local environment. | |||||
Look at | Look at | ||||
[`integrations/README.md`](https://github.com/go-gitea/gitea/blob/master/integrations/README.md) | [`integrations/README.md`](https://github.com/go-gitea/gitea/blob/master/integrations/README.md) |
{ | { | ||||
"license": "MIT", | "license": "MIT", | ||||
"devDependencies": { | "devDependencies": { | ||||
"autoprefixer": "9.5.1", | |||||
"autoprefixer": "9.6.0", | |||||
"eslint": "5.16.0", | "eslint": "5.16.0", | ||||
"less": "3.9.0", | "less": "3.9.0", | ||||
"less-plugin-clean-css": "1.5.1", | "less-plugin-clean-css": "1.5.1", | ||||
"lesshint": "6.3.6", | "lesshint": "6.3.6", | ||||
"postcss-cli": "6.1.2" | |||||
"postcss-cli": "6.1.2", | |||||
"updates": "8.1.0" | |||||
}, | }, | ||||
"browserslist": [ | "browserslist": [ | ||||
"> 1%", | "> 1%", |