mirror of
https://github.com/RROrg/rr.git
synced 2025-06-21 05:51:05 +08:00
add addons, modules for rr-custom
This commit is contained in:
parent
7d238f8f49
commit
0e7f484147
45
.github/workflows/issues.yml
vendored
45
.github/workflows/issues.yml
vendored
@ -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
|
||||||
|
|
||||||
|
@ -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> `;
|
||||||
|
//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> `;
|
||||||
|
//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="">
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user