diff --git a/.i18n.babel.config.js b/.i18n.babel.config.js new file mode 100644 index 0000000..a900a75 --- /dev/null +++ b/.i18n.babel.config.js @@ -0,0 +1 @@ +module.exports = require('@plone/volto/babel'); diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..080322a --- /dev/null +++ b/.npmignore @@ -0,0 +1,96 @@ +# https://docs.npmjs.com/using-npm/developers.html#keeping-files-out-of-your-package + +# Directories +api/ +bin/ +build/ +lib/ +g-api/ +tests/ + +# Docs +docs/ + +# Cypress +cypress/ + +# Tests +__tests__/ +*.snap + +# Files +.travis.yml +requirements-docs.txt +requirements-tests.txt +yarn.lock +.dockerignore +.gitattributes +.yarnrc +.nvmrc +changelogupdater.js +pip-selfcheck.json +Dockerfile +CNAME +entrypoint.sh +Jenkinsfile +Makefile + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next + +styleguide.config +.vscode +packages diff --git a/.project.eslintrc.js b/.project.eslintrc.js new file mode 100644 index 0000000..cfefd89 --- /dev/null +++ b/.project.eslintrc.js @@ -0,0 +1,46 @@ +const fs = require('fs'); +const path = require('path'); + +const projectRootPath = fs.realpathSync('./project'); // __dirname +const packageJson = require(path.join(projectRootPath, 'package.json')); +const jsConfig = require(path.join(projectRootPath, 'jsconfig.json')).compilerOptions; + +const pathsConfig = jsConfig.paths; + +let voltoPath = path.join(projectRootPath, 'node_modules/@plone/volto'); + +Object.keys(pathsConfig).forEach(pkg => { + if (pkg === '@plone/volto') { + voltoPath = `./${jsConfig.baseUrl}/${pathsConfig[pkg][0]}`; + } +}); +const AddonConfigurationRegistry = require(`${voltoPath}/addon-registry.js`); +const reg = new AddonConfigurationRegistry(projectRootPath); + +// Extends ESlint configuration for adding the aliases to `src` directories in Volto addons +const addonAliases = Object.keys(reg.packages).map(o => [ + o, + reg.packages[o].modulePath, +]); + + +module.exports = { + extends: `${projectRootPath}/node_modules/@plone/volto/.eslintrc`, + settings: { + 'import/resolver': { + alias: { + map: [ + ['@plone/volto', '@plone/volto/src'], + ...addonAliases, + ['@package', `${__dirname}/src`], + ['~', `${__dirname}/src`], + ], + extensions: ['.js', '.jsx', '.json'], + }, + 'babel-plugin-root-import': { + rootPathSuffix: 'src', + }, + }, + }, +}; + diff --git a/README.md b/README.md index 51314f2..fe6d085 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ [![Bugs](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-matomo-develop&metric=bugs)](https://sonarqube.eea.europa.eu/dashboard?id=volto-matomo-develop) [![Duplicated Lines (%)](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-matomo-develop&metric=duplicated_lines_density)](https://sonarqube.eea.europa.eu/dashboard?id=volto-matomo-develop) - [Volto](https://github.com/plone/volto) add-on ## Features @@ -23,8 +22,8 @@ Integrates [Matomo](https://matomo.org/) with Volto sites. At this moment there To configure it, either set the following variables: - * `settings.matomoSiteId` (if not available it uses: `1`) - * `settings.matomoUrlBase` (if not available it uses: `https://matomo.eea.europa.eu/`) +- `settings.matomoSiteId` (if not available it uses: `1`) +- `settings.matomoUrlBase` (if not available it uses: `https://matomo.eea.europa.eu/`) or `RAZZLE_MATOMO_SITE_ID` and `RAZZLE_MATOMO_URL` environment variables. @@ -44,107 +43,39 @@ The default behavior of volto-matomo is a call to `trackPageView` in `utils.js`, ## Getting started 1. Create new volto project if you don't already have one: - ``` - $ npm install -g @plone/create-volto-app - $ create-volto-app my-volto-project - $ cd my-volto-project - ``` - -1. Update `package.json`: - ```json - "addons": [ - "@eeacms/volto-matomo" - ], - - "dependencies": { - "@eeacms/volto-matomo": "1.0.0" - } - ``` - -1. Install new add-ons and restart Volto: - ``` - $ yarn - $ yarn start - ``` - -1. Go to http://localhost:3000 - -1. Happy editing! - -## Release - -### Automatic release using Jenkins - -* The automatic release is started by creating a [Pull Request](../../compare/master...develop) from `develop` to `master`. The pull request status checks correlated to the branch and PR Jenkins jobs need to be processed successfully. 1 review from a github user with rights is mandatory. -* It runs on every commit on `master` branch, which is protected from direct commits, only allowing pull request merge commits. -* The automatic release is done by [Jenkins](https://ci.eionet.europa.eu). The status of the release job can be seen both in the Readme.md badges and the green check/red cross/yellow circle near the last commit information. If you click on the icon, you will have the list of checks that were run. The `continuous-integration/jenkins/branch` link goes to the Jenkins job execution webpage. -* Automated release scripts are located in the `eeacms/gitflow` docker image, specifically [js-release.sh](https://github.com/eea/eea.docker.gitflow/blob/master/src/js-release.sh) script. It uses the `release-it` tool. -* As long as a PR request is open from develop to master, the PR Jenkins job will automatically re-create the CHANGELOG.md and package.json files to be production-ready. -* The version format must be MAJOR.MINOR.PATCH. By default, next release is set to next minor version (with patch 0). -* You can manually change the version in `package.json`. The new version must not be already present in the tags/releases of the repository, otherwise it will be automatically increased by the script. Any changes to the version will trigger a `CHANGELOG.md` re-generation. -* Automated commits and commits with [JENKINS] or [YARN] in the commit log are excluded from `CHANGELOG.md` file. - -### Manual release from the develop branch ( beta release ) - -#### Installation and configuration of release-it - -You need to first install the [release-it](https://github.com/release-it/release-it) client. ``` - npm install -g release-it + $ npm install -g @plone/create-volto-app + $ create-volto-app my-volto-project + $ cd my-volto-project ``` -Release-it uses the configuration written in the [`.release-it.json`](./.release-it.json) file located in the root of the repository. - -Release-it is a tool that automates 4 important steps in the release process: - -1. Version increase in `package.json` ( increased from the current version in `package.json`) -2. `CHANGELOG.md` automatic generation from commit messages ( grouped by releases ) -3. GitHub release on the commit with the changelog and package.json modification on the develop branch -4. NPM release ( by default it's disabled, but can be enabled in the configuration file ) +1. Update `package.json`: -To configure the authentification, you need to export GITHUB_TOKEN for [GitHub](https://github.com/settings/tokens) + ```json + "addons": [ + "@eeacms/volto-matomo" + ], - ``` - export GITHUB_TOKEN=XXX-XXXXXXXXXXXXXXXXXXXXXX + "dependencies": { + "@eeacms/volto-matomo": "1.0.0" + } ``` - To configure npm, you can use the `npm login` command or use a configuration file with a TOKEN : +1. Install new add-ons and restart Volto: ``` - echo "//registry.npmjs.org/:_authToken=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" > .npmrc + $ yarn + $ yarn start ``` -#### Using release-it tool - -There are 3 yarn scripts that can be run to do the release - -##### yarn release-beta - -Automatically calculates and presents 3 beta versions - patch, minor and major for you to choose ( or Other for manual input). - -``` -? Select increment (next version): -❯ prepatch (0.1.1-beta.0) - preminor (0.2.0-beta.0) - premajor (1.0.0-beta.0) - Other, please specify... -``` - -##### yarn release-major-beta - -Same as `yarn release-beta`, but with premajor version pre-selected. - -##### yarn release - -Generic command, does not automatically add the `beta` to version, but you can still manually write it if you choose Other. - -#### Important notes +1. Go to http://localhost:3000 -> Do not use release-it tool on master branch, the commit on CHANGELOG.md file and the version increase in the package.json file can't be done without a PULL REQUEST. +1. Happy editing! -> Do not keep Pull Requests from develop to master branches open when you are doing beta releases from the develop branch. As long as a PR to master is open, an automatic script will run on every commit and will update both the version and the changelog to a production-ready state - ( MAJOR.MINOR.PATCH mandatory format for version). +## Release +See [RELEASE.md](https://github.com/eea/volto-matomo/blob/master/RELEASE.md). ## How to contribute diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 0000000..0b3d03a --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,73 @@ +## Release + +### Automatic release using Jenkins + +- The automatic release is started by creating a [Pull Request](../../compare/master...develop) from `develop` to `master`. The pull request status checks correlated to the branch and PR Jenkins jobs need to be processed successfully. 1 review from a github user with rights is mandatory. +- It runs on every commit on `master` branch, which is protected from direct commits, only allowing pull request merge commits. +- The automatic release is done by [Jenkins](https://ci.eionet.europa.eu). The status of the release job can be seen both in the Readme.md badges and the green check/red cross/yellow circle near the last commit information. If you click on the icon, you will have the list of checks that were run. The `continuous-integration/jenkins/branch` link goes to the Jenkins job execution webpage. +- Automated release scripts are located in the `eeacms/gitflow` docker image, specifically [js-release.sh](https://github.com/eea/eea.docker.gitflow/blob/master/src/js-release.sh) script. It uses the `release-it` tool. +- As long as a PR request is open from develop to master, the PR Jenkins job will automatically re-create the CHANGELOG.md and package.json files to be production-ready. +- The version format must be MAJOR.MINOR.PATCH. By default, next release is set to next minor version (with patch 0). +- You can manually change the version in `package.json`. The new version must not be already present in the tags/releases of the repository, otherwise it will be automatically increased by the script. Any changes to the version will trigger a `CHANGELOG.md` re-generation. +- Automated commits and commits with [JENKINS] or [YARN] in the commit log are excluded from `CHANGELOG.md` file. + +### Manual release from the develop branch ( beta release ) + +#### Installation and configuration of release-it + +You need to first install the [release-it](https://github.com/release-it/release-it) client. + +``` +npm install -g release-it +``` + +Release-it uses the configuration written in the [`.release-it.json`](./.release-it.json) file located in the root of the repository. + +Release-it is a tool that automates 4 important steps in the release process: + +1. Version increase in `package.json` ( increased from the current version in `package.json`) +2. `CHANGELOG.md` automatic generation from commit messages ( grouped by releases ) +3. GitHub release on the commit with the changelog and package.json modification on the develop branch +4. NPM release ( by default it's disabled, but can be enabled in the configuration file ) + +To configure the authentification, you need to export GITHUB_TOKEN for [GitHub](https://github.com/settings/tokens) + +``` +export GITHUB_TOKEN=XXX-XXXXXXXXXXXXXXXXXXXXXX +``` + +To configure npm, you can use the `npm login` command or use a configuration file with a TOKEN : + +``` +echo "//registry.npmjs.org/:_authToken=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" > .npmrc +``` + +#### Using release-it tool + +There are 3 yarn scripts that can be run to do the release + +##### yarn release-beta + +Automatically calculates and presents 3 beta versions - patch, minor and major for you to choose ( or Other for manual input). + +``` +? Select increment (next version): +❯ prepatch (0.1.1-beta.0) + preminor (0.2.0-beta.0) + premajor (1.0.0-beta.0) + Other, please specify... +``` + +##### yarn release-major-beta + +Same as `yarn release-beta`, but with premajor version pre-selected. + +##### yarn release + +Generic command, does not automatically add the `beta` to version, but you can still manually write it if you choose Other. + +#### Important notes + +> Do not use release-it tool on master branch, the commit on CHANGELOG.md file and the version increase in the package.json file can't be done without a PULL REQUEST. + +> Do not keep Pull Requests from develop to master branches open when you are doing beta releases from the develop branch. As long as a PR to master is open, an automatic script will run on every commit and will update both the version and the changelog to a production-ready state - ( MAJOR.MINOR.PATCH mandatory format for version).