首页 > 其他分享 >vcpkg 与 GitHub 依赖关系图集成

vcpkg 与 GitHub 依赖关系图集成

时间:2023-09-06 18:35:58浏览次数:41  
标签:集成 关系 GitHub name github 依赖 vcpkg

我们很高兴与大家分享,vcpkg 有一项实验性功能,可以向 GitHub 依赖关系图提供数据。我们正在积极开发此功能,并希望听到您的反馈。如果您对当前功能有任何想法或希望看到进一步的改进,请告诉我们。如果你对vcpkg支持的依赖关系图启用的任何GitHub特性有反馈,也请告诉我们,我们会确保GitHub的相关人员能够看到。

关于GitHub依赖关系图

GitHub 依赖关系图存储了一个仓库的依赖关系集合。除了能够可视化存储库的依赖项之外,GitHub 还在此数据之上构建了一些有用的功能,包括依赖项审查Dependabot 警报

启用GitHub依赖关系图

为存储库启用依赖关系图是 vcpkg 能够填充存储库的依赖关系的要求。默认情况下,GitHub 上的公共存储库启用依赖关系图。如果您希望为私有存储库启用依赖关系图,您应该按照 GitHub 文档来启用依赖关系图

如果您已经在 GitHub Actions 工作流程中使用了可重用操作并且启用了依赖关系图,那么您的存储库的依赖关系图很可能已经列出了一些依赖关系。通过选择存储库中的见解,然后选择依赖关系图来检查它。

填充依赖关系图的技巧

依赖关系图可能以通过两种方式得到填充。对于某些具有可以在清单文件中完整描述的静态依赖项列表的包管理系统,一旦这些清单被推送到存储库中,GitHub 将自动扫描这些清单,并将其在依赖关系图中显示。

对于更加动态的包管理系统,用于处理依赖关系列表的工具必须参与确定完整的依赖关系集。C 和 C++ 的完整依赖集通常高度依赖于构建配置和目标平台。对于这些生态系统,GitHub 有一个依赖项提交 API 工具,可以使用该 API 来提供依赖项信息,通常作为 GitHub Actions 工作流程作业的一部分。

使用 vcpkg 报告依赖关系

vcpkg 与 GitHub 依赖关系图的集成可以通过将 dependencygraph 添加到运行 vcpkg 的 GitHub Actions 工作流文件中的 VCPKG_FEATURE_FLAGS 环境变量来实现(直接或间接通过 CMake)。您还必须修改您的工作流文件,以设置环境变量 GITHUB_TOKEN 的值为 ${{secrets.GITHUB_TOKEN}},并通过在工作流文件顶部附近包含以下 YAML 片段来请求工作流作业将依赖关系信息写入存储库元数据的权限。

permissions:
  contents: write

一旦做出了这些更改,并且您的工作流再次运行,您就可以开始在 GitHub 的依赖关系图部分中看到 vcpkg.json 清单中列出的依赖关系。

有关更多信息,请参阅我们在 GitHub 集成中的文档——GitHub 依赖关系图

例子:

如果你想在一个干净的项目中试用,GitHub 上有一个实时的示例模板存储库。如果您想在现有项目中试用,请参阅下面定义的工作流文件,其中显示了启用该功能所需的更改。

下面的两个工作流示例都使用这里列出的 vcpkg.json 和 main.cpp 文件。

vcpkg.json 示例内容:

{
  "name": "your-project",
  "version-string": "0.0.1",
  "dependencies": [
    "fmt"
  ]
}

main.cpp 示例内容:

#define FMT_HEADER_ONLY
#include "fmt/color.h"

int main(int argc, char** argv)
{
    fmt::print(
        fg(fmt::color::light_salmon),
        "¡Hola, Mundo!\n"
    );
}

通过CMake集成间接实现:

在使用CMake时,添加以下文件以测试vcpkg依赖关系图集成。

CMakeLists.txt

cmake_minimum_required(VERSION 3.15)

project(your-project CXX)
find_package(fmt REQUIRED)
set(CMAKE_CXX_STANDARD 20)

add_executable(hola main.cpp)

target_link_libraries(hola
  PRIVATE
    fmt::fmt)

.github/workflows/cmake.yml

name: Example that uses CMake integration

on:
  workflow_dispatch:

###############################################################################
# Add this section to your workflow file does not already have it to enable
# the job to write the dependency metadata.
###############################################################################
permissions:
  contents: write

###############################################################################
# Add these environment variables to your workflow to enable the vcpkg
# dependency graph integration.
###############################################################################
env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  VCPKG_FEATURE_FLAGS: dependencygraph

jobs:
  cmake:
    runs-on: ubuntu-latest

    # These steps assume an appropriate version of vcpkg is listed as a
    # submodule in your git repo. If it is not, you must update this workflow
    # to obtain it.

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: 'recursive'  

      - name: Bootstrap vcpkg
        run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh

      - name: Configure with CMake
        run: |
          cmake -B build -S ${{ github.workspace }} \
          -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake

      - name: Build with CMake
        run: cmake --build build

      - name: Hola, amigos
        run: ${{ github.workspace }}/build/hola

直接调用vcpkg install

添加以下文件以测试vcpkg依赖关系图与直接调用vcpkg install 的工作流的集成。

.github/workflows/build.yml

name: Example that directly invokes `vcpkg install`

on:
  push:
    branches: [ main ]
  workflow_dispatch:

