mirror of https://github.com/oxen-io/oxen-mq.git
Automated Fedora 34 rpm build
This commit is contained in:
parent
6c1f030174
commit
035da804c2
|
@ -1,63 +1,45 @@
|
||||||
local debian_pipeline(name, image, arch='amd64', deps='g++ libsodium-dev libzmq3-dev', cmake_extra='', build_type='Release', extra_cmds=[], allow_fail=false) = {
|
local distro = "fedora-34";
|
||||||
|
local distro_name = 'Fedora 34';
|
||||||
|
local distro_docker = 'fedora:34';
|
||||||
|
|
||||||
|
local submodules = {
|
||||||
|
name: 'submodules',
|
||||||
|
image: 'drone/git',
|
||||||
|
commands: ['git fetch --tags', 'git submodule update --init --recursive']
|
||||||
|
};
|
||||||
|
|
||||||
|
local dnf(arch) = 'dnf -y --setopt install_weak_deps=False --setopt cachedir=/cache/'+distro+'/'+arch+'/${DRONE_STAGE_MACHINE} ';
|
||||||
|
|
||||||
|
local rpm_pipeline(image, buildarch='amd64', rpmarch='x86_64', jobs=6) = {
|
||||||
kind: 'pipeline',
|
kind: 'pipeline',
|
||||||
type: 'docker',
|
type: 'docker',
|
||||||
name: name,
|
name: distro_name + ' (' + rpmarch + ')',
|
||||||
platform: { arch: arch },
|
platform: { arch: buildarch },
|
||||||
environment: { CLICOLOR_FORCE: '1' }, // Lets color through ninja (1.9+)
|
|
||||||
steps: [
|
steps: [
|
||||||
|
submodules,
|
||||||
{
|
{
|
||||||
name: 'build',
|
name: 'build',
|
||||||
image: image,
|
image: image,
|
||||||
[if allow_fail then "failure"]: "ignore",
|
environment: {
|
||||||
|
SSH_KEY: { from_secret: "SSH_KEY" },
|
||||||
|
RPM_BUILD_NCPUS: jobs
|
||||||
|
},
|
||||||
commands: [
|
commands: [
|
||||||
'apt-get update',
|
'echo "Building on ${DRONE_STAGE_MACHINE}"',
|
||||||
'apt-get install -y eatmydata',
|
dnf(rpmarch) + 'distro-sync',
|
||||||
'eatmydata apt-get dist-upgrade -y',
|
dnf(rpmarch) + 'install rpm-build git-archive-all dnf-plugins-core ccache',
|
||||||
'eatmydata apt-get install -y cmake git ninja-build pkg-config ccache ' + deps,
|
'pkg_src_base="$(rpm -q --queryformat=\'%{NAME}-%{VERSION}\n\' --specfile SPECS/oxenmq.spec | head -n 1)"',
|
||||||
'git submodule update --init --recursive',
|
'git-archive-all --prefix $pkg_src_base/ SOURCES/$pkg_src_base.src.tar.gz',
|
||||||
'mkdir build',
|
dnf(rpmarch) + 'builddep --spec SPECS/oxenmq.spec',
|
||||||
'cd build',
|
'if [ -n "$CCACHE_DIR" ]; then mkdir -pv ~/.cache; ln -sv "$CCACHE_DIR" ~/.cache/ccache; fi',
|
||||||
'cmake .. -G Ninja -DCMAKE_CXX_FLAGS=-fdiagnostics-color=always -DCMAKE_BUILD_TYPE='+build_type+' -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ' + cmake_extra,
|
'rpmbuild --define "_topdir $(pwd)" -bb SPECS/oxenmq.spec',
|
||||||
'ninja -v',
|
'./SPECS/ci-upload.sh ' + distro + ' ' + rpmarch,
|
||||||
'./tests/tests --use-colour yes'
|
],
|
||||||
] + extra_cmds,
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
[
|
[
|
||||||
debian_pipeline("Ubuntu focal (amd64)", "ubuntu:focal"),
|
rpm_pipeline(distro_docker),
|
||||||
debian_pipeline("Ubuntu bionic (amd64)", "ubuntu:bionic", deps='libsodium-dev g++-8',
|
rpm_pipeline("arm64v8/" + distro_docker, buildarch='arm64', rpmarch="aarch64", jobs=4)
|
||||||
cmake_extra='-DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8'),
|
|
||||||
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 lld-11 libsodium-dev libzmq3-dev',
|
|
||||||
cmake_extra='-DCMAKE_C_COMPILER=clang-11 -DCMAKE_CXX_COMPILER=clang++-11 ' + std.join(' ', [
|
|
||||||
'-DCMAKE_'+type+'_LINKER_FLAGS=-fuse-ld=lld-11' for type in ['EXE','MODULE','SHARED','STATIC']])),
|
|
||||||
debian_pipeline("Debian buster (amd64)", "debian:buster"),
|
|
||||||
debian_pipeline("Debian buster (i386)", "i386/debian:buster"),
|
|
||||||
debian_pipeline("Ubuntu bionic (ARM64)", "ubuntu:bionic", arch="arm64", deps='libsodium-dev g++-8',
|
|
||||||
cmake_extra='-DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8'),
|
|
||||||
debian_pipeline("Debian sid (ARM64)", "debian:sid", arch="arm64"),
|
|
||||||
debian_pipeline("Debian buster (armhf)", "arm32v7/debian:buster", arch="arm64"),
|
|
||||||
{
|
|
||||||
kind: 'pipeline',
|
|
||||||
type: 'exec',
|
|
||||||
name: 'macOS (Catalina w/macports)',
|
|
||||||
platform: { os: 'darwin', arch: 'amd64' },
|
|
||||||
environment: { CLICOLOR_FORCE: '1' }, // Lets color through ninja (1.9+)
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
name: 'build',
|
|
||||||
commands: [
|
|
||||||
'git submodule update --init --recursive',
|
|
||||||
'mkdir build',
|
|
||||||
'cd build',
|
|
||||||
'cmake .. -G Ninja -DCMAKE_CXX_FLAGS=-fcolor-diagnostics -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_LAUNCHER=ccache',
|
|
||||||
'ninja -v',
|
|
||||||
'./tests/tests --use-colour yes'
|
|
||||||
],
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
/build*
|
/build*
|
||||||
|
/BUILD
|
||||||
|
/RPMS
|
||||||
|
/SOURCES/*.tar.gz
|
||||||
/compile_commands.json
|
/compile_commands.json
|
||||||
/obj-*-linux-gnu/
|
/obj-*-linux-gnu/
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
From: Jason Rhinelander <jason@imaginary.ca>
|
||||||
|
Date: Sat, 28 Mar 2020 12:22:07 -0300
|
||||||
|
Subject: Fully version library
|
||||||
|
|
||||||
|
---
|
||||||
|
CMakeLists.txt | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index 68926f8..51f5fc2 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -24,7 +24,7 @@ include(GNUInstallDirs)
|
||||||
|
|
||||||
|
message(STATUS "oxenmq v${PROJECT_VERSION}")
|
||||||
|
|
||||||
|
-set(OXENMQ_LIBVERSION 0)
|
||||||
|
+set(OXENMQ_LIBVERSION ${PROJECT_VERSION})
|
||||||
|
|
||||||
|
|
||||||
|
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
|
|
@ -0,0 +1,59 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Script used with Drone CI to upload build artifacts (because specifying all this in
|
||||||
|
# .drone.jsonnet is too painful).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
if [ -z "$SSH_KEY" ]; then
|
||||||
|
echo -e "\n\n\n\e[31;1mUnable to upload artifact: SSH_KEY not set\e[0m"
|
||||||
|
# Just warn but don't fail, so that this doesn't trigger a build failure for untrusted builds
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$SSH_KEY" >ssh_key
|
||||||
|
|
||||||
|
set -o xtrace # Don't start tracing until *after* we write the ssh key
|
||||||
|
|
||||||
|
chmod 600 ssh_key
|
||||||
|
|
||||||
|
distro="${1:-unknown}"
|
||||||
|
rpmarch="${2:-x86_64}"
|
||||||
|
|
||||||
|
base="rpm-$distro-$(date --date=@$DRONE_BUILD_CREATED +%Y%m%dT%H%M%SZ)-${DRONE_COMMIT:0:9}"
|
||||||
|
|
||||||
|
br="${DRONE_BRANCH// /_}"
|
||||||
|
br="${br//\//-}"
|
||||||
|
upload_to="builds.lokinet.dev/${DRONE_REPO// /_}/$br/$base"
|
||||||
|
|
||||||
|
put=
|
||||||
|
for rpm in RPMS/${rpmarch}/*.rpm; do
|
||||||
|
put+=$'\n'"put $rpm $upload_to"
|
||||||
|
|
||||||
|
echo -e "\n\n\e[35;1m$rpm contents:\e[0m"
|
||||||
|
rpm --query --list $rpm
|
||||||
|
done
|
||||||
|
|
||||||
|
# sftp doesn't have any equivalent to mkdir -p, so we have to split the above up into a chain of
|
||||||
|
# -mkdir a/, -mkdir a/b/, -mkdir a/b/c/, ... commands. The leading `-` allows the command to fail
|
||||||
|
# without error.
|
||||||
|
upload_dirs=(${upload_to//\// })
|
||||||
|
mkdirs=
|
||||||
|
dir_tmp=""
|
||||||
|
for p in "${upload_dirs[@]}"; do
|
||||||
|
dir_tmp="$dir_tmp$p/"
|
||||||
|
mkdirs="$mkdirs
|
||||||
|
-mkdir $dir_tmp"
|
||||||
|
done
|
||||||
|
|
||||||
|
sftp -i ssh_key -b - -o StrictHostKeyChecking=off drone@builds.lokinet.dev <<SFTP
|
||||||
|
$mkdirs
|
||||||
|
$put
|
||||||
|
SFTP
|
||||||
|
|
||||||
|
set +o xtrace
|
||||||
|
|
||||||
|
echo -e "\n\n\n\n\e[32;1mUploaded to https://${upload_to}\e[0m\n\n\n"
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
Name: oxenmq
|
||||||
|
Version: 1.2.6
|
||||||
|
Release: 2%{?dist}
|
||||||
|
Summary: zeromq-based Oxen message passing library
|
||||||
|
|
||||||
|
License: BSD
|
||||||
|
URL: https://github.com/oxen-io/oxen-mq
|
||||||
|
Source0: %{name}-%{version}.src.tar.gz
|
||||||
|
|
||||||
|
%global sonamever %{version}
|
||||||
|
|
||||||
|
BuildRequires: cmake
|
||||||
|
BuildRequires: gcc-c++
|
||||||
|
BuildRequires: pkgconfig
|
||||||
|
BuildRequires: cppzmq-devel
|
||||||
|
|
||||||
|
Patch1: fully-version-library.patch
|
||||||
|
|
||||||
|
%description
|
||||||
|
This C++17 library contains an abstraction layer around ZeroMQ to support
|
||||||
|
integration with Oxen authentication, RPC, and message passing. It is designed
|
||||||
|
to be usable as the underlying communication mechanism of SN-to-SN communication
|
||||||
|
("quorumnet"), the RPC interface used by wallets and local daemon commands,
|
||||||
|
communication channels between oxend and auxiliary services (storage server,
|
||||||
|
lokinet), and also provides a local multithreaded job scheduling within a
|
||||||
|
process.
|
||||||
|
|
||||||
|
%package libs
|
||||||
|
Summary: zeromq-based Oxen message passing library
|
||||||
|
|
||||||
|
%description libs
|
||||||
|
This C++17 library contains an abstraction layer around ZeroMQ to support
|
||||||
|
integration with Oxen authentication, RPC, and message passing. It is designed
|
||||||
|
to be usable as the underlying communication mechanism of SN-to-SN communication
|
||||||
|
("quorumnet"), the RPC interface used by wallets and local daemon commands,
|
||||||
|
communication channels between oxend and auxiliary services (storage server,
|
||||||
|
lokinet), and also provides a local multithreaded job scheduling within a
|
||||||
|
process.
|
||||||
|
|
||||||
|
This package contains the library file needed by software built using oxenmq.
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: zeromq-based Oxen message passing library -- headers
|
||||||
|
Requires: pkgconfig
|
||||||
|
Requires: cppzmq-devel
|
||||||
|
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
This C++17 library contains an abstraction layer around ZeroMQ to support
|
||||||
|
integration with Oxen authentication, RPC, and message passing. It is designed
|
||||||
|
to be usable as the underlying communication mechanism of SN-to-SN communication
|
||||||
|
("quorumnet"), the RPC interface used by wallets and local daemon commands,
|
||||||
|
communication channels between oxend and auxiliary services (storage server,
|
||||||
|
lokinet), and also provides a local multithreaded job scheduling within a
|
||||||
|
process.
|
||||||
|
|
||||||
|
This package contains the library headers and other development files needed to
|
||||||
|
build software using oxenmq.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
|
||||||
|
%autosetup
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
%undefine __cmake_in_source_build
|
||||||
|
%cmake -DOXENMQ_INSTALL_CPPZMQ=OFF -DOXENMQ_LOKIMQ_COMPAT=OFF
|
||||||
|
%cmake_build
|
||||||
|
|
||||||
|
%install
|
||||||
|
|
||||||
|
%cmake_install
|
||||||
|
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
|
||||||
|
%{_includedir}/oxenmq/*.h
|
||||||
|
%{_libdir}/liboxenmq.so
|
||||||
|
%{_libdir}/pkgconfig/liboxenmq.pc
|
||||||
|
|
||||||
|
%files libs
|
||||||
|
|
||||||
|
%license LICENSE
|
||||||
|
%doc README.md
|
||||||
|
%{_libdir}/liboxenmq.so.%{version}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Mon Aug 09 2021 Jason Rhinelander <jason@imaginary.ca> - 1.2.6-2
|
||||||
|
- Split oxenmq into lib and devel package
|
||||||
|
- Versioned the library, as we do for debs
|
||||||
|
- Updated various package descriptions and build commands
|
||||||
|
|
||||||
|
* Thu Jul 22 2021 Technical Tumbleweed (necro_nemesis@hotmail.com) oxenmq
|
||||||
|
-First oxenmq RPM
|
||||||
|
-Second build update to v1.2.6
|
Loading…
Reference in New Issue