Staging environment
Overview
Having a separate deployment environment available where features can be end-to-end tested before they get deployed to the production environment can be helpful. While local deployments mirror the live mainnet as closely as possible, it is not the same. The local instance only runs as a single subnet. If you want to test canisters of two different subnets connecting to each other, you cannot do this locally. Other benefits of using a staging environment include being able to test an integration with other services, deployment workflows, and estimating costs before setting a feature live.
Setting up a staging environment
In a staging environment it is possible to run any dfx
command that would otherwise take --network ic
but using --network myStaging
instead. myStaging
can be replaced with any other name, except the three reserved ones: ic
, local
, and playground
.
Deploying to the playground is ICP's equivalent of deploying to a testnet network.
Networks are defined in two ways: assumed and explicitly configured. dfx only contains the ic
network as an assumed environment. The flag --network ic
can be used to run any command on the mainnet.
All other networks are explicitly configured in dfx.json
. The "networks"
section should contain at least the local
network, which gets chosen by default if no other network is specified with the --network
flag.
Network definition
To add a staging network named myStaging
to dfx.json
, add this code under "networks"
in your dfx.json
:
"myStaging": {
"providers": [
"https://icp0.io"
],
"type": "persistent"
}
This value for "providers"
tells dfx
where to connect to the network. It is identical to the one in the hard-coded ic
network.
The type persistent
tells dfx
that the canisters on this network will stay there and the canister identifiers will be saved in the canister_ids.json
file.
Configuring a wallet
If you are using a cycles wallet, the cycles wallet for each network is stored separately. The newly created myStaging
network has no wallet configured yet.
Please note that the cycles wallet will be removed from dfx in a future release.
It is recommended to use the cycles ledger instead.
To use the same cycles wallet as on the main ic
network, first make sure the correct identity is set by running the command:
dfx identity use <identity name>
Then, read the ic
network's currently configured wallet using:
dfx identity get-wallet --network ic
Set the wallet for the newly defined network with the command:
dfx identity set-wallet <wallet id> --network myStaging
These commands can be used together, such as:
dfx identity set-wallet "$(dfx identity get-wallet --network ic)" --network myStaging
If you prefer to use a separate cycles wallet for the staging environment, follow the instructions in the step 'Creating a cycles wallet' in the deploying to the mainnet guide.