mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
ci: add scripts to run and verify the devcontainer
Co-authored-by: Taylor Braun-Jones <taylor@braun-jones.org>
This commit is contained in:
committed by
Taylor Braun-Jones
co-authored by
Taylor Braun-Jones
parent
9c17332601
commit
ea0667e779
Executable
+45
@@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# This job runs in a container whose filesystem is `overlayfs`, over which
|
||||||
|
# `podman` cannot stack its own `overlay` storage driver:
|
||||||
|
#
|
||||||
|
# 'overlay' is not supported over overlayfs, a mount_program is required
|
||||||
|
#
|
||||||
|
# `vfs` copies each layer rather than stacking it, which is slower but asks
|
||||||
|
# nothing of the filesystem underneath. Name it in the environment so that
|
||||||
|
# every `podman` command below addresses the same storage, the build included.
|
||||||
|
export STORAGE_DRIVER=vfs
|
||||||
|
|
||||||
|
readonly dockerfile=".devcontainer/Dockerfile"
|
||||||
|
readonly name="cmake-dev-container"
|
||||||
|
|
||||||
|
# Build the container image from the devcontainer Dockerfile
|
||||||
|
echo "# Building devcontainer image"
|
||||||
|
podman build -t "$name" -f "$dockerfile" .devcontainer
|
||||||
|
|
||||||
|
# Ensure named volumes exist for ccache and glab-cli cache persistence
|
||||||
|
echo "# Ensuring volumes exist"
|
||||||
|
podman volume create cmake-dev-ccache 2>/dev/null || true
|
||||||
|
podman volume create cmake-dev-glab-cli 2>/dev/null || true
|
||||||
|
|
||||||
|
# Run the container with volumes mounted.
|
||||||
|
#
|
||||||
|
# The job's own container has no cgroup controllers delegated to it, so
|
||||||
|
# `podman` cannot place the container it starts under one:
|
||||||
|
#
|
||||||
|
# crun: controller `pids` is not available under /sys/fs/cgroup/...
|
||||||
|
#
|
||||||
|
# Ask for no cgroup at all. Verification needs no resource limits, and there
|
||||||
|
# is nothing to limit them with. There is no terminal either, so do not ask
|
||||||
|
# for one.
|
||||||
|
echo "# Starting devcontainer"
|
||||||
|
podman run --rm \
|
||||||
|
--cgroups=disabled \
|
||||||
|
-v "$PWD:/home/cmake-dev/workspace:Z" \
|
||||||
|
-v cmake-dev-ccache:/home/cmake-dev/.cache/ccache:Z \
|
||||||
|
-v cmake-dev-glab-cli:/home/cmake-dev/.config/glab-cli:Z \
|
||||||
|
--workdir /home/cmake-dev/workspace \
|
||||||
|
"$name" \
|
||||||
|
.gitlab/ci/devcontainer-verify.sh
|
||||||
Executable
+75
@@ -0,0 +1,75 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Source CI environment scripts
|
||||||
|
. .gitlab/ci/env.sh
|
||||||
|
|
||||||
|
# Verify devcontainer volumes are accessible
|
||||||
|
echo "# Verifying devcontainer volumes"
|
||||||
|
|
||||||
|
# Check ccache volume
|
||||||
|
if test -d /home/cmake-dev/.cache/ccache; then
|
||||||
|
echo "ccache volume found at /home/cmake-dev/.cache/ccache"
|
||||||
|
ccache -s 2>/dev/null || echo "ccache stats unavailable (may be fresh)"
|
||||||
|
else
|
||||||
|
echo "WARNING: ccache volume not found at expected path"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check glab-cli volume
|
||||||
|
if test -d /home/cmake-dev/.config/glab-cli; then
|
||||||
|
echo "glab-cli volume found at /home/cmake-dev/.config/glab-cli"
|
||||||
|
else
|
||||||
|
echo "WARNING: glab-cli volume not found at expected path"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verify cmake is available
|
||||||
|
echo "# Verifying cmake"
|
||||||
|
cmake --version
|
||||||
|
|
||||||
|
# Verify ccache is available
|
||||||
|
echo "# Verifying ccache"
|
||||||
|
ccache --version
|
||||||
|
|
||||||
|
# Build a simple test project to verify the devcontainer works
|
||||||
|
echo "# Building test project"
|
||||||
|
|
||||||
|
# Create a temporary build directory
|
||||||
|
mkdir -p /tmp/devcontainer-test
|
||||||
|
cd /tmp/devcontainer-test
|
||||||
|
|
||||||
|
# Create a minimal C project
|
||||||
|
cat > CMakeLists.txt <<cmake
|
||||||
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
project(devcontainer-test C)
|
||||||
|
|
||||||
|
add_executable(test
|
||||||
|
main.c
|
||||||
|
)
|
||||||
|
cmake
|
||||||
|
|
||||||
|
cat > main.c <<cmake
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
printf("Devcontainer CMake build OK\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
cmake
|
||||||
|
|
||||||
|
# Configure with cmake using ccache cache path
|
||||||
|
echo "# Configuring with cmake"
|
||||||
|
cmake 2>&1 \
|
||||||
|
-GNinja \
|
||||||
|
-S. \
|
||||||
|
-Bbuild
|
||||||
|
|
||||||
|
# Build
|
||||||
|
echo "# Building"
|
||||||
|
ninja -C build 2>&1
|
||||||
|
|
||||||
|
# Verify cache was preserved
|
||||||
|
echo "# Verifying ccache hit"
|
||||||
|
ccache -s 2>/dev/null | head -5 || true
|
||||||
|
|
||||||
|
echo "# Devcontainer verification complete"
|
||||||
Reference in New Issue
Block a user