| workflow_payload |
name: Gitea maintenance capacity (read only)
" name: Gitea maintenance capacity (read only)
"on":
push:
branches: [codex/runner-maintenance-diagnostic-20261101]
paths: [.gitea/workflows/gitea-maintenance-capacity.yml]
workflow_dispatch:
jobs:
inspect:
name: inspect
runs-on: ubuntu-latest
if: github.repository == 'luoanwu/enterprise-platform'
steps:
- name: Read capacity, isolation capabilities and file mode metadata
run: |
set -eu
python3 <<'PY'
import datetime, json, os, pathlib, re, socket, stat
if os.geteuid()!=0 or socket.gethostname()!='iZ2zed3pt2nygf9dy1a9d2Z':raise RuntimeError('EXPECTED_HOST_REQUIRED')
report={'kind':'GiteaMaintenanceCapacityProbe','observedAtUTC':datetime.datetime.now(datetime.timezone.utc).isoformat(),'ci':{'sourceSha':os.environ.get('GITHUB_SHA'),'runId':os.environ.get('GITHUB_RUN_ID')},'releaseEligible':False,'writes':False}
report['cpuCount']=os.cpu_count()
report['memoryKiB']={k:int(v.split()[0]) for k,v in (line.split(':',1) for line in pathlib.Path('/proc/meminfo').read_text().splitlines()) if k in ['MemTotal','MemAvailable']}
cpu=pathlib.Path('/proc/cpuinfo').read_text()
report['hardwareVirtualizationFlagPresent']=any(x in cpu.split() for x in ['vmx','svm'])
report['devices']={p:{'exists':pathlib.Path(p).exists(),'readWrite':os.access(p,os.R_OK|os.W_OK),'characterDevice':stat.S_ISCHR(os.stat(p).st_mode) if pathlib.Path(p).exists() else False} for p in ['/dev/kvm','/dev/fuse']}
report['toolPresence']={p:pathlib.Path(p).is_file() for p in ['/usr/bin/qemu-system-x86_64','/usr/bin/dockerd-rootless.sh','/usr/bin/rootlesskit','/usr/bin/slirp4netns','/usr/bin/newuidmap','/usr/bin/fusermount3']}
report['mounts']=[]
for line in pathlib.Path('/proc/self/mountinfo').read_text().splitlines():
pre,post=line.split(' - ',1);fields=pre.split();fstype=post.split()[0];mount=fields[4]
if fstype not in ['ext4','xfs','btrfs','zfs','nfs','nfs4','fuse.sshfs'] or mount.startswith(('/var/lib/docker','/run/')):continue
try:
fs=os.statvfs(mount)
report['mounts'].append({'path':mount,'filesystem':fstype,'availableBytes':fs.f_bavail*fs.f_frsize,'totalBytes':fs.f_blocks*fs.f_frsize})
except OSError:pass
report['privatePathPermissions']=[]
for name in ['/home/git','/home/git/gitea','/home/git/gitea/config/app.ini','/home/git/repositories','/usr/local/bin/data','/opt/gitea-runner','/opt/gitea-runner/.runner']:
p=pathlib.Path(name)
if not p.exists():continue
s=p.stat();report['privatePathPermissions'].append({'path':name,'mode':oct(stat.S_IMODE(s.st_mode)),'uid':s.st_uid,'gid':s.st_gid})
selected={};parent=None
for line in pathlib.Path('/opt/gitea-runner/config.yaml').read_text().splitlines():
if not line.strip() or line.lstrip().startswith('#'):continue
if not line.startswith((' ','\t')):parent=line.split(':',1)[0].strip();continue
if ':' not in line:continue
key,value=line.strip().split(':',1)
if parent=='runner' and key=='labels':
value=value.strip()
selected['labelsConfiguredInYaml']=bool(value)
if parent=='container' and key in ['privileged','docker_host']:
value=value.strip().strip('"\'')
if value in ['true','false','-','']:selected[key]=value
else:selected[key]='CUSTOM_VALUE_NOT_EXPORTED'
report['runnerExecutorConfiguration']=selected
print('GITEA_MAINTENANCE_CAPACITY_JSON '+json.dumps(report,separators=(',',':')))
PY
shell: bash
timeout-minutes: "5"
permissions:
contents: read
... |