mirror of
https://github.com/oxen-io/lokinet
synced 2023-12-14 06:53:00 +01:00
4c630e0437
- Previous android java and jni code updated to work, but with much love still needed to make it work nicely, e.g. handling when the VPN is turned off. - DNS handling refactored to allow android to intercept and handle DNS requests as we can't set the system DNS to use a high port (and apparently Chrome ignores system DNS settings anyway) - add packet router structure to allow separate handling of specific intercepted traffic, e.g. UDP traffic to port 53 gets handled by our DNS handler rather than being naively forwarded as exit traffic. - For now, android lokinet is exit-only and hard-coded to use exit.loki as its exit. The exit will be configurable before release, but allowing to not use exit-only mode is more of a challenge. - some old gitignore remnants which were matching to things we don't want them to (and are no longer relevant) removed - some minor changes to CI configuration
288 lines
13 KiB
Plaintext
288 lines
13 KiB
Plaintext
local default_deps_base='libsystemd-dev python3-dev libuv1-dev libunbound-dev nettle-dev libssl-dev libevent-dev libsqlite3-dev';
|
|
local default_deps_nocxx='libsodium-dev ' + default_deps_base; // libsodium-dev needs to be >= 1.0.18
|
|
local default_deps='g++ ' + default_deps_nocxx; // g++ sometimes needs replacement
|
|
local default_windows_deps='mingw-w64 zip nsis';
|
|
|
|
|
|
local submodules = {
|
|
name: 'submodules',
|
|
image: 'drone/git',
|
|
commands: ['git fetch --tags', 'git submodule update --init --recursive --depth=1']
|
|
};
|
|
|
|
local apt_get_quiet = 'apt-get -o=Dpkg::Use-Pty=0 -q';
|
|
|
|
// Regular build on a debian-like system:
|
|
local debian_pipeline(name, image,
|
|
arch='amd64',
|
|
deps=default_deps,
|
|
build_type='Release',
|
|
lto=false,
|
|
werror=true,
|
|
cmake_extra='',
|
|
extra_cmds=[],
|
|
loki_repo=false,
|
|
allow_fail=false) = {
|
|
kind: 'pipeline',
|
|
type: 'docker',
|
|
name: name,
|
|
platform: { arch: arch },
|
|
trigger: { branch: { exclude: ['debian/*', 'ubuntu/*'] } },
|
|
steps: [
|
|
submodules,
|
|
{
|
|
name: 'build',
|
|
image: image,
|
|
[if allow_fail then "failure"]: "ignore",
|
|
environment: { SSH_KEY: { from_secret: "SSH_KEY" } },
|
|
commands: [
|
|
'echo "Building on ${DRONE_STAGE_MACHINE}"',
|
|
'echo "man-db man-db/auto-update boolean false" | debconf-set-selections',
|
|
apt_get_quiet + ' update',
|
|
apt_get_quiet + ' install -y eatmydata',
|
|
] + (if loki_repo then [
|
|
'eatmydata ' + apt_get_quiet + ' install -y lsb-release',
|
|
'cp contrib/deb.loki.network.gpg /etc/apt/trusted.gpg.d',
|
|
'echo deb http://deb.loki.network $$(lsb_release -sc) main >/etc/apt/sources.list.d/loki.network.list',
|
|
'eatmydata ' + apt_get_quiet + ' update'
|
|
] else []
|
|
) + [
|
|
'eatmydata ' + apt_get_quiet + ' dist-upgrade -y',
|
|
'eatmydata ' + apt_get_quiet + ' install -y gdb cmake git ninja-build pkg-config ccache ' + deps,
|
|
'mkdir build',
|
|
'cd build',
|
|
'cmake .. -G Ninja -DCMAKE_CXX_FLAGS=-fdiagnostics-color=always -DCMAKE_BUILD_TYPE='+build_type+' ' +
|
|
(if werror then '-DWARNINGS_AS_ERRORS=ON ' else '') +
|
|
'-DWITH_LTO=' + (if lto then 'ON ' else 'OFF ') +
|
|
cmake_extra,
|
|
'ninja -v',
|
|
'../contrib/ci/drone-gdb.sh ./test/testAll --gtest_color=yes',
|
|
'../contrib/ci/drone-gdb.sh ./test/catchAll --use-colour yes',
|
|
] + extra_cmds,
|
|
}
|
|
],
|
|
};
|
|
local apk_builder(name, image, extra_cmds=[], allow_fail=true) = {
|
|
kind: 'pipeline',
|
|
type: 'docker',
|
|
name: name,
|
|
platform: {arch: "amd64"},
|
|
trigger: { branch: { exclude: ['debian/*', 'ubuntu/*'] } },
|
|
steps: [
|
|
submodules,
|
|
{
|
|
name: 'build',
|
|
image: image,
|
|
[if allow_fail then "failure"]: "ignore",
|
|
environment: { SSH_KEY: { from_secret: "SSH_KEY" }, ANDROID: "android" },
|
|
commands: [
|
|
"cd android",
|
|
"rm -f local.properties",
|
|
"echo 'sdk.dir=/usr/lib/android-sdk' >> local.properties",
|
|
"echo 'ndk.dir=/usr/lib/android-ndk' >> local.properties",
|
|
"GRADLE_USER_HOME=/cache/gradle gradle --no-daemon assembleDebug",
|
|
] + extra_cmds
|
|
}
|
|
]
|
|
};
|
|
// windows cross compile on debian
|
|
local windows_cross_pipeline(name, image,
|
|
arch='amd64',
|
|
build_type='Release',
|
|
lto=false,
|
|
werror=false,
|
|
cmake_extra='',
|
|
toolchain='32',
|
|
extra_cmds=[],
|
|
allow_fail=false) = {
|
|
kind: 'pipeline',
|
|
type: 'docker',
|
|
name: name,
|
|
platform: { arch: arch },
|
|
trigger: { branch: { exclude: ['debian/*', 'ubuntu/*'] } },
|
|
steps: [
|
|
submodules,
|
|
{
|
|
name: 'build',
|
|
image: image,
|
|
[if allow_fail then "failure"]: "ignore",
|
|
environment: { SSH_KEY: { from_secret: "SSH_KEY" }, WINDOWS_BUILD_NAME: toolchain+"bit" },
|
|
commands: [
|
|
'echo "Building on ${DRONE_STAGE_MACHINE}"',
|
|
'echo "man-db man-db/auto-update boolean false" | debconf-set-selections',
|
|
apt_get_quiet + ' update',
|
|
apt_get_quiet + ' install -y eatmydata',
|
|
'eatmydata ' + apt_get_quiet + ' install -y build-essential cmake git ninja-build pkg-config ccache g++-mingw-w64-x86-64-posix nsis zip automake libtool',
|
|
'update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix',
|
|
'update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix',
|
|
'git clone https://github.com/despair86/libuv.git win32-setup/libuv',
|
|
'mkdir build',
|
|
'cd build',
|
|
'cmake .. -G Ninja -DCMAKE_EXE_LINKER_FLAGS=-fstack-protector -DCMAKE_CXX_FLAGS=-fdiagnostics-color=always -DCMAKE_TOOLCHAIN_FILE=../contrib/cross/mingw'+toolchain+'.cmake -DCMAKE_BUILD_TYPE='+build_type+' ' +
|
|
(if werror then '-DWARNINGS_AS_ERRORS=ON ' else '') +
|
|
(if lto then '' else '-DWITH_LTO=OFF ') +
|
|
"-DBUILD_STATIC_DEPS=ON -DDOWNLOAD_SODIUM=ON -DBUILD_PACKAGE=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DNATIVE_BUILD=OFF -DSTATIC_LINK=ON" +
|
|
cmake_extra,
|
|
'ninja -v package',
|
|
] + extra_cmds,
|
|
}
|
|
],
|
|
};
|
|
|
|
// Builds a snapshot .deb on a debian-like system by merging into the debian/* or ubuntu/* branch
|
|
local deb_builder(image, distro, distro_branch, arch='amd64', loki_repo=true) = {
|
|
kind: 'pipeline',
|
|
type: 'docker',
|
|
name: 'DEB (' + distro + (if arch == 'amd64' then '' else '/' + arch) + ')',
|
|
platform: { arch: arch },
|
|
environment: { distro_branch: distro_branch, distro: distro },
|
|
steps: [
|
|
submodules,
|
|
{
|
|
name: 'build',
|
|
image: image,
|
|
failure: 'ignore',
|
|
environment: { SSH_KEY: { from_secret: "SSH_KEY" } },
|
|
commands: [
|
|
'echo "Building on ${DRONE_STAGE_MACHINE}"',
|
|
'echo "man-db man-db/auto-update boolean false" | debconf-set-selections'
|
|
] + (if loki_repo then [
|
|
'cp contrib/deb.loki.network.gpg /etc/apt/trusted.gpg.d',
|
|
'echo deb http://deb.loki.network $${distro} main >/etc/apt/sources.list.d/loki.network.list'
|
|
] else []) + [
|
|
apt_get_quiet + ' update',
|
|
apt_get_quiet + ' install -y eatmydata',
|
|
'eatmydata ' + apt_get_quiet + ' install -y git devscripts equivs ccache git-buildpackage python3-dev',
|
|
|||
|
|
# Look for the debian branch in this repo first, try upstream if that fails.
|
|
if ! git checkout $${distro_branch}; then
|
|
git remote add --fetch upstream https://github.com/oxen-io/loki-network.git &&
|
|
git checkout $${distro_branch}
|
|
fi
|
|
|||,
|
|
# Tell the merge how to resolve conflicts in the source .drone.jsonnet (we don't
|
|
# care about it at all since *this* .drone.jsonnet is already loaded).
|
|
'git config merge.ours.driver true',
|
|
'echo .drone.jsonnet merge=ours >>.gitattributes',
|
|
|
|
'git merge ${DRONE_COMMIT}',
|
|
'export DEBEMAIL="${DRONE_COMMIT_AUTHOR_EMAIL}" DEBFULLNAME="${DRONE_COMMIT_AUTHOR_NAME}"',
|
|
'gbp dch -S -s "HEAD^" --spawn-editor=never -U low',
|
|
'eatmydata mk-build-deps --install --remove --tool "' + apt_get_quiet + ' -o Debug::pkgProblemResolver=yes --no-install-recommends -y"',
|
|
'export DEB_BUILD_OPTIONS="parallel=$$(nproc)"',
|
|
#'grep -q lib debian/lokinet-bin.install || echo "/usr/lib/lib*.so*" >>debian/lokinet-bin.install',
|
|
'debuild -e CCACHE_DIR -b',
|
|
'./contrib/ci/drone-debs-upload.sh ' + distro,
|
|
]
|
|
}
|
|
]
|
|
};
|
|
|
|
|
|
// Macos build
|
|
local mac_builder(name, build_type='Release', werror=true, cmake_extra='', extra_cmds=[], allow_fail=false) = {
|
|
kind: 'pipeline',
|
|
type: 'exec',
|
|
name: name,
|
|
platform: { os: 'darwin', arch: 'amd64' },
|
|
steps: [
|
|
{ name: 'submodules', commands: ['git fetch --tags', 'git submodule update --init --recursive'] },
|
|
{
|
|
name: 'build',
|
|
environment: { SSH_KEY: { from_secret: "SSH_KEY" } },
|
|
commands: [
|
|
'echo "Building on ${DRONE_STAGE_MACHINE}"',
|
|
// If you don't do this then the C compiler doesn't have an include path containing
|
|
// basic system headers. WTF apple:
|
|
'export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"',
|
|
'ulimit -n 1024', // because macos sets ulimit to 256 for some reason yeah idk
|
|
'mkdir build',
|
|
'cd build',
|
|
'cmake .. -G Ninja -DCMAKE_CXX_FLAGS=-fcolor-diagnostics -DCMAKE_BUILD_TYPE='+build_type+' ' +
|
|
(if werror then '-DWARNINGS_AS_ERRORS=ON ' else '') + cmake_extra,
|
|
'ninja -v',
|
|
'./test/testAll --gtest_color=yes',
|
|
'./test/catchAll --use-colour yes',
|
|
] + extra_cmds,
|
|
}
|
|
]
|
|
};
|
|
|
|
|
|
[
|
|
{
|
|
name: 'lint check',
|
|
kind: 'pipeline',
|
|
type: 'docker',
|
|
steps: [{
|
|
name: 'build', image: 'debian:sid',
|
|
commands: [
|
|
'echo "Building on ${DRONE_STAGE_MACHINE}"',
|
|
apt_get_quiet + ' update',
|
|
apt_get_quiet + ' install -y eatmydata',
|
|
'eatmydata ' + apt_get_quiet + ' install -y git clang-format-9',
|
|
'./contrib/ci/drone-format-verify.sh']
|
|
}]
|
|
},
|
|
|
|
// Various debian builds
|
|
debian_pipeline("Debian sid (amd64)", "debian:sid"),
|
|
debian_pipeline("Debian sid/Debug (amd64)", "debian:sid", build_type='Debug'),
|
|
debian_pipeline("Debian sid/clang-11 (amd64)", "debian:sid", deps='clang-11 '+default_deps_nocxx,
|
|
cmake_extra='-DCMAKE_C_COMPILER=clang-11 -DCMAKE_CXX_COMPILER=clang++-11 '),
|
|
debian_pipeline("Debian buster (i386)", "i386/debian:buster", cmake_extra='-DDOWNLOAD_SODIUM=ON'),
|
|
debian_pipeline("Ubuntu focal (amd64)", "ubuntu:focal"),
|
|
debian_pipeline("Ubuntu bionic (amd64)", "ubuntu:bionic", deps='g++-8 ' + default_deps_nocxx,
|
|
cmake_extra='-DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8', loki_repo=true),
|
|
|
|
// ARM builds (ARM64 and armhf)
|
|
debian_pipeline("Debian sid (ARM64)", "debian:sid", arch="arm64"),
|
|
debian_pipeline("Debian buster (armhf)", "arm32v7/debian:buster", arch="arm64", cmake_extra='-DDOWNLOAD_SODIUM=ON'),
|
|
// Static armhf build (gets uploaded)
|
|
debian_pipeline("Static (buster armhf)", "arm32v7/debian:buster", arch="arm64", deps='g++ python3-dev automake libtool',
|
|
cmake_extra='-DBUILD_STATIC_DEPS=ON -DBUILD_SHARED_LIBS=OFF -DSTATIC_LINK=ON ' +
|
|
'-DCMAKE_CXX_FLAGS="-march=armv7-a+fp" -DCMAKE_C_FLAGS="-march=armv7-a+fp" -DNATIVE_BUILD=OFF ' +
|
|
'-DWITH_SYSTEMD=OFF',
|
|
extra_cmds=[
|
|
'../contrib/ci/drone-check-static-libs.sh',
|
|
'UPLOAD_OS=linux-armhf ../contrib/ci/drone-static-upload.sh'
|
|
]),
|
|
// android apk builder
|
|
apk_builder("android apk", "registry.oxen.rocks/lokinet-ci-android", extra_cmds=['UPLOAD_OS=anrdoid ../contrib/ci/drone-static-upload.sh']),
|
|
|
|
// Windows builds (x64)
|
|
windows_cross_pipeline("Windows (amd64)", "debian:testing",
|
|
toolchain='64', extra_cmds=[
|
|
'../contrib/ci/drone-static-upload.sh'
|
|
]),
|
|
|
|
// Static build (on bionic) which gets uploaded to builds.lokinet.dev:
|
|
debian_pipeline("Static (bionic amd64)", "ubuntu:bionic", deps='g++-8 python3-dev automake libtool', lto=true,
|
|
cmake_extra='-DBUILD_STATIC_DEPS=ON -DBUILD_SHARED_LIBS=OFF -DSTATIC_LINK=ON -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8 ' +
|
|
'-DCMAKE_CXX_FLAGS="-march=x86-64 -mtune=haswell" -DCMAKE_C_FLAGS="-march=x86-64 -mtune=haswell" -DNATIVE_BUILD=OFF ' +
|
|
'-DWITH_SYSTEMD=OFF',
|
|
extra_cmds=[
|
|
'../contrib/ci/drone-check-static-libs.sh',
|
|
'../contrib/ci/drone-static-upload.sh'
|
|
]),
|
|
|
|
// integration tests
|
|
debian_pipeline("Router Hive", "ubuntu:focal", deps='python3-dev python3-pytest python3-pybind11 ' + default_deps,
|
|
cmake_extra='-DWITH_HIVE=ON'),
|
|
|
|
// Deb builds:
|
|
deb_builder("debian:sid", "sid", "debian/sid"),
|
|
deb_builder("debian:buster", "buster", "debian/buster"),
|
|
deb_builder("ubuntu:focal", "focal", "ubuntu/focal"),
|
|
deb_builder("debian:sid", "sid", "debian/sid", arch='arm64'),
|
|
|
|
// Macos builds:
|
|
mac_builder('macOS (Release)'),
|
|
mac_builder('macOS (Debug)', build_type='Debug'),
|
|
mac_builder('macOS (Static)', cmake_extra='-DBUILD_STATIC_DEPS=ON -DBUILD_SHARED_LIBS=OFF -DSTATIC_LINK=ON -DDOWNLOAD_SODIUM=FORCE -DDOWNLOAD_CURL=FORCE -DDOWNLOAD_UV=FORCE',
|
|
extra_cmds=[
|
|
'../contrib/ci/drone-check-static-libs.sh',
|
|
'../contrib/ci/drone-static-upload.sh'
|
|
]),
|
|
]
|