mirror of
https://github.com/YunoHost/ynh-dev.git
synced 2024-09-03 20:05:59 +02:00
Merge branch 'master' of https://github.com/YunoHost/ynh-dev
This commit is contained in:
commit
716367ce88
3 changed files with 83 additions and 46 deletions
46
README.md
46
README.md
|
@ -1,8 +1,8 @@
|
||||||
# ynh-dev - Yunohost dev environnement manager
|
# ynh-dev - Yunohost dev environment manager
|
||||||
|
|
||||||
Report issues here: https://github.com/yunohost/issues
|
Report issues here: https://github.com/yunohost/issues
|
||||||
|
|
||||||
ynh-dev is a CLI tool to manage your local development environement for YunoHost. This allow you to develop on the various repository of the YunoHost project.
|
ynh-dev is a CLI tool to manage your local development environment for YunoHost. This allow you to develop on the various repository of the YunoHost project.
|
||||||
|
|
||||||
In particular, it allows :
|
In particular, it allows :
|
||||||
|
|
||||||
|
@ -25,23 +25,17 @@ Here is the development flow:
|
||||||
2. Manage YunoHost's dev LXCs
|
2. Manage YunoHost's dev LXCs
|
||||||
3. Developping on your host, and testing in the container
|
3. Developping on your host, and testing in the container
|
||||||
|
|
||||||
### 1. Setup ynh-dev and the development environnement
|
### 1. Setup ynh-dev and the development environment
|
||||||
|
|
||||||
First you need to install the dependencies. ynh-dev essentially requires git, vagrant, and an LXC ecosystem.
|
First you need to install the dependencies. ynh-dev essentially requires git, vagrant, and an LXC ecosystem.
|
||||||
|
|
||||||
Please consider using the [latest Vagrant version from their website](https://www.vagrantup.com/downloads.html), distribution versions can include weird bugs that have been fixed upstream. If you still prefer to do that, here are the instructions:
|
Please consider using the [latest Vagrant version from their website](https://www.vagrantup.com/downloads.html), distribution versions can include weird bugs that have been fixed upstream. If you still prefer to do that, here are the instructions:
|
||||||
|
|
||||||
- Debian, Ubuntu, Mint
|
The following commands should work on **Linux Mint 19** (and possibly on any Debian Stretch?) :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install vagrant virtualbox git
|
sudo apt update
|
||||||
```
|
sudo apt install git vagrant lxc-templates lxctl lxc cgroup-lite redir bridge-utils libc6 debootstrap
|
||||||
|
|
||||||
The following commands should work on Linux Mint 19 (and possibly on any Debian Stretch?) :
|
|
||||||
|
|
||||||
```bash
|
|
||||||
apt update
|
|
||||||
apt install git vagrant lxc-templates lxctl lxc cgroup-lite redir bridge-utils libc6 debootstrap
|
|
||||||
vagrant plugin install vagrant-lxc
|
vagrant plugin install vagrant-lxc
|
||||||
echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" | sudo tee -a /etc/fstab
|
echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" | sudo tee -a /etc/fstab
|
||||||
sudo mount /sys/fs/cgroup
|
sudo mount /sys/fs/cgroup
|
||||||
|
@ -49,7 +43,30 @@ lxc-checkconfig
|
||||||
echo "veth" | sudo tee -a /etc/modules
|
echo "veth" | sudo tee -a /etc/modules
|
||||||
```
|
```
|
||||||
|
|
||||||
If you run Archlinux, this page should be quite useful to setup LXC : https://github.com/fgrehm/vagrant-lxc/wiki/Usage-on-Arch-Linux-hosts
|
On **Debian Buster**, I had to re-patch the driver.rb of vagrant-lxc plugin with [this version](https://raw.githubusercontent.com/fgrehm/vagrant-lxc/2a5510b34cc59cd3cb8f2dcedc3073852d841101/lib/vagrant-lxc/driver.rb) (especially the `roofs_path` function). I also had to install `apparmor` then `systemctl restart apparmor` for `lxc-start` to work. Also check instruction on https://feeding.cloud.geek.nz/posts/lxc-setup-on-debian-stretch/
|
||||||
|
|
||||||
|
If you run **Archlinux**, this page should be quite useful to setup LXC : https://github.com/fgrehm/vagrant-lxc/wiki/Usage-on-Arch-Linux-hosts
|
||||||
|
|
||||||
|
On **both Debian and Archlinux**, typically `/etc/default/lxc-net` and `/etc/lxc/default.conf` should look like this :
|
||||||
|
|
||||||
|
```
|
||||||
|
> cat /etc/default/lxc-net
|
||||||
|
USE_LXC_BRIDGE="true"
|
||||||
|
LXC_BRIDGE="lxcbr0"
|
||||||
|
LXC_ADDR="10.0.3.1"
|
||||||
|
LXC_NETMASK="255.255.255.0"
|
||||||
|
LXC_NETWORK="10.0.3.0/24"
|
||||||
|
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
|
||||||
|
LXC_DHCP_MAX="253"
|
||||||
|
|
||||||
|
> cat /etc/lxc/default.conf
|
||||||
|
lxc.net.0.type = veth
|
||||||
|
lxc.net.0.link = lxcbr0
|
||||||
|
lxc.net.0.flags = up
|
||||||
|
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
|
||||||
|
```
|
||||||
|
|
||||||
|
On **Debian Buster**, for backup stuff to work correctly with apparmor, I also had to add `mount options=(ro, remount, bind, rbind),` and ` mount options=(ro, remount, bind, relatime),` to `/etc/apparmor.d/lxc/lxc-default-cgns` and restart the apparmor service.
|
||||||
|
|
||||||
Then, go into your favorite development folder and deploy ynh-dev with :
|
Then, go into your favorite development folder and deploy ynh-dev with :
|
||||||
|
|
||||||
|
@ -66,6 +83,7 @@ When ran on the host, the `./ynh-dev` command allows you to manage YunoHost's de
|
||||||
First, you might want to start a new LXC with :
|
First, you might want to start a new LXC with :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd ynh-dev # if not already done
|
||||||
./ynh-dev start
|
./ynh-dev start
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -152,4 +170,4 @@ any `yunohost` command will run from the code of the git clone. The `use-git` ac
|
||||||
|
|
||||||
## More info
|
## More info
|
||||||
|
|
||||||
[yunohost.org/dev_fr](https://yunohost.org/dev_fr) (in french) not up-to-date.
|
* [yunohost.org/dev](https://yunohost.org/dev) not up-to-date.
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Compute box name
|
|
||||||
BOX="ynh-dev"
|
|
||||||
|
|
||||||
# Create box
|
|
||||||
vagrant up $BOX
|
|
||||||
|
|
||||||
# Package box
|
|
||||||
vagrant package $BOX --output /tmp/$BOX.box
|
|
||||||
|
|
||||||
# Destroy current box
|
|
||||||
vagrant destroy $BOX
|
|
||||||
|
|
||||||
# User message, and exit
|
|
||||||
echo ""
|
|
||||||
echo "Your Vagrant box was packaged to /tmp/$BOX.box"
|
|
||||||
echo "You might want to run : vagrant box add 'yunohost/ynh-dev' /tmp/$BOX.box"
|
|
||||||
exit
|
|
50
ynh-dev
50
ynh-dev
|
@ -17,6 +17,8 @@ function show_usage() {
|
||||||
ip Give the ip of the guest container
|
ip Give the ip of the guest container
|
||||||
use-git [PKG] Use Git repositories from dev environment path
|
use-git [PKG] Use Git repositories from dev environment path
|
||||||
test [PKG] Deploy, update and run tests for some packages
|
test [PKG] Deploy, update and run tests for some packages
|
||||||
|
Tests for single modules and functions can ran with
|
||||||
|
e.g. ./ynh-dev test yunohost/appurl:urlavailable
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
@ -109,8 +111,24 @@ function create_sym_link() {
|
||||||
# Actions #
|
# Actions #
|
||||||
##################################################################
|
##################################################################
|
||||||
|
|
||||||
|
function check_lxc_setup()
|
||||||
|
{
|
||||||
|
local LXC_VERSION=$(lxc-info --version)
|
||||||
|
|
||||||
|
[[ "${LXC_VERSION:0:1}" == 3 ]] \
|
||||||
|
|| critical "You need at least version 3 of LXC otherwise the box won't work"
|
||||||
|
|
||||||
|
[[ $(systemctl is-active lxc-net) == "active" ]] \
|
||||||
|
|| critical "Service lxc-net should be running ... You probably need to fix your lxc network conf before being able to use lxc's."
|
||||||
|
|
||||||
|
ip a | grep -q lxcbr0 \
|
||||||
|
|| critical "There is no 'lxcbr0' interface. You probably need to fix your lxc network conf before being able to use lxc's."
|
||||||
|
}
|
||||||
|
|
||||||
function start_ynhdev()
|
function start_ynhdev()
|
||||||
{
|
{
|
||||||
|
check_lxc_setup
|
||||||
|
|
||||||
local NAME=${1:-ynh-dev}
|
local NAME=${1:-ynh-dev}
|
||||||
local BOX_NAME="yunohost/ynh-dev"
|
local BOX_NAME="yunohost/ynh-dev"
|
||||||
local BOX_URL="https://build.yunohost.org/yunohost-$BOX_NAME-lxc.box"
|
local BOX_URL="https://build.yunohost.org/yunohost-$BOX_NAME-lxc.box"
|
||||||
|
@ -131,28 +149,33 @@ function start_ynhdev()
|
||||||
|
|
||||||
function ssh_ynhdev()
|
function ssh_ynhdev()
|
||||||
{
|
{
|
||||||
|
check_lxc_setup
|
||||||
local NAME=${1:-ynh-dev}
|
local NAME=${1:-ynh-dev}
|
||||||
vagrant ssh $NAME -c "echo 'You are now inside the LXC !'; cd /ynh-dev; sudo su"
|
vagrant ssh $NAME -c "echo 'You are now inside the LXC !'; cd /ynh-dev; sudo su"
|
||||||
}
|
}
|
||||||
|
|
||||||
function destroy_ynhdev()
|
function destroy_ynhdev()
|
||||||
{
|
{
|
||||||
|
check_lxc_setup
|
||||||
local NAME=${1:-ynh-dev}
|
local NAME=${1:-ynh-dev}
|
||||||
vagrant destroy $NAME
|
vagrant destroy $NAME
|
||||||
}
|
}
|
||||||
|
|
||||||
function rebuild_ynhdev()
|
function rebuild_ynhdev()
|
||||||
{
|
{
|
||||||
|
check_lxc_setup
|
||||||
|
|
||||||
local BOX="ynh-dev"
|
local BOX="ynh-dev"
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
cd prebuild
|
cd prebuild
|
||||||
|
|
||||||
# Create box
|
# Create box
|
||||||
vagrant up $BOX
|
vagrant up $BOX --provider=lxc --provision || critical "Could not create the box ?"
|
||||||
|
|
||||||
# Package box
|
# Package box
|
||||||
vagrant package $BOX --output /tmp/$BOX.box
|
rm -f /tmp/ynh-dev.box
|
||||||
|
vagrant package $BOX --output /tmp/$BOX.box || critical "Could not package package the box ?"
|
||||||
|
|
||||||
# Destroy current box
|
# Destroy current box
|
||||||
vagrant destroy $BOX
|
vagrant destroy $BOX
|
||||||
|
@ -161,7 +184,7 @@ function rebuild_ynhdev()
|
||||||
|
|
||||||
# User message, and exit
|
# User message, and exit
|
||||||
info "The Vagrant box was packaged to /tmp/$BOX.box"
|
info "The Vagrant box was packaged to /tmp/$BOX.box"
|
||||||
info "You might want to run : vagrant box add 'yunohost/ynh-dev' /tmp/$BOX.box"
|
info "You might want to run : vagrant box add 'yunohost/ynh-dev' /tmp/$BOX.box --force"
|
||||||
}
|
}
|
||||||
|
|
||||||
function show_vm_ip()
|
function show_vm_ip()
|
||||||
|
@ -238,7 +261,7 @@ function use_git()
|
||||||
sudo apt install nodejs
|
sudo apt install nodejs
|
||||||
|
|
||||||
cd /ynh-dev/yunohost-admin/src
|
cd /ynh-dev/yunohost-admin/src
|
||||||
sudo npm install
|
sudo npm install --no-bin-links
|
||||||
sudo npm install -g bower
|
sudo npm install -g bower
|
||||||
sudo npm install -g gulp
|
sudo npm install -g gulp
|
||||||
fi
|
fi
|
||||||
|
@ -270,10 +293,14 @@ function run_tests()
|
||||||
local PACKAGES="$@"
|
local PACKAGES="$@"
|
||||||
for PACKAGE in "$PACKAGES";
|
for PACKAGE in "$PACKAGES";
|
||||||
do
|
do
|
||||||
|
TEST_FUNCTION=$(echo "$PACKAGE" | tr '/:' ' ' | awk '{print $3}')
|
||||||
|
TEST_MODULE=$(echo "$PACKAGE" | tr '/:' ' ' | awk '{print $2}')
|
||||||
|
PACKAGE=$(echo "$PACKAGE" | tr '/:' ' ' | awk '{print $1}')
|
||||||
|
|
||||||
case $PACKAGE in
|
case $PACKAGE in
|
||||||
yunohost)
|
yunohost)
|
||||||
# Pytest and tests dependencies
|
# Pytest and tests dependencies
|
||||||
if ! type "pytest" > /dev/null; then
|
if ! type "pytest" > /dev/null 2>&1; then
|
||||||
info "> Installing pytest ..."
|
info "> Installing pytest ..."
|
||||||
apt-get install python-pip -y
|
apt-get install python-pip -y
|
||||||
pip2 install pytest
|
pip2 install pytest
|
||||||
|
@ -293,12 +320,23 @@ function run_tests()
|
||||||
git pull > /dev/null 2>&1
|
git pull > /dev/null 2>&1
|
||||||
|
|
||||||
# Run tests
|
# Run tests
|
||||||
info "Running tests for YunoHost ..."
|
info "Running tests for YunoHost"
|
||||||
[ -e "/etc/yunohost/installed" ] || critical "You should run postinstallation before running tests :s."
|
[ -e "/etc/yunohost/installed" ] || critical "You should run postinstallation before running tests :s."
|
||||||
|
if [[ -z "$TEST_MODULE" ]]
|
||||||
|
then
|
||||||
cd /ynh-dev/yunohost/
|
cd /ynh-dev/yunohost/
|
||||||
py.test tests
|
py.test tests
|
||||||
cd /ynh-dev/yunohost/src/yunohost
|
cd /ynh-dev/yunohost/src/yunohost
|
||||||
py.test tests
|
py.test tests
|
||||||
|
else
|
||||||
|
cd /ynh-dev/yunohost/src/yunohost
|
||||||
|
if [[ -z "$TEST_FUNCTION" ]]
|
||||||
|
then
|
||||||
|
py.test tests/test_"$TEST_MODULE".py
|
||||||
|
else
|
||||||
|
py.test tests/test_"$TEST_MODULE".py::test_"$TEST_FUNCTION"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
Loading…
Add table
Reference in a new issue