[![npm package link](https://img.shields.io/npm/v/nx-remotecache-minio)](https://www.npmjs.com/package/nx-remotecache-minio)

# nx-remotecache-minio

A task runner for [@nrwl/nx](https://nx.dev/react) that uses an Minio Storage as a remote cache. This enables all team members and CI servers to share a single cache. The concept and benefits of [computation caching](https://nx.dev/angular/guides/computation-caching) are explained in the NX documentation.

This package was built with [nx-remotecache-custom](https://www.npmjs.com/package/nx-remotecache-custom) 🙌

## Setup

```
npm install --save-dev nx-remotecache-minio
```

| Parameter  | Description                                                             |  Environment Variable / .env | `nx.json`   |
| ---------- |-------------------------------------------------------------------------| ---------------------------- | ----------- |
| Access Key | Connect to an MinIO Storage blob via a single URL.                      | `NXCACHE_MINIO_ACCESS_KEY`   | `accessKey` |
| Secret Key | Use together with Account Key for MinIO Credentials Authentication      | `NXCACHE_MINIO_SECRET_KEY`   | `secretKey` |
| URL        | Use together with Account Name for MinIO Credentials Authentication     | `NXCACHE_MINIO_URL`          | `url`       |
| Bucket     | Required. Specify which container should be used for storing the cache. | `NXCACHE_MINIO_BUCKET`       | `bucket`    |
| Region     | Optional. Specify the location of the storage e.g. "us-west-1".         | `NXCACHE_MINIO_REGION`       | `region`    |
| PathStyle  | Optional. Set to `false` to use virtual host style.                     | `NXCACHE_MINIO_PATH_STYLE`   | `pathStyle` |

```json
{
  "tasksRunnerOptions": {
    "default": {
      "runner": "nx-remotecache-minio",
      "options": {
        // All of the minio specific options can also be inserted via environment variables! ⬆️
        "accessKey": "minioadmin",
        "secretKey": "minioadmin",
        "url": "http://192.168.0.221:9000",
        "bucket": "nx-cache",
        "region": "us-west-1", // optional
        "cacheableOperations": ["build", "test", "lint", "e2e"]
      }
    }
  }
}
```

## Run it 🚀

Running tasks should now show the storage or retrieval from the remote cache:

```
------------------------------------------------------------------------
Built Angular Package
 - from: /Users/name/example-workspace/libs/example-lib
 - to:   /Users/name/example-workspace/dist/libs/example-lib
------------------------------------------------------------------------
------------------------------------------------------------------------
Stored output to remote cache: Minio Storage
Hash: d3d2bea71ea0f3004304c5cc88cf91be50b02bb636ebbdfcc927626fd8edf1ae
------------------------------------------------------------------------
```

## Advanced Configuration

| Option       | Environment Variable / .env | Description                                                                                           |
| ------------ | --------------------------- | ----------------------------------------------------------------------------------------------------- |
| `name`       | `NXCACHE_NAME`              | Set to provide task runner name for logging. Overrides name provided in implementation.               |
| `verbose`    |                             | Set to receive full stack traces whenever errors occur. Best used for debugging. **Default:** `false` |
| `silent`     |                             | Set to mute success and info logs. **Default:** `false`                                               |
| `read`       | `NXCACHE_READ`              | Set to enable / disable reading from the remote cache. **Default:** `true`                            |
| `write`      | `NXCACHE_WRITE`             | Set to enable / disable writing to the remote cache. **Default:** `true`                              |
| `dotenv`     |                             | Set to `false` to disable reading `.env` into `process.env`. **Default:** `true`                      |
| `dotenvPath` |                             | Set to read `.env` files from a different folder.                                                     |

```json
"tasksRunnerOptions": {
  "default": {
    "options": {
      "name": "My Storage",
      "verbose": true,
      "silent": true
    }
  }
}
```

## All Custom Runners

| Runner                                                                     | Storage             |
| -------------------------------------------------------------------------- | ------------------- |
| [nx-remotecache-azure](https://www.npmjs.com/package/nx-remotecache-azure) |  Azure Blob Storage |
| [nx-remotecache-minio](https://www.npmjs.com/package/nx-remotecache-minio) |  MinIO Storage      |
