Skip to content

feat: add freelancer dashboard UI with earnings and escrow summary #7

feat: add freelancer dashboard UI with earnings and escrow summary

feat: add freelancer dashboard UI with earnings and escrow summary #7

name: Issue Linking Validation
on:
pull_request:
types: [opened, edited, synchronize]
permissions:
pull-requests: write
contents: read
jobs:
validate-issue-linking:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Validate Issue Linking
uses: actions/github-script@v7
with:
script: |
const pr = context.payload.pull_request;
const body = pr.body || '';
// Check for issue references in multiple formats
// Matches: #123, fixes #123, closes #123, resolves #123
const issuePattern = /(fixes|closes|resolves|fix|close|resolve)?\s*#\d+/gi;
const matches = body.match(issuePattern);
if (!matches || matches.length === 0) {
core.setFailed(' PR must reference at least one issue');
return;
}
// Extract issue numbers
const issueNumbers = [...new Set(
body.match(/#\d+/g).map(m => m.substring(1))
)];
// Verify issues exist
for (const issueNum of issueNumbers) {
try {
await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNum
});
} catch (error) {
core.setFailed(` Issue #${issueNum} does not exist or is not accessible`);
return;
}
}
core.info(` PR correctly links to issue(s): ${issueNumbers.map(n => '#' + n).join(', ')}`);
// Add linked issues as comment
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: ` Issue linking validated! This PR references: ${issueNumbers.map(n => '#' + n).join(', ')}`
});
- name: Comment on linking validation failure
if: failure()
uses: actions/github-script@v7
with:
script: |
const body = '### Issue Linking Validation Failed \n\n' +
'This PR must reference at least one issue from the repository.\n\n' +
'**How to Link Issues:**\n\n' +
'Add one of these keywords followed by the issue number in your PR description:\n' +
'- `fixes #123`\n' +
'- `closes #123`\n' +
'- `resolves #123`\n' +
'- `fix #123`\n' +
'- `close #123`\n' +
'- `resolve #123`\n\n' +
'**Examples:**\n' +
'```\n' +
'## What\n' +
'This PR adds user authentication feature.\n\n' +
'## Why\n' +
'Resolves #42 - Users need a secure login system\n\n' +
'## How\n' +
'Implemented JWT-based authentication using...\n' +
'```\n\n' +
'**Multiple Issues:**\n' +
'You can reference multiple issues:\n' +
'```\n' +
'Fixes #42, #43 and resolves #45\n' +
'```\n\n' +
'Please update your PR description to include an issue reference.';
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: body
});