Build example¶
Take a look at this example build.py
file that use the ksconf.builder
module.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #!/usr/bin/env python
#
# KSCONF Official example app building script
#
# NOTE: Keep in mind that this is all very experimental and subject to change.
import sys
from pathlib import Path
from ksconf.builder import QUIET, VERBOSE, BuildManager, default_cli
from ksconf.builder.steps import clean_build, copy_files, pip_install
manager = BuildManager()
APP_FOLDER = "TA-my_technology"
SPL_NAME = "ta_my_technology-{{version}}.tgz"
SOURCE_DIR = "."
REQUIREMENTS = "requirements.txt"
# Files that support the build process, but don't end up in the tarball.
BUILD_FILES = [
REQUIREMENTS,
]
COPY_FILES = [
"README.md",
"bin/*.py",
"default/",
"metadata/*.meta",
"static/",
"lookups/*.csv",
"appserver/",
"README/*.spec",
] + BUILD_FILES
@manager.cache([REQUIREMENTS], ["lib/"], timeout=7200)
def python_packages(step):
# Reuse shared function from ksconf.build.steps
pip_install(step, REQUIREMENTS, "lib",
handle_dist_info="remove")
def package_spl(step):
top_dir = step.dist_path.parent
release_path = top_dir / ".release_path"
release_name = top_dir / ".release_name"
step.run(sys.executable, "-m", "ksconf", "package",
"--file", step.dist_path / SPL_NAME, # Path to created tarball
"--app-name", APP_FOLDER, # Top-level directory name
"--block-local", # VC build, no 'local' folder
"--release-file", str(release_path),
".")
# Provide the dist file as a short name too (used by some CI/CD tools)
path = release_path.read_text()
short_name = Path(path).name
release_name.write_text(short_name)
def build(step, args):
""" Build process """
# Step 1: Clean/create build folder
clean_build(step)
# Step 2: Copy files from source to build folder
copy_files(step, COPY_FILES)
# Step 3: Install Python package dependencies
python_packages(step)
# Step 4: Make tarball
package_spl(step)
if __name__ == '__main__':
# Tell build manager where stuff lives
manager.set_folders(SOURCE_DIR, "build", "dist")
# Launch build CLI
default_cli(manager, build)
|
Usage notes¶
BuildManager
- is used to help orchestrate the build process.step
is an instance ofBuildStep
, which is passed as the first argument to all the of step-service functions. This class assists with logging, and directing all activities to the correct paths.- There’s no interal interface for ksconf package yet, hence another instance of Python is launched on line 48. This is done using the module execution mode of Python, which is a slightly more reliable way of launching ksconf from within itself. For whatever that’s worth.