add addons, modules for rr-custom

This commit is contained in:
Ing 2024-04-12 02:28:34 +08:00
parent 7d238f8f49
commit 0e7f484147
3 changed files with 162 additions and 14 deletions

View File

@ -40,6 +40,8 @@ jobs:
language= '' language= ''
model = '' model = ''
version = '' version = ''
addons = ''
modules = ''
try: try:
if issuetitle.lower().startswith('custom'): if issuetitle.lower().startswith('custom'):
jsonbody = json.loads(issuebody) jsonbody = json.loads(issuebody)
@ -47,6 +49,8 @@ jobs:
language = jsonbody.get('language', '') language = jsonbody.get('language', '')
model = jsonbody.get('model', '') model = jsonbody.get('model', '')
version = jsonbody.get('version', '') version = jsonbody.get('version', '')
addons = jsonbody.get('addons', '')
modules = jsonbody.get('modules', '')
except ValueError as e: except ValueError as e:
pass pass
@ -60,6 +64,8 @@ jobs:
set_output("language", language) set_output("language", language)
set_output("model", model) set_output("model", model)
set_output("version", version) set_output("version", version)
set_output("addons", addons)
set_output("modules", modules)
- name: Update Comment Warinfo - name: Update Comment Warinfo
if: env.warinfo == 'true' if: env.warinfo == 'true'
@ -131,6 +137,10 @@ jobs:
run: | run: |
# 累了, 毁灭吧! # 累了, 毁灭吧!
function writeConfigKey() {
[ "${2}" = "{}" ] && sudo yq eval '.'${1}' = {}' --inplace "${3}" 2>/dev/null || sudo yq eval '.'${1}' = "'"${2}"'"' --inplace "${3}" 2>/dev/null
}
REPO="${{ github.server_url }}/${{ github.repository }}" REPO="${{ github.server_url }}/${{ github.repository }}"
MODEL="${{ env.model }}" MODEL="${{ env.model }}"
VERSION="${{ env.version }}" VERSION="${{ env.version }}"
@ -173,9 +183,40 @@ jobs:
exit 1 exit 1
fi fi
sudo ./localbuild.sh make "${MODEL}" "${VERSION}" sudo ./localbuild.sh config "${MODEL}" "${VERSION}"
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "make failed" echo "config failed"
exit 1
fi
if [ -n "${{ env.addons }}" ]; then
echo -en "set addons"
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
writeConfigKey "addons" "{}" "${USER_CONFIG_FILE}"
echo -en ': '
for A in $(echo "${{ env.addons }}" | tr ',' ' '); do
echo -en "${A} "
VALUE=""
writeConfigKey "addons.\"${A}\"" "${VALUE}" "${USER_CONFIG_FILE}"
done
echo ""
fi
if [ -n "${{ env.modules }}" ]; then
echo -en "set modules"
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
echo -en ': '
for M in $(echo "${{ env.modules }}" | tr ',' ' '); do
echo -en "${M} "
VALUE=""
writeConfigKey "modules.\"${M}\"" "${VALUE}" "${USER_CONFIG_FILE}"
done
echo ""
fi
sudo ./localbuild.sh build
if [ $? -ne 0 ]; then
echo "build failed"
exit 1 exit 1
fi fi

View File

