Is there a way to trigger a canister upgrade even if the module hash has not changed? I often want to do this when testing, and especially right now as I am testing stable storage in Azle, so I want to just force some upgrades even without code changes.
dfx canister install --mode=reinstall … do what you want?
It seems like that completely removes the state and code and reinstalls the code, calling init again. I want the pre_upgrade and post_upgrade functions to run even if the module hasn’t changed. And even if that did work, the fact that it has a prompt would make it difficult to use in a CI environment.
To bypass prompts, use the
yes utility. Something like:
yes "yes" | <whatever script has prompts>
I used it in my CI like this:
I used this for the Motoko warning for loss of stable variable data, it’s from dfx 0.9.2 which had this bug of showing the warning even though it was safe to upgrade
dfx doesn’t allow you to upgrade to identical code, I’d consider that a bug. Hopefully community contributions are open for the
sdk repo soon, so that I can tell people to just fix it
PSA: Do not use
yes in any CI that involves macOS, as multiple concurrent tasks on the same machine will deadlock as both fight for 100% CPU. We’ve been bitten by that several times.
echo yes will provide the intended effect.
I’ve used a hack in the past by just adding/altering an empty public function and removing/reverting it after the tests with
sed (bash). This way the hash changes, and you can test
post upgrade functions.
I would love a better solution tho…
Yes, it was fixed in dfx 0.9.3
Oh, I was not aware of this. Our CI runs on Ubuntu and we haven’t run into trouble with yes yet. But will keep this in mind
I just ran
dfx canister install --help on v0.9.3 and it says that “upgrade” is a valid mode, but then it errors out when actually using it.
Edit: Just realized I was mixing
dfx deploy with
dfx canister install .
Just the same, I too need a way to re-run the upgrade hooks even if the canister code hasn’t changed.
@lastmjs how about
dfx deploy --upgrade-unchanged?
Do you know what version of dfx that is?
The change log says 0.10.0 sdk/CHANGELOG.adoc at master · dfinity/sdk · GitHub