<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/generating-ai-descriptions-of-automated-pull-requests-u5gmzc3y8" -->

---
title: Generating AI Descriptions of Automated Pull Requests
description: A walkthrough of how the slack-ruby-client open source gem was updated to generate meaningful AI-written descriptions for its automated API-update pull...
canonical: https://daily.dev/posts/generating-ai-descriptions-of-automated-pull-requests-u5gmzc3y8
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Generating AI Descriptions of Automated Pull Requests | daily.dev
og:description: A walkthrough of how the slack-ruby-client open source gem was updated to generate meaningful AI-written descriptions for its automated API-update pull...
og:url: https://daily.dev/posts/generating-ai-descriptions-of-automated-pull-requests-u5gmzc3y8
og:image: https://api.daily.dev/og/posts/u5gmZc3y8.png
og:image:alt: Generating AI Descriptions of Automated Pull Requests
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Generating AI Descriptions of Automated Pull Requests

**[RUBYLAND](https://daily.dev/sources/rubyla)** · 6 min read · 0 upvotes · 0 comments

## Summary

A walkthrough of how the slack-ruby-client open source gem was updated to generate meaningful AI-written descriptions for its automated API-update pull requests. The workflow pipes a git diff through GitHub Copilot CLI via the `actions/ai-inference@v3` action and a `.prompt.yml` file, producing structured JSON changelog entries instead of a generic commit message. Key practical details covered: why GitHub Models was retired and can no longer be used, how authentication differs between paid Copilot Business/Enterprise orgs and free open-source maintainer accounts (personal PAT required for the latter), YAML indentation pitfalls when injecting multi-line diffs into prompt templates, defensive JSON parsing with a fallback to the original generic message, and a testing strategy for workflows guarded against fork execution.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://code.dblock.org/2026/08/11/generating-ai-descriptions-of-automated-pull-requests.html>

## Questions this post answers

### Why did my GitHub Actions workflow using actions/ai-inference stop working with GitHub Models?

GitHub Models was retired on July 30, 2026, and actions/ai-inference no longer talks to it at any version, including the v1 tag, which stays pinned to the old GitHub-Models-only code and will not fix itself with a version bump. The current major version, v3, speaks exclusively to GitHub Copilot CLI instead, requiring a different setup entirely.

_daily.dev helps teams track CI dependency deprecations like this before a scheduled workflow silently breaks._

### How do I authenticate GitHub Copilot CLI in a GitHub Actions workflow without a paid Copilot plan?

Free organizations lack the option to bill Copilot CLI requests to the org, since free Copilot access for open source maintainers is granted to individual accounts, not organizations. The workaround is creating a personal fine-grained PAT with the Copilot Requests account permission, storing it as a COPILOT_PAT secret, and passing it via the COPILOT_GITHUB_TOKEN environment variable.

_Developers wiring AI into CI pipelines can compare authentication approaches like these on daily.dev._

### Why does my multi-line diff break YAML parsing in an actions/ai-inference prompt file?

actions/ai-inference substitutes template variables as raw text into the prompt YAML file before parsing it, so a multi-line diff starting at column 0 breaks the indentation of the enclosing content block scalar. The fix is pre-indenting the diff text with sed to match the block's indentation before it gets substituted in, keeping the YAML valid regardless of diff content.

_daily.dev surfaces practical GitHub Actions debugging fixes like this for engineers automating PR workflows._

## Similar posts on daily.dev

- [A GitHub agentic workflow](https://daily.dev/posts/a-github-agentic-workflow-xqc7skb2g) · A Java geek · 53 upvotes · 2 comments
- [Running GitHub Copilot SDK Inside GitHub Actions](https://daily.dev/posts/running-github-copilot-sdk-inside-github-actions-6ukefaj7u) · Thomas Thornton · 1 upvotes · 0 comments
- [AI-powered documentation updates: From code diff to docs PR in one comment](https://daily.dev/posts/ai-powered-documentation-updates-from-code-diff-to-docs-pr-in-one-comment-hogjqifcm) · Red Hat Developer · 0 upvotes · 0 comments

---

Tags: [#github](https://daily.dev/tags/github), [#cicd](https://daily.dev/tags/cicd), [#ruby](https://daily.dev/tags/ruby), [#github-actions](https://daily.dev/tags/github-actions), [#ai-inference](https://daily.dev/tags/ai-inference)

[View this post on daily.dev](https://daily.dev/posts/generating-ai-descriptions-of-automated-pull-requests-u5gmzc3y8)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Generating AI Descriptions of Automated Pull Requests","url":"https://daily.dev/posts/generating-ai-descriptions-of-automated-pull-requests-u5gmzc3y8","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/generating-ai-descriptions-of-automated-pull-requests-u5gmzc3y8"},"datePublished":"2026-08-12T02:54:56.827Z","dateModified":"2026-09-14T08:56:37.754Z","description":"A walkthrough of how the slack-ruby-client open source gem was updated to generate meaningful AI-written descriptions for its automated API-update pull...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/056b914182de08e02635a7aeb12e741c?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/056b914182de08e02635a7aeb12e741c?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"RUBYLAND","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"RUBYLAND","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/rubyla","url":"https://daily.dev/sources/rubyla"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/generating-ai-descriptions-of-automated-pull-requests-u5gmzc3y8","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"github,cicd,ruby,github-actions,ai-inference","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"RUBYLAND","item":"https://daily.dev/sources/rubyla"},{"@type":"ListItem","position":3,"name":"Generating AI Descriptions of Automated Pull Requests"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/generating-ai-descriptions-of-automated-pull-requests-u5gmzc3y8#faq","mainEntity":[{"@type":"Question","name":"Why did my GitHub Actions workflow using actions/ai-inference stop working with GitHub Models?","acceptedAnswer":{"@type":"Answer","text":"GitHub Models was retired on July 30, 2026, and actions/ai-inference no longer talks to it at any version, including the v1 tag, which stays pinned to the old GitHub-Models-only code and will not fix itself with a version bump. The current major version, v3, speaks exclusively to GitHub Copilot CLI instead, requiring a different setup entirely. daily.dev helps teams track CI dependency deprecations like this before a scheduled workflow silently breaks."}},{"@type":"Question","name":"How do I authenticate GitHub Copilot CLI in a GitHub Actions workflow without a paid Copilot plan?","acceptedAnswer":{"@type":"Answer","text":"Free organizations lack the option to bill Copilot CLI requests to the org, since free Copilot access for open source maintainers is granted to individual accounts, not organizations. The workaround is creating a personal fine-grained PAT with the Copilot Requests account permission, storing it as a COPILOT_PAT secret, and passing it via the COPILOT_GITHUB_TOKEN environment variable. Developers wiring AI into CI pipelines can compare authentication approaches like these on daily.dev."}},{"@type":"Question","name":"Why does my multi-line diff break YAML parsing in an actions/ai-inference prompt file?","acceptedAnswer":{"@type":"Answer","text":"actions/ai-inference substitutes template variables as raw text into the prompt YAML file before parsing it, so a multi-line diff starting at column 0 breaks the indentation of the enclosing content block scalar. The fix is pre-indenting the diff text with sed to match the block's indentation before it gets substituted in, keeping the YAML valid regardless of diff content. daily.dev surfaces practical GitHub Actions debugging fixes like this for engineers automating PR workflows."}}]}
```

