CI #186
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| pull_request: | |
| branches: [ main, develop ] | |
| schedule: | |
| # Run nightly at 2 AM UTC | |
| - cron: '0 2 * * *' | |
| env: | |
| # Use the latest stable Zig version | |
| ZIG_VERSION: 0.15.1 | |
| jobs: | |
| lint: | |
| name: Lint and Format | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true # Only fetch configured submodules (vendor/solidity) | |
| - name: Setup Zig | |
| uses: goto-bus-stop/setup-zig@v2 | |
| with: | |
| version: ${{ env.ZIG_VERSION }} | |
| - name: Install system dependencies | |
| shell: bash | |
| run: | | |
| echo "🔧 Installing system dependencies for ${{ runner.os }}..." | |
| case "${{ runner.os }}" in | |
| Linux) | |
| sudo apt-get update -qq | |
| sudo apt-get install -y \ | |
| build-essential \ | |
| cmake \ | |
| clang \ | |
| libc++-dev \ | |
| libc++abi-dev \ | |
| libboost-all-dev \ | |
| libssl-dev \ | |
| pkg-config \ | |
| git | |
| echo "✅ Linux dependencies installed" | |
| ;; | |
| macOS) | |
| brew update | |
| brew install boost openssl cmake | |
| echo "✅ macOS dependencies installed" | |
| ;; | |
| # Windows) | |
| # # Install basic dependencies | |
| # choco install cmake openssl | |
| # # Install Boost via vcpkg for better CMake integration | |
| # vcpkg install boost-system boost-filesystem boost-program-options --triplet x64-windows | |
| # echo "✅ Windows dependencies installed" | |
| # ;; | |
| esac | |
| - name: Cache Zig artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/zig | |
| .zig-cache | |
| key: ${{ runner.os }}-zig-${{ env.ZIG_VERSION }}-${{ hashFiles('build.zig', 'build.zig.zon') }} | |
| restore-keys: | | |
| ${{ runner.os }}-zig-${{ env.ZIG_VERSION }}- | |
| - name: Clone LLVM/MLIR for build | |
| shell: bash | |
| run: | | |
| echo "📦 Cloning LLVM/MLIR (shallow clone for faster CI)..." | |
| if [ ! -d "vendor/llvm-project" ]; then | |
| git clone --depth=1 --branch=release/19.x https://github.com/llvm/llvm-project.git vendor/llvm-project | |
| echo "✅ LLVM/MLIR cloned" | |
| else | |
| echo "✅ LLVM/MLIR already present" | |
| fi | |
| - name: Cache MLIR build | |
| uses: actions/cache@v4 | |
| with: | |
| path: vendor/mlir/ | |
| key: ${{ runner.os }}-mlir-build-${{ hashFiles('vendor/llvm-project/.git/HEAD', 'build.zig') }} | |
| restore-keys: | | |
| ${{ runner.os }}-mlir-build- | |
| - name: Build MLIR libraries if needed | |
| shell: bash | |
| run: | | |
| # Check if MLIR is already built (any .a file in vendor/mlir/lib indicates it's built) | |
| if [ -d "vendor/mlir/lib" ] && [ "$(ls -A vendor/mlir/lib/*.a 2>/dev/null | wc -l)" -gt 0 ]; then | |
| echo "✅ MLIR libraries already built and cached" | |
| else | |
| echo "🔨 Building MLIR libraries (this takes ~20 minutes, only on first run)..." | |
| echo "Building via zig build (which triggers CMake for MLIR)..." | |
| # The zig build process will automatically build MLIR if needed | |
| zig build 2>&1 | head -100 || { | |
| echo "⚠️ Initial build triggered MLIR compilation" | |
| } | |
| echo "✅ MLIR libraries built" | |
| fi | |
| - name: Check formatting | |
| run: | | |
| echo "🔍 Checking code formatting..." | |
| zig fmt --check src/ || { | |
| echo "❌ Code formatting issues found. Run 'zig fmt src/' to fix." | |
| exit 1 | |
| } | |
| echo "✅ Code formatting is correct" | |
| - name: Lint code | |
| run: | | |
| echo "🔍 Running linter..." | |
| find src/ -name "*.zig" -exec zig ast-check {} \; || { | |
| echo "❌ Linting issues found" | |
| exit 1 | |
| } | |
| echo "✅ All files pass linting" | |
| test: | |
| name: Test | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest] # windows-latest commented out until Boost issues resolved | |
| zig-version: [0.15.1] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true # Only fetch configured submodules (vendor/solidity) | |
| - name: Setup Zig | |
| uses: goto-bus-stop/setup-zig@v2 | |
| with: | |
| version: ${{ matrix.zig-version }} | |
| - name: Install system dependencies | |
| shell: bash | |
| run: | | |
| echo "🔧 Installing system dependencies for ${{ runner.os }}..." | |
| case "${{ runner.os }}" in | |
| Linux) | |
| sudo apt-get update -qq | |
| sudo apt-get install -y \ | |
| build-essential \ | |
| cmake \ | |
| clang \ | |
| libc++-dev \ | |
| libc++abi-dev \ | |
| libboost-all-dev \ | |
| libssl-dev \ | |
| pkg-config \ | |
| git | |
| echo "✅ Linux dependencies installed" | |
| ;; | |
| macOS) | |
| brew update | |
| brew install boost openssl cmake | |
| echo "✅ macOS dependencies installed" | |
| ;; | |
| # Windows) | |
| # # Install basic dependencies | |
| # choco install cmake openssl | |
| # # Install Boost via vcpkg for better CMake integration | |
| # vcpkg install boost-system boost-filesystem boost-program-options --triplet x64-windows | |
| # echo "✅ Windows dependencies installed" | |
| # ;; | |
| esac | |
| - name: Cache Zig artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/zig | |
| .zig-cache | |
| key: ${{ runner.os }}-zig-${{ matrix.zig-version }}-${{ hashFiles('build.zig', 'build.zig.zon') }} | |
| restore-keys: | | |
| ${{ runner.os }}-zig-${{ matrix.zig-version }}- | |
| - name: Clone LLVM/MLIR for build | |
| shell: bash | |
| run: | | |
| echo "📦 Cloning LLVM/MLIR (shallow clone for faster CI)..." | |
| if [ ! -d "vendor/llvm-project" ]; then | |
| git clone --depth=1 --branch=release/19.x https://github.com/llvm/llvm-project.git vendor/llvm-project | |
| echo "✅ LLVM/MLIR cloned" | |
| else | |
| echo "✅ LLVM/MLIR already present" | |
| fi | |
| - name: Cache MLIR build | |
| uses: actions/cache@v4 | |
| with: | |
| path: vendor/mlir/ | |
| key: ${{ runner.os }}-mlir-build-${{ hashFiles('vendor/llvm-project/.git/HEAD', 'build.zig') }} | |
| restore-keys: | | |
| ${{ runner.os }}-mlir-build- | |
| - name: Build MLIR libraries if needed | |
| shell: bash | |
| run: | | |
| # Check if MLIR is already built (any .a file in vendor/mlir/lib indicates it's built) | |
| if [ -d "vendor/mlir/lib" ] && [ "$(ls -A vendor/mlir/lib/*.a 2>/dev/null | wc -l)" -gt 0 ]; then | |
| echo "✅ MLIR libraries already built and cached" | |
| else | |
| echo "🔨 Building MLIR libraries (this takes ~20 minutes, only on first run)..." | |
| echo "Building via zig build (which triggers CMake for MLIR)..." | |
| # The zig build process will automatically build MLIR if needed | |
| zig build 2>&1 | head -100 || { | |
| echo "⚠️ Initial build triggered MLIR compilation" | |
| } | |
| echo "✅ MLIR libraries built" | |
| fi | |
| - name: Build project | |
| shell: bash | |
| run: | | |
| echo "🔨 Building Ora compiler..." | |
| zig build | |
| echo "✅ Build successful" | |
| - name: Run unit tests | |
| shell: bash | |
| run: | | |
| echo "🧪 Running unit test suite..." | |
| zig build test | |
| echo "✅ Unit tests completed" | |
| examples: | |
| name: Build Examples | |
| runs-on: ubuntu-latest | |
| needs: [lint, test] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true # Only fetch configured submodules (vendor/solidity) | |
| - name: Setup Zig | |
| uses: goto-bus-stop/setup-zig@v2 | |
| with: | |
| version: ${{ env.ZIG_VERSION }} | |
| - name: Install system dependencies | |
| shell: bash | |
| run: | | |
| echo "🔧 Installing system dependencies for ${{ runner.os }}..." | |
| case "${{ runner.os }}" in | |
| Linux) | |
| sudo apt-get update -qq | |
| sudo apt-get install -y \ | |
| build-essential \ | |
| cmake \ | |
| clang \ | |
| libc++-dev \ | |
| libc++abi-dev \ | |
| libboost-all-dev \ | |
| libssl-dev \ | |
| pkg-config \ | |
| git | |
| echo "✅ Linux dependencies installed" | |
| ;; | |
| macOS) | |
| brew update | |
| brew install boost openssl cmake | |
| echo "✅ macOS dependencies installed" | |
| ;; | |
| Windows) | |
| choco install boost-msvc-14.3 cmake openssl | |
| echo "✅ Windows dependencies installed" | |
| ;; | |
| esac | |
| - name: Cache Zig artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/zig | |
| .zig-cache | |
| key: ${{ runner.os }}-zig-${{ env.ZIG_VERSION }}-${{ hashFiles('build.zig', 'build.zig.zon') }} | |
| restore-keys: | | |
| ${{ runner.os }}-zig-${{ env.ZIG_VERSION }}- | |
| - name: Clone LLVM/MLIR for build | |
| shell: bash | |
| run: | | |
| echo "📦 Cloning LLVM/MLIR (shallow clone for faster CI)..." | |
| if [ ! -d "vendor/llvm-project" ]; then | |
| git clone --depth=1 --branch=release/19.x https://github.com/llvm/llvm-project.git vendor/llvm-project | |
| echo "✅ LLVM/MLIR cloned" | |
| else | |
| echo "✅ LLVM/MLIR already present" | |
| fi | |
| - name: Cache MLIR build | |
| uses: actions/cache@v4 | |
| with: | |
| path: vendor/mlir/ | |
| key: ${{ runner.os }}-mlir-build-${{ hashFiles('vendor/llvm-project/.git/HEAD', 'build.zig') }} | |
| restore-keys: | | |
| ${{ runner.os }}-mlir-build- | |
| - name: Build compiler (includes MLIR build if needed) | |
| shell: bash | |
| run: | | |
| echo "🔨 Building Ora compiler..." | |
| zig build | |
| echo "✅ Build successful" | |
| - name: Compile ora-examples | |
| shell: bash | |
| run: | | |
| echo "🧪 Testing example compilation..." | |
| if [ -d "ora-example" ]; then | |
| for file in ora-example/**/*.ora; do | |
| if [ -f "$file" ]; then | |
| echo "Compiling $file..." | |
| ./zig-out/bin/ora compile "$file" || echo "⚠️ Failed to compile $file" | |
| fi | |
| done | |
| else | |
| echo "⚠️ ora-example directory not found, skipping" | |
| fi | |
| echo "✅ Example compilation test completed" | |
| comprehensive-tests: | |
| name: Comprehensive Feature Tests | |
| runs-on: ${{ matrix.os }} | |
| needs: [lint, test] | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, macos-latest] # windows-latest commented out until Boost issues resolved | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true # Only fetch configured submodules (vendor/solidity) | |
| - name: Setup Zig | |
| uses: goto-bus-stop/setup-zig@v2 | |
| with: | |
| version: ${{ env.ZIG_VERSION }} | |
| - name: Install system dependencies | |
| shell: bash | |
| run: | | |
| echo "🔧 Installing system dependencies for ${{ runner.os }}..." | |
| case "${{ runner.os }}" in | |
| Linux) | |
| sudo apt-get update -qq | |
| sudo apt-get install -y \ | |
| build-essential \ | |
| cmake \ | |
| clang \ | |
| libc++-dev \ | |
| libc++abi-dev \ | |
| libboost-all-dev \ | |
| libssl-dev \ | |
| pkg-config \ | |
| git | |
| echo "✅ Linux dependencies installed" | |
| ;; | |
| macOS) | |
| brew update | |
| brew install boost openssl cmake | |
| echo "✅ macOS dependencies installed" | |
| ;; | |
| # Windows) | |
| # # Install basic dependencies | |
| # choco install cmake openssl | |
| # # Install Boost via vcpkg for better CMake integration | |
| # vcpkg install boost-system boost-filesystem boost-program-options --triplet x64-windows | |
| # echo "✅ Windows dependencies installed" | |
| # ;; | |
| esac | |
| - name: Cache Zig artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/zig | |
| .zig-cache | |
| key: ${{ runner.os }}-zig-${{ env.ZIG_VERSION }}-${{ hashFiles('build.zig', 'build.zig.zon') }} | |
| restore-keys: | | |
| ${{ runner.os }}-zig-${{ env.ZIG_VERSION }}- | |
| - name: Clone LLVM/MLIR for build | |
| shell: bash | |
| run: | | |
| echo "📦 Cloning LLVM/MLIR (shallow clone for faster CI)..." | |
| if [ ! -d "vendor/llvm-project" ]; then | |
| git clone --depth=1 --branch=release/19.x https://github.com/llvm/llvm-project.git vendor/llvm-project | |
| echo "✅ LLVM/MLIR cloned" | |
| else | |
| echo "✅ LLVM/MLIR already present" | |
| fi | |
| - name: Cache MLIR build | |
| uses: actions/cache@v4 | |
| with: | |
| path: vendor/mlir/ | |
| key: ${{ runner.os }}-mlir-build-${{ hashFiles('vendor/llvm-project/.git/HEAD', 'build.zig') }} | |
| restore-keys: | | |
| ${{ runner.os }}-mlir-build- | |
| - name: Build compiler (includes MLIR) | |
| shell: bash | |
| run: | | |
| echo "🔨 Building Ora compiler..." | |
| zig build | |
| echo "✅ Build successful" | |
| - name: Run end-to-end compilation tests | |
| shell: bash | |
| run: | | |
| echo "🏗️ Running end-to-end compilation tests..." | |
| # Test compilation of sample files | |
| if [ -d "ora-example" ]; then | |
| ./zig-out/bin/ora compile ora-example/smoke.ora || echo "⚠️ smoke.ora failed" | |
| ./zig-out/bin/ora compile ora-example/basic_storage.ora || echo "⚠️ basic_storage.ora failed" | |
| fi | |
| echo "✅ End-to-end tests completed" | |
| - name: Upload test results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: struct-test-results-${{ matrix.os }} | |
| path: test-results/ | |
| retention-days: 30 | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| if: success() | |
| with: | |
| name: ora-compiler-${{ runner.os }} | |
| path: | | |
| zig-out/bin/ | |
| zig-out/lib/ | |
| retention-days: 7 | |
| security: | |
| name: Security Scan | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true # Only fetch configured submodules (vendor/solidity) | |
| - name: Run security scan | |
| shell: bash | |
| run: | | |
| echo "🔍 Running basic security scan..." | |
| # Basic security checks - more comprehensive scans in security.yml | |
| - name: Check for security issues | |
| shell: bash | |
| run: | | |
| echo "🔒 Running security checks..." | |
| # Check for common security patterns | |
| echo "🔍 Checking for unsafe patterns..." | |
| if grep -r "unsafe" src/ 2>/dev/null; then | |
| echo "⚠️ Found unsafe code patterns" | |
| else | |
| echo "✅ No unsafe patterns found" | |
| fi | |
| # Check for TODO/FIXME security notes | |
| echo "🔍 Checking for security TODOs..." | |
| if grep -r -i "todo.*security\|fixme.*security" src/ 2>/dev/null; then | |
| echo "⚠️ Found security-related TODOs" | |
| else | |
| echo "✅ No security TODOs found" | |
| fi | |
| echo "✅ Security scan completed" | |
| performance: | |
| name: Performance Benchmarks | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'schedule' || contains(github.event.pull_request.labels.*.name, 'performance') | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true # Only fetch configured submodules (vendor/solidity) | |
| - name: Setup Zig | |
| uses: goto-bus-stop/setup-zig@v2 | |
| with: | |
| version: ${{ env.ZIG_VERSION }} | |
| - name: Install system dependencies | |
| shell: bash | |
| run: | | |
| echo "🔧 Installing system dependencies for ${{ runner.os }}..." | |
| case "${{ runner.os }}" in | |
| Linux) | |
| sudo apt-get update -qq | |
| sudo apt-get install -y \ | |
| build-essential \ | |
| cmake \ | |
| clang \ | |
| libc++-dev \ | |
| libc++abi-dev \ | |
| libboost-all-dev \ | |
| libssl-dev \ | |
| pkg-config \ | |
| git | |
| echo "✅ Linux dependencies installed" | |
| ;; | |
| macOS) | |
| brew update | |
| brew install boost openssl cmake | |
| echo "✅ macOS dependencies installed" | |
| ;; | |
| Windows) | |
| choco install boost-msvc-14.3 cmake openssl | |
| echo "✅ Windows dependencies installed" | |
| ;; | |
| esac | |
| - name: Cache Zig artifacts | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cache/zig | |
| .zig-cache | |
| key: ${{ runner.os }}-zig-${{ env.ZIG_VERSION }}-${{ hashFiles('build.zig', 'build.zig.zon') }} | |
| restore-keys: | | |
| ${{ runner.os }}-zig-${{ env.ZIG_VERSION }}- | |
| - name: Clone LLVM/MLIR for build | |
| shell: bash | |
| run: | | |
| echo "📦 Cloning LLVM/MLIR (shallow clone for faster CI)..." | |
| if [ ! -d "vendor/llvm-project" ]; then | |
| git clone --depth=1 --branch=release/19.x https://github.com/llvm/llvm-project.git vendor/llvm-project | |
| echo "✅ LLVM/MLIR cloned" | |
| else | |
| echo "✅ LLVM/MLIR already present" | |
| fi | |
| - name: Cache MLIR build | |
| uses: actions/cache@v4 | |
| with: | |
| path: vendor/mlir/ | |
| key: ${{ runner.os }}-mlir-build-${{ hashFiles('vendor/llvm-project/.git/HEAD', 'build.zig') }} | |
| restore-keys: | | |
| ${{ runner.os }}-mlir-build- | |
| - name: Build with optimizations | |
| shell: bash | |
| run: | | |
| echo "🚀 Building optimized version..." | |
| zig build -Doptimize=ReleaseFast | |
| - name: Run performance tests | |
| shell: bash | |
| run: | | |
| echo "⚡ Running performance benchmarks..." | |
| # Time compilation of test files | |
| if [ -f "zig-out/bin/ora" ]; then | |
| echo "📊 Timing compilation performance..." | |
| time ./zig-out/bin/ora --version 2>/dev/null || echo "⚠️ Compiler version check failed" | |
| fi | |
| # Memory usage tests | |
| echo "💾 Checking memory usage..." | |
| /usr/bin/time -v zig build 2>&1 | grep -E "(Maximum resident set size|User time|System time)" || echo "⚠️ Memory profiling failed" | |
| echo "✅ Performance benchmarks completed" | |
| release: | |
| name: Release Check | |
| runs-on: ubuntu-latest | |
| if: github.ref == 'refs/heads/main' | |
| needs: [lint, test, examples, comprehensive-tests, security] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true # Only fetch configured submodules (vendor/solidity) | |
| - name: Setup Zig | |
| uses: goto-bus-stop/setup-zig@v2 | |
| with: | |
| version: ${{ env.ZIG_VERSION }} | |
| - name: Install system dependencies | |
| shell: bash | |
| run: | | |
| echo "🔧 Installing system dependencies for ${{ runner.os }}..." | |
| case "${{ runner.os }}" in | |
| Linux) | |
| sudo apt-get update -qq | |
| sudo apt-get install -y \ | |
| build-essential \ | |
| cmake \ | |
| clang \ | |
| libc++-dev \ | |
| libc++abi-dev \ | |
| libboost-all-dev \ | |
| libssl-dev \ | |
| pkg-config \ | |
| git | |
| echo "✅ Linux dependencies installed" | |
| ;; | |
| macOS) | |
| brew update | |
| brew install boost openssl cmake | |
| echo "✅ macOS dependencies installed" | |
| ;; | |
| Windows) | |
| choco install boost-msvc-14.3 cmake openssl | |
| echo "✅ Windows dependencies installed" | |
| ;; | |
| esac | |
| - name: Clone LLVM/MLIR for build | |
| shell: bash | |
| run: | | |
| echo "📦 Cloning LLVM/MLIR (shallow clone for faster CI)..." | |
| if [ ! -d "vendor/llvm-project" ]; then | |
| git clone --depth=1 --branch=release/19.x https://github.com/llvm/llvm-project.git vendor/llvm-project | |
| echo "✅ LLVM/MLIR cloned" | |
| else | |
| echo "✅ LLVM/MLIR already present" | |
| fi | |
| - name: Cache MLIR build | |
| uses: actions/cache@v4 | |
| with: | |
| path: vendor/mlir/ | |
| key: ${{ runner.os }}-mlir-build-${{ hashFiles('vendor/llvm-project/.git/HEAD', 'build.zig') }} | |
| restore-keys: | | |
| ${{ runner.os }}-mlir-build- | |
| - name: Build release version | |
| shell: bash | |
| run: | | |
| echo "🎯 Building release version..." | |
| zig build -Doptimize=ReleaseFast -Dtarget=x86_64-linux | |
| # macOS Intel build removed; keep Linux and other targets as needed | |
| zig build -Doptimize=ReleaseFast -Dtarget=x86_64-windows | |
| echo "✅ Release builds completed" | |
| - name: Create release summary | |
| shell: bash | |
| run: | | |
| echo "📋 Release Summary:" > release-summary.md | |
| echo "- Commit: ${{ github.sha }}" >> release-summary.md | |
| echo "- Date: $(date)" >> release-summary.md | |
| echo "- Tests: ✅ Passed" >> release-summary.md | |
| echo "- Examples: ✅ Built" >> release-summary.md | |
| echo "- Security: ✅ Scanned" >> release-summary.md | |
| echo "📋 Release summary created" | |
| cat release-summary.md | |
| - name: Upload release artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ora-release-${{ github.sha }} | |
| path: | | |
| zig-out/ | |
| release-summary.md | |
| retention-days: 30 | |
| notification: | |
| name: Notification | |
| runs-on: ubuntu-latest | |
| if: always() | |
| needs: [lint, test, examples, comprehensive-tests, security] | |
| steps: | |
| - name: Notify on success | |
| if: needs.lint.result == 'success' && needs.test.result == 'success' && needs.examples.result == 'success' && needs.comprehensive-tests.result == 'success' | |
| run: | | |
| echo "✅ 🎉 All CI checks passed successfully!" | |
| echo "📊 Results:" | |
| echo " - Lint: ✅" | |
| echo " - Test: ✅" | |
| echo " - Examples: ✅" | |
| echo " - Security: ✅" | |
| - name: Notify on failure | |
| if: needs.lint.result == 'failure' || needs.test.result == 'failure' || needs.examples.result == 'failure' | |
| run: | | |
| echo "❌ Some CI checks failed" | |
| echo "📊 Results:" | |
| echo " - Lint: ${{ needs.lint.result }}" | |
| echo " - Test: ${{ needs.test.result }}" | |
| echo " - Examples: ${{ needs.examples.result }}" | |
| echo " - Security: ${{ needs.security.result }}" |