diff --git a/code/GameDiagnosticsView.pas b/code/GameDiagnosticsView.pas index fa1d3c7..57b24d2 100644 --- a/code/GameDiagnosticsView.pas +++ b/code/GameDiagnosticsView.pas @@ -58,12 +58,12 @@ begin FScroll := TCastleScrollView.Create(Self); FScroll.FullSize := True; FScroll.EnableDragging := True; - Controls.InsertFront(FScroll); + InsertFront(FScroll); FContent := TCastleVerticalGroup.Create(Self); FContent.Padding := LayoutMargin; FContent.Spacing := 8; - FScroll.ScrollArea.Controls.InsertFront(FContent); + FScroll.ScrollArea.InsertFront(FContent); FStatusLabel := TCastleLabel.Create(Self); FDetailsLabel := TCastleLabel.Create(Self); @@ -71,16 +71,16 @@ begin FFileIOButton := TCastleButton.Create(Self); FExportButton := TCastleButton.Create(Self); - FContent.Controls.InsertFront(FExportFeedbackLabel); + FContent.InsertFront(FExportFeedbackLabel); FExportButton.Caption := 'Export Report'; FExportButton.OnClick := @ExportClick; - FContent.Controls.InsertFront(FExportButton); - FContent.Controls.InsertFront(FDetailsLabel); - FContent.Controls.InsertFront(FStatusLabel); + FContent.InsertFront(FExportButton); + FContent.InsertFront(FDetailsLabel); + FContent.InsertFront(FStatusLabel); FFileIOButton.Caption := 'Test File I/O'; FFileIOButton.OnClick := @FileIOClick; - FContent.Controls.InsertFront(FFileIOButton); - with TCastleLabel.Create(Self) do begin Caption := 'Tests / Diagnostics'; FContent.Controls.InsertFront(Self); end; + FContent.InsertFront(FFileIOButton); + with TCastleLabel.Create(Self) do begin Caption := 'Tests / Diagnostics'; FContent.InsertFront(Self); end; end; procedure TDiagnosticsView.UpdateWrapWidth; diff --git a/code/GameSelectedMap.pas b/code/GameSelectedMap.pas index e53160b..9403341 100644 --- a/code/GameSelectedMap.pas +++ b/code/GameSelectedMap.pas @@ -16,7 +16,7 @@ uses function SelectedMapUrl: string; begin - Result := 'castle-data:/game/' + UrlEncode(SelectedMapRelativePath); + Result := 'castle-data:/game/' + SelectedMapRelativePath; end; end. diff --git a/config/toolchain.lock.json b/config/toolchain.lock.json index b2bdd01..7e9f3ac 100644 --- a/config/toolchain.lock.json +++ b/config/toolchain.lock.json @@ -1,7 +1,7 @@ { - "image": "kambi/castle-engine-cloud-builds-tools@sha256:1a67fad233fe7a2e81ed5f750b548c9ef136ed7d36ec061ff96b2e5eb6eaa218", - "image_id": "sha256:1a67fad233fe7a2e81ed5f750b548c9ef136ed7d36ec061ff96b2e5eb6eaa218", - "resolved_from": "kambi/castle-engine-cloud-builds-tools:cge-unstable", - "locked_at": "20260908T161942Z", + "image": "kambi/castle-engine-cloud-builds-tools@sha256:765b6da37a24b2f156886d70e4499f837a0563a2695d41a9e9cab9a9940b54a3", + "image_id": "sha256:765b6da37a24b2f156886d70e4499f837a0563a2695d41a9e9cab9a9940b54a3", + "resolved_from": "kambi/castle-engine-cloud-builds-tools:cge-stable", + "locked_at": "20260915T160525Z", "note": "Subsequent runs use this digest, never silently advance the tag." } diff --git a/tools/runner.py b/tools/runner.py index 94ff59a..17eb6d6 100755 --- a/tools/runner.py +++ b/tools/runner.py @@ -13,7 +13,7 @@ from generate import android_service_roots, materialize_application_project from artifacts import inspect_elf, inspect_apk from resource_staging import stage_runtime_resources -IMAGE_TAG='kambi/castle-engine-cloud-builds-tools:cge-unstable' +IMAGE_TAG='kambi/castle-engine-cloud-builds-tools:cge-stable' BUILD_EVIDENCE_DIR=ROOT/'build-evidence' def cge_command(cpu:str,action:str)->list[str]: if cpu not in CPUS:raise ProbeError('Unsupported Android CPU') @@ -104,7 +104,7 @@ def _error(log:Path)->str: return (first_errors(text) or [text[-1500:] or 'Build command failed'])[0] def _native_library_path(cpu:str)->str: - return f'lib/{CPUS[cpu][0]}/libkam_mobile.so' + return f'lib/{CPUS[cpu][0]}/libkam_mobile_android.so' def _select_native_library(project:Path, name:str, cpu:str)->Path: candidates=sorted(project.rglob(f'lib{name}_android_{cpu}.so'),key=lambda path:str(path)) @@ -127,7 +127,7 @@ def stage_android_services(project:Path, logs:Path)->None: castle_path=os.environ.get('CASTLE_ENGINE_PATH') if not castle_path: raise ProbeError('Cannot stage project-owned Android services: CASTLE_ENGINE_PATH is not set') - service_root=Path(castle_path)/'tools/build-tool/data/android/services' + service_root=Path(castle_path)/'tools/build-tool/data/android/integrated-services' if not service_root.is_dir(): raise ProbeError('Cannot stage project-owned Android services: Castle service root is missing: '+str(service_root)) try: @@ -177,7 +177,7 @@ def build_local(a:argparse.Namespace,build_id:str)->int: if not candidates:raise ProbeError('Packaging exited 0 but no APK') if len({sha256(path) for path in candidates})!=1:raise ProbeError('Multiple different APK outputs') apk=candidates[0]; apk_info=inspect_apk(apk,a.cpu,library.name,sha256(library),library.read_bytes()) - if apk_info['main_library_path']!=_native_library_path(a.cpu):raise ProbeError('APK native library path does not match selected ABI and libkam_mobile.so') + if apk_info['main_library_path']!=_native_library_path(a.cpu):raise ProbeError('APK native library path does not match selected ABI and libkam_mobile_android.so') signer=signature_tool() if signer: signed=run_command([signer,'verify','--verbose',str(apk)],project,logs/'signature.log',a.timeout)