@ -49,14 +49,21 @@
function init() { function init() {
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/models.json", function (result) { httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/models.json", function (result) {
_models = JSON.parse(result);
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/addons.json", function (result) {
_addons = JSON.parse(result);
httpGetAsync("https://raw.githubusercontent.com/RROrg/rr/main/docs/modules.json", function (result) {
_modules = JSON.parse(result); _modules = JSON.parse(result);
$("#model").on("change", changeModel); $("#model").on("change", changeModel);
$("#version").on("change", changeVersion);
setModels(); setModels();
}); });
});
});
} }
function setModels() { function setModels() {
var models = Object.keys(_modules).sort(); var models = Object.keys(_models).sort();
$("#model")[0].options.length = 0; $("#model")[0].options.length = 0;
for (var i = 0; i < models.length; i++) { for (var i = 0; i < models.length; i++) {
var model = models[i]; var model = models[i];
@ -66,13 +73,14 @@
} }
function changeModel() { function changeModel() {
model = $("#model").val(); model = $("#model").val();
var versions = Object.keys(_modules[model]["productvers"]).reverse(); var versions = Object.keys(_models[model]["productvers"]).reverse();
$("#version")[0].options.length = 0; $("#version")[0].options.length = 0;
for (var i = 0; i < versions.length; i++) { for (var i = 0; i < versions.length; i++) {
var version = versions[i]; var version = versions[i];
$("#version").append(`<option value="${version}">${version}</option>`); $("#version").append(`<option value="${version}">${version}</option>`);
} }
changeproductsimage(); changeproductsimage();
changeVersion();
} }
function changeproductsimage() { function changeproductsimage() {
@ -82,12 +90,73 @@
$('#products').html(`<img src="https://www.synology.com/api/products/getPhoto?product=${model}&type=img_s&sort=0" width="20%">`); $('#products').html(`<img src="https://www.synology.com/api/products/getPhoto?product=${model}&type=img_s&sort=0" width="20%">`);
} }
function changeVersion() {
createAddonsBtn();
createModulesBtn();
}
function createAddonsBtn() {
var language = $("#language").val();
var idx = 1;
var html = `<div class="form-group-body" id="addons_btns">`;
for (var ext in _addons) {
var par = "";
if (_addons[ext]["system"] == true) {
par = "disabled";
}
html += `<button type="button" class="btn btn-primary btn-sm mt-2" id="btn_${ext}" ${par} onclick="return onclickext('addons', '${ext}')" autofocus="" title="${_addons[ext]["description"][language]}">${ext}</button>&nbsp;`;
//if (idx++ % 10 == 0) html += "<br />";
}
html += `</div>`;
$('#addons_btns').html(html);
}
function createModulesBtn() {
var model = $("#model").val();
var version = $("#version").val();
var platform = _models[model]["platform"] + "-" + _models[model]["productvers"][version];
var extstr = [];
var idx = 1;
var html = `<div class="form-group-body" id="modules_btns">`;
for (var ext in _modules[platform]) {
extstr.push(ext);
var par = "btn-danger";
html += `<button type="button" class="btn btn-primary btn-sm mt-2 ${par}" id="btn_${ext}" ${par} onclick="return onclickext('modules', '${ext}')" autofocus="" title="${_modules[platform][ext]["description"]}">${ext}</button>&nbsp;`;
//if (idx++ % 10 == 0) html += "<br />";
}
html += `</div>`;
$('#modules_btns').html(html);
if (extstr.length > 0) {
$('#modules').val(extstr.join(","));
}
}
function onclickext(type, ext) {
var btnobj = $("#btn_" + ext);
var extstr = $('#' + type).val().split(",");
if (btnobj.hasClass("btn-danger")) {
extstr.map((val, i) => {
if (val === ext) {
extstr.splice(i, 1);
}
});
btnobj.removeClass("btn-danger");
} else {
btnobj.addClass("btn-danger");
extstr.push(ext);
}
extstr.map((val, i) => {
if (val === "") {
extstr.splice(i, 1);
}
});
$('#' + type).val(extstr.join(","));
}
function createIssues() { function createIssues() {
var form = document.getElementById("inputs"); var form = document.getElementById("inputs");
let formData = new FormData(form); let formData = new FormData(form);
var title = "custom"; var title = "custom";
var body = {}; var body = {};
var _parameters = ["title", "language", "model", "version"]; var _parameters = ["title", "language", "model", "version", "addons", "modules"];
for (var key in _parameters) { for (var key in _parameters) {
var name = _parameters[key]; var name = _parameters[key];
if (name == "title") { if (name == "title") {
@ -200,6 +269,26 @@
</select> </select>
</div> </div>
</div> </div>
<div class="form-group mt-1 mb-2 ">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Addons:</label>
</div>
<div class="form-group-body">
<textarea class="form-control input-contrast input-sm" type="text" id="addons" name="inputs[addons]" disabled></textarea>
</div>
<div class="form-group-body" id="addons_btns">
</div>
</div>
<div class="form-group mt-1 mb-2 ">
<div class="form-group-header">
<label class="color-fg-default text-mono f6">Modules:</label>
</div>
<div class="form-group-body">
<textarea class="form-control input-contrast input-sm" type="text" id="modules" name="inputs[modules]" disabled></textarea>
</div>
<div class="form-group-body" id="modules_btns">
</div>
</div>
<div data-replace-remote-form-target="" class="workflow-dispatch"> <div data-replace-remote-form-target="" class="workflow-dispatch">
<form id="inputs"> <form id="inputs">
<button type="button" class="btn State--merged" onclick="return createIssues()" autofocus=""> <button type="button" class="btn State--merged" onclick="return createIssues()" autofocus="">

View File

@ -17,7 +17,8 @@ function help() {
echo "Commands:" echo "Commands:"
echo " create [workspace] [rr.img] - Create the workspace" echo " create [workspace] [rr.img] - Create the workspace"
echo " init - Initialize the environment" echo " init - Initialize the environment"
echo " make [model] [version] - Make the DSM system" echo " config [model] [version] - Config the DSM system"
echo " build - Build the DSM system"
echo " pack [rr.img] - Pack to rr.img" echo " pack [rr.img] - Pack to rr.img"
echo " help - Show this help" echo " help - Show this help"
exit 1 exit 1
@ -112,7 +113,7 @@ function init() {
return ${RET} return ${RET}
} }
function make() { function config() {
if [ ! -f $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env ]; then if [ ! -f $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env ]; then
echo "Please run init first" echo "Please run init first"
exit 1 exit 1
@ -130,12 +131,29 @@ function make() {
./menu.sh modelMenu "${1:-"SA6400"}" || break ./menu.sh modelMenu "${1:-"SA6400"}" || break
echo "version" echo "version"
./menu.sh productversMenu "${2:-"7.2"}" || break ./menu.sh productversMenu "${2:-"7.2"}" || break
RET=0
fi
break
done
popd
[ ${RET} -ne 0 ] && echo "Failed." || echo "Success."
return ${RET}
}
function build() {
if [ ! -f $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env ]; then
echo "Please run init first"
exit 1
fi
. $(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)/rr.env
RET=1
pushd "${CHROOT_PATH}/initrd/opt/rr"
while true; do
echo "build" echo "build"
./menu.sh make -1 || break ./menu.sh make -1 || break
echo "clean" echo "clean"
./menu.sh cleanCache -1 || break ./menu.sh cleanCache -1 || break
RET=0 RET=0
fi
break break
done done
popd popd