From 274ebdb02582cc52237c95b1884b1cb24884d6f1 Mon Sep 17 00:00:00 2001 From: Nicholas Humfrey Date: Sat, 2 Feb 2019 15:34:35 +0000 Subject: Changed architecture name for 32-bit x86 to 'i386' This is the official Debian designation for the architecture (And what dpkg --print-architecture returns) https://www.debian.org/releases/stable/i386/ch02s01.html.en --- scripts/build-config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts/build-config') diff --git a/scripts/build-config b/scripts/build-config index 3b44df77..db870be7 100755 --- a/scripts/build-config +++ b/scripts/build-config @@ -52,7 +52,7 @@ def get_validator(optdict, name): # Options dict format: # '$option_name_without_leading_dashes': { ('$help_string', $default_value_generator_thunk, $value_checker_thunk) } options = { - 'architecture': ('Image target architecture (amd64 or i586 or armhf)', lambda: 'amd64', lambda x: x in ['amd64', 'i586', 'armhf']), + 'architecture': ('Image target architecture (amd64 or i386 or armhf)', lambda: 'amd64', lambda x: x in ['amd64', 'i386', 'armhf']), 'build-by': ('Builder identifier (e.g. jrandomhacker@example.net)', get_default_build_by, None), 'debian-mirror': ('Debian repository mirror for ISO build', lambda: defaults.DEBIAN_MIRROR, None), 'debian-security-mirror': ('Debian security updated mirror', lambda: defaults.DEBIAN_SECURITY_MIRROR, None), -- cgit v1.2.3 From dec0a52554c8bf8e87a0ac4dba7d7ae357672e6e Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Sun, 10 Mar 2019 21:03:09 +0100 Subject: [build] Use pdns-recursor binary packages from PowerDNS https://repo.powerdns.com/ provides a package repository for Debian 8 which serves us automatically all security updates instead of rebuilding the package by us. This drops the maintenance of one additional package. --- data/live-build-config/archives/pdns.key.chroot | 30 +++++++++++++++++++++++++ scripts/build-config | 1 + scripts/defaults.py | 1 + scripts/live-build-config | 3 +++ 4 files changed, 35 insertions(+) create mode 100644 data/live-build-config/archives/pdns.key.chroot (limited to 'scripts/build-config') diff --git a/data/live-build-config/archives/pdns.key.chroot b/data/live-build-config/archives/pdns.key.chroot new file mode 100644 index 00000000..9f59d9c9 --- /dev/null +++ b/data/live-build-config/archives/pdns.key.chroot @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mQINBFV2/GwBEADD4oJuwcLkYZD6R+PM0zKdZ04owicJ9e1nTbBb8OA+92TI0cJY +8XGpjEJBRECOMJi9Gr6p3QxgZX1IQbiB/RJgRN0BYTZJ6BKobJAlSNsZBVH4wt/F +Xg8IFXi8O8XNwrhhTHVLyhZxB5WIqd8Xgdb39t7qcKLLuhdzH+hTWtGNaC3UJ1xz +3KMx79U/U71XRtvloiZF1ef0XUNvDZ/2DdTNWavdJzVeDq+whD0/ThvP0LsJzzCQ +cgfRUljfxtWHOYVqHspfFg03ofDODodzq+yT5ElIQNWL71fRQ5lX8cPAVrX6v3Rs +h2tBsWV3xjMscG36E7nKbgSXWxDInr4Xw056Mx/JO6If8vnCOYOhXcv3fdZ5Lqpr +qr6uniBTcRi1q97JI1+KDoHU6MfJ7I17wU/bTPFgy6Yck4Ropmwd5dvbwRVTdQHx +n08XYEZyNdq8zskbj8MI83jvDdvdd7b95SiBO6X3qIYKebk8rg1CfYFxBIyRd2ll +yt1K0ow4M54woB/68cMy0UB6cA8uOHscRObau3T3UB0ohsEPF7KYAqOKfKP0irV+ +Ys6tR0KI/TeHqrqKhCA9PGOpOmqJaibt5GqFTc3Dp4U19njMmh4eboki8EwS6DNy +4HD76dFz2jkSQ74uB/X+nxuFEVRKS54q4aeg83NL5lnsD8TWdhTui4mURQARAQAB +tDxQb3dlckROUyBSZWxlYXNlIFNpZ25pbmcgS2V5IDxwb3dlcmRucy5zdXBwb3J0 +QHBvd2VyZG5zLmNvbT6JAj4EEwECACgFAlV2/GwCGwMFCQ8JnAAGCwkIBwMCBhUI +AgkKCwQWAgMBAh4BAheAAAoJEBsMYgX9OA+75QYQAJ7a3rZiTmBJkYfDYbZGOcJj +tIgWj5ieyIHjaG1kR3setK1GbYrd7dkeHuWIT8FCO/mQwrKTlxEd+Vj5a79Bpu0D +de1MRi7jTIb/Qrge532Pnk5T7qFjJWfvTWhpSV9XDwHR216aByuHZ9gAJt92hgo5 +eSXHPpwbi+qAdymndUswFBHY0kLNpIYAa2mZcSNbaI/RFNYPOM/aqDMcpQ2s1Rf1 +c8iTPewf04jlNd75M59AAbnpdoFiCKbV+Q8oeUNxRGhHCQgcTaWhT5vdF2pXP1jb +rVykPxN7U5zTu03m/qbUCKg9Pqkhr79a2XNIpcGHhsp58B6dJdBPhXT/tFXnVpY0 +wZHGGlBVhZzC1Qdq58ilyQ2qfIci2sjMoS62lAffemb88CyoQ2UadhNKZTn93Ogo +lmW1txqN7UU7hUBxwdztw+Pgf7V+ADwkPHnSsNLupkZ7QUOl2i1kPwgcnwHLPFoD +bYDteCtqcVVCY5v3OC95jGJ4bqwgIIeQ5kloKY2pRLeNedbCHbGc6rVjX5X0K2zt +F7/dWOklI1Ox4Y+Vv0Ln7u3BvSyl5jWXWzH2V6q3ff7NKVro3keZmgTzcBwJEv/z +p40ds9f2LTKJX4DajyAF2Z+j79obMYwKo0w+Vy36QrO8TlKk+ZU/6vcFfVdEoCtv +d5a03QgyYgMX0WW8Smam +=BY4B +-----END PGP PUBLIC KEY BLOCK----- diff --git a/scripts/build-config b/scripts/build-config index db870be7..ce83f74e 100755 --- a/scripts/build-config +++ b/scripts/build-config @@ -59,6 +59,7 @@ options = { 'pbuilder-debian-mirror': ('Debian repository mirror for pbuilder env bootstrap', lambda: defaults.DEBIAN_MIRROR, None), 'salt-mirror': ('Salt package mirror', lambda: defaults.SALT_MIRROR, None), 'vyos-mirror': ('VyOS package mirror', lambda: defaults.VYOS_MIRROR, None), + 'pdns-mirror': ('PowerDNS package mirror', lambda: defaults.PDNS_MIRROR, None), 'build-type': ('Build type, release or development', lambda: 'development', lambda x: x in ['release', 'development']), 'custom-packages': ('Custom packages to install from repositories', lambda: '', None), 'version': ('Version number (release builds only)', None, None) diff --git a/scripts/defaults.py b/scripts/defaults.py index 73a8d459..5f1941c1 100644 --- a/scripts/defaults.py +++ b/scripts/defaults.py @@ -28,6 +28,7 @@ DEBIAN_SECURITY_MIRROR = 'http://deb.debian.org/debian-security' DEBIAN_DISTRIBUTION = 'jessie' SALT_MIRROR = 'http://repo.saltstack.com/apt/debian/8/amd64/2017.7' +PDNS_MIRROR = 'http://repo.powerdns.com/debian' PBUILDER_CONFIG = os.path.join(BUILD_DIR, 'pbuilderrc') PBUILDER_DIR = os.path.join(BUILD_DIR, 'pbuilder') diff --git a/scripts/live-build-config b/scripts/live-build-config index ad559559..1aea4dc5 100755 --- a/scripts/live-build-config +++ b/scripts/live-build-config @@ -71,6 +71,7 @@ print("Setting up additional APT entries") vyos_repo_entry = "deb {0}/vyos {1} main\n".format(build_config['vyos_mirror'], build_config['vyos_branch']) vyos_debian_repo_entry = "deb {0}/debian {1} main\n".format(build_config['vyos_mirror'], build_config['vyos_branch']) salt_repo_entry = "deb {0} {1} main\n".format(build_config['salt_mirror'], build_config['distribution']) +pdns_repo_entry = "deb {0} {1}-rec-41 main\n".format(build_config['pdns_mirror'], build_config['distribution']) apt_file = os.path.join(build_config['build_dir'], defaults.VYOS_REPO_FILE) @@ -79,11 +80,13 @@ if debug: print("\t", vyos_repo_entry) print("\t", vyos_debian_repo_entry) print("\t", salt_repo_entry) + print("\t", pdns_repo_entry) with open(apt_file, 'w') as f: f.write(vyos_repo_entry) f.write(vyos_debian_repo_entry) f.write(salt_repo_entry) + f.write(pdns_repo_entry) # Add custom APT entries if build_config['custom_apt_entry']: -- cgit v1.2.3 From 9209f34d4337aa2b848019b0c88297eda9213728 Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Mon, 25 Mar 2019 00:27:18 +0100 Subject: T1313: add support for reusable build flavor files. --- data/defaults.json | 15 +++++++++++++ data/kernel_version | 1 - scripts/build-config | 56 ++++++++++++++++++++++++++++------------------- scripts/build-submodules | 1 - scripts/defaults.py | 15 ++----------- scripts/live-build-config | 15 +++++-------- 6 files changed, 56 insertions(+), 47 deletions(-) create mode 100644 data/defaults.json delete mode 100644 data/kernel_version (limited to 'scripts/build-config') diff --git a/data/defaults.json b/data/defaults.json new file mode 100644 index 00000000..c403c862 --- /dev/null +++ b/data/defaults.json @@ -0,0 +1,15 @@ +{ + "architecture": "amd64", + "debian_mirror": "http://deb.debian.org/debian", + "debian_security_mirror": "http://deb.debian.org/debian-security", + "debian_distribution": "jessie", + "vyos_mirror": "http://dev.packages.vyos.net/repositories/current", + "vyos_branch": "current", + "kernel_version": "4.19.28", + "kernel_flavor": "amd64-vyos", + "additional_repositories": [ + "deb http://repo.saltstack.com/apt/debian/8/amd64/2017.7 jessie main", + "deb http://repo.powerdns.com/debian jessie-rec-41 main" + ], + "custom_packages": [] +} diff --git a/data/kernel_version b/data/kernel_version deleted file mode 100644 index cef3eaf2..00000000 --- a/data/kernel_version +++ /dev/null @@ -1 +0,0 @@ -4.19.28 diff --git a/scripts/build-config b/scripts/build-config index ce83f74e..a12ecdc4 100755 --- a/scripts/build-config +++ b/scripts/build-config @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Copyright (C) 2018, VyOS maintainers and contributors +# Copyright (C) 2019, VyOS maintainers and contributors # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 or later as @@ -49,19 +49,28 @@ def get_validator(optdict, name): return None +# Load the build flavor file +build_flavor = os.getenv('VYOS_BUILD_FLAVOR') +if build_flavor is None: + build_flavor = defaults.DEFAULT_BUILD_FLAVOR +try: + with open(build_flavor, 'r') as f: + build_defaults = json.load(f) +except Exception as e: + print("Failed to open the build flavor file {0}: {1}".format(build_flavor, e)) + sys.exit(1) + + # Options dict format: # '$option_name_without_leading_dashes': { ('$help_string', $default_value_generator_thunk, $value_checker_thunk) } options = { - 'architecture': ('Image target architecture (amd64 or i386 or armhf)', lambda: 'amd64', lambda x: x in ['amd64', 'i386', 'armhf']), + 'architecture': ('Image target architecture (amd64 or i386 or armhf)', lambda: build_defaults['architecture'], lambda x: x in ['amd64', 'i386', 'armhf']), 'build-by': ('Builder identifier (e.g. jrandomhacker@example.net)', get_default_build_by, None), - 'debian-mirror': ('Debian repository mirror for ISO build', lambda: defaults.DEBIAN_MIRROR, None), - 'debian-security-mirror': ('Debian security updated mirror', lambda: defaults.DEBIAN_SECURITY_MIRROR, None), - 'pbuilder-debian-mirror': ('Debian repository mirror for pbuilder env bootstrap', lambda: defaults.DEBIAN_MIRROR, None), - 'salt-mirror': ('Salt package mirror', lambda: defaults.SALT_MIRROR, None), - 'vyos-mirror': ('VyOS package mirror', lambda: defaults.VYOS_MIRROR, None), - 'pdns-mirror': ('PowerDNS package mirror', lambda: defaults.PDNS_MIRROR, None), + 'debian-mirror': ('Debian repository mirror for ISO build', lambda: build_defaults['debian_mirror'], None), + 'debian-security-mirror': ('Debian security updated mirror', lambda: build_defaults['debian_security_mirror'], None), + 'pbuilder-debian-mirror': ('Debian repository mirror for pbuilder env bootstrap', lambda: build_defaults['debian_mirror'], None), + 'vyos-mirror': ('VyOS package mirror', lambda: build_defaults["vyos_mirror"], None), 'build-type': ('Build type, release or development', lambda: 'development', lambda x: x in ['release', 'development']), - 'custom-packages': ('Custom packages to install from repositories', lambda: '', None), 'version': ('Version number (release builds only)', None, None) } @@ -80,6 +89,7 @@ parser.add_argument('--debug', help="Enable debug output", action='store_true') # Custom APT entry and APT key options can be used multiple times parser.add_argument('--custom-apt-entry', help="Custom APT entry", action='append') parser.add_argument('--custom-apt-key', help="Custom APT key file", action='append') +parser.add_argument('--custom-package', help="Custom package to install from repositories", action='append') args = vars(parser.parse_args()) @@ -95,8 +105,8 @@ for k, v in args.items(): # Some fixup for mirror settings. # The idea is: if --debian-mirror is specified but --pbuilder-debian-mirror is not, # use the --debian-mirror value for both lb and pbuilder bootstrap -if (args['debian_mirror'] != defaults.DEBIAN_MIRROR) and \ - (args['pbuilder_debian_mirror'] == defaults.DEBIAN_MIRROR): +if (args['debian_mirror'] != build_defaults["debian_mirror"]) and \ + (args['pbuilder_debian_mirror'] == build_defaults["debian_mirror"]): args['pbuilder_debian_mirror'] = args['debian_mirror'] # Version can only be set for release builds, @@ -109,16 +119,19 @@ if args['build_type'] == 'development': # Populate some defaults that are not configurable, # but that are handy to have in the options hash -args['distribution'] = defaults.DEBIAN_DISTRIBUTION +args['distribution'] = build_defaults["debian_distribution"] args['build_dir'] = os.path.join(os.getcwd(), defaults.BUILD_DIR) args['pbuilder_config'] = defaults.PBUILDER_CONFIG -args['vyos_branch'] = defaults.VYOS_BRANCH +args['vyos_branch'] = build_defaults["vyos_branch"] -# Convert a whitespace-separated string of custom packages to a list -if args['custom_packages']: - args['custom_packages'] = re.split(r'\s+', args['custom_packages']) -else: - args['custom_packages'] = [] +# Add custom packages from build defaults +if not args['custom_package']: + args['custom_package'] = [] +args['custom_package'] = args['custom_package'] + build_defaults['custom_packages'] + +if not args['custom_apt_entry']: + args['custom_apt_entry'] = [] +args['custom_apt_entry'] = args['custom_apt_entry'] + build_defaults['additional_repositories'] # Check the build environment and dependencies @@ -126,10 +139,8 @@ env_check_retval = os.system("scripts/check-build-env") if env_check_retval > 0: print("Build environment check failed, fix the issues and retry") -# Get the kernel version from data/kernel_version -with open("data/kernel_version") as f: - kernel_version = f.read().strip() - args['kernel_version'] = kernel_version +args['kernel_version'] = build_defaults['kernel_version'] +args['kernel_flavor'] = build_defaults['kernel_flavor'] # Save to file @@ -138,3 +149,4 @@ print("Saving the build config to {0}".format(defaults.BUILD_CONFIG)) with open(defaults.BUILD_CONFIG, 'w') as f: json.dump(args, f, indent=4, sort_keys=True) print("\n", file=f) + diff --git a/scripts/build-submodules b/scripts/build-submodules index e6e9cda3..fc8fdf83 100755 --- a/scripts/build-submodules +++ b/scripts/build-submodules @@ -343,7 +343,6 @@ build_kernel() { PATCHLEVEL=$(grep "^PATCHLEVEL" $PKGDIR/vyos-kernel/Makefile | grep -Eo '[0-9]{1,4}') SUBLEVEL=$(grep "^SUBLEVEL" $PKGDIR/vyos-kernel/Makefile | grep -Eo '[0-9]{1,4}') ARCH=$(dpkg --print-architecture) - echo "$VERSION.$PATCHLEVEL.$SUBLEVEL" > $ROOTDIR/data/kernel_version status_ok } build_kernel diff --git a/scripts/defaults.py b/scripts/defaults.py index 5f1941c1..5d489e48 100644 --- a/scripts/defaults.py +++ b/scripts/defaults.py @@ -21,27 +21,16 @@ import os BUILD_DIR = 'build' BUILD_CONFIG = os.path.join(BUILD_DIR, 'build-config.json') -# The default mirror was chosen entirely at random -DEBIAN_MIRROR = 'http://deb.debian.org/debian' -DEBIAN_SECURITY_MIRROR = 'http://deb.debian.org/debian-security' - -DEBIAN_DISTRIBUTION = 'jessie' - -SALT_MIRROR = 'http://repo.saltstack.com/apt/debian/8/amd64/2017.7' -PDNS_MIRROR = 'http://repo.powerdns.com/debian' - PBUILDER_CONFIG = os.path.join(BUILD_DIR, 'pbuilderrc') PBUILDER_DIR = os.path.join(BUILD_DIR, 'pbuilder') LB_CONFIG_DIR = os.path.join(BUILD_DIR, 'config') CHROOT_INCLUDES_DIR = os.path.join(LB_CONFIG_DIR, 'includes.chroot') -VYOS_MIRROR = 'http://dev.packages.vyos.net/repositories/current' - -VYOS_BRANCH = 'current' - ARCHIVES_DIR = 'config/archives/' VYOS_REPO_FILE = 'config/archives/vyos.list.chroot' CUSTOM_REPO_FILE = 'config/archives/custom.list.chroot' CUSTOM_PACKAGE_LIST_FILE = 'config/package-lists/custom.list.chroot' + +DEFAULT_BUILD_FLAVOR = 'data/defaults.json' diff --git a/scripts/live-build-config b/scripts/live-build-config index 1aea4dc5..f158ba5c 100755 --- a/scripts/live-build-config +++ b/scripts/live-build-config @@ -36,12 +36,12 @@ lb_config_tmpl = """ lb config noauto \ --architectures {{architecture}} \ --bootappend-live "boot=live components hostname=vyos username=live nopersistence noautologin nonetworking union=overlay" \ - --linux-flavours {{architecture}}-vyos \ + --linux-flavours {{kernel_flavor}} \ --linux-packages linux-image-{{kernel_version}} \ --bootloader syslinux,grub-efi \ --binary-images iso-hybrid \ --debian-installer false \ - --distribution jessie \ + --distribution {{distribution}} \ --iso-application "VyOS" \ --iso-publisher "{{build_by}}" \ --iso-volume "VyOS" \ @@ -70,8 +70,6 @@ debug = build_config['debug'] print("Setting up additional APT entries") vyos_repo_entry = "deb {0}/vyos {1} main\n".format(build_config['vyos_mirror'], build_config['vyos_branch']) vyos_debian_repo_entry = "deb {0}/debian {1} main\n".format(build_config['vyos_mirror'], build_config['vyos_branch']) -salt_repo_entry = "deb {0} {1} main\n".format(build_config['salt_mirror'], build_config['distribution']) -pdns_repo_entry = "deb {0} {1}-rec-41 main\n".format(build_config['pdns_mirror'], build_config['distribution']) apt_file = os.path.join(build_config['build_dir'], defaults.VYOS_REPO_FILE) @@ -79,14 +77,10 @@ if debug: print("Adding these entries to {0}:".format(apt_file)) print("\t", vyos_repo_entry) print("\t", vyos_debian_repo_entry) - print("\t", salt_repo_entry) - print("\t", pdns_repo_entry) with open(apt_file, 'w') as f: f.write(vyos_repo_entry) f.write(vyos_debian_repo_entry) - f.write(salt_repo_entry) - f.write(pdns_repo_entry) # Add custom APT entries if build_config['custom_apt_entry']: @@ -97,6 +91,7 @@ if build_config['custom_apt_entry']: print(entries) with open(custom_apt_file, 'w') as f: f.write(entries) + f.write("\n") # Add custom APT keys if build_config['custom_apt_key']: @@ -106,9 +101,9 @@ if build_config['custom_apt_key']: shutil.copy(k, os.path.join(key_dir, dst_name)) # Add custom packages -if build_config['custom_packages']: +if build_config['custom_package']: package_list_file = os.path.join(build_config['build_dir'], defaults.CUSTOM_PACKAGE_LIST_FILE) - packages = "\n".join(build_config['custom_packages']) + packages = "\n".join(build_config['custom_package']) with open (package_list_file, 'w') as f: f.write(packages) -- cgit v1.2.3 From 432f35f0edc7f610eceff1a62e431c527a11a3f5 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Thu, 28 Mar 2019 22:51:33 +0100 Subject: live-build: final fix for Debian Backports (all good things are three) 166f8735e4e ("live-build: fix copy/paste error") still did not set all required parts for the build script. All good things will be three!!! --- scripts/build-config | 1 + 1 file changed, 1 insertion(+) (limited to 'scripts/build-config') diff --git a/scripts/build-config b/scripts/build-config index a12ecdc4..088dd100 100755 --- a/scripts/build-config +++ b/scripts/build-config @@ -68,6 +68,7 @@ options = { 'build-by': ('Builder identifier (e.g. jrandomhacker@example.net)', get_default_build_by, None), 'debian-mirror': ('Debian repository mirror for ISO build', lambda: build_defaults['debian_mirror'], None), 'debian-security-mirror': ('Debian security updated mirror', lambda: build_defaults['debian_security_mirror'], None), + 'debian-backports-mirror': ('Debian backports mirror', lambda: build_defaults['debian_backports_mirror'], None), 'pbuilder-debian-mirror': ('Debian repository mirror for pbuilder env bootstrap', lambda: build_defaults['debian_mirror'], None), 'vyos-mirror': ('VyOS package mirror', lambda: build_defaults["vyos_mirror"], None), 'build-type': ('Build type, release or development', lambda: 'development', lambda x: x in ['release', 'development']), -- cgit v1.2.3 From 99527b3e941665290d66bfc21bb30c7a22ee717d Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Sun, 31 Mar 2019 11:27:37 +0200 Subject: Revert "live-build: final fix for Debian Backports (all good things are three)" This reverts commit 432f35f0edc7f610eceff1a62e431c527a11a3f5. --- scripts/build-config | 1 - 1 file changed, 1 deletion(-) (limited to 'scripts/build-config') diff --git a/scripts/build-config b/scripts/build-config index 088dd100..a12ecdc4 100755 --- a/scripts/build-config +++ b/scripts/build-config @@ -68,7 +68,6 @@ options = { 'build-by': ('Builder identifier (e.g. jrandomhacker@example.net)', get_default_build_by, None), 'debian-mirror': ('Debian repository mirror for ISO build', lambda: build_defaults['debian_mirror'], None), 'debian-security-mirror': ('Debian security updated mirror', lambda: build_defaults['debian_security_mirror'], None), - 'debian-backports-mirror': ('Debian backports mirror', lambda: build_defaults['debian_backports_mirror'], None), 'pbuilder-debian-mirror': ('Debian repository mirror for pbuilder env bootstrap', lambda: build_defaults['debian_mirror'], None), 'vyos-mirror': ('VyOS package mirror', lambda: build_defaults["vyos_mirror"], None), 'build-type': ('Build type, release or development', lambda: 'development', lambda x: x in ['release', 'development']), -- cgit v1.2.3