什么是 GraphQL 查询以确定组织中是不是存在 GitHub 包?

Posted

技术标签:

【中文标题】什么是 GraphQL 查询以确定组织中是不是存在 GitHub 包?【英文标题】:What is GraphQL query to determine if GitHub package exists within an Organization?什么是 GraphQL 查询以确定组织中是否存在 GitHub 包? 【发布时间】:2020-03-11 19:14:05 【问题描述】:

如何查询 GitHub Packages 以确定包是否已存在?如果该包已经存在,我想阻止 CI/CD 尝试发布 Maven 包。

我正在尝试如下查询:

curl -X POST -H "Authorization: bearer <some token>" -H "Accept: application/vnd.github.packages-preview+json" -d <my query> https://api.github.com/graphql 

&lt;my query&gt; 的样子:

query 
  organization(login: "myorg") 
    registryPackagesForQuery(packageType: MAVEN, first: 100) 
      edges 
        node 
            name
            id
        
       
    
  

我的包裹被退回:


  "data": 
    "organization": 
      "registryPackagesForQuery": 
        "edges": [
          
            "node": 
              "name": "com.example.myorg",
              "id": "<some id>"
            
          
        ]
      
    
  

但是,registryPackagesForQuery 有一个 query 参数(String 类型),但我不知道该查询格式应该是什么样子。任何添加值的尝试似乎都不会返回任何数据。

查询的正确格式是什么?如果我想检查某个包的特定版本是否存在,该查询有何不同?

基本查询文档在这里:https://developer.github.com/v4/query/。

组织:https://developer.github.com/v4/object/organization/

RegistryPackageConnection:https://developer.github.com/v4/object/registrypackageconnection

注册表包:https://developer.github.com/v4/object/registrypackage/

【问题讨论】:

你找到答案了吗?寻找完全相同的 是的,特定包是否存在的实际测试归结为对与该包关联的 POM 文件的 HEAD 调用。我将它构建到我无法共享的 Gradle 插件中(还),但调用的是 maven.pkg.github.com,后跟“/ORG/REPO/GROUP_DELIMITED_WITH_SLASHES/ARTIFACT_ID/VERSION/ARTIFACT_ID-VERSION.pom”(需要拆分URL 作为 SO 自动格式化它,它会破坏呈现)。 【参考方案1】:

这可能是题外话,但使用 maven 插件不是更简单吗?喜欢https://github.com/chonton/exists-maven-plugin 可能吗?

【讨论】:

以上是关于什么是 GraphQL 查询以确定组织中是不是存在 GitHub 包?的主要内容,如果未能解决你的问题,请参考以下文章

使用 GraphQL 以有效的方式获取 GitHub 登录(用户)列表的状态数据

AWS AppSync GraphQL - 如何使用 PK/SK 查询而不是扫描整个 dynamoDB 表以获取 graphql 列表 API

用于可扩展项目的 graphql 代码组织

从 Java 中的 GraphQL 查询中提取查询名称及其字段

GraphQL Node.js:确定查询中使用的类型

用 GraphQL 快速搭建服务端 API