diff --git a/src/services/emulator/_runner.services.ts b/src/services/emulator/_runner.services.ts index 1f56ab9..2688b86 100644 --- a/src/services/emulator/_runner.services.ts +++ b/src/services/emulator/_runner.services.ts @@ -204,6 +204,11 @@ const startEmulator = async ({config: extendedConfig}: {config: CliEmulatorConfi const configFile = nonNullish(detectedConfig.configPath) ? basename(detectedConfig.configPath) : undefined; + + /** + * @deprecated as of v0.4.0, the container does not read the juno.config anymore. + * Sputnik build and Satellite's upgrades are triggered with a POST request to the exposed server. + */ const configFilePath = nonNullish(configFile) ? join(process.cwd(), configFile) : undefined; // Podman does not auto create the path folders. diff --git a/src/services/functions/build/_dispatch.services.ts b/src/services/functions/build/_dispatch.services.ts new file mode 100644 index 0000000..0bdf4e1 --- /dev/null +++ b/src/services/functions/build/_dispatch.services.ts @@ -0,0 +1,38 @@ +import {red} from 'kleur'; +import {readEmulatorConfig} from '../../../configs/emulator.config'; +import {assertConfigAndReadSatelliteId} from '../../../utils/satellite.utils'; +import {dispatchRequest} from '../../emulator/admin.services'; + +export const dispatchEmulatorUpgrade = async () => { + const {satelliteId} = await assertConfigAndReadSatelliteId(); + + await dispatchTouch({request: `satellite/upgrade?id=${satelliteId}`}); +}; + +export const dispatchEmulatorBuild = async () => { + await dispatchTouch({request: 'sputnik/build'}); +}; + +/** + * Workaround Podman and Apple container issues on macOS: + * - https://github.com/containers/podman/issues/22343 + * - https://github.com/apple/container/issues/141 + */ +const dispatchTouch = async ({request}: {request: string}) => { + const parsedResult = await readEmulatorConfig(); + + if (!parsedResult.success) { + return; + } + + const {result} = await dispatchRequest({ + config: parsedResult.config, + request + }); + + // We silence the error (result === error). Maybe the emulator is not running on purpose. + + if (result === 'not_ok') { + console.log(red(`Invalid response from the emulator. Request '${request}' did not succeed.`)); + } +}; diff --git a/src/services/functions/build/build.rust.services.ts b/src/services/functions/build/build.rust.services.ts index 4cb73df..9847214 100644 --- a/src/services/functions/build/build.rust.services.ts +++ b/src/services/functions/build/build.rust.services.ts @@ -31,7 +31,7 @@ import {formatTime} from '../../../utils/format.utils'; import {readPackageJson} from '../../../utils/pkg.utils'; import {readEmulatorConfigAndCreateDeployTargetDir} from '../../emulator/_fs.services'; import {prepareJunoPkgForSatellite, prepareJunoPkgForSputnik} from './build.metadata.services'; -import {dispatchEmulatorTouchSatellite} from './touch.services'; +import {dispatchEmulatorUpgrade} from './_dispatch.services'; export const buildRust = async ({ paths, @@ -161,7 +161,7 @@ export const buildRust = async ({ spinner.stop(); } - await dispatchEmulatorTouchSatellite(); + await dispatchEmulatorUpgrade(); }; const SATELLITE_DID_FILE = join(DEVELOPER_PROJECT_SATELLITE_PATH, 'satellite.did'); diff --git a/src/services/functions/build/build.services.ts b/src/services/functions/build/build.services.ts index 65e9026..6d861d6 100644 --- a/src/services/functions/build/build.services.ts +++ b/src/services/functions/build/build.services.ts @@ -16,7 +16,7 @@ import {type BuildArgs} from '../../../types/build'; import {buildArgs} from '../../../utils/build.utils'; import {buildJavaScript, buildTypeScript} from './build.javascript.services'; import {buildRust} from './build.rust.services'; -import {dispatchEmulatorTouchSputnik} from './touch.services'; +import {dispatchEmulatorBuild} from './_dispatch.services'; export const build = async (args?: string[]) => { const {watch, ...params} = buildArgs(args); @@ -118,7 +118,7 @@ const executeSputnikBuild = async ({ const withToolchain = nonNullish(paths?.cargo) || ENV.ci; if (!withToolchain) { - await dispatchEmulatorTouchSputnik(); + await dispatchEmulatorBuild(); return; } diff --git a/src/services/functions/build/touch.services.ts b/src/services/functions/build/touch.services.ts deleted file mode 100644 index 49b28cf..0000000 --- a/src/services/functions/build/touch.services.ts +++ /dev/null @@ -1,53 +0,0 @@ -import {red} from 'kleur'; -import {readEmulatorConfig} from '../../../configs/emulator.config'; -import {SATELLITE_WASM, SPUTNIK_INDEX_MJS} from '../../../constants/dev.constants'; -import {dispatchRequest} from '../../emulator/admin.services'; - -export const dispatchEmulatorTouchSatellite = async () => { - await dispatchTouch({filename: `${SATELLITE_WASM}.gz`}); -}; - -export const dispatchEmulatorTouchSputnik = async () => { - await dispatchTouch({filename: SPUTNIK_INDEX_MJS}); -}; - -/** - * Workaround Podman and Apple container issues on macOS: - * - https://github.com/containers/podman/issues/22343 - * - https://github.com/apple/container/issues/141 - */ -const dispatchTouch = async ({filename}: {filename: string}) => { - if (process.platform !== 'darwin') { - // Workaround only required on macOS. Not sure if it's required on old Intel process, maybe not but - // for simplicity reasons let's consider all Apple devices require the workaround. - return; - } - - const parsedResult = await readEmulatorConfig(); - - if (!parsedResult.success) { - return; - } - - const { - config: { - derivedConfig: {runner} - } - } = parsedResult; - - if (runner === 'docker') { - // No need of the workaround for Docker - return; - } - - const {result} = await dispatchRequest({ - config: parsedResult.config, - request: `admin/touch?file=${encodeURIComponent(filename)}` - }); - - // We silence the error (result === error). Maybe the emulator is not running on purpose. - - if (result === 'not_ok') { - console.log(red(`Invalid response from the emulator. Touching '${filename}' did not succeed.`)); - } -};