Package standalone source CLI with verified runtime and notices

This commit is contained in:
2026-09-11 05:48:05 -07:00
parent 6a610616e7
commit 27df4a3945
23 changed files with 2239 additions and 115 deletions
+21 -9
View File
@@ -81,22 +81,33 @@ def linked_path(origin, link):
return '/'.join(parts)
def document_inputs(repository, platform):
def document_inputs(repository, platform, product='studio'):
repository = Path(repository).resolve()
raw = subprocess.check_output(['git', '-C', str(repository), 'ls-files', '-z'])
tracked = set(raw.decode('utf-8').split('\0')) - {''}
roots = ['LICENSE', 'docs/server.md', 'docs/api.rst', 'docs/api.html',
'docs/language.rst', 'docs/language.html', f'docs/{platform}-packaging.md',
'deployment/Dockerfile', 'deployment/Dockerfile.dockerignore',
'deployment/arcadia-server.service']
roots += sorted(name for name in tracked if name.startswith('examples/'))
if product == 'studio':
roots = ['LICENSE', 'docs/server.md', 'docs/api.rst', 'docs/api.html',
'docs/language.rst', 'docs/language.html', f'docs/{platform}-packaging.md',
'deployment/Dockerfile', 'deployment/Dockerfile.dockerignore',
'deployment/arcadia-server.service']
roots += sorted(name for name in tracked if name.startswith('examples/'))
readme = 'scripts/package-readme.md'
elif product == 'cli':
roots = ['LICENSE', 'docs/source-cli.md', 'docs/language.rst', 'docs/language.html',
'examples/text-first/README.md']
# The text-first guide links the modular water-pressure walkthrough;
# ship its whole model/evidence directory, not just its Markdown links.
roots += sorted(name for name in tracked if name.startswith(('examples/text-first/', 'examples/release1/')))
readme = 'scripts/package-cli-readme.md'
else:
raise ValueError(f'Unknown package product: {product}')
# Two explicitly authored inputs can be packaged before their first commit.
permitted = tracked | set(roots) | {'scripts/package-readme.md', 'docs/linux-packaging.md', 'docs/windows-packaging.md'}
permitted = tracked | set(roots) | {readme, 'docs/linux-packaging.md', 'docs/windows-packaging.md'}
def repository_file(name):
candidate = ordinary(repository / name)
candidate.resolve().relative_to(repository)
return candidate
sources = {'README.md': repository_file('scripts/package-readme.md')}
sources = {'README.md': repository_file(readme)}
for name in roots:
sources[name] = repository_file(name)
queue = list(sources)
@@ -335,6 +346,7 @@ def main():
docs = commands.add_parser('docs')
docs.add_argument('--repository', required=True)
docs.add_argument('--platform', choices=['windows', 'linux'], required=True)
docs.add_argument('--product', choices=['studio', 'cli'], default='studio')
check = commands.add_parser('check-docs')
check.add_argument('--stage', required=True)
elf = commands.add_parser('elf')
@@ -349,7 +361,7 @@ def main():
notices.add_argument('--target', required=True)
args = parser.parse_args()
if args.command == 'docs':
result = document_inputs(args.repository, args.platform)
result = document_inputs(args.repository, args.platform, args.product)
elif args.command == 'check-docs':
result = check_documents(args.stage)
elif args.command == 'elf':