Skip to content

Codespaces Test

Codespaces Test #6

# The MIT License (MIT)
#
# Copyright (c) 2018 Mateusz Pusz
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
name: Codespaces Test
on:
workflow_dispatch:
push:
paths:
- '.devcontainer/**'
- '.github/workflows/codespaces-test.yml'
schedule:
# Test weekly to catch base image changes
- cron: '0 6 * * 1'
permissions:
contents: read
jobs:
test-devcontainer:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Test Dev Container Build and mp-units Development Workflow
uses: devcontainers/ci@v0.3.1900000417
with:
imageName: mp-units-dev
cacheFrom: mp-units-dev
push: never
runCmd: |
set -e # Exit on any error
echo "πŸ§ͺ Testing mp-units development environment..."
echo "πŸ“‹ Verifying base tools and compilers:"
# Check essential tools are available
tools=(gcc g++ clang clang++ cmake ninja conan python3 git pre-commit)
for tool in "${tools[@]}"; do
if command -v "$tool" >/dev/null 2>&1; then
echo "βœ… $tool: $(command -v "$tool")"
else
echo "❌ $tool: NOT FOUND"
exit 1
fi
done
echo ""
echo "πŸ“‹ Compiler matrix verification:"
echo "Available GCC versions: $(ls /usr/bin/gcc-* | grep -E 'gcc-[0-9]+$' | sort -V | tr '\n' ' ')"
echo "Available Clang versions: $(ls /usr/bin/clang++-* /usr/local/bin/clang++-* 2>/dev/null | grep -E 'clang\+\+-[0-9]+$' | sort -V | tr '\n' ' ')"
# Test specific compiler versions expected for mp-units
echo ""
echo "πŸ§ͺ Testing specific compiler versions:"
# Expected GCC versions (12, 13, 14, 15)
expected_gcc=(12 13 14 15)
for version in "${expected_gcc[@]}"; do
if command -v "gcc-$version" >/dev/null 2>&1 && command -v "g++-$version" >/dev/null 2>&1; then
gcc_ver=$(gcc-$version --version | head -1)
echo "βœ… GCC-$version: $gcc_ver"
else
echo "❌ GCC-$version: NOT FOUND"
exit 1
fi
done
# Expected Clang versions (16, 17, 18, 19, 20)
expected_clang=(16 17 18 19 20)
for version in "${expected_clang[@]}"; do
if command -v "clang-$version" >/dev/null 2>&1 && command -v "clang++-$version" >/dev/null 2>&1; then
clang_ver=$(clang-$version --version | head -1)
echo "βœ… Clang-$version: $clang_ver"
else
echo "❌ Clang-$version: NOT FOUND"
exit 1
fi
done
echo ""
echo "πŸ”§ Default tool versions:"
gcc --version | head -1
clang --version | head -1
cmake --version | head -1
ninja --version
python3 --version
conan --version
echo ""
echo "πŸ“¦ Conan configuration validation:"
conan profile list
# Verify expected Conan profiles exist
expected_profiles=(gcc12 gcc13 gcc14 clang16 clang17 clang18 clang20)
for profile in "${expected_profiles[@]}"; do
if conan profile show "$profile" >/dev/null 2>&1; then
echo "βœ… Profile $profile: available"
else
echo "❌ Profile $profile: MISSING"
exit 1
fi
done
echo ""
echo "πŸ—οΈ Testing mp-units comprehensive setup with check_all.sh:"
# Run the comprehensive installation and validation script
echo "Running check_all.sh install to validate all compiler configurations..."
if .devcontainer/check_all.sh install; then
echo "βœ… check_all.sh install completed successfully"
echo "βœ… All compiler profiles validated and dependencies installed"
else
echo "❌ check_all.sh install failed"
exit 1
fi
echo ""
echo "🎯 Testing quick build validation:"
# Test one quick build to ensure the environment actually works
echo "Testing quick build with Clang-20..."
if conan create . -pr clang20 -c user.mp-units.build:all=False -s compiler.cppstd=23 -b missing; then
echo "βœ… Quick build test passed"
else
echo "❌ Quick build test failed"
exit 1
fi
echo ""
echo "πŸ“– Testing documentation tools:"
if command -v mkdocs >/dev/null 2>&1; then
echo "βœ… MkDocs: $(mkdocs --version)"
# Test mkdocs configuration
if mkdocs build --strict --quiet; then
echo "βœ… Documentation builds successfully"
else
echo "❌ Documentation build failed"
exit 1
fi
else
echo "❌ MkDocs: NOT FOUND"
exit 1
fi
echo ""
echo "🎯 Testing API reference setup:"
if [ -f ".devcontainer/api_reference.sh" ]; then
echo "βœ… API reference script exists"
# Test setup-only mode
if .devcontainer/api_reference.sh -s; then
echo "βœ… API reference setup completed"
else
echo "❌ API reference setup failed"
exit 1
fi
else
echo "❌ API reference script missing"
exit 1
fi
echo ""
echo "🧹 Testing code quality tools:"
if pre-commit --version >/dev/null 2>&1; then
echo "βœ… pre-commit: $(pre-commit --version)"
else
echo "❌ pre-commit: NOT FOUND"
exit 1
fi
echo ""
echo "πŸŽ‰ All tests passed! Development environment is ready for mp-units development."