LCOV - code coverage report
Current view: top level - src/esys/repo - cienv.cpp (source / functions) Hit Total Coverage
Test: esysrepo_coverage.info Lines: 0 41 0.0 %
Date: 2026-08-12 14:26:50 Functions: 0 5 0.0 %

          Line data    Source code
       1             : /*!
       2             :  * \file esys/repo/cienv.cpp
       3             :  * \brief
       4             :  *
       5             :  * \cond
       6             :  * __legal_b__
       7             :  *
       8             :  * Copyright (c) 2026 Michel Gillet
       9             :  * Distributed under the MIT License.
      10             :  * (See accompanying file LICENSE.txt or
      11             :  * copy at https://opensource.org/licenses/MIT)
      12             :  *
      13             :  * __legal_e__
      14             :  * \endcond
      15             :  *
      16             :  */
      17             : 
      18             : #include "esys/repo/esysrepo_prec.h"
      19             : #include "esys/repo/cienv.h"
      20             : 
      21             : #include <cstdlib>
      22             : 
      23             : namespace esys::repo
      24             : {
      25             : 
      26             : namespace
      27             : {
      28             : 
      29           0 : const char *env_or_empty(const char *name)
      30             : {
      31           0 :     const char *value = std::getenv(name);
      32           0 :     return value != nullptr ? value : "";
      33             : }
      34             : 
      35             : } // namespace
      36             : 
      37           0 : CIEngine CIEnv::get_engine() const
      38             : {
      39           0 :     return m_engine;
      40             : }
      41             : 
      42           0 : const std::string &CIEnv::get_project() const
      43             : {
      44           0 :     return m_project;
      45             : }
      46             : 
      47           0 : const std::string &CIEnv::get_url() const
      48             : {
      49           0 :     return m_url;
      50             : }
      51             : 
      52           0 : const std::string &CIEnv::get_rev() const
      53             : {
      54           0 :     return m_rev;
      55             : }
      56             : 
      57           0 : Result CIEnv::detect(CIEnv &out)
      58             : {
      59           0 :     out = CIEnv();
      60             : 
      61             :     // GitLab CI
      62           0 :     if (std::getenv("GITLAB_CI") != nullptr || std::getenv("CI_SERVER") != nullptr)
      63             :     {
      64           0 :         const std::string sha = env_or_empty("CI_COMMIT_SHA");
      65           0 :         if (sha.empty()) return ESYSREPO_RESULT(ResultCode::CMDPIN_CI_NOT_DETECTED);
      66             : 
      67           0 :         out.m_engine = CIEngine::GITLAB;
      68           0 :         out.m_project = env_or_empty("CI_PROJECT_PATH");
      69           0 :         out.m_url = env_or_empty("CI_REPOSITORY_URL");
      70           0 :         if (out.m_url.empty()) out.m_url = env_or_empty("CI_PROJECT_URL");
      71           0 :         out.m_rev = sha;
      72             : 
      73           0 :         if (out.m_project.empty() && out.m_url.empty())
      74           0 :             return ESYSREPO_RESULT(ResultCode::CMDPIN_CI_NOT_DETECTED);
      75             : 
      76           0 :         return ESYSREPO_RESULT(ResultCode::OK);
      77           0 :     }
      78             : 
      79             :     // GitHub Actions
      80           0 :     if (std::getenv("GITHUB_ACTIONS") != nullptr)
      81             :     {
      82           0 :         const std::string sha = env_or_empty("GITHUB_SHA");
      83           0 :         if (sha.empty()) return ESYSREPO_RESULT(ResultCode::CMDPIN_CI_NOT_DETECTED);
      84             : 
      85           0 :         out.m_engine = CIEngine::GITHUB;
      86           0 :         out.m_project = env_or_empty("GITHUB_REPOSITORY");
      87           0 :         out.m_url = env_or_empty("GITHUB_SERVER_URL");
      88           0 :         if (!out.m_url.empty() && !out.m_project.empty())
      89           0 :             out.m_url += "/" + out.m_project + ".git";
      90           0 :         out.m_rev = sha;
      91             : 
      92           0 :         if (out.m_project.empty() && out.m_url.empty())
      93           0 :             return ESYSREPO_RESULT(ResultCode::CMDPIN_CI_NOT_DETECTED);
      94             : 
      95           0 :         return ESYSREPO_RESULT(ResultCode::OK);
      96           0 :     }
      97             : 
      98             :     // Present but unsupported CI markers
      99           0 :     if (std::getenv("CI") != nullptr)
     100           0 :         return ESYSREPO_RESULT(ResultCode::CMDPIN_CI_UNSUPPORTED);
     101             : 
     102           0 :     return ESYSREPO_RESULT(ResultCode::CMDPIN_CI_NOT_DETECTED);
     103             : }
     104             : 
     105             : } // namespace esys::repo

Generated by: LCOV version 1.14