build: enable builds from source tarball in CI

This commit is contained in:
Marcus Holland-Moritz 2024-08-12 19:43:53 +02:00
parent f1e4400a3a
commit a4b851e93e
2 changed files with 241 additions and 81 deletions

View File

@ -6,10 +6,20 @@ export CCACHE_DIR=/ccache
cd "$HOME"
git config --global --add safe.directory /workspace
rm -rf dwarfs dwarfs-*
rm -f dwarfs
if [[ "$BUILD_FROM_TARBALL" == "1" ]]; then
# delete all but the latest tarball
ls -1 -r --sort=time /workspace/dwarfs-*.tar.zst | tail -n +2 | while read -r tarball; do
echo "deleting old tarball: $tarball"
rm -f "$tarball"
done
tar xvf /workspace/dwarfs-*.tar.zst
ln -s dwarfs-* dwarfs
else
git config --global --add safe.directory /workspace
ln -s /workspace dwarfs
fi
rm -rf build
mkdir build
@ -132,6 +142,58 @@ if [[ "-$BUILD_TYPE-" == *-static-* ]]; then
CMAKE_ARGS="${CMAKE_ARGS} -DSTATIC_BUILD_EXTRA_PREFIX=/opt/static-libs/$COMPILER"
fi
if [[ "$BUILD_FROM_TARBALL" == "1" ]]; then
INSTALLDIR="$HOME/install"
PREFIXPATH="$INSTALLDIR/usr/local"
rm -rf "$INSTALLDIR"
if [[ "-$BUILD_TYPE-" == *-shared-* ]]; then
LDLIBPATH="$PREFIXPATH/lib"
if [[ ":$LD_LIBRARY_PATH:" != *":$LDLIBPATH:"* ]]; then
export "LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}$LDLIBPATH"
fi
fi
case "-$BUILD_TYPE-" in
*-full-*)
cmake ../dwarfs/ $CMAKE_ARGS
$BUILD_TOOL
ctest --output-on-failure -j$(nproc)
DESTDIR="$INSTALLDIR" $BUILD_TOOL install
$BUILD_TOOL distclean
;;
*-split-*)
# ==== libdwarfs ====
cmake ../dwarfs/ $CMAKE_ARGS -DWITH_LIBDWARFS=ON -DWITH_TOOLS=OFF -DWITH_FUSE_DRIVER=OFF
$BUILD_TOOL
ctest --output-on-failure -j$(nproc)
DESTDIR="$INSTALLDIR" $BUILD_TOOL install
$BUILD_TOOL distclean
rm -rf *
# ==== dwarfs tools ====
cmake ../dwarfs/ $CMAKE_ARGS -DWITH_LIBDWARFS=OFF -DWITH_TOOLS=ON -DWITH_FUSE_DRIVER=OFF -DCMAKE_PREFIX_PATH="$PREFIXPATH"
$BUILD_TOOL
ctest --output-on-failure -j$(nproc)
DESTDIR="$INSTALLDIR" $BUILD_TOOL install
$BUILD_TOOL distclean
rm -rf *
# ==== dwarfs fuse driver ====
cmake ../dwarfs/ $CMAKE_ARGS -DWITH_LIBDWARFS=OFF -DWITH_TOOLS=OFF -DWITH_FUSE_DRIVER=ON -DCMAKE_PREFIX_PATH="$PREFIXPATH"
$BUILD_TOOL
ctest --output-on-failure -j$(nproc)
DESTDIR="$INSTALLDIR" $BUILD_TOOL install
$BUILD_TOOL distclean
;;
*)
echo "builds from source tarball must be 'full' or 'split'"
exit 1
;;
esac
else
# shellcheck disable=SC2086
cmake ../dwarfs/ $CMAKE_ARGS
@ -234,4 +296,4 @@ if [[ "-$BUILD_TYPE-" != *-[at]san-* ]] && \
else
$BUILD_TOOL distclean
fi
fi

View File

@ -146,7 +146,105 @@ jobs:
if-no-files-found: error
compression-level: 0
linux:
linux-src:
needs: package-source
strategy:
matrix:
arch:
- amd64
- arm64v8
dist:
- ubuntu
- fedora
- arch
build_type:
- gcc-debug-ninja-full
- gcc-release-ninja-split
- gcc-release-shared-ninja-split
- clang-release-ninja-full
exclude:
- arch: arm64v8
dist: arch
build_type: gcc-debug-ninja-full
- arch: arm64v8
dist: arch
build_type: gcc-release-ninja-split
- arch: arm64v8
dist: arch
build_type: gcc-release-shared-ninja-split
- arch: arm64v8
dist: arch
build_type: clang-release-ninja-full
include:
- arch: amd64
dist: ubuntu
build_type: oldgcc-debug-make-split
- arch: arm64v8
dist: ubuntu
build_type: gcc-debug-noperfmon-ninja-split
- arch: arm64v8
dist: ubuntu
build_type: gcc-debug-nostacktrace-ninja-split
- arch: arm64v8
dist: ubuntu
build_type: oldclang-debug-make-split
- arch: amd64
dist: ubuntu-2204
build_type: gcc-release-ninja-split
- arch: amd64
dist: ubuntu-2204
build_type: gcc-debug-ninja-full
- arch: amd64
dist: ubuntu-2204
build_type: clang-release-ninja-split
runs-on:
- self-hosted
- Linux
- ${{ matrix.arch }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: 'true'
fetch-depth: '0'
ref: ${{ github.ref }}
- name: Download Source Tarball
uses: actions/download-artifact@v4
with:
name: dwarfs-source
- name: Build Docker Image
run: |
docker build \
-f .docker/Dockerfile.${{ matrix.dist }} \
-t dwarfs-linux-build-${{ matrix.dist }} \
--build-arg ARCH=${{ matrix.arch }} \
--build-arg SCRIPT=build-linux.sh \
.docker
- name: Run Build (${{ matrix.build_type }})
run: |
docker run --rm \
--cap-add SYS_ADMIN --device /dev/fuse --privileged \
--mount type=bind,source=${GITHUB_WORKSPACE},target=/workspace,readonly \
--mount type=bind,source=${{ runner.temp }},target=/tmp-runner \
--mount type=bind,source=/home/mhx/github-ccache,target=/ccache \
--env BUILD_FROM_TARBALL=1 \
--env BUILD_TYPE=${{ matrix.build_type }} \
--env BUILD_ARCH=${{ matrix.arch }} \
--env BUILD_DIST=${{ matrix.dist }} \
--env GITHUB_REF_NAME \
--env GITHUB_REF_TYPE \
--env GITHUB_RUN_ID \
--env GITHUB_RUN_NUMBER \
--env GITHUB_RUN_ATTEMPT \
dwarfs-linux-build-${{ matrix.dist }}
linux-git:
strategy:
matrix:
arch: