# 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."