此GitHub操作使您可以验证客户端应用程序中使用的操作,以针对GraphQL模式进行验证。该操作将检查项目中指定目录中的所有操作文档,以确保可以针对给定的GraphQL架构安全执行查询/突变及其字段选择。
请参阅此处使用的此操作:mandiwise/graphql-operation-validation-demo
为客户端应用程序中的所有GraphQL操作编写和维护测试可能是不可行的,因此此操作可以提供一定的保证,即执行时它们将是有效的。它通过向模式发送内省查询,在您的项目中搜索所有GraphQL操作文档(在.graphql或.js文件中)中的指定目录,并根据内省查询结果验证这些操作。
在引擎盖下,该项目使用GraphQL.JS和GraphQl工具来加载模式,获取文档并验证操作。
重要的!由于需要进行内省查询才能获取模式,因此必须打开您希望验证操作的GraphQL API的内省。因此,该操作可能最适合与公共GraphQL API,在您的本地开发环境中或与客户端应用程序共同列表时。
您首先需要创建一个YAML文件来描述项目中的工作流程(例如.github/workflows/operations.yml )。
接下来,将作业添加到使用操作/结帐软件包以查看您的存储库的文件(将其添加到$GITHUB_WORKSPACE )的文件中。然后,您可以作为作业的第二步运行验证操作。
此操作支持以下输入:
base_dir (必需):搜索操作的基本目录(相对于回购目录)schema_location (必需):. .json / .graphql文件的端点URL或路径(相对于repo目录)excluded_paths : base_dir中的逗号分隔目录/文件路径以排除(相对于base_dir )token :代币与授权标头一起使用(仅支持持有人方案)下面的示例说明了您如何在推送或提出拉动请求到存储库的main分支时如何验证GraphQl操作。该操作指向swapi/schema.graphql的存储库中的本地架构文件,在swapi目录中寻找操作,并在搜索操作文档时排除swapi/schema.graphql文件(因为这会导致错误):
name : Validate GraphQL Operations
on :
pull_request :
push :
branches :
- main
jobs :
operations :
runs-on : ubuntu-latest
steps :
- name : Checkout repo
uses : actions/checkout@v2
- name : Validate SWAPI operations
uses : mandiwise/graphql-operation-validation-action@v1
with :
schema_location : ${{ github.workspace }}/swapi/schema.graphql
base_dir : ${{ github.workspace }}/swapi
excluded_paths : schema.graphql至少,您必须将${{ github.workspace }}指定为base_dir输入,但是您可能希望将搜索范围缩小到项目中所有操作都嵌套的项目中的特定子目录。搜索操作时, node_modules目录会自动忽略,因此您无需将其包含在可选的excluded_paths ths输入中。
现在,当您推main分支或提交PR时,您可以在Github上查看存储库的操作选项卡以查看结果。如果任何操作无效,则将在日志中注明它们。
如果您需要针对需要在Authorization标题中具有令牌的模式验证操作,则可以将其添加为token输入值:
# ...
- name : Validate GitHub GraphQL API operations
uses : mandiwise/graphql-operation-validation-action@v1
with :
schema_location : https://api.github.com/graphql
base_dir : ${{ github.workspace }}/github
token : ${{ secrets.ACCESS_TOKEN }}标题将使用Authorization: Bearer token...仅方案。请参阅GitHub在工作流中使用加密秘密的文档。
是否想在开发环境中验证您的操作或不推到存储库的情况?没问题!
您可以使用ACT在本地运行此操作。
安装依赖项:
npm i运行测试:
npm test发行包:
npm run prepare该项目最初基于操作/JavaScript-Action。
该项目中的脚本和文档是根据MIT许可发布的。