Работали ли вы с GitHub Actions?

«Работали ли вы с GitHub Actions?» — вопрос из категории DevOps, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, использовал GitHub Actions для настройки CI/CD пайплайнов в C++ проектах. Основная задача — автоматизация сборки, тестирования и проверки качества кода при каждом пуше или пулл-реквесте.

Пример workflow для C++ проекта:

name: C++ CI/CD

on: [push, pull_request]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        compiler: [g++-11, clang++-14]
        build_type: [Debug, Release]
    steps:
      - uses: actions/checkout@v3
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y ${{ matrix.compiler }} cmake lcov
      - name: Configure with CMake
        run: |
          cmake -B build -DCMAKE_CXX_COMPILER=${{ matrix.compiler }} 
                -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} 
                -DBUILD_TESTS=ON
      - name: Build
        run: cmake --build build --parallel
      - name: Run tests
        run: cd build && ctest --output-on-failure
      - name: Generate coverage report
        if: matrix.build_type == 'Debug'
        run: |
          lcov --capture --directory . --output-file coverage.info
          lcov --remove coverage.info '/usr/*' --output-file coverage.info
          lcov --list coverage.info

В реальных проектах я также настраивал:

  • Кэширование зависимостей (vcpkg, Conan) для ускорения сборок
  • Статический анализ с помощью clang-tidy и cppcheck
  • Проверку форматирования через clang-format
  • Деплой артефактов (библиотек, исполняемых файлов) в GitHub Packages или на тестовые стенды
  • Матричные сборки для разных компиляторов (GCC, Clang, MSVC) и операционных систем