aboutsummaryrefslogtreecommitdiff
path: root/contrib/ci
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ci')
-rw-r--r--contrib/ci/Containerfile45
-rwxr-xr-xcontrib/ci/ci.sh34
-rw-r--r--contrib/ci/docker/Dockerfile32
-rw-r--r--contrib/ci/docker/docker-entrypoint.sh3
-rwxr-xr-xcontrib/ci/jobs/0-build/build.sh10
-rwxr-xr-xcontrib/ci/jobs/0-build/job.sh6
-rwxr-xr-xcontrib/ci/jobs/2-deb-package/job.sh22
-rwxr-xr-xcontrib/ci/jobs/2-deb-package/version.sh17
-rw-r--r--contrib/ci/jobs/3-deploy-package/config.ini6
-rwxr-xr-xcontrib/ci/jobs/3-deploy-package/job.sh14
-rwxr-xr-xcontrib/ci/jobs/4-arm64-build/build.sh11
-rw-r--r--contrib/ci/jobs/4-arm64-build/config.ini6
-rwxr-xr-xcontrib/ci/jobs/4-arm64-build/job.sh6
-rw-r--r--contrib/ci/jobs/5-arm64-deb-package/config.ini6
-rwxr-xr-xcontrib/ci/jobs/5-arm64-deb-package/job.sh22
-rwxr-xr-xcontrib/ci/jobs/5-arm64-deb-package/version.sh17
-rw-r--r--contrib/ci/jobs/6-arm64-deploy-package/config.ini6
-rwxr-xr-xcontrib/ci/jobs/6-arm64-deploy-package/job.sh14
18 files changed, 242 insertions, 35 deletions
diff --git a/contrib/ci/Containerfile b/contrib/ci/Containerfile
new file mode 100644
index 000000000..a69c35f7e
--- /dev/null
+++ b/contrib/ci/Containerfile
@@ -0,0 +1,45 @@
1FROM docker.io/library/debian:bookworm
2
3ENV DEBIAN_FRONTEND=noninteractive
4
5RUN apt-get update -yqq && \
6 apt-get upgrade -yqq && \
7 apt-get install -yqq \
8 git \
9 autoconf \
10 libextractor-dev \
11 libjansson-dev \
12 libgcrypt-dev \
13 libqrencode-dev \
14 libpq-dev \
15 libmicrohttpd-dev \
16 pkg-config \
17 libtool \
18 recutils \
19 make \
20 python3-sphinx \
21 python3-sphinx-book-theme \
22 python3-sphinx-multiversion \
23 python3-sphinx-rtd-theme \
24 texinfo \
25 autopoint \
26 curl \
27 libcurl4-openssl-dev \
28 libsodium-dev \
29 libidn11-dev \
30 zlib1g-dev \
31 libunistring-dev \
32 iptables
33
34# Debian packaging tools
35RUN apt-get install -yqq \
36 po-debconf \
37 build-essential \
38 debhelper-compat \
39 devscripts \
40 git-buildpackage \
41 && rm -rf /var/lib/apt/lists/*
42
43WORKDIR /workdir
44
45CMD ["/bin/bash"]
diff --git a/contrib/ci/ci.sh b/contrib/ci/ci.sh
new file mode 100755
index 000000000..0719015b9
--- /dev/null
+++ b/contrib/ci/ci.sh
@@ -0,0 +1,34 @@
1#!/bin/bash
2set -exvuo pipefail
3
4# Requires podman
5# Fails if not found in PATH
6OCI_RUNTIME=$(which podman)
7REPO_NAME=$(basename "${PWD}")
8JOB_NAME="${1}"
9JOB_ARCH=$((grep CONTAINER_ARCH contrib/ci/jobs/${JOB_NAME}/config.ini | cut -d' ' -f 3) || echo "${2:-amd64}")
10JOB_CONTAINER=$((grep CONTAINER_NAME contrib/ci/jobs/${JOB_NAME}/config.ini | cut -d' ' -f 3) || echo "localhost/${REPO_NAME}:${JOB_ARCH}")
11CONTAINER_BUILD=$((grep CONTAINER_BUILD contrib/ci/jobs/${JOB_NAME}/config.ini | cut -d' ' -f 3) || echo "True")
12
13echo "Image name: ${JOB_CONTAINER}"
14
15if [ "${CONTAINER_BUILD}" = "True" ] ; then
16 "${OCI_RUNTIME}" build \
17 --arch "${JOB_ARCH}" \
18 -t "${JOB_CONTAINER}" \
19 -f contrib/ci/Containerfile .
20fi
21
22"${OCI_RUNTIME}" run \
23 --rm \
24 -ti \
25 --arch "${JOB_ARCH}" \
26 --env CI_COMMIT_REF="$(git rev-parse HEAD)" \
27 --volume "${PWD}":/workdir \
28 --workdir /workdir \
29 "${JOB_CONTAINER}" \
30 contrib/ci/jobs/"${JOB_NAME}"/job.sh
31
32top_dir=$(dirname "${BASH_SOURCE[0]}")
33
34#"${top_dir}"/build.sh
diff --git a/contrib/ci/docker/Dockerfile b/contrib/ci/docker/Dockerfile
deleted file mode 100644
index b9f019c43..000000000
--- a/contrib/ci/docker/Dockerfile
+++ /dev/null
@@ -1,32 +0,0 @@
1FROM ubuntu:18.04
2
3# Install the required build tools
4RUN apt update && apt install -y apt git autopoint automake texinfo gettext autoconf libtool libidn11-dev libunistring-dev gnutls-dev libgcrypt20 libgcrypt20-dev libjansson-dev libsqlite3-dev wget flex bison libglib2.0-dev libgmp3-dev libmicrohttpd-dev libglpk-dev libextractor-dev
5
6# Install gnurl from source at version gnurl-7.54.0
7WORKDIR /usr/src
8RUN git clone https://git.taler.net/gnurl.git --branch gnurl-7.57.0
9RUN cd /usr/src/gnurl && autoreconf -i && ./configure --prefix=/usr --disable-ntlm-wb && make install
10
11# Install libpbc
12WORKDIR /usr/src
13RUN wget https://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz && tar xvzpf pbc-0.5.14.tar.gz && cd /usr/src/pbc-0.5.14 && ./configure --prefix=/usr && make install
14
15# Install libbswabe
16WORKDIR /usr/src
17RUN git clone https://github.com/schanzen/libgabe.git && cd /usr/src/libgabe && ./configure --prefix=/usr && make install
18
19WORKDIR /usr/src
20RUN git clone git://gnunet.org/gnunet.git
21RUN cd /usr/src/gnunet && ./bootstrap && ./configure --enable-experimental --prefix=/usr && make && make install
22
23RUN addgroup gnunetdns && addgroup gnunet && adduser --system --home /var/lib/gnunet gnunet
24RUN chown gnunet:gnunet /var/lib/gnunet
25RUN echo '[arm]\nSTART_SYSTEM_SERVICES = YES\nSTART_USER_SERVICES = NO\n' > /etc/gnunet.conf
26
27ADD docker-entrypoint.sh .
28
29RUN rm -rf /usr/src/*
30#RUN apt remove gcc
31
32CMD ["sh", "docker-entrypoint.sh"]
diff --git a/contrib/ci/docker/docker-entrypoint.sh b/contrib/ci/docker/docker-entrypoint.sh
deleted file mode 100644
index db916cce7..000000000
--- a/contrib/ci/docker/docker-entrypoint.sh
+++ /dev/null
@@ -1,3 +0,0 @@
1#!/bin/bash
2gnunet-arm -s > $HOME/gnunet.log 2>&1
3exec bash
diff --git a/contrib/ci/jobs/0-build/build.sh b/contrib/ci/jobs/0-build/build.sh
new file mode 100755
index 000000000..a5a89ca82
--- /dev/null
+++ b/contrib/ci/jobs/0-build/build.sh
@@ -0,0 +1,10 @@
1#!/bin/bash
2set -exuo pipefail
3
4./bootstrap
5./configure CFLAGS="-ggdb -O0" \
6 --enable-logging=verbose \
7 --disable-doc
8
9make -j $(nproc)
10make install
diff --git a/contrib/ci/jobs/0-build/job.sh b/contrib/ci/jobs/0-build/job.sh
new file mode 100755
index 000000000..8d79902c5
--- /dev/null
+++ b/contrib/ci/jobs/0-build/job.sh
@@ -0,0 +1,6 @@
1#!/bin/bash
2set -exuo pipefail
3
4job_dir=$(dirname "${BASH_SOURCE[0]}")
5
6"${job_dir}"/build.sh
diff --git a/contrib/ci/jobs/2-deb-package/job.sh b/contrib/ci/jobs/2-deb-package/job.sh
new file mode 100755
index 000000000..00ded9323
--- /dev/null
+++ b/contrib/ci/jobs/2-deb-package/job.sh
@@ -0,0 +1,22 @@
1#!/bin/bash
2set -exuo pipefail
3# This file is in the public domain.
4# Helper script to build the latest DEB packages in the container.
5
6
7unset LD_LIBRARY_PATH
8
9# Install build-time dependencies.
10# Update apt cache first
11apt-get update
12mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control
13
14export VERSION="$(./contrib/ci/jobs/2-deb-package/version.sh)"
15echo "Building gnunet packages version ${VERSION}"
16EMAIL=none gbp dch --ignore-branch --debian-tag="%(version)s" --git-author --new-version="${VERSION}"
17./bootstrap
18dpkg-buildpackage -rfakeroot -b -uc -us
19
20ls -alh ../*.deb
21mkdir -p /artifacts/gnunet/${CI_COMMIT_REF} # Variable comes from CI environment
22mv ../*.deb /artifacts/gnunet/${CI_COMMIT_REF}/
diff --git a/contrib/ci/jobs/2-deb-package/version.sh b/contrib/ci/jobs/2-deb-package/version.sh
new file mode 100755
index 000000000..b12ca77ba
--- /dev/null
+++ b/contrib/ci/jobs/2-deb-package/version.sh
@@ -0,0 +1,17 @@
1#!/bin/sh
2set -ex
3
4BRANCH=$(git name-rev --name-only HEAD)
5if [ -z "${BRANCH}" ]; then
6 exit 1
7else
8 # "Unshallow" our checkout, but only our current branch, and exclude the submodules.
9 git fetch --no-recurse-submodules --tags --depth=1000 origin "${BRANCH}"
10 RECENT_VERSION_TAG=$(git describe --tags --match 'v*.*.*' --exclude '*-*dev*' --always --abbrev=0 HEAD || exit 1)
11 commits="$(git rev-list ${RECENT_VERSION_TAG}..HEAD --count)"
12 if [ "${commits}" = "0" ]; then
13 git describe --tag HEAD | sed -r 's/^v//' || exit 1
14 else
15 echo $(echo ${RECENT_VERSION_TAG} | sed -r 's/^v//')-${commits}-$(git rev-parse --short=8 HEAD)
16 fi
17fi
diff --git a/contrib/ci/jobs/3-deploy-package/config.ini b/contrib/ci/jobs/3-deploy-package/config.ini
new file mode 100644
index 000000000..08c106f9c
--- /dev/null
+++ b/contrib/ci/jobs/3-deploy-package/config.ini
@@ -0,0 +1,6 @@
1[build]
2HALT_ON_FAILURE = True
3WARN_ON_FAILURE = True
4CONTAINER_BUILD = False
5CONTAINER_NAME = nixery.dev/shell/rsync
6CONTAINER_ARCH = amd64
diff --git a/contrib/ci/jobs/3-deploy-package/job.sh b/contrib/ci/jobs/3-deploy-package/job.sh
new file mode 100755
index 000000000..d53588a0f
--- /dev/null
+++ b/contrib/ci/jobs/3-deploy-package/job.sh
@@ -0,0 +1,14 @@
1#!/bin/bash
2set -exuo pipefail
3
4ARTIFACT_PATH="/artifacts/gnunet/${CI_COMMIT_REF}/*.deb"
5
6RSYNC_HOST="taler.host.internal"
7RSYNC_PORT=424242
8RSYNC_PATH="incoming_packages/bookworm-taler-ci/"
9RSYNC_DEST="rsync://${RSYNC_HOST}/${RSYNC_PATH}"
10
11
12rsync -vP \
13 --port ${RSYNC_PORT} \
14 ${ARTIFACT_PATH} ${RSYNC_DEST}
diff --git a/contrib/ci/jobs/4-arm64-build/build.sh b/contrib/ci/jobs/4-arm64-build/build.sh
new file mode 100755
index 000000000..7da9d4a75
--- /dev/null
+++ b/contrib/ci/jobs/4-arm64-build/build.sh
@@ -0,0 +1,11 @@
1#!/bin/bash
2set -exuo pipefail
3
4make clean
5./bootstrap
6./configure CFLAGS="-ggdb -O0" \
7 --enable-logging=verbose \
8 --disable-doc
9
10make -j $(nproc)
11make install
diff --git a/contrib/ci/jobs/4-arm64-build/config.ini b/contrib/ci/jobs/4-arm64-build/config.ini
new file mode 100644
index 000000000..b5b4b5fe7
--- /dev/null
+++ b/contrib/ci/jobs/4-arm64-build/config.ini
@@ -0,0 +1,6 @@
1[build]
2HALT_ON_FAILURE = True
3WARN_ON_FAILURE = True
4CONTAINER_BUILD = True
5CONTAINER_NAME = gnunet:arm64
6CONTAINER_ARCH = arm64
diff --git a/contrib/ci/jobs/4-arm64-build/job.sh b/contrib/ci/jobs/4-arm64-build/job.sh
new file mode 100755
index 000000000..8d79902c5
--- /dev/null
+++ b/contrib/ci/jobs/4-arm64-build/job.sh
@@ -0,0 +1,6 @@
1#!/bin/bash
2set -exuo pipefail
3
4job_dir=$(dirname "${BASH_SOURCE[0]}")
5
6"${job_dir}"/build.sh
diff --git a/contrib/ci/jobs/5-arm64-deb-package/config.ini b/contrib/ci/jobs/5-arm64-deb-package/config.ini
new file mode 100644
index 000000000..b5b4b5fe7
--- /dev/null
+++ b/contrib/ci/jobs/5-arm64-deb-package/config.ini
@@ -0,0 +1,6 @@
1[build]
2HALT_ON_FAILURE = True
3WARN_ON_FAILURE = True
4CONTAINER_BUILD = True
5CONTAINER_NAME = gnunet:arm64
6CONTAINER_ARCH = arm64
diff --git a/contrib/ci/jobs/5-arm64-deb-package/job.sh b/contrib/ci/jobs/5-arm64-deb-package/job.sh
new file mode 100755
index 000000000..00ded9323
--- /dev/null
+++ b/contrib/ci/jobs/5-arm64-deb-package/job.sh
@@ -0,0 +1,22 @@
1#!/bin/bash
2set -exuo pipefail
3# This file is in the public domain.
4# Helper script to build the latest DEB packages in the container.
5
6
7unset LD_LIBRARY_PATH
8
9# Install build-time dependencies.
10# Update apt cache first
11apt-get update
12mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control
13
14export VERSION="$(./contrib/ci/jobs/2-deb-package/version.sh)"
15echo "Building gnunet packages version ${VERSION}"
16EMAIL=none gbp dch --ignore-branch --debian-tag="%(version)s" --git-author --new-version="${VERSION}"
17./bootstrap
18dpkg-buildpackage -rfakeroot -b -uc -us
19
20ls -alh ../*.deb
21mkdir -p /artifacts/gnunet/${CI_COMMIT_REF} # Variable comes from CI environment
22mv ../*.deb /artifacts/gnunet/${CI_COMMIT_REF}/
diff --git a/contrib/ci/jobs/5-arm64-deb-package/version.sh b/contrib/ci/jobs/5-arm64-deb-package/version.sh
new file mode 100755
index 000000000..b12ca77ba
--- /dev/null
+++ b/contrib/ci/jobs/5-arm64-deb-package/version.sh
@@ -0,0 +1,17 @@
1#!/bin/sh
2set -ex
3
4BRANCH=$(git name-rev --name-only HEAD)
5if [ -z "${BRANCH}" ]; then
6 exit 1
7else
8 # "Unshallow" our checkout, but only our current branch, and exclude the submodules.
9 git fetch --no-recurse-submodules --tags --depth=1000 origin "${BRANCH}"
10 RECENT_VERSION_TAG=$(git describe --tags --match 'v*.*.*' --exclude '*-*dev*' --always --abbrev=0 HEAD || exit 1)
11 commits="$(git rev-list ${RECENT_VERSION_TAG}..HEAD --count)"
12 if [ "${commits}" = "0" ]; then
13 git describe --tag HEAD | sed -r 's/^v//' || exit 1
14 else
15 echo $(echo ${RECENT_VERSION_TAG} | sed -r 's/^v//')-${commits}-$(git rev-parse --short=8 HEAD)
16 fi
17fi
diff --git a/contrib/ci/jobs/6-arm64-deploy-package/config.ini b/contrib/ci/jobs/6-arm64-deploy-package/config.ini
new file mode 100644
index 000000000..a8ad1c16d
--- /dev/null
+++ b/contrib/ci/jobs/6-arm64-deploy-package/config.ini
@@ -0,0 +1,6 @@
1[build]
2HALT_ON_FAILURE = True
3WARN_ON_FAILURE = True
4CONTAINER_BUILD = False
5CONTAINER_NAME = nixery.dev/shell/rsync
6CONTAINER_ARCH = arm64
diff --git a/contrib/ci/jobs/6-arm64-deploy-package/job.sh b/contrib/ci/jobs/6-arm64-deploy-package/job.sh
new file mode 100755
index 000000000..d53588a0f
--- /dev/null
+++ b/contrib/ci/jobs/6-arm64-deploy-package/job.sh
@@ -0,0 +1,14 @@
1#!/bin/bash
2set -exuo pipefail
3
4ARTIFACT_PATH="/artifacts/gnunet/${CI_COMMIT_REF}/*.deb"
5
6RSYNC_HOST="taler.host.internal"
7RSYNC_PORT=424242
8RSYNC_PATH="incoming_packages/bookworm-taler-ci/"
9RSYNC_DEST="rsync://${RSYNC_HOST}/${RSYNC_PATH}"
10
11
12rsync -vP \
13 --port ${RSYNC_PORT} \
14 ${ARTIFACT_PATH} ${RSYNC_DEST}