Skip to main content

🔧 API Reference

This document provides a comprehensive reference for the GitHub Project PHP package's API, including classes, methods, and events that you can use to extend and customize the package.

Table of Contents​

Service Classes​

GithubService​

Handles GitHub API interactions.

Namespace: CSlant\GitHubProject\Services\GithubService

Methods:

/**
* Post a comment to a GitHub issue or pull request
*
* @param string $contentNodeId The node ID of the content to comment on
* @param string $message The comment message (markdown supported)
* @return array The API response
*/
public function commentOnNode(string $contentNodeId, string $message): array

/**
* Handle a webhook payload and post a comment
*
* @param array $payload The webhook payload
* @throws \Throwable
*/
public function handleComment(array $payload): void

/**
* Generate a comment message from a payload
*
* @param array $payload The webhook payload
* @return string The rendered comment
* @throws \Throwable
*/
public function generateCommentMessage(array $payload): string

WebhookService​

Handles webhook validation and processing.

Namespace: CSlant\GitHubProject\Services\WebhookService

Methods:

/**
* Check if the webhook event is approved
*/
public function eventRequestApproved(Request $request): bool

/**
* Validate the webhook payload
*
* @param array $payload The webhook payload
* @return JsonResponse|null Returns a response if validation fails, null otherwise
*/
public function validatePayload(array $payload): ?JsonResponse

/**
* Validate payload specifically for comment generation
*/
public function validatePayloadForComment(array $payload): ?JsonResponse

Actions​

GenerateCommentAction​

Handles the generation of comments for project item changes.

Namespace: CSlant\GitHubProject\Actions\GenerateCommentAction

Methods:

/**
* Generate a comment message from the webhook payload
*
* @param Request $request
* @param bool $validate Whether to validate the payload (default: true)
*
* @return JsonResponse
* @throws Throwable
*/
public function __invoke(Request $request, bool $validate = true): JsonResponse

WebhookAction​

Handles incoming webhook requests.

Namespace: CSlant\GitHubProject\Actions\WebhookAction

Methods:

/**
* Handle an incoming webhook request
*
* @return JsonResponse The HTTP response
*/
public function __invoke(): JsonResponse

Jobs​

ProcessWebhookEvent​

Processes webhook events in the background.

Namespace: CSlant\GitHubProject\Jobs\ProcessWebhookEvent

Properties:

  • public array $payload - The webhook payload
  • public int $tries = 3 - Number of times to attempt the job
  • public int $maxExceptions = 3 - Maximum number of exceptions before failing

Methods:

/**
* Execute the job
*/
public function handle(): void

Events​

The package dispatches several events that you can listen for:

CommentGenerated​

Dispatched when a comment is successfully generated and posted to GitHub.

Properties:

  • public string $contentNodeId - The node ID of the content
  • public string $comment - The comment that was posted
  • public array $payload - The original webhook payload

WebhookReceived​

Dispatched when a webhook is received and validated.

Properties:

  • public array $payload - The webhook payload
  • public string $eventName - The name of the event

WebhookProcessed​

Dispatched after a webhook has been processed.

Properties:

  • public array $payload - The webhook payload
  • public string $eventName - The name of the event

Extending the Package​

Creating a Custom Service Provider​

You can extend the package by creating a custom service provider:

<?php

namespace App\Providers;

use CSlant\GitHubProject\GithubProjectServiceProvider as BaseServiceProvider;

class GithubProjectServiceProvider extends BaseServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
parent::register();

// Register your custom bindings here
}

/**
* Bootstrap services.
*/
public function boot(): void
{
parent::boot();

// Add your custom boot logic here
}
}

Listening to Events​

You can listen to the package's events in your EventServiceProvider:

// In your EventServiceProvider
protected $listen = [
\CSlant\GitHubProject\Events\CommentGenerated::class => [
// Your listeners here
],
\CSlant\GitHubProject\Events\WebhookReceived::class => [
// Your listeners here
],
];

Custom Field Types​

To add support for a custom field type:

  1. Create a new template in resources/views/vendor/github-project/md/field_types/
  2. Name it {field_type}.blade.php
  3. The template will automatically be used when a field of that type is encountered

Example template:

{{-- resources/views/vendor/github-project/md/field_types/custom_field.blade.php --}}
@if($fromValue != null && $toValue != null)
**`{{ $fieldName }}`** was changed from `{{ $fromValue }}` to `{{ $toValue }}`
@elseif($toValue == null)
**`{{ $fieldName }}`** was removed
@else
**`{{ $fieldName }}`** was set to `{{ $toValue }}`
@endif

Helper Functions​

The package provides several helper functions:

color_value_format($value, $color = null)​

Formats a value with an optional color.

Parameters:

  • string $value - The value to format
  • ?string $color - The color to use (hex, rgb, or color name)

Returns: string - The formatted value

format_date($date, $format = 'Y-m-d H:i:s')​

Formats a date string.

Parameters:

  • string $date - The date string to format
  • string $format - The date format (default: 'Y-m-d H:i:s')

Returns: string - The formatted date

markdown_to_html($markdown)​

Converts markdown to HTML.

Parameters:

  • string $markdown - The markdown to convert

Returns: string - The HTML output

Configuration Reference​

All available configuration options with their default values:

return [
'name' => 'GitHubProject',
'route_prefix' => env('GITHUB_PROJECT_ROUTE_PREFIX', 'github-project'),
'github' => [
'access_token' => env('GITHUB_ACCESS_TOKEN', ''),
'graphql_url' => env('GITHUB_GRAPHQL_URL', 'https://api.github.com/graphql'),
],
'enable_status_comment' => env('GITHUB_PROJECT_ENABLE_STATUS_COMMENT', false),
'is_queue_enabled' => env('GITHUB_PROJECT_QUEUE_ENABLED', false),
'comment_aggregation_cache_key' => env('GITHUB_PROJECT_COMMENT_AGGREGATION_CACHE_KEY', 'github-project-comment-aggregation'),
'comment_aggregation_time' => env('GITHUB_PROJECT_COMMENT_AGGREGATION_TIME', 20),
];

Next Steps​