C++ परियोजनाओं के लिए CI/CD: GitHub Actions सेटअप
C++ में आधुनिक विकास के लिए न केवल गुणवत्तापूर्ण कोड लिखना आवश्यक है, बल्कि इसके बिल्ड, परीक्षण और तैनाती की प्रक्रियाओं को सेटअप करना भी आवश्यक है। CI/CD (सतत एकीकरण / सतत तैनाती) एक अभ्यास है जो इन प्रक्रियाओं को स्वचालित करने की अनुमति देता है, जिससे कोड लिखने और उपयोगकर्ताओं तक पहुँचाने के बीच का समय कम हो जाता है। इस लेख में, हम देखेंगे कि GitHub Actions - GitHub में निर्मित एक शक्तिशाली और मुफ्त उपकरण - का उपयोग करके C++ परियोजनाओं के लिए CI/CD कैसे सेटअप करें।
GitHub Actions आपको स्वचालित कार्य प्रवाह (workflows) बनाने की अनुमति देता है, जो विशिष्ट घटनाओं पर चलते हैं: रिपॉजिटरी में push, pull request बनाना, रिलीज़ और अन्य। C++ परियोजनाओं के लिए यह विशेष रूप से उपयोगी है, क्योंकि यह सुनिश्चित करता है कि कोड विभिन्न प्लेटफार्मों पर बिल्ड होता है और इसमें कोई प्रतिगमन नहीं है।
C++ के लिए GitHub Actions की मूल बातें
GitHub Actions workflows का वर्णन करने के लिए YAML फ़ाइलों का उपयोग करता है। प्रत्येक workflow में एक या अधिक jobs होते हैं, जो वर्चुअल मशीनों (runners) पर निष्पादित होते हैं। C++ परियोजनाओं के लिए आमतौर पर Ubuntu, Windows और macOS runners का उपयोग किया जाता है। आइए workflow फ़ाइल की मूल संरचना देखें।
name: C++ CI
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: build: runs-on: ubuntu-latest
steps: - uses: actions/checkout@v4
- name: Install dependencies run: | sudo apt-get update sudo apt-get install -y cmake g++ libboost-all-dev
- name: Configure CMake run: cmake -B build -DCMAKE_BUILD_TYPE=Release
- name: Build run: cmake --build build --config Release
- name: Test run: cd build && ctest --output-on-failureयह workflow main और develop शाखाओं में push करने पर, साथ ही main में pull request बनाने पर चलता है। यह निर्भरताएँ (CMake, g++, Boost) स्थापित करता है, प्रोजेक्ट को कॉन्फ़िगर करता है, इसे बिल्ड करता है और परीक्षण चलाता है।
C++ परियोजनाओं का मल्टी-प्लेटफ़ॉर्म बिल्ड
C++ के लिए CI/CD का एक मुख्य लाभ कई प्लेटफार्मों पर स्वचालित रूप से बिल्ड की जाँच करने की क्षमता है। यह महत्वपूर्ण है, क्योंकि C++ कोड विभिन्न OS और कंपाइलरों पर अलग-अलग व्यवहार कर सकता है। GitHub Actions बिल्ड मैट्रिक्स को आसानी से व्यवस्थित करने की अनुमति देता है।
jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] compiler: [g++, clang++] include: - os: ubuntu-latest compiler: g++ cmake_flags: -DCMAKE_CXX_COMPILER=g++-11 - os: ubuntu-latest compiler: clang++ cmake_flags: -DCMAKE_CXX_COMPILER=clang++-14 - os: windows-latest compiler: msvc cmake_flags: -DCMAKE_CXX_COMPILER=cl - os: macos-latest compiler: clang++ cmake_flags: -DCMAKE_CXX_COMPILER=clang++
runs-on: ${{ matrix.os }}
steps: - uses: actions/checkout@v4
- name: Install dependencies (Ubuntu) if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y cmake g++-11 clang-14 libboost-all-dev
- name: Install dependencies (macOS) if: matrix.os == 'macos-latest' run: | brew update brew install cmake boost
- name: Install dependencies (Windows) if: matrix.os == 'windows-latest' run: | choco install cmake boost-msvc-14.3
- name: Configure CMake run: cmake -B build ${{ matrix.cmake_flags }} -DCMAKE_BUILD_TYPE=Release
- name: Build run: cmake --build build --config Release
- name: Test run: | if [ "${{ runner.os }}" == "Windows" ]; then cd build && ctest -C Release --output-on-failure else cd build && ctest --output-on-failure fiइस उदाहरण में