From 25bd992c541bb2e8c696a131e3b22d03a129baba Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Wed, 28 Jan 2026 21:19:45 +0100 Subject: [PATCH 1/3] feat(observatory,console): remove one time upgrade for OpenIdProvider.GitHub --- src/console/src/lib.rs | 1 - src/console/src/memory/lifecycle.rs | 6 +- src/console/src/upgrade/impls.rs | 56 ------------------ src/console/src/upgrade/mod.rs | 2 - src/console/src/upgrade/types.rs | 58 ------------------- src/observatory/src/lib.rs | 1 - src/observatory/src/memory/lifecycle.rs | 6 +- src/observatory/src/upgrade/impls.rs | 51 ---------------- src/observatory/src/upgrade/mod.rs | 2 - src/observatory/src/upgrade/types.rs | 40 ------------- .../openid/observatory.openid.upgrade.spec.ts | 3 +- 11 files changed, 3 insertions(+), 223 deletions(-) delete mode 100644 src/console/src/upgrade/impls.rs delete mode 100644 src/console/src/upgrade/mod.rs delete mode 100644 src/console/src/upgrade/types.rs delete mode 100644 src/observatory/src/upgrade/impls.rs delete mode 100644 src/observatory/src/upgrade/mod.rs delete mode 100644 src/observatory/src/upgrade/types.rs diff --git a/src/console/src/lib.rs b/src/console/src/lib.rs index d4432531bb..02650cc546 100644 --- a/src/console/src/lib.rs +++ b/src/console/src/lib.rs @@ -17,7 +17,6 @@ mod rates; mod segments; mod store; mod types; -mod upgrade; use crate::types::interface::AuthenticationArgs; use crate::types::interface::AuthenticationResult; diff --git a/src/console/src/memory/lifecycle.rs b/src/console/src/memory/lifecycle.rs index 8f1eebddbb..c4d911d416 100644 --- a/src/console/src/memory/lifecycle.rs +++ b/src/console/src/memory/lifecycle.rs @@ -4,7 +4,6 @@ use crate::fees::init_factory_fees; use crate::memory::manager::{get_memory_upgrades, init_stable_state, STATE}; use crate::rates::init::init_factory_rates; use crate::types::state::{HeapState, ReleasesMetadata, State}; -use crate::upgrade::types::upgrade::UpgradeState; use ciborium::{from_reader, into_writer}; use ic_cdk_macros::{init, post_upgrade, pre_upgrade}; use junobuild_shared::ic::api::caller; @@ -51,12 +50,9 @@ fn post_upgrade() { let memory = get_memory_upgrades(); let state_bytes = read_post_upgrade(&memory); - // TODO: remove once OpenIdProvider migrated on mainnet - let upgrade_state: UpgradeState = from_reader(&*state_bytes) + let state: State = from_reader(&*state_bytes) .expect("Failed to decode the state of the console in post_upgrade hook."); - let state: State = upgrade_state.into(); - STATE.with(|s| *s.borrow_mut() = state); defer_init_certified_assets(); diff --git a/src/console/src/upgrade/impls.rs b/src/console/src/upgrade/impls.rs deleted file mode 100644 index ddff22dee9..0000000000 --- a/src/console/src/upgrade/impls.rs +++ /dev/null @@ -1,56 +0,0 @@ -use crate::types::state::{HeapState, State}; -use crate::upgrade::types::upgrade::{ - UpgradeAuthenticationHeapState, UpgradeHeapState, UpgradeOpenIdProvider, UpgradeState, -}; -use junobuild_auth::openid::types::provider::OpenIdProvider; -use junobuild_auth::state::types::state::{AuthenticationHeapState, OpenIdState}; - -impl From for State { - fn from(upgrade: UpgradeState) -> Self { - State { - stable: upgrade.stable, - heap: upgrade.heap.into(), - } - } -} - -impl From for HeapState { - fn from(upgrade: UpgradeHeapState) -> Self { - HeapState { - authentication: upgrade.authentication.map(|auth| auth.into()), - controllers: upgrade.controllers, - mission_controls: upgrade.mission_controls, - payments: upgrade.payments, - invitation_codes: upgrade.invitation_codes, - factory_fees: upgrade.factory_fees, - factory_rates: upgrade.factory_rates, - storage: upgrade.storage, - releases_metadata: upgrade.releases_metadata, - } - } -} - -impl From for AuthenticationHeapState { - fn from(upgrade: UpgradeAuthenticationHeapState) -> Self { - AuthenticationHeapState { - config: upgrade.config, - salt: upgrade.salt, - openid: upgrade.openid.map(|openid_state| OpenIdState { - certificates: openid_state - .certificates - .into_iter() - .map(|(provider, cert)| (provider.into(), cert)) - .collect(), - }), - } - } -} - -impl From for OpenIdProvider { - fn from(old: UpgradeOpenIdProvider) -> Self { - match old { - UpgradeOpenIdProvider::Google => OpenIdProvider::Google, - UpgradeOpenIdProvider::GitHub => OpenIdProvider::GitHubAuth, - } - } -} diff --git a/src/console/src/upgrade/mod.rs b/src/console/src/upgrade/mod.rs deleted file mode 100644 index 39fcb9cfe1..0000000000 --- a/src/console/src/upgrade/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -mod impls; -pub mod types; diff --git a/src/console/src/upgrade/types.rs b/src/console/src/upgrade/types.rs deleted file mode 100644 index cde8370010..0000000000 --- a/src/console/src/upgrade/types.rs +++ /dev/null @@ -1,58 +0,0 @@ -pub mod upgrade { - use crate::memory::manager::init_stable_state; - use crate::types::state::{ - Accounts, FactoryFees, FactoryRates, IcpPayments, InvitationCodes, ReleasesMetadata, - StableState, - }; - use candid::{CandidType, Deserialize}; - use junobuild_auth::state::types::config::AuthenticationConfig; - use junobuild_auth::state::types::state::{OpenIdCachedCertificate, Salt}; - use junobuild_shared::types::state::Controllers; - use junobuild_storage::types::state::StorageHeapState; - use serde::Serialize; - use std::collections::HashMap; - - #[derive(Serialize, Deserialize)] - pub struct UpgradeState { - // Direct stable state: State that is uses stable memory directly as its store. No need for pre/post upgrade hooks. - #[serde(skip, default = "init_stable_state")] - pub stable: StableState, - - pub heap: UpgradeHeapState, - } - - #[derive(Default, CandidType, Serialize, Deserialize, Clone)] - pub struct UpgradeHeapState { - #[deprecated(note = "Deprecated. Use stable memory instead.")] - pub mission_controls: Accounts, - #[deprecated(note = "Deprecated. Use stable memory instead.")] - pub payments: IcpPayments, - pub invitation_codes: InvitationCodes, - pub controllers: Controllers, - pub factory_fees: Option, - pub factory_rates: Option, - pub storage: StorageHeapState, - pub authentication: Option, - pub releases_metadata: ReleasesMetadata, - } - - #[derive(Default, CandidType, Serialize, Deserialize, Clone)] - pub struct UpgradeAuthenticationHeapState { - pub config: AuthenticationConfig, - pub salt: Option, - pub openid: Option, - } - - #[derive(Default, CandidType, Serialize, Deserialize, Clone)] - pub struct UpgradeOpenIdState { - pub certificates: HashMap, - } - - #[derive( - CandidType, Serialize, Deserialize, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Debug, - )] - pub enum UpgradeOpenIdProvider { - Google, - GitHub, - } -} diff --git a/src/observatory/src/lib.rs b/src/observatory/src/lib.rs index 34d7e821c4..e183fe0da0 100644 --- a/src/observatory/src/lib.rs +++ b/src/observatory/src/lib.rs @@ -11,7 +11,6 @@ mod random; mod store; mod templates; mod types; -mod upgrade; use crate::types::interface::GetNotifications; use crate::types::interface::NotifyStatus; diff --git a/src/observatory/src/memory/lifecycle.rs b/src/observatory/src/memory/lifecycle.rs index 6d70f08575..f841d7183f 100644 --- a/src/observatory/src/memory/lifecycle.rs +++ b/src/observatory/src/memory/lifecycle.rs @@ -3,7 +3,6 @@ use crate::memory::state::STATE; use crate::openid::scheduler::defer_restart_monitoring; use crate::random::defer_init_random_seed; use crate::types::state::{HeapState, State}; -use crate::upgrade::types::upgrade::UpgradeState; use ciborium::{from_reader, into_writer}; use ic_cdk_macros::{init, post_upgrade, pre_upgrade}; use junobuild_shared::ic::api::caller; @@ -46,12 +45,9 @@ fn post_upgrade() { let memory = get_memory_upgrades(); let state_bytes = read_post_upgrade(&memory); - // TODO: remove once OpenIdProvider migrated on mainnet - let upgrade_state: UpgradeState = from_reader(&*state_bytes) + let state: State = from_reader(&*state_bytes) .expect("Failed to decode the state of the observatory in post_upgrade hook."); - let state: State = upgrade_state.into(); - STATE.with(|s| *s.borrow_mut() = state); init_runtime_state(); diff --git a/src/observatory/src/upgrade/impls.rs b/src/observatory/src/upgrade/impls.rs deleted file mode 100644 index 75355320c2..0000000000 --- a/src/observatory/src/upgrade/impls.rs +++ /dev/null @@ -1,51 +0,0 @@ -use crate::types::state::{HeapState, OpenId, State}; -use crate::upgrade::types::upgrade::{ - UpgradeHeapState, UpgradeOpenId, UpgradeOpenIdProvider, UpgradeState, -}; -use junobuild_auth::openid::types::provider::OpenIdProvider; - -impl From for State { - fn from(upgrade: UpgradeState) -> Self { - State { - stable: upgrade.stable, - heap: upgrade.heap.into(), - } - } -} - -impl From for HeapState { - fn from(upgrade: UpgradeHeapState) -> Self { - HeapState { - controllers: upgrade.controllers, - env: upgrade.env, - openid: upgrade.openid.map(|openid| openid.into()), - rates: upgrade.rates, - } - } -} - -impl From for OpenId { - fn from(upgrade: UpgradeOpenId) -> Self { - OpenId { - certificates: upgrade - .certificates - .into_iter() - .map(|(provider, cert)| (provider.into(), cert)) - .collect(), - schedulers: upgrade - .schedulers - .into_iter() - .map(|(provider, scheduler)| (provider.into(), scheduler)) - .collect(), - } - } -} - -impl From for OpenIdProvider { - fn from(old: UpgradeOpenIdProvider) -> Self { - match old { - UpgradeOpenIdProvider::Google => OpenIdProvider::Google, - UpgradeOpenIdProvider::GitHub => OpenIdProvider::GitHubAuth, - } - } -} diff --git a/src/observatory/src/upgrade/mod.rs b/src/observatory/src/upgrade/mod.rs deleted file mode 100644 index 39fcb9cfe1..0000000000 --- a/src/observatory/src/upgrade/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -mod impls; -pub mod types; diff --git a/src/observatory/src/upgrade/types.rs b/src/observatory/src/upgrade/types.rs deleted file mode 100644 index d5cd9d858d..0000000000 --- a/src/observatory/src/upgrade/types.rs +++ /dev/null @@ -1,40 +0,0 @@ -pub mod upgrade { - use crate::memory::init_stable_state; - use crate::types::state::{Env, OpenIdScheduler, Rates, StableState}; - use candid::{CandidType, Deserialize}; - use junobuild_auth::openid::types::provider::OpenIdCertificate; - use junobuild_shared::types::state::Controllers; - use serde::Serialize; - use std::collections::HashMap; - - #[derive(Serialize, Deserialize)] - pub struct UpgradeState { - // Direct stable state: State that is uses stable memory directly as its store. No need for pre/post upgrade hooks. - #[serde(skip, default = "init_stable_state")] - pub stable: StableState, - - pub heap: UpgradeHeapState, - } - - #[derive(Default, CandidType, Serialize, Deserialize)] - pub struct UpgradeHeapState { - pub controllers: Controllers, - pub env: Option, - pub openid: Option, - pub rates: Option, - } - - #[derive(Default, CandidType, Serialize, Deserialize)] - pub struct UpgradeOpenId { - pub certificates: HashMap, - pub schedulers: HashMap, - } - - #[derive( - CandidType, Serialize, Deserialize, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Debug, - )] - pub enum UpgradeOpenIdProvider { - Google, - GitHub, - } -} diff --git a/src/tests/specs/observatory/openid/observatory.openid.upgrade.spec.ts b/src/tests/specs/observatory/openid/observatory.openid.upgrade.spec.ts index 7c9fe84410..f4ee7e9896 100644 --- a/src/tests/specs/observatory/openid/observatory.openid.upgrade.spec.ts +++ b/src/tests/specs/observatory/openid/observatory.openid.upgrade.spec.ts @@ -15,8 +15,7 @@ import { assertOpenIdHttpsOutcalls } from '../../../utils/observatory-openid-tes import { tick } from '../../../utils/pic-tests.utils'; import { OBSERVATORY_WASM_PATH } from '../../../utils/setup-tests.utils'; -// TODO: reactivate once OpenIdProvider migrated on mainnet -describe.todo('Observatory > OpenId > Upgrade', async () => { +describe('Observatory > OpenId > Upgrade', async () => { let pic: PocketIc; let actor: Actor; let observatoryId: Principal; From b604e3bfe18ad2f726abe6a0c4c72ca8629f412b Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Thu, 29 Jan 2026 09:00:29 +0100 Subject: [PATCH 2/3] feat: download for test --- .../console.upgrade-v0-4-0.openid-provider.spec.ts | 11 ++++++----- ...observatory.upgrade-v0-5-0.openid-provider.spec.ts | 10 ++++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/tests/specs/console/upgrade/console.upgrade-v0-4-0.openid-provider.spec.ts b/src/tests/specs/console/upgrade/console.upgrade-v0-4-0.openid-provider.spec.ts index 76fa610f76..28174dad9c 100644 --- a/src/tests/specs/console/upgrade/console.upgrade-v0-4-0.openid-provider.spec.ts +++ b/src/tests/specs/console/upgrade/console.upgrade-v0-4-0.openid-provider.spec.ts @@ -25,7 +25,6 @@ import { deploySegments } from '../../../utils/console-tests.utils'; import { tick } from '../../../utils/pic-tests.utils'; import { updateRateConfigNoLimit } from '../../../utils/rate.tests.utils'; import { - CONSOLE_WASM_PATH, controllersInitArgs, downloadConsole, downloadObservatory @@ -39,12 +38,14 @@ describe('Console > Upgrade > OpenIdProvider > v0.3.3 -> v0.4.0', () => { const controller = Ed25519KeyIdentity.generate(); - const upgradeCurrent = async () => { + const upgrade = async () => { await tick(pic); + const destination = await downloadConsole({ junoVersion: '0.0.67', version: '0.4.0' }); + await pic.upgradeCanister({ canisterId, - wasm: CONSOLE_WASM_PATH, + wasm: destination, sender: controller.getPrincipal() }); }; @@ -77,7 +78,7 @@ describe('Console > Upgrade > OpenIdProvider > v0.3.3 -> v0.4.0', () => { const publicKey = new Uint8Array(sessionKey.getPublicKey().toDer()); const { nonce, salt } = await generateNonce({ caller: user }); - const destination = await downloadObservatory({ junoVersion: '0.0.66', version: '0.4.0' }); + const destination = await downloadObservatory({ junoVersion: '0.0.67', version: '0.5.0' }); const { actor: obsA } = await pic.setupCanister({ idlFactory: idlFactoryObservatory040, @@ -168,7 +169,7 @@ describe('Console > Upgrade > OpenIdProvider > v0.3.3 -> v0.4.0', () => { }); it('should migrate heap OpenIdState.certificates to OpenIdProvider.GitHubAuth', async () => { - await expect(upgradeCurrent()).resolves.not.toThrowError(); + await expect(upgrade()).resolves.not.toThrowError(); }); it('should still be configured with GitHub respectively newly OpenIdDelegationProvider.GitHub', async () => { diff --git a/src/tests/specs/observatory/upgrade/observatory.upgrade-v0-5-0.openid-provider.spec.ts b/src/tests/specs/observatory/upgrade/observatory.upgrade-v0-5-0.openid-provider.spec.ts index 6ac8a3fd85..7776a2118e 100644 --- a/src/tests/specs/observatory/upgrade/observatory.upgrade-v0-5-0.openid-provider.spec.ts +++ b/src/tests/specs/observatory/upgrade/observatory.upgrade-v0-5-0.openid-provider.spec.ts @@ -16,7 +16,7 @@ import { generateNonce } from '../../../utils/auth-nonce-tests.utils'; import { makeMockGitHubOpenIdJwt } from '../../../utils/jwt-tests.utils'; import { assertOpenIdHttpsOutcalls } from '../../../utils/observatory-openid-tests.utils'; import { tick } from '../../../utils/pic-tests.utils'; -import { downloadObservatory, OBSERVATORY_WASM_PATH } from '../../../utils/setup-tests.utils'; +import { downloadObservatory } from '../../../utils/setup-tests.utils'; describe('Observatory > Upgrade', () => { let pic: PocketIc; @@ -25,12 +25,14 @@ describe('Observatory > Upgrade', () => { const controller = Ed25519KeyIdentity.generate(); - const upgradeCurrent = async () => { + const upgrade = async () => { await tick(pic); + const destination = await downloadObservatory({ junoVersion: '0.0.67', version: '0.5.0' }); + await pic.upgradeCanister({ canisterId: observatoryId, - wasm: OBSERVATORY_WASM_PATH, + wasm: destination, sender: controller.getPrincipal() }); }; @@ -80,7 +82,7 @@ describe('Observatory > Upgrade', () => { }); it('should migrate heap OpenId.certificates and OpenId.Schedulers to OpenIdProvider.GitHubAuth', async () => { - await expect(upgradeCurrent()).resolves.not.toThrowError(); + await expect(upgrade()).resolves.not.toThrowError(); }); it('should still return certificate', async () => { From 91ca3b7f9a545faf4d8473d7cb0db6e8b7cef9f8 Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Thu, 29 Jan 2026 09:30:32 +0100 Subject: [PATCH 3/3] fix: still use previous observatory --- .../upgrade/console.upgrade-v0-4-0.openid-provider.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/specs/console/upgrade/console.upgrade-v0-4-0.openid-provider.spec.ts b/src/tests/specs/console/upgrade/console.upgrade-v0-4-0.openid-provider.spec.ts index 28174dad9c..52c144df32 100644 --- a/src/tests/specs/console/upgrade/console.upgrade-v0-4-0.openid-provider.spec.ts +++ b/src/tests/specs/console/upgrade/console.upgrade-v0-4-0.openid-provider.spec.ts @@ -78,7 +78,7 @@ describe('Console > Upgrade > OpenIdProvider > v0.3.3 -> v0.4.0', () => { const publicKey = new Uint8Array(sessionKey.getPublicKey().toDer()); const { nonce, salt } = await generateNonce({ caller: user }); - const destination = await downloadObservatory({ junoVersion: '0.0.67', version: '0.5.0' }); + const destination = await downloadObservatory({ junoVersion: '0.0.66', version: '0.4.0' }); const { actor: obsA } = await pic.setupCanister({ idlFactory: idlFactoryObservatory040,