Archive build logs as lightweight evidence
Sync changed files to Google Drive / sync (push) Successful in 1m35s

This commit is contained in:
admin_d committed 2026-09-15 11:04:58 +05:00
1 parent c2127c3f31
commit 89aa918954
9 files changed
+129

No files matched your search

+1
View File
@@ -20,6 +20,7 @@ Supported options are `--local`, `--cpu {aarch64,arm,x86_64}`, `--no-fetch`, and
Each build is one permanent Castle application transaction. Read `out/current/build.json` for its finalized state. On `PASS`, the current package is described by `out/current/package.json` and is at `out/current/kam-mobile.apk`.
`build/<build_id>/` is transient working state. Its useful logs are `build/<build_id>/logs/compile.log`, `build/<build_id>/logs/package.log`, and, when apksigner is available and invoked, `build/<build_id>/logs/signature.log`.
After every completed build, the compact logs and final `build.json` are copied to the tracked `build-evidence/<build_id>/` directory. It never contains the temporary application, compiler cache, or APK.
## Source and resources
+1
View File
@@ -0,0 +1 @@
@@ -0,0 +1,27 @@
{
"schema": "kam-android-build/2",
"build_id": "20260915T055353Z-8d974085",
"status": "FAIL",
"cpu": "aarch64",
"abi": "arm64-v8a",
"application": {
"name": "kam_mobile",
"caption": "KaM Remake Mobile",
"package": "org.kammobile.kamremake",
"version": "0.4.0",
"version_code": 30,
"game_unit": "GameInitialize"
},
"upstream_commit": "962fb850324b79bbe5480e1c2087d98f83a60917",
"resource_count": 1,
"compile": {
"status": "FAIL",
"exit_code": 1
},
"package": {
"status": "NOT_RUN",
"exit_code": null
},
"package_metadata": null,
"error": "/work/vendor/kam_remake/src/settings/KM_GameSettings.pas(6,15) Fatal: Can't find unit Forms used by KM_GameSettings"
}
@@ -0,0 +1,5 @@
$ adb version
Android Debug Bridge version 1.0.41
Version 35.0.0-11411520
Installed as /usr/lib/android-sdk/platform-tools/adb
Running on Linux 6.8.0-139-generic (x86_64)
@@ -0,0 +1,4 @@
project service: diagnostic_report_export
source: /work/build/20260915T055353Z-8d974085/application/android_services/diagnostic_report_export
castle destination: /usr/local/castle-engine/tools/build-tool/data/android/services/diagnostic_report_export
status: staged
@@ -0,0 +1,38 @@
$ castle-engine --os=android --cpu=aarch64 --compiler=fpc --mode=debug compile
Compiling project "kam_mobile" for OS / CPU "android / aarch64" in mode "debug".
FPC executing...
Free Pascal Compiler version 3.2.2 [2026/08/04] for aarch64
Copyright (c) 1993-2021 by Florian Klaempfl and others
/work/vendor/kam_remake/src/common/KM_CommonTypes.pas(79,57) Note: Values in enumeration types have to be ascending
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(601,3) Note: Local variable "Encoding" not used
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1519,22) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1528,42) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1654,49) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1680,33) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
/work/port-source/kam_remake/src/common/KM_CommonClasses.pas(1690,18) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(81,30) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(131,32) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(403,3) Note: Local variable "ErrorStr" not used
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(447,46) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "RawByteString"
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(461,49) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(462,73) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(463,52) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(527,3) Note: Local variable "sl" not used
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(556,44) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(564,10) Warning: Function result does not seem to be set
/work/port-source/kam_remake/src/utils/io/KM_FileIO.pas(594,10) Warning: Function result does not seem to be set
/work/vendor/kam_remake/src/KM_Log.pas(146,42) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "RawByteString"
/work/vendor/kam_remake/src/KM_Log.pas(148,45) Warning: Implicit string type conversion from "RawByteString" to "UnicodeString"
/work/vendor/kam_remake/src/KM_Log.pas(151,45) Warning: Implicit string type conversion from "RawByteString" to "UnicodeString"
/work/vendor/kam_remake/src/KM_Log.pas(151,50) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
/work/vendor/kam_remake/src/KM_Log.pas(305,30) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
/work/vendor/kam_remake/src/KM_Log.pas(305,76) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
/work/vendor/kam_remake/src/KM_Log.pas(358,3) Note: Local variable "txt" is assigned but never used
/work/vendor/kam_remake/src/KM_Log.pas(480,27) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
/work/vendor/kam_remake/src/KM_Log.pas(480,35) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
/work/vendor/kam_remake/src/KM_Log.pas(602,66) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
/work/vendor/kam_remake/src/settings/KM_GameSettings.pas(6,15) Fatal: Can't find unit Forms used by KM_GameSettings
Fatal: Compilation aborted
Error: /usr/local/fpclazarus/3.2.2/fpc/bin/ppcrossa64 returned an error exitcode
Exception "Exception":
Failed to compile
@@ -0,0 +1,4 @@
$ java -version
openjdk version "21.0.12" 2026-07-21
OpenJDK Runtime Environment (build 21.0.12+8-1-24.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 21.0.12+8-1-24.04-Ubuntu, mixed mode, sharing)
@@ -0,0 +1,38 @@
{
"castle": {
"status": "NOT_INSTALLED"
},
"fpc": {
"status": "NOT_INSTALLED"
},
"java": {
"status": "PASS",
"exit_code": 0,
"seconds": 0.067,
"command": [
"java",
"-version"
],
"log": "build/20260915T055353Z-8d974085/logs/java-version.log",
"output": "$ java -version\nopenjdk version \"21.0.12\" 2026-07-21\nOpenJDK Runtime Environment (build 21.0.12+8-1-24.04-Ubuntu)\nOpenJDK 64-Bit Server VM (build 21.0.12+8-1-24.04-Ubuntu, mixed mode, sharing)\n"
},
"adb": {
"status": "PASS",
"exit_code": 0,
"seconds": 0.004,
"command": [
"adb",
"version"
],
"log": "build/20260915T055353Z-8d974085/logs/adb-version.log",
"output": "$ adb version\nAndroid Debug Bridge version 1.0.41\nVersion 35.0.0-11411520\nInstalled as /usr/lib/android-sdk/platform-tools/adb\nRunning on Linux 6.8.0-139-generic (x86_64)\n"
},
"paths": {},
"docker_image_lock": {
"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",
"note": "Subsequent runs use this digest, never silently advance the tag."
}
}
+11
View File
@@ -14,6 +14,7 @@ from artifacts import inspect_elf, inspect_apk
from resource_staging import stage_runtime_resources
IMAGE_TAG='kambi/castle-engine-cloud-builds-tools:cge-unstable'
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')
if action not in ('compile','package'):raise ProbeError('Not an Android build action')
@@ -62,6 +63,15 @@ def _record(build_id:str, cpu:str, status:str, application:dict|None=None,
'package':package or {'status':'NOT_RUN','exit_code':None},
'package_metadata':package_metadata,'error':error}
def _publish_build_evidence(record:dict)->None:
source=ROOT/'build'/record['build_id']/'logs'
destination=BUILD_EVIDENCE_DIR/record['build_id']/'logs'
destination.mkdir(parents=True,exist_ok=True)
if source.is_dir():
for path in source.iterdir():
if path.is_file():shutil.copy2(path,destination/path.name)
write_json(destination.parent/'build.json',record)
def _finish(record:dict)->int:
if record['status']!='PASS':
CURRENT_OUTPUT_DIR.mkdir(parents=True,exist_ok=True)
@@ -69,6 +79,7 @@ def _finish(record:dict)->int:
path.unlink(missing_ok=True)
record['package_metadata']=None
write_json(CURRENT_BUILD_METADATA,record)
_publish_build_evidence(record)
return {'PASS':0,'FAIL':1,'BLOCKED':2}[record['status']]
def _valid_docker_handoff(record:object,build_id:str,code:int)->bool: