feat: Add propagating of traceparent #960
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This GitHub Action workflow checks if a new or updated pull request | |
# references a GitHub issue in its title or body. If no reference is found, | |
# it automatically creates a new issue. This helps ensure all work is | |
# tracked, especially when syncing with tools like Linear. | |
name: Create issue for unreferenced PR | |
# This action triggers on pull request events | |
on: | |
pull_request: | |
types: [opened, edited, reopened, synchronize, ready_for_review] | |
# Cancel in progress workflows on pull_requests. | |
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
check_for_issue_reference: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check PR Body and Title for Issue Reference | |
uses: actions/github-script@v8 | |
with: | |
script: | | |
const pr = context.payload.pull_request; | |
if (!pr) { | |
core.setFailed('Could not get PR from context.'); | |
return; | |
} | |
// Don't create an issue for draft PRs | |
if (pr.draft) { | |
console.log(`PR #${pr.number} is a draft, skipping issue creation.`); | |
return; | |
} | |
// Check if the PR is already approved | |
const reviewsResponse = await github.rest.pulls.listReviews({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
pull_number: pr.number, | |
}); | |
if (reviewsResponse.data.some(review => review.state === 'APPROVED')) { | |
console.log(`PR #${pr.number} is already approved, skipping issue creation.`); | |
return; | |
} | |
const prBody = pr.body || ''; | |
const prTitle = pr.title || ''; | |
const prAuthor = pr.user.login; | |
const prUrl = pr.html_url; | |
const prNumber = pr.number; | |
// Regex for GitHub issue references (e.g., #123, fixes #456) | |
const issueRegexGitHub = /(?:(?:close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved)\s*)?#\d+/i; | |
// Regex for Linear issue references (e.g., ENG-123, resolves ENG-456) | |
const issueRegexLinear = /(?:(?:close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved)\s*)?[A-Z]+-\d+/i; | |
const contentToCheck = `${prTitle} ${prBody}`; | |
const hasIssueReference = issueRegexGitHub.test(contentToCheck) || issueRegexLinear.test(contentToCheck); | |
if (hasIssueReference) { | |
console.log(`PR #${prNumber} contains a valid issue reference.`); | |
return; | |
} | |
core.warning(`PR #${prNumber} does not have an issue reference. Creating a new issue so it can be tracked in Linear.`); | |
// Construct the title and body for the new issue | |
const issueTitle = `${prTitle}`; | |
const issueBody = `> [!NOTE] | |
> The pull request "[${prTitle}](${prUrl})" was created by @${prAuthor} but did not reference an issue. Therefore this issue was created for better visibility in external tools like Linear. | |
${prBody} | |
`; | |
// Create the issue using the GitHub API | |
const newIssue = await github.rest.issues.create({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
title: issueTitle, | |
body: issueBody, | |
assignees: [prAuthor] | |
}); | |
const issueID = newIssue.data.number; | |
console.log(`Created issue #${issueID}.`); | |
// Update the PR body to reference the new issue | |
const updatedPrBody = `${prBody}\n\nCloses #${issueID}`; | |
await github.rest.pulls.update({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
pull_number: prNumber, | |
body: updatedPrBody | |
}); | |
console.log(`Updated PR #${prNumber} to reference newly created issue #${issueID}.`); |