{"id":13583081,"url":"https://github.com/w3f/polkadot-deployer","last_synced_at":"2025-10-01T15:30:26.669Z","repository":{"id":39034322,"uuid":"180601555","full_name":"w3f/polkadot-deployer","owner":"w3f","description":"Tool for deploying polkadot networks","archived":true,"fork":false,"pushed_at":"2022-07-07T06:09:45.000Z","size":217795,"stargazers_count":99,"open_issues_count":21,"forks_count":45,"subscribers_count":15,"default_branch":"master","last_synced_at":"2024-04-25T12:43:57.821Z","etag":null,"topics":["blockchain","devops","devops-tools","docker","helm","kubernetes","polkadot","terraform"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/w3f.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.md","support":null}},"created_at":"2019-04-10T14:40:17.000Z","updated_at":"2024-04-21T10:38:09.000Z","dependencies_parsed_at":"2022-08-20T01:51:18.138Z","dependency_job_id":null,"html_url":"https://github.com/w3f/polkadot-deployer","commit_stats":null,"previous_names":[],"tags_count":232,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3f%2Fpolkadot-deployer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3f%2Fpolkadot-deployer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3f%2Fpolkadot-deployer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3f%2Fpolkadot-deployer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/w3f","download_url":"https://codeload.github.com/w3f/polkadot-deployer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234878317,"owners_count":18900676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","devops","devops-tools","docker","helm","kubernetes","polkadot","terraform"],"created_at":"2024-08-01T15:03:14.676Z","updated_at":"2025-10-01T15:30:21.599Z","avatar_url":"https://github.com/w3f.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"[![CircleCI](https://circleci.com/gh/w3f/polkadot-deployer.svg?style=svg)](https://circleci.com/gh/w3f/polkadot-deployer)\n\n# polkadot-deployer\n\npolkadot-deployer is a general tool for deploying Polkadot nodes, aiming to make it easy to deploy a network of nodes. To learn more about Polkadot explore [the wiki](https://wiki.polkadot.network)\nor [join the conversation at Riot](https://riot.im/app/#/room/#polkadot-watercooler:matrix.org).\n\npolkadot-deployer allows you to create local or remote cloud deployments of polkadot. Currently it supports local deployments using Kind and remote deployments using Google Cloud Platform, Amazon's AWS, Microsoft's Azure and Digital Ocean for the infrastructure deployment and Cloudflare for the DNS settings that make your network accessible through websockets RPC.\n\n## Requirements\n\nThe tool is meant to work on Linux and MacOS machines. In order to be able to use the tool you will require to have installed recent versions of [node](https://nodejs.org/en/download/) (developed and tested with `v10.7.0` and `v10.15.1`) and\n[docker](https://docs.docker.com/install/) for local deployments (developed and tested with `18.09.5`). Once installed, you should also be able to\n[run docker as a regular user](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user). See the [Troubleshooting section](#troubleshooting) in case you have problems running the tool.\n\n## Installation and execution\nThere are two methods to successfully install and operate ```polkadot-deployer``` in order to deploy a number of polkadot nodes.\n* Using yarn packet manager by issuing the following commands:\n  ```yarn global add polkadot-deployer``` and ```polkadot-deployer CMD``` to run a command.\n* By downloading the latest version from git and then issuing the following commands from within the project directory:\n\t```git clone git@github.com:w3f/polkadot-deployer.git```, execute ```yarn install``` to install all requirements and ```node . CMD``` to run a command.\n\n## Local deployments\nAfter you have succesfully installed polkadot validator using either method, you may follow the next steps to guide you through the proccess of deployng polkadot validator locally on your hardware. This can be done either using the interactive menu or by using a config file.\n* In order to create a validator through the interactive menu issue the following command:  \n\t```node . create --verbose```  \n* In order to deploy polkadot using the preset configuration file: `config/create.local.sample.json` issue the following command:  \n\t```node . create --config config/create.local.sample.json --verbose```  \n\nThe process will start creating an instance of polkadot inside a your local kubernetes cluster that will be created as part of the procedure using [kubernetes-sigs/kind](https://github.com/kubernetes-sigs/kind). The entire procedure will take some time, so it might be a good idea to get some coffee at this point.\nOnce the procces is done you can also view all your local deployments using the command: ```node . list```\n\nAt this point you can attach to the local polkadot web socket by visiting the websockets endpoint available at ws://127.0.0.1:11000 Furthermore you at this point you will be presented with the raw seeds for the created accounts, including the nodeKey, peerId, stash address and seed etc.\nOnce you are done with your local deployment of polkadot, you can delete your deployment using the destroy [name] command: ```node . destroy testnet5```\nMore information on the polkadot-deployer usage commands can be found in the [usage](#usage) section.\n\n\nCheck the [Troubleshooting section](#troubleshooting) if something goes wrong with the installation.\n\n## Remote deployments\n\nTo perform a remote deployment of polkadot to a public cloud provider we will follow the same general path. The process differs with each public infrastructure provider. Currently we support GCP, AWS, Azure and Digital Ocean. To successfuly deploy polkadot these infrastructure providers you will first need to setup a cloudflare account and a GCP account. Cloudflare is used to provide a domain name for your deployment and the GCP for maintaining the state of your deployment. Then you will need to provide the specific attributes required for your deployment in each of the supported providers. The required steps are as follows:\n\n* A Linux machine to run this tool (macOS may fail, see the [Troubleshooting section](#troubleshooting) in case you have problems running the tool).\n\n* Cloudflare credentials as two environment variables `CLOUDFLARE_EMAIL` and `CLOUDFLARE_API_KEY` (see [here](https://api.cloudflare.com/#getting-started)) for details about the API key, the email should be the one used for registration. Also, your domain name registrar should be Cloudflare since this tool relies on Cloudflare for generating SSL certification). The process will register your deployment on Cloudflare and create the required subdomains and certificates.\n\n* GCP service account and credentials in the form of the environment variable\n`GOOGLE_APPLICATION_CREDENTIALS` with the path of the json credentials file for your service account (see [here](https://cloud.google.com/iam/docs/service-accounts)).\nThe GCP configuration is required for use by the process to keep the built state.\n\n* A project on GCP. Keep the projectID and domain handly as you will need to edit the config files so that they contain this information. A bucket will be created under the particular projectID that will be used to store the project's terraform backend.\n\n* An account on opsgenie that will be used for notifications. Once you have created the account you will need to set the environmental variables `OPSGENIE_TOKEN` to that of your token (see [here](https://docs.opsgenie.com/docs/api-key-management) for details) and also set the `OPSGENIE_API_URL` variable (see [here](https://docs.opsgenie.com/docs/european-service-region) for details).\n\n* Configure specific requirements that depend on your infrastructure provider. More details on this subject are described on the following section for each of the specific providers.\n\n* Read through the [usage](#troubleshooting) section.\n\n---\n**NOTE**\n\n* Optionally if you wish to use [opsgenie](https://www.atlassian.com/software/opsgenie) to receive notifications regarding alerts from your deployment, you will need to edit the configuration file of your deployment and set  ```opsgenie.enabled\": true``` and also set an environmental variable `OPSGENIE_TOKEN` with your token. By default the deployment will use 'https://api.eu.opsgenie.com/v2/alerts' as the API's URL. In case you require a different API endpoint you will need to also set the  variable ```opsgenie.url``` in the configuration file appropriately (see [here](https://docs.opsgenie.com/docs/european-service-region) for details).\n---\n---\n**NOTE**\n\nRunning the following configurations will cause charges by the providers. You should run the corresponding destroy command as soon as you are finished with your testing to avoid unwanted expenses.\n\n---\n\nThe required steps to successfully deploy polkadot validator are as follows:\n\n\nDownload the latest polkadot deployer from git issuing the following command:  \n```git clone git@github.com:w3f/polkadot-deployer.git``` and run ```yarn install``` to install all requirements.\n\n\n\u003cdetails\u003e\u003csummary\u003eGCP\u003c/summary\u003e\n\nTo make a deployment on GCP you are required to have the aforementioned GCP service account and project properly configured and meet the following requirements:\n\n* Make sure the service account has sufficient privileges for GKE.\n\n* Enough quota on GCP to create the required resources (terraform will show the exact errors if this condition is not met).\n\n* Kubernetes Engine API and billing enabled for your project (see [here](https://cloud.google.com/kubernetes-engine/docs/quickstart)).\n\nIn order to deploy polkadot on GCP you need to edit the preset configuration file: ```config/create.remote.sample-GCP.json``` so that it contains your projectID and domain. Then you can issue the following command:  \n\n ```node . create --config config/create.remote.sample-GCP.json --verbose```  \n\nThe process will start creating an instance of polkadot on GCP.\nBy default a new cluster will be created with the name polkadot-deployer at your default location with 2 `n1-standard-2` nodes under the specified project ID.\n\nIf you wish to delete your remote deployment of polkadot, you can use the destroy [name] command:  \n\n ```node . destroy gcp-testnet```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eAWS\u003c/summary\u003e\n\nTo make a deployment on AWS you're required to configure your AWS credentials. It's recommended to do so using the corresponding `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` and `AWS_DEFAULT_REGION` environment variables. You can set the required values for these variables following the provided [documentation](https://docs.aws.amazon.com/amazonswf/latest/awsrbflowguide/set-up-creds.html).\n\nIn order to deploy polkadot on GCP you need to edit the preset configuration file: ```config/create.remote.sample-AWS.json``` so that it contains your projectID and domain. The domain must be a domain that can be controlled by the given cloudflare account. Then you can issue the following command:\n\n ```node . create --config config/create.remote.sample-AWS.json --verbose```\n\nThe process will start creating an instance of polkadot on AWS. The process with create a 2 node cluster using `m4.large` machines. An IAM role and a VPC will be created that will contain the Amazon EKS for the deployment along with the required security groups and ingress rules. You may review the entire process [here](https://github.com/w3f/polkadot-deployer/tree/master/terraform/aws).\n\nIf you wish to delete your remote deployment of polkadot, you can use the destroy [name] command:  \n\n ```node . destroy aws-testnet```  \n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eAzure\u003c/summary\u003e\n\nTo deploy polkadot on Azure you're required to set  `ARM_CLIENT_ID`, `ARM_CLIENT_SECRET`, `ARM_SUBSCRIPTION_ID`, `ARM_TENANT_ID`, `TF_VAR_client_id` and `TF_VAR_client_secret` environmental variables. You can find your's by following the [documentation](https://docs.microsoft.com/en-us/azure/terraform/terraform-create-k8s-cluster-with-tf-and-aks).\n\nIn order to deploy polkadot on GCP you need to edit the preset configuration file: ```config/create.remote.sample-AZURE.json``` so that it contains your projectID and domain. The domain must be a domain that can be controlled by the given cloudflare account. Then you can issue the following command:  \n\n ```node . create --config config/create.remote.sample-AZURE.json --verbose```  \n\nThe process will start creating an instance of polkadot on Azure, deployed as a 2 ```Standard_D2s_v3```  node kubernetes cluster on your default location connected through a virtual network. Furthermore the required security groups and inbound rules will be applied to your deployment. You may review the entire process [here](https://github.com/w3f/polkadot-deployer/tree/master/terraform/azure).\n\nIf you wish to delete your remote deployment of polkadot, you can use the destroy [name] command:  \n\n ```node . destroy azure-testnet```  \n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eDigital Ocean\u003c/summary\u003e\n\nTo make a deployment on Digital Ocean you're required to configure your Digital Ocean's credentials. You can do this by setting the `DIGITALOCEAN_ACCESS_TOKEN` environment variable. You can get your access token by following the [documentation](https://www.digitalocean.com/docs/api/create-personal-access-token/).\n\nIn order to deploy polkadot on GCP you need to edit the preset configuration file: ```config/create.remote.sample-DO.json``` so that it contains your projectID and domain. The domain must be a domain that can be controlled by the given cloudflare account. Then you can issue the following command:\n\n ```node . create --config config/create.remote.sample-DO.json --verbose```  \n\nThe process will start creating an instance of polkadot on Digital Ocean, using a 2 node kubernetes cluster of `s-4vcpu-8gb` machines. You may review the entire process [here](https://github.com/w3f/polkadot-deployer/tree/master/terraform/do).\n\nIf you wish to delete your remote deployment of polkadot, you can use the destroy [name] command:  \n\n ```node . destroy do-testnet```\n\n\u003c/details\u003e\n\n### Multi provider deployment\nYou may also wish to run a multi AZ multi-provider deployment. In order to do so, you can create a configuration file based on your requirements and create your deployment from there. Keep in mind that you can use any combination of these providers as you see fit. The configuration file: create.remote.sample.json exists only for the purpose of the tutorial and as an example of what you can do. In order to deploy polkadot on GCP you need to edit the preset configuration file: ```config/create.remote.sample.json``` so that it contains your projectID and domain. The domain must be a domain that can be controlled by the given cloudflare account. Then you can issue the following command:\n\n```node . create --config config/create.remote.sample.json --verbose```  \n\nThe process will start creating an instance of polkadot on AWS, AZURE and GCP.\n\nIf you wish to delete your remote deployment of polkadot, you can use the destroy [name] command:\n\n ```node . destroy testnet9```\n\nMore information on the polkadot-deployer usage commands can be found in the [usage](#usage) section.\n\n\n\n## Usage\n\n`polkadot-deployer` allows you to create, list, update and delete Polkadot\nnetworks of nodes, which we'll call deployments from now on. All the interaction\nwith the command line tool is done through the following sub-commands:\n\n### `create [options]`\n\nCreates a deployment. It accepts a `--config` option with the path of a json\nfile containing the definition of the deployment, like this for local deployments:\n\n```\n{\n  \"name\": \"testnet1\",\n  \"type\": \"local\",\n  \"nodes\": 4\n}\n```\nor this for remote deployments:\n```\n{\n  \"name\": \"testnet6\",\n  \"type\": \"gcp\",\n  \"nodes\": 1,\n  \"remote\": {\n    \"monitoring\": true,\n    \"clusters\": [\n      {\n        \"location\": \"europe-west1-b\",\n        \"projectID\": \"polkadot-benchmarks\",\n        \"domain\": \"foo.bar\"\n      }\n    ]\n  }\n}\n```\n\nThese are the fields you can use:\n\n* `name`: unique string to distinguish your deployment in subsequent commands.\n\n* `type`: either local or remote, `local` or `gcp` allowed.\n\n* `nodes`: number of validators of the network, an integer between 2 and 20.\n\n* `remote.monitoring`: enable monitoring stack, see the [Monitoring section](#monitoring)\n\n* `remote.clusters[i].location`: region or zone to use for the deployment.\n\n* `remote.clusters[i].projectID`: id of the GCP project.\n\n* `remote.clusters[i].domain`: under which domain the tool will create the websockets endpoint.\n\nYou can also omit the `--config` option the tool will launch a wizard utility to\nget the deployment details.\n\nEach deployment consists of two components, a cluster and a network.\n\n* The cluster is the common platform on top of which the network runs, and\nis currently based on kubernetes v1.13.\n\n* The network is composed of a set of polkadot nodes connected together, each of\nthem created from this [polkadot Helm chart](https://github.com/w3f/polkadot-chart).\nHelm charts are application packages for kubernetes, more about them\n[here](https://helm.sh/).\n\nOnce the deployment is created, the tool sets up a port forwarding process, so\nthat one of the network nodes' websockets endpoint is available on your local\nhost. The location of this port is shown at the end of the `polkadot-deployer\ncreate` call:\n\n```\n*********************************************************\n Websockets endpoint available at ws://127.0.0.1:11000\n*********************************************************\n```\nYou can use that url to access the network from [PolkadotJS -\u003e Settings](https://polkadot.js.org/apps/#/settings)\n\n![UI Settings](/images/ui-settings.png)\n\n### `list`\n\nShows details of all the created deployments:\n\n```\n┌──────────────┬─────────────────┬──────────────────────┬──────────┬─────────┬────────────────┐\n│ Network name │ Deployment type │ WebSockets endpoint  │ Provider │ Workers │ Polkadot nodes │\n├──────────────┼─────────────────┼──────────────────────┼──────────┼─────────┼────────────────┤\n│ testnet1     │ local           │ ws://127.0.0.1:11000 │ kind     │ 1       │ 4              │\n└──────────────┴─────────────────┴──────────────────────┴──────────┴─────────┴────────────────┘\n```\n\n### `redeploy [name]`\n\nRecreates a network on an existing cluster. It resets all the Polkadot nodes to\ntheir initial state, without having to creating the cluster again.\n\nYou can either pass the name of the deployment to recreate or let the wizard\nshow a list of existing deployments.\n\n### `destroy [name]`\n\nDestroy a deployment including cluster, network and portforwarding process.\n\nYou can either pass the name of the deployment to destroy or let the wizard\nshow a list of existing deployments.\n\n### `benchmark`\n\nCreates deployments and runs benchmarks on them. These are the type of\nbenchmarks curretly supported:\n\n* *finality*: measures the mean time to finality on several networks with\ndifferent number of validators. It accepts a `--config` option with the path\nof a json file containing the definition of the benchmark, like this:\n\n  ```\n  {\n    \"name\": \"bm1\",\n    \"type\": \"local\",\n    \"benchmark\": \"finality\",\n    \"startNodes\": 2,\n    \"endNodes\": 10,\n    \"blocks\": {\n      \"offset\": 10,\n      \"measure\": 10\n    },\n    \"reuseCluster\": true\n  }\n  ```\n\n  With this definition, the test will spin up deployments of 2 nodes through 10,\n  measuring for each of them the mean time to finality of 10 consecutive blocks.\n  These are the fields specific to this benchmark that you can use:\n\n  * `benchmark`: which tests to run, currently only `finality` implemented.\n\n  * `startNodes`: how many validators will be used in the first run.\n\n  * `endNodes`: how many validators will be used in the last run, the process will\n  increment the number of nodes in 1 on each run.\n\n  * `blocks.offset`: number of blocks to wait before starting to the measurements.\n\n  * `blocks.measure`: number of blocks on which the metrics will be recorded.\n\n  * `reuseCluster`: if true the cluster will be cleaned but not deleted after the\n  benchmark is finished and can be used in subsequent runs, this can speed up the\n  execution.\n\n  You can pass also the destination directory of the result files in the `--output`\n  parameter (current directory by default).\n\n  After the benchmarks are done the results are written to a json file, which\n  includes all the metrics and the details of the execution, and to a file compatible\n  with gnuplot, that can generate a png file with a plot of the results:\n\n  ```\n  $ node . benchmark -c ./config/benchmark.finality.sample.json\n  Initializing nodes...\n  Done\n  Waiting for nodes ready...\n  Done\n  ***************************************\n   Starting benchmarks with 2 nodes\n  ***************************************\n  New produced block: 1, timestamp: 1558369995883\n  Last finalized block: 1, finalized at: 1558370001258\n\n  ...\n\n  ***************************************\n   Finished benchmarks with 6 nodes\n  ***************************************\n  Done\n  Results writen to ./polkadot-deployer.benchmark.finality.20190520-063948.json\n  gnuplot writen to ./polkadot-deployer.benchmark.finality.20190520-063948.gnuplot\n\n  $ gnuplot /polkadot-deployer.benchmark.finality.20190520-063948.gnuplot\n  ```\n  The previous gnuplot command will generate a `benchmark.png` file with the\n  benchmark plot on the current directory.\n\n## Monitoring\n\nYou can enable monitoring for remote deployments, by setting `remote.monitoring`\nto true in the configuration. When enabled, polkadot-deployer will install\na generic monitoring stack composed of prometheus, alertmanager, grafana and loki,\nand a more polkadot-specific set of tools around [substrate-telemetry](https://github.com/paritytech/substrate-telemetry).\n\nThere will be a grafana instance deployed per cluster, and they will be accessible\nat `https://grafana.\u003cdeployment_name\u003e-\u003cn\u003e.\u003cdomain\u003e`, being `n` the order of the\ncluster in the config starting with 0, and can be accessed with username `admin`\nand password controlled by the envirnment variable `GRAFANA_PASSWORD` (`grafanapassword`\nif not set).\n\nAll the nodes in the deployment will be sending operational data to a substrate-telemetry\nbackend deployed on the first cluster (according to the config definition order).\nConnected to that backend is also a frontend accessible at `https://telemetry.\u003cdeployment_name\u003e-0.\u003cdomain\u003e`.\n\nA prometheus exporter is also deployed as part of the substrate-telemetry pod,\nthere is a grafana dashboard called `Polkadot Metrics` showing information from\nthe exposed metrics.\n\n## Troubleshooting\n\nBelow are some common problems found by users. If you have an issue and this\nsuggestions don't help don't hesitate to [open an issue](https://github.com/w3f/polkadot-deployer/issues/new).\nYou can get more information about what is the actual adding the `--verbose`\noption to any polkadot-deployer command.\n\n* In some cases the installation process can produce errors from the secp256k1\ndependency with messages related to the required python version, like:\n  ```\n  gyp ERR! configure error\n  gyp ERR! stack Error: Python executable \"/usr/local/opt/python/libexec/bin/python\" is v3.7.3, which is not supported by gyp.\n  ```\n  To solve this problem you can either define some alias from the command line\n  before installing:\n  ```\n  alias python=python2\n  alias pip=pip2\n  ```\n  or call the install command with an additional option:\n  ```\n  npm i -g --python=python2.7 polkadot-deployer\n  ```\n  See [this issue](https://github.com/w3f/polkadot-deployer/issues/2) for details.\n\n* For local deployments, if after issuing a create command you find the deployer\nstuck with a message like:\n\n  ```\n  wait-on(537) waiting for: http://127.0.0.1:10080/kubernetes-ready\n  ```\n\n  then it is possible that the cluster is not able to be created using your local\n  docker installation. Make sure that:\n\n  - The system has enough free disk space (at least 10Gb).\n\n  - There are no leftovers on your docker installation. You can clean up with:\n\n    ```\n    docker system prune -a --volumes\n    ```\n\n* If you installed gcloud cli tool via homewbrew on mac os, you may face this issue:\n\n  ```\n  Unable to connect to the server: error executing access token command \"/usr/bin/gcloud config config-helper --format=json\": err=fork/exec /usr/bin/gcloud: no such file or directory output= stderr=\n  ```\n\n  Locate your gcloud installation with the following command:\n\n  ```\n  which gcloud\n  /usr/local/bin/gcloud\n  ``` \n\n  Add this path as an optional variable in the config/create.remote.*.json\n\n  ```\n  \"name\": \"gcp-testnet\",\n  \"type\": \"gcp\",\n  \"gcloudPath\": \"/usr/local/bin/gcloud\",\n  \"nodes\": 2,\n  \"keep\": true,\n   ...\n  ``` \n\n* Certain files from folder config need to be set with 0600 permission due to security reasons.  \nYou may experience this error from your local deployment:  \n\n  ```\n  node . create --config ./config/create.local.sample.json --verbose\n  Expected file permission 600, found 644 for file ./config/create.local.sample.json\n  ```\n  \n  Fix it like this:\n  \n  ```\n  chmod 0600 ./config/create.local.sample.json\n  node . create --config ./config/create.local.sample.json --verbose\n  ```\n\nIn case you are experiencing problems and any of the above solution works for\nyou don't hesitate to [open an issue](https://github.com/w3f/polkadot-deployer/issues/new).\n\n## CI/CD Workflow\n\nWhen a PR is proposed to this repo, the `npm test` task is run, this includes\nlinting and unit tests.\n\nAfter the PR is merged into master, when a semantic version tag (`vX.Y.Z`) is\npushed the tests are run again and, if all is ok, the package is published to\nnpm registry\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fw3f%2Fpolkadot-deployer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fw3f%2Fpolkadot-deployer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fw3f%2Fpolkadot-deployer/lists"}