###############################################################################
# Add this section to your workflow file does not already have it to enable
# the job to write the dependency metadata.
###############################################################################
permissions:
  contents: write

###############################################################################
# Add these environment variables to your workflow to enable the vcpkg
# dependency graph integration.
###############################################################################
env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  VCPKG_FEATURE_FLAGS: dependencygraph

jobs:
  build:
    runs-on: ubuntu-latest

    # These steps assume an appropriate version of vcpkg is listed as a
    # submodule in your git repo. If it is not, you must update this workflow
    # to obtain it.

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: 'recursive'  

      - name: Bootstrap vcpkg
        run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh

      - name: Directly invoke `vcpkg install`
        run: ${{ github.workspace }}/vcpkg/vcpkg install

      - name: Build with G++
        run: g++ -I${{ github.workspace }}/vcpkg_installed/x64-linux/include -o hola main.cpp

      - name: Hola, amigos
        run: ${{ github.workspace }}/hola

号召行动

我们正在收集用户的反馈,以确定我们需要进行哪些改进才能将这种整合视为完全支持。这是为我们的用户开放真正强大的企业级依赖性管理的基础,我们很高兴你们都能尝试一下。您可以在 vcpkg 默认分支的最新提交中找到该功能和最新的错误修复。

和往常一样,如果您有反馈,请在下面给我们留言,或在 Twitter(@VisualC)或通过电子邮件 [email protected] 联系我们。

标签:集成,关系,GitHub,name,github,依赖,vcpkg
From: https://www.cnblogs.com/vcpkg/p/17682197.html

相关文章

  • vcpkg 文档移至 Microsoft Docs 平台
    vcpkg文档移至MicrosoftDocs平台vcpkg文档有了一个新主页:vcpkgdocumentation|MicrosoftLearn。这是大多数微软文档托管的一个平台,具有很多特性,使得搜索、导航、创作和审阅文档变得更为容易。所有当前的vcpkg文档都在新平台上可见,我们仍然致力于从其他位置删除文档(vcp......
  • Prometheus+Alertmanager集成免费告警电话、短信
    Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是GoogleBorgMon监控系统的开源版本。 https://www.ccloudalarm.com账号后,选择Prometheus监控集成CCloudAlarm告警平台支持参数自定义,可针对自定义参数做告警处理~首先提供Prometh......
  • vue3集成jsoneditor
    一、背景之前在做录制回放平台的时候,需要前端展示子调用信息,子调用是一个请求列表数组结构,jsoneditor对数组的默认展示结构是[0].[1].[2]..的方式,为了达到如下的效果,必须用到onNodeName的钩子函数,因此深入调研了下vue3如何集成jsoneditor最后做出来的效果图onNodeName的参考......
  • DSP集成麦克风阵列声源定位模组AR-1105​
    麦克风阵列声源定位模组AR-1105是采用DSP音频处理器集成麦克风阵列声源定位技术进行研发,模组具有全硬件集成.体积小巧,外围电路简洁,无需软件调试,易上手等优点的情况下同时保持反应灵敏,定位准确等特性.模组分为:声音定位核心主板麦克风阵列板声源定位LED显示板声音定位核心主板......
  • 在线CAD的SDK如何集成到网页系统-关于MxCad项目二次开发插件集成
    前言1.很多单位拥有着数量庞大的DWG图纸,部门之间传统的图纸管理和沟通,效率较为低下,而将CAD图纸的浏览,编辑,审图,签章等工作集成到自己的网页系统,将会显著提高工作效率和企业的竞争力。集成到网页系统需要我们在后台服务器部署webcadsdk,部署后的操作界面效果如下: 2.在线CAD功......
  • IU5200集成30V的OVP功能,支持I2C接口,3A充电电流,1~4节锂电池升降压充电芯片
    IU5200D是一款自动申请快充输入,开关模式升降压充电管理IC,用于1~4节锂离子电池和锂聚合物电池,以及1~5节磷酸铁锂电池。芯片集成包括4开关MOSFET、输入和充电电流感应电路、电池以及升降压转换器的环路补偿。芯片具有3A的充电电流能力,充电电流可以通过外部电阻灵活可调。IU5200D内置......
  • Jenkins集成Blue Ocean
    Jenkins集成BlueOcean1.安装参考:https://www.jenkins.io/doc/book/blueocean/getting-started/要将BlueOcean插件套件安装到Jenkins实例,按步骤执行以下操作:1.使用管理员用户登录到Jenkins。2.在可用插件中,搜索blueocean,点击安装即可。2.配置配置的话,有两......
  • 【ToolChains】CLion(VS2019) + CMake + Vcpkg 的使用
    参考博客:https://blog.51cto.com/u_15075510/4201238http://t.csdn.cn/pADDUhttps://zhuanlan.zhihu.com/p/454233496https://blog.csdn.net/weixin_43803955/article/details/123544106Vcpkg概述Vcpkg是微软社区开发的一个跨平台的C++包管理工具。它旨在解决C++......
  • 初识seata-微服务集成seata
          ......
  • 虹科干货 | 什么是Redis数据集成(RDI)?
    大量的应用程序、日益增长的用户规模、不断扩展的技术需求,以及对即时响应的持续追求。想想这些是否正是你在经历的。也许你尝试过自己构建工具来应对这些需求,但是大量的编码和集成工作使你焦头烂额。那你是否知道,有这样一个工具可以帮助你实现从缓存中执行所有查询?一、推出Redis数......