此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許可發布的。