mirror of
https://github.com/YunoHost-Apps/yunorunner_ynh.git
synced 2024-09-03 20:36:13 +02:00
commit
d3320d892e
9 changed files with 173 additions and 9 deletions
|
@ -18,7 +18,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in
|
|||
|
||||
CI runner of YunoHost
|
||||
|
||||
**Shipped version:** 2023.02.12~ynh1
|
||||
**Shipped version:** 2023.04.05~ynh1
|
||||
|
||||
## Screenshots
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) po
|
|||
|
||||
Runner d'intégration continue de YunoHost
|
||||
|
||||
**Version incluse :** 2023.02.12~ynh1
|
||||
**Version incluse :** 2023.04.05~ynh1
|
||||
|
||||
## Captures d’écran
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
;; Test complet
|
||||
; pre-install
|
||||
sudo git clone --quiet https://github.com/YunoHost/CI_package_check /home/CI_package_check
|
||||
; Manifest
|
||||
domain="domain.tld"
|
||||
path="/path"
|
||||
context="personal-ci"
|
||||
mode="manual"
|
||||
cluster="no"
|
||||
; Checks
|
||||
pkg_linter=1
|
||||
setup_sub_dir=1
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
BASE_URL = "https://__DOMAIN____PATH__"
|
||||
PORT = __PORT__
|
||||
PACKAGE_CHECK_DIR = "__FINALPATH__/package_check/"
|
||||
MONITOR_APPS_LIST = False
|
||||
MONITOR_GIT = False
|
||||
MONITOR_APPS_LIST = __AUTO__
|
||||
MONITOR_GIT = __AUTO__
|
||||
MONITOR_ONLY_GOOD_QUALITY_APPS = False
|
||||
MONTHLY_JOBS = False
|
||||
MONTHLY_JOBS = __AUTO__
|
||||
WORKER_COUNT = 1
|
||||
YNH_BRANCH = "stable"
|
||||
DIST = "bullseye"
|
||||
|
|
6
doc/POST_INSTALL.md
Normal file
6
doc/POST_INSTALL.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
If you want to enable Matrix notification, you should look at
|
||||
the instructions inside `__FINAL_PATH__lib/chat_notify.sh` to deploy matrix-commander.
|
||||
|
||||
You may also want to tweak the `__FINAL_PATH__/config.py` file to run test with a different branch or architecture.
|
||||
|
||||
When you're ready to start the CI, restart its service via the webadmin or run `systemctl restart __APP__`.
|
2
doc/PRE_INSTALL.md
Normal file
2
doc/PRE_INSTALL.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
YunoRunner will install LXD, for containers management.
|
||||
Make sure your system has virtualization capability, and enough resources.
|
|
@ -6,7 +6,7 @@
|
|||
"en": "CI runner of YunoHost",
|
||||
"fr": "Runner d'intégration continue de YunoHost"
|
||||
},
|
||||
"version": "2023.02.12~ynh1",
|
||||
"version": "2023.04.05~ynh1",
|
||||
"url": "https://github.com/YunoHost/yunorunner",
|
||||
"upstream": {
|
||||
"license": "GPL-3.0-or-later",
|
||||
|
@ -37,6 +37,33 @@
|
|||
"name": "path",
|
||||
"type": "path",
|
||||
"default": "/ci"
|
||||
},
|
||||
{
|
||||
"name": "context",
|
||||
"type": "select",
|
||||
"choices": ["personal-ci", "official-infra"],
|
||||
"default": "personal-ci",
|
||||
"ask": {
|
||||
"en": "Leave it to 'personal-ci'. If set to 'official-infra', Yunorunner will take over your server and disable vital services to run alone."
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "mode",
|
||||
"type": "select",
|
||||
"choices": ["auto", "manual"],
|
||||
"default": "manual",
|
||||
"ask": {
|
||||
"en": "Should the jobs be automatically run from the apps list? In manual mode, Yunorunner will expect to be triggered by the `ciclic` command or webhooks (like ci-apps-dev). In auto mode, all apps of the catalog will be scheduled to be tested at least once a month and upon any change in their designated main branch (like ci-apps)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cluster",
|
||||
"type": "select",
|
||||
"choices": ["cluster", "no"],
|
||||
"default": "no",
|
||||
"ask": {
|
||||
"en": "Should an LXD cluster be created with this server as first node? (cluster mode is experimental)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -9,12 +9,118 @@ pkg_dependencies="python3-venv python3-dev python3-pip sqlite3 wkhtmltopdf optip
|
|||
|
||||
yunorunner_repository="https://github.com/YunoHost/yunorunner"
|
||||
|
||||
yunorunner_release="50ae066741b8a7e845b691eac1045406b1ee7f16"
|
||||
yunorunner_release="52ef23a2cb37cb4fe13debca58eb589bb2f4d927"
|
||||
|
||||
#=================================================
|
||||
# PERSONAL HELPERS
|
||||
#=================================================
|
||||
|
||||
function tweak_yunohost() {
|
||||
|
||||
# Idk why this is needed but wokay I guess >_>
|
||||
echo -e "\n127.0.0.1 $domain #CI_APP" >> /etc/hosts
|
||||
|
||||
ynh_print_info "Disabling unecessary services to save up RAM..."
|
||||
for SERVICE in mysql php7.4-fpm metronome rspamd dovecot postfix redis-server postsrsd yunohost-api avahi-daemon
|
||||
do
|
||||
systemctl stop $SERVICE
|
||||
systemctl disable $SERVICE --quiet
|
||||
done
|
||||
|
||||
yunohost app makedefault -d "$domain" $app
|
||||
|
||||
}
|
||||
|
||||
function setup_lxd() {
|
||||
if ! yunohost app list --output-as json --quiet | jq -e '.apps[] | select(.id == "lxd")' >/dev/null
|
||||
then
|
||||
ynh_script_progression --message="Installing LXD... (this make take a long time!"
|
||||
yunohost app install --force https://github.com/YunoHost-Apps/lxd_ynh
|
||||
fi
|
||||
|
||||
mkdir .lxd
|
||||
pushd .lxd
|
||||
|
||||
ynh_print_info "Configuring lxd..."
|
||||
|
||||
if [ "$cluster" == "cluster" ]
|
||||
then
|
||||
local free_space=$(df --output=avail / | sed 1d)
|
||||
local btrfs_size=$(( $free_space * 90 / 100 / 1024 / 1024 ))
|
||||
local lxc_network=$((1 + $RANDOM % 254))
|
||||
|
||||
yunohost firewall allow TCP 8443
|
||||
cat >./preseed.conf <<EOF
|
||||
config:
|
||||
cluster.https_address: $domain:8443
|
||||
core.https_address: ${domain}:8443
|
||||
core.trust_password: ${yuno_pwd}
|
||||
networks:
|
||||
- config:
|
||||
ipv4.address: 192.168.${lxc_network}.1/24
|
||||
ipv4.nat: "true"
|
||||
ipv6.address: none
|
||||
description: ""
|
||||
name: lxdbr0
|
||||
type: bridge
|
||||
project: default
|
||||
storage_pools:
|
||||
- config:
|
||||
size: ${btrfs_size}GB
|
||||
source: /var/lib/lxd/disks/local.img
|
||||
description: ""
|
||||
name: local
|
||||
driver: btrfs
|
||||
profiles:
|
||||
- config: {}
|
||||
description: Default LXD profile
|
||||
devices:
|
||||
lxdbr0:
|
||||
nictype: bridged
|
||||
parent: lxdbr0
|
||||
type: nic
|
||||
root:
|
||||
path: /
|
||||
pool: local
|
||||
type: disk
|
||||
name: default
|
||||
projects:
|
||||
- config:
|
||||
features.images: "true"
|
||||
features.networks: "true"
|
||||
features.profiles: "true"
|
||||
features.storage.volumes: "true"
|
||||
description: Default LXD project
|
||||
name: default
|
||||
cluster:
|
||||
server_name: ${domain}
|
||||
enabled: true
|
||||
EOF
|
||||
cat ./preseed.conf | lxd init --preseed
|
||||
rm ./preseed.conf
|
||||
lxc config set core.https_address [::]
|
||||
else
|
||||
lxd init --auto #--storage-backend=dir
|
||||
fi
|
||||
|
||||
popd
|
||||
|
||||
# ci_user will be the one launching job, gives it permission to run lxd commands
|
||||
usermod -a -G lxd $app
|
||||
|
||||
ynh_exec_as $app lxc remote add yunohost https://devbaseimgs.yunohost.org --public --accept-certificate
|
||||
}
|
||||
|
||||
function add_cron_jobs() {
|
||||
ynh_script_progression --message="Configuring the cron jobs.."
|
||||
|
||||
# Cron tasks
|
||||
cat >> "/etc/cron.d/yunorunner" << EOF
|
||||
# self-upgrade every night
|
||||
0 3 * * * root "$final_path/maintenance/self_upgrade.sh" >> "$final_path/maintenance/self_upgrade.log" 2>&1
|
||||
EOF
|
||||
}
|
||||
|
||||
#=================================================
|
||||
# EXPERIMENTAL HELPERS
|
||||
#=================================================
|
||||
|
|
|
@ -25,6 +25,9 @@ ynh_abort_if_errors
|
|||
|
||||
domain=$YNH_APP_ARG_DOMAIN
|
||||
path_url=$YNH_APP_ARG_PATH
|
||||
context=$YNH_APP_ARG_CONTEXT
|
||||
mode=$YNH_APP_ARG_MODE
|
||||
cluster=$YNH_APP_ARG_CLUSTER
|
||||
|
||||
app=$YNH_APP_INSTANCE_NAME
|
||||
|
||||
|
@ -87,6 +90,8 @@ pushd "$final_path"
|
|||
ynh_exec_as $app git remote add origin "$yunorunner_repository"
|
||||
ynh_exec_as $app git fetch --quiet --depth=1 origin "$yunorunner_release"
|
||||
ynh_exec_as $app git reset --quiet --hard FETCH_HEAD
|
||||
setup_lxd
|
||||
git clone https://github.com/YunoHost/package_check "./package_check"
|
||||
popd
|
||||
|
||||
chmod 750 "$final_path"
|
||||
|
@ -121,11 +126,28 @@ popd
|
|||
#=================================================
|
||||
ynh_script_progression --message="Adding a config file..."
|
||||
|
||||
if [ $mode = "auto" ]; then
|
||||
auto="True"
|
||||
else
|
||||
auto="False"
|
||||
fi
|
||||
|
||||
ynh_add_config --template="yunorunner.config.py" --destination="$final_path/config.py"
|
||||
|
||||
chmod 400 "$final_path/config.py"
|
||||
chown $app:$app "$final_path/config.py"
|
||||
|
||||
#=================================================
|
||||
# FINISH INSTALL
|
||||
#=================================================
|
||||
ynh_script_progression --message="Run Yunorunner's finish_install script..."
|
||||
|
||||
if [ $context != "personal-ci" ] && [ ${PACKAGE_CHECK_EXEC:-0} -ne 0 ]; then
|
||||
tweak_yunohost
|
||||
fi
|
||||
|
||||
add_cron_jobs
|
||||
|
||||
#=================================================
|
||||
# SETUP SYSTEMD
|
||||
#=================================================
|
||||
|
|
Loading…
Reference in a new issue