Skip to content

christian7877/github-graphql-action

 
 

Repository files navigation

github-graphql-action

An action that acts a client for GitHub's GraphQL API and can be chained. It means you can use a first instance to execute a GraphQL query and use its output to execute a GraphQL mutation.

Check a sample workflow and sample GraphqQL queries

Parameters

Argument   Description
query Query file path within the repo. Required
output The name of the file, relative to GITHUB_WORKSPACE, where the output will be stored. Defaults to github-graphql-action.json
url GraphQL endpoint URL. Defaults to https://api.github.com/graphql
accept Accept header to set in the query. Optional
log Set this argument to any value to enable logging to the console. Optional

Query file

The query file contains the GraphQL query or mutation to execute. Format is YAML based.

Static parameters

query: '
  query($owner:String!, $name:String!) {
    repository(owner:$owner, name:$name) {
  	 name
   }
  }'
variables:
  owner: helaili
  name: github-graphql-action
action "GraphQL query" {
  uses = "./"
  secrets = ["GITHUB_TOKEN"]
  args = "--query .github/graphql_action/repository-static.query.yaml"
}

Command line based parameters

Variables values can also come from a command line argument.

query: '
  query($owner:String!, $name:String!) {
    repository(owner:$owner, name:$name) {
  	 name
   }
  }'
variables:
  owner:
    type: arg
    name: owner
  name:
    type: arg
    name: name
action "GraphQL query" {
  uses = "./"
  secrets = ["GITHUB_TOKEN"]
  args = "--query .github/graphql_action/repository-args.query.yaml --owner helaili --name hello-vue"
}

File based parameters

Variable values can also come from a file, typically event.json which contains the event which triggered the action workflow (in ../workflow) or an arbitrary file (relative to /github/workspace) containing the result from a previous action (declared using the output command line parameter). This file is then processed by a jq query in order to extract the scalar value needed for the GraphQL query.

You can optionally add a cast parameter in order to convert the jq output to an Int, Float or Boolean

query:'
  query($owner:String!, $name:String!) {
    repository(owner:$owner, name:$name) {
      name
    }
  }'
variables:
  owner:
    type: jq
    file: ../workflow/event.json
    query: '.repository.owner.login'
  name:
    type: jq
    file: ../workflow/event.json
    query: '.repository.name'
action "GraphQL query" {
  uses = "./"
  secrets = ["GITHUB_TOKEN"]
  needs = "Repo Query Args"
  args = "--query .github/graphql_action/repository-jq.query.yaml --log true"
}

Mutation

query: '
  mutation pinIssue($issueId: ID!){
    pinIssue(input: { issueId: $issueId }) {
      issue {
        repository {
          id
        }
      }
    }
  }'
variables:
  issueId:
    type: jq
    file: ../workflow/event.json
    query: '.issue.node_id'

About

An action which executes graphql queries

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 50.3%
  • HCL 36.5%
  • Dockerfile 13.2%