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/
119 lines
3.9 KiB
Python
Executable File
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()
|