diff --git a/devenv/local-npm/conf/nginx/Dockerfile b/devenv/local-npm/conf/nginx/Dockerfile new file mode 100644 index 00000000000..acdaf67bffa --- /dev/null +++ b/devenv/local-npm/conf/nginx/Dockerfile @@ -0,0 +1,3 @@ +FROM tutum/nginx +RUN rm /etc/nginx/sites-enabled/default +ADD sites-enabled /etc/nginx/sites-enabled diff --git a/devenv/local-npm/conf/nginx/sites-enabled/verdaccio-conf b/devenv/local-npm/conf/nginx/sites-enabled/verdaccio-conf new file mode 100644 index 00000000000..7bedc408727 --- /dev/null +++ b/devenv/local-npm/conf/nginx/sites-enabled/verdaccio-conf @@ -0,0 +1,14 @@ +server { + listen 80 default_server; + access_log /var/log/nginx/verdaccio.log; + charset utf-8; + location / { + proxy_pass http://grafana-npm.local:4873/; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-NginX-Proxy true; + proxy_ssl_session_reuse off; + proxy_set_header Host $http_host; + proxy_redirect off; + } +} \ No newline at end of file diff --git a/devenv/local-npm/docker-compose.yaml b/devenv/local-npm/docker-compose.yaml new file mode 100644 index 00000000000..66758eadd91 --- /dev/null +++ b/devenv/local-npm/docker-compose.yaml @@ -0,0 +1,26 @@ +version: '2' + +services: + verdaccio: + image: verdaccio/verdaccio:4 + container_name: verdaccio_root_path + ports: + - "4873:4873" + volumes: + - verdaccio:/verdaccio + + nginx: + restart: always + build: conf/nginx + ports: + - "80:80" + volumes: + - /www/public + volumes_from: + - verdaccio + links: + - verdaccio:verdaccio + +volumes: + verdaccio: + driver: local diff --git a/package.json b/package.json index fcb4b85eb7e..f4a6358f63c 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "packages:publishCanary": "lerna publish from-package --contents dist --dist-tag canary --yes", "packages:publishLatest": "lerna publish from-package --contents dist --yes", "packages:publishNext": "lerna publish from-package --contents dist --dist-tag next --yes", + "packages:publishDev": "lerna publish from-package --contents dist --dist-tag dev --yes --registry http://grafana-npm.local:4873 --force-publish=*", "packages:typecheck": "lerna run typecheck", "precommit": "grafana-toolkit precommit", "prettier:check": "prettier --list-different \"**/*.{ts,tsx,scss}\"", diff --git a/packages/README.md b/packages/README.md index 177352e5668..bbd8dfb6ec6 100644 --- a/packages/README.md +++ b/packages/README.md @@ -52,3 +52,42 @@ To build individual packages, run: ``` grafana-toolkit package:build --scope= ``` + +### Setting up @grafana/* packages for local development + +A known issue with @grafana/* packages is that a lot of times we discover problems on canary channel(see [versioning overview](#Versioning)) when the version was already pushed to npm. + +We can easily avoid that by setting up a local packages registry and test the packages before actually publishing to npm. + +In this guide you will set up [Verdaccio](https://verdaccio.org/) registry locally to fake npm registry. This will enable testing @grafana/* packages without the need for pushing to master. + +#### Setting up local npm registry + +From your terminal: +1. Modify `/etc/hosts` file and add the following entry: ```127.0.0.1 grafana-npm.local``` +2. Navigate to `devenv/local-npm` directory. +3. Run `docker-compose up`. This will start your local npm registry, available at http://grafana-npm.local:4873/ +4. Run `npm login --registry=http://grafana-npm.local:4873 --scope=@grafana` . This will allow you to publish any @grafana/* package into the local registry. +5. Run `npm config set @grafana:registry http://grafana-npm.local:4873`. This will config your npm to install @grafana scoped packages from your local registry. + +#### Publishing packages to local npm registry + +You need to follow [manual packages release procedure](#manual-release). The only difference is you need to run `yarn packages:publishDev` task in order to publish to you local registry. + +From your terminal: +1. Run `yarn packages:prepare`. +2. Commit changes in package.json and lerna.json files +3. Build packages: `yarn packages:build` +4. Run `yarn packages:publishDev`. +5. Navigate to http://grafana-npm.local:4873 and verify that version was published + +Locally published packages will be published under `dev` channel, so in your plugin package.json file you can use that channel. For example: + +``` +// plugin's package.json + +{ + ... + "@grafana/data": "dev" +} +```