
Multiple chroots are created based on the client's request. The maximum number of chroots are defined in the client's request. If the chroots count the client required exceeds the maximum of chroots, it must wait for some tasks to complete and at least one chroot is released. The client decides how many parallel build requests initiated. 'schrootspool' is used to manage all the created chroots and is responsible for chroots applying and releasing. The local repository 'deb-local-build' in '/etc/sbuild/sbuild.conf' which is used to resolve dependency is removed for race condition: Aptly does not support parallel accessing, when package A is built done and the deb binaries are uploaded to 'deb-local-build', the meta file of the repository like 'Release' will disappear for a while until the new one is generated after Aptly publishing. During the time, package B is fetching the repository to get the depended packages, it fails to run 'apt-get' command on 'deb-local-build', to resolve this race condition, the config item 'deb http://stx-stx-repomgr:80/deb-local-build bullseye main' is removed from '/etc/sbuild/sbuild.conf' and the snapshot mirror 'deb-local-build-<x>' is added to each sbuild command. Story: 2008846 Task: 45665 Test Plan: Pass: build-pkgs -c -a pass: build-pkgs -c -l compiler,distro --parallel pass: build-pkgs -c -a --parallel Signed-off-by: Haiqing Bai <haiqing.bai@windriver.com> Change-Id: I8deae43d7923beb6916e977313ad05bb57e10cca
143 lines
4.0 KiB
Python
143 lines
4.0 KiB
Python
#!/usr/bin/python3
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
# Copyright (C) 2021-2022 Wind River Systems,Inc
|
|
#
|
|
from debbuilder import Debbuilder
|
|
from flask import Flask
|
|
from flask import jsonify
|
|
from flask import request
|
|
import logging
|
|
|
|
STX_DISTRO = 'bullseye'
|
|
STX_ARCH = 'amd64'
|
|
PKG_BUILDER_LOG = '/localdisk/pkgbuilder.log'
|
|
|
|
app = Flask(__name__)
|
|
app.debug = True
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
log = logging.getLogger('pkgbuilder')
|
|
handler = logging.FileHandler(PKG_BUILDER_LOG, encoding='UTF-8')
|
|
log_format = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
|
|
handler.setFormatter(log_format)
|
|
log.addHandler(handler)
|
|
|
|
dbuilder = Debbuilder('private', STX_DISTRO, STX_ARCH, log)
|
|
response = {}
|
|
|
|
|
|
def dbuider_initialized():
|
|
global dbuilder
|
|
if not dbuilder:
|
|
response['status'] = 'fail'
|
|
response['msg'] = 'Package builder is not initialized'
|
|
return False
|
|
return True
|
|
|
|
|
|
def log_request(action, request):
|
|
"""
|
|
Print request with parameters
|
|
"""
|
|
msg = 'Received request: ' + action + ': {'
|
|
for key in request:
|
|
value = key + ':' + request[key]
|
|
msg = ' '.join([msg, value])
|
|
msg = msg + '}'
|
|
log.info(msg)
|
|
|
|
|
|
@app.route('/pkgbuilder/state', methods=['GET'])
|
|
def get_state():
|
|
if dbuider_initialized():
|
|
response = dbuilder.state()
|
|
return jsonify(response)
|
|
|
|
|
|
@app.route('/pkgbuilder/loadchroot', methods=['GET'])
|
|
def load_chroot():
|
|
log_request('loadchroot', request.form)
|
|
if dbuider_initialized():
|
|
response = dbuilder.load_chroot(request.form)
|
|
return jsonify(response)
|
|
|
|
|
|
@app.route('/pkgbuilder/clonechroot', methods=['GET'])
|
|
def clone_chroot():
|
|
log_request('clonechroot', request.form)
|
|
if dbuider_initialized():
|
|
response = dbuilder.clone_chroot(request.form)
|
|
return jsonify(response)
|
|
|
|
|
|
@app.route('/pkgbuilder/savechroot', methods=['GET'])
|
|
def save_chroot():
|
|
log_request('savechroot', request.form)
|
|
if dbuider_initialized():
|
|
response = dbuilder.save_chroot(request.form)
|
|
return jsonify(response)
|
|
|
|
|
|
@app.route('/pkgbuilder/addchroot', methods=['GET'])
|
|
def add_chroot():
|
|
log_request('addchroot', request.form)
|
|
if dbuider_initialized():
|
|
response = dbuilder.add_chroot(request.form)
|
|
return jsonify(response)
|
|
|
|
|
|
@app.route('/pkgbuilder/refreshchroots', methods=['GET'])
|
|
def refresh_chroot():
|
|
log_request('refreshchroots', request.form)
|
|
if dbuider_initialized():
|
|
response = dbuilder.refresh_chroots(request.form)
|
|
return jsonify(response)
|
|
|
|
|
|
@app.route('/pkgbuilder/addtask', methods=['POST'])
|
|
def add_task():
|
|
if dbuider_initialized():
|
|
reqs = request.get_json()
|
|
log.debug("Request for adding task: %s", reqs)
|
|
response = dbuilder.add_task(reqs)
|
|
return jsonify(response)
|
|
|
|
|
|
@app.route('/pkgbuilder/killtask', methods=['GET'])
|
|
def clean_env():
|
|
log_request('killtask', request.form)
|
|
if dbuider_initialized():
|
|
response = dbuilder.kill_task(request.form)
|
|
return jsonify(response)
|
|
|
|
|
|
@app.route('/pkgbuilder/stoptask', methods=['GET'])
|
|
def stop_task():
|
|
log_request('stoptask', request.form)
|
|
if dbuider_initialized():
|
|
response = dbuilder.stop_task(request.form)
|
|
return jsonify(response)
|
|
|
|
|
|
@app.route('/pkgbuilder/cleanstamp', methods=['GET'])
|
|
def clean_stamp():
|
|
log_request('cleanstamp', request.form)
|
|
if dbuider_initialized():
|
|
response = dbuilder.clean_stamp(request.form)
|
|
return jsonify(response)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host='0.0.0.0', port=80, debug=True)
|