Files
scylladb/dist/debian/debian_files_gen.py
Avi Kivity f3eade2f62 treewide: relicense to ScyllaDB-Source-Available-1.0
Drop the AGPL license in favor of a source-available license.
See the blog post [1] for details.

[1] https://www.scylladb.com/2024/12/18/why-were-moving-to-a-source-available-license/
2024-12-18 17:45:13 +02:00

119 lines
3.9 KiB
Python
Executable File

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-present ScyllaDB
#
#
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
#
import argparse
import string
import os
import shutil
import re
import subprocess
from pathlib import Path
class DebianFilesTemplate(string.Template):
delimiter = '%'
def get_version(builddir):
with open(os.path.join(builddir, 'SCYLLA-VERSION-FILE')) as f:
return f.read().strip().replace('-', '~')
def get_release(builddir):
with open(os.path.join(builddir, 'SCYLLA-RELEASE-FILE')) as f:
return f.read().strip()
def get_product(builddir):
with open(os.path.join(builddir, 'SCYLLA-PRODUCT-FILE')) as f:
return f.read().strip()
def generate_control(scriptdir, outputdir, product):
with open(os.path.join(scriptdir, 'control.template')) as f:
control_template = f.read()
s = DebianFilesTemplate(control_template)
control_applied = s.substitute(product=product)
with open(os.path.join(outputdir, 'control'), 'w', encoding='utf-8') as f:
f.write(control_applied)
def generate_changelog(scriptdir, outputdir, product, version, release):
with open(os.path.join(scriptdir, 'changelog.template')) as f:
changelog_template = f.read()
s = DebianFilesTemplate(changelog_template)
changelog_applied = s.substitute(product=product,
version=version,
release=release,
revision='1',
codename='stable')
with open(os.path.join(outputdir, 'changelog'), 'w', encoding='utf-8') as f:
f.write(changelog_applied)
def generate_include_binaries(outputdir):
include_binaries = subprocess.run(
"./scripts/create-relocatable-package.py --print-libexec -",
shell=True,
check=True,
capture_output=True,
encoding='utf-8').stdout
with open(os.path.join(outputdir, 'source', 'include-binaries'), 'w', encoding='utf-8') as f:
f.write(include_binaries)
def rename_to(outputdir, from_product, to_product):
for p in Path(outputdir).glob('scylla-*'):
# pat1: scylla-server.service
# -> scylla-enterprise-server.scylla-server.service
# or
# scylla-server.default
# -> scylla-enterprise-server.scylla-server.default
# pat2: scylla-server.scylla-fstrim.service
# -> scylla-enterprise-server.scylla-fstrim.service
# pat3: scylla-conf.install
# -> scylla-enterprise-conf.install
if m := re.match(r'^scylla(-[^.]+)\.(service|default)$', p.name):
p.rename(p.parent / f'{to_product}{m.group(1)}.{p.name}')
elif m := re.match(r'^scylla(-[^.]+\.scylla-[^.]+\.[^.]+)$', p.name):
p.rename(p.parent / f'{to_product}{m.group(1)}')
else:
p.rename(p.parent / p.name.replace(from_product, to_product, 1))
def main():
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument('--build-dir', action='store', default='build',
help='build directory')
arg_parser.add_argument('--output-dir', action='store', default='debian/debian',
help='output directory')
args = arg_parser.parse_args()
builddir = args.build_dir
if os.path.isabs(args.output_dir):
outputdir = args.output_dir
else:
outputdir = os.path.join(builddir, args.output_dir)
if os.path.exists(outputdir):
shutil.rmtree(outputdir)
shutil.copytree('dist/debian/debian', outputdir)
product = get_product(builddir)
if product != 'scylla':
rename_to(outputdir, 'scylla', product)
scriptdir = os.path.dirname(__file__)
generate_changelog(scriptdir, outputdir, product, get_version(builddir), get_release(builddir))
generate_control(scriptdir, outputdir, product)
generate_include_binaries(outputdir)
if __name__ == '__main__':
main()