Skip to content

Commit 9c03db6

Browse files
committed
approver to add the cla-signed label rather than waiting for comment
1 parent c508018 commit 9c03db6

File tree

1 file changed

+52
-106
lines changed

1 file changed

+52
-106
lines changed

.github/workflows/trademark-cla.yml

Lines changed: 52 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ name: Integrations - trademark license
33
on:
44
pull_request:
55
types: [opened, edited, synchronize]
6-
issue_comment:
7-
types: [created, edited]
6+
pull_request_target:
7+
types: [labeled]
88

99
# Set repository-level permissions
1010
permissions: write-all
@@ -135,27 +135,28 @@ jobs:
135135
run: |
136136
echo "=== CLA REQUIREMENT DEBUG ==="
137137
echo "Event name: ${{ github.event_name }}"
138+
echo "Event action: ${{ github.event.action }}"
138139
139140
if [ "${{ github.event_name }}" = "pull_request" ]; then
140141
echo "PR event - docs changed: ${{ steps.docs-changed.outputs.docs_changed }}"
141142
echo "PR event - requires CLA: ${{ steps.docs-changed.outputs.requires_cla }}"
142143
fi
143144
144-
if [ "${{ github.event_name }}" = "issue_comment" ]; then
145-
echo "Comment event - has docs changes: ${{ steps.pr-info.outputs.has_docs_changes }}"
146-
echo "Comment event - PR number: ${{ steps.pr-info.outputs.pr_number }}"
147-
echo "Comment event - PR author: ${{ steps.pr-info.outputs.pr_author }}"
148-
echo "Comment event - is ClickHouse member: ${{ steps.pr-info.outputs.isClickHouseMember }}"
145+
if [ "${{ github.event_name }}" = "pull_request_target" ]; then
146+
echo "Label event - label added: ${{ github.event.label.name }}"
147+
echo "Label event - added by: ${{ github.actor }}"
148+
echo "Label event - cla-signed added: ${{ steps.cla-signed-check.outputs.cla_signed_added }}"
149+
echo "Label event - is authorized: ${{ steps.cla-signed-check.outputs.is_authorized }}"
149150
fi
150151
151-
CLA_CONDITION="${{ (github.event_name == 'pull_request' && steps.docs-changed.outputs.requires_cla == 'true') || (github.event_name == 'issue_comment' && steps.pr-info.outputs.has_docs_changes == 'true') }}"
152-
echo "CLA workflow will run: $CLA_CONDITION"
152+
POST_CLA_CONDITION="${{ github.event_name == 'pull_request' && steps.docs-changed.outputs.requires_cla == 'true' }}"
153+
PROCESS_CLA_CONDITION="${{ github.event_name == 'pull_request_target' && steps.cla-signed-check.outputs.cla_signed_added == 'true' && steps.cla-signed-check.outputs.is_authorized == 'true' }}"
154+
echo "Post CLA comment workflow will run: $POST_CLA_CONDITION"
155+
echo "Process CLA approval workflow will run: $PROCESS_CLA_CONDITION"
153156
echo "================================="
154157
155158
- name: Post CLA comment and block merge
156-
if: |
157-
((github.event_name == 'pull_request' && steps.docs-changed.outputs.requires_cla == 'true') ||
158-
(github.event_name == 'issue_comment' && steps.pr-info.outputs.has_docs_changes == 'true'))
159+
if: github.event_name == 'pull_request' && steps.docs-changed.outputs.requires_cla == 'true'
159160
uses: actions/github-script@v7
160161
with:
161162
github-token: ${{ steps.generate-token.outputs.token || secrets.GITHUB_TOKEN }}
@@ -169,10 +170,6 @@ jobs:
169170
prNumber = context.issue.number;
170171
prAuthor = '${{ github.event.pull_request.user.login }}';
171172
console.log('PR event - Number:', prNumber, 'Author:', prAuthor);
172-
} else {
173-
prNumber = ${{ steps.pr-info.outputs.pr_number || 'null' }};
174-
prAuthor = '${{ steps.pr-info.outputs.pr_author }}';
175-
console.log('Comment event - Number:', prNumber, 'Author:', prAuthor);
176173
}
177174
178175
if (!prNumber || !prAuthor) {
@@ -280,7 +277,7 @@ jobs:
280277
issue_number: prNumber,
281278
owner: context.repo.owner,
282279
repo: context.repo.repo,
283-
labels: ['cla-required', 'docs-changes']
280+
labels: ['cla-required', 'integrations-with-image-change']
284281
});
285282
console.log('Labels added successfully');
286283
} else {
@@ -292,121 +289,70 @@ jobs:
292289
throw error;
293290
}
294291
295-
- name: Check CLA agreement and manage merge blocking
296-
if: |
297-
((github.event_name == 'pull_request' && steps.docs-changed.outputs.requires_cla == 'true') ||
298-
(github.event_name == 'issue_comment' && steps.pr-info.outputs.has_docs_changes == 'true'))
292+
- name: Process CLA approval and unblock merge
293+
if: github.event_name == 'pull_request_target' && steps.cla-signed-check.outputs.cla_signed_added == 'true' && steps.cla-signed-check.outputs.is_authorized == 'true'
299294
uses: actions/github-script@v7
300295
with:
301296
github-token: ${{ steps.generate-token.outputs.token || secrets.GITHUB_TOKEN }}
302297
script: |
303-
console.log('=== CLA AGREEMENT CHECK DEBUG ===');
298+
console.log('=== CLA APPROVAL PROCESSING DEBUG ===');
304299
console.log('Event name:', context.eventName);
300+
console.log('Label added:', '${{ github.event.label.name }}');
305301
306-
let prNumber, prHeadSha, prAuthor;
302+
const prNumber = context.issue.number;
303+
const prAuthor = '${{ github.event.pull_request.user.login }}';
307304
308-
if (context.eventName === 'pull_request') {
309-
prNumber = context.issue.number;
310-
prHeadSha = '${{ github.event.pull_request.head.sha }}';
311-
prAuthor = '${{ github.event.pull_request.user.login }}';
312-
console.log('PR event - Number:', prNumber, 'SHA:', prHeadSha, 'Author:', prAuthor);
313-
} else {
314-
prNumber = ${{ steps.pr-info.outputs.pr_number || 'null' }};
315-
prHeadSha = '${{ steps.pr-info.outputs.pr_head_sha }}';
316-
prAuthor = '${{ steps.pr-info.outputs.pr_author }}';
317-
console.log('Comment event - Number:', prNumber, 'SHA:', prHeadSha, 'Author:', prAuthor);
318-
}
319-
320-
if (!prNumber) {
321-
console.log('No PR number found, skipping...');
322-
return;
323-
}
324-
325-
console.log(`Checking CLA agreement for PR #${prNumber}, author: ${prAuthor}`);
305+
console.log(`Processing CLA approval for PR #${prNumber}, author: ${prAuthor}`);
326306
327307
try {
328-
// Get all comments to check for CLA agreement
329-
console.log('Fetching all comments for CLA check...');
308+
// Remove the blocking label
309+
console.log('Removing cla-required label...');
310+
try {
311+
await github.rest.issues.removeLabel({
312+
issue_number: prNumber,
313+
owner: context.repo.owner,
314+
repo: context.repo.repo,
315+
name: 'cla-required'
316+
});
317+
console.log('Removed cla-required label successfully');
318+
} catch (e) {
319+
console.log('Label cla-required not found or already removed:', e.message);
320+
}
321+
322+
// Check if confirmation comment already exists
330323
const comments = await github.rest.issues.listComments({
331324
issue_number: prNumber,
332325
owner: context.repo.owner,
333326
repo: context.repo.repo,
334327
});
335-
console.log(`Found ${comments.data.length} comments to check`);
336-
337-
const claAgreed = comments.data.some(comment => {
338-
const isAuthor = comment.user.login === prAuthor;
339-
const hasAgreement = comment.body.includes('I have read and agree to the Contributor License Agreement');
340-
const hasSignature = comment.body.includes(`CLA-SIGNATURE: ${prAuthor}`);
341-
342-
if (isAuthor && (hasAgreement || hasSignature)) {
343-
console.log(`Found potential CLA comment from ${comment.user.login}:`);
344-
console.log('- Has agreement text:', hasAgreement);
345-
console.log('- Has signature:', hasSignature);
346-
console.log('- Comment body preview:', comment.body.substring(0, 100) + '...');
347-
}
348328
349-
return isAuthor && hasAgreement && hasSignature;
350-
});
351-
352-
console.log('CLA agreement status:', claAgreed);
353-
354-
if (claAgreed) {
355-
console.log('CLA agreement found, removing blocking labels...');
356-
357-
// CLA agreed - remove blocking labels and add approval
358-
try {
359-
await github.rest.issues.removeLabel({
360-
issue_number: prNumber,
361-
owner: context.repo.owner,
362-
repo: context.repo.repo,
363-
name: 'cla-required'
364-
});
365-
console.log('Removed cla-required label');
366-
} catch (e) {
367-
console.log('Label cla-required not found or already removed:', e.message);
368-
}
329+
const confirmationExists = comments.data.some(comment =>
330+
(comment.user.login === 'github-actions[bot]' || comment.user.type === 'Bot') &&
331+
comment.body.includes('CLA Agreement Confirmed')
332+
);
333+
console.log('Confirmation comment exists:', confirmationExists);
369334
370-
await github.rest.issues.addLabels({
335+
if (!confirmationExists) {
336+
await github.rest.issues.createComment({
371337
issue_number: prNumber,
372338
owner: context.repo.owner,
373339
repo: context.repo.repo,
374-
labels: ['cla-signed']
375-
});
376-
console.log('Added cla-signed label');
377-
378-
// Post confirmation
379-
const confirmationExists = comments.data.some(comment =>
380-
(comment.user.login === 'github-actions[bot]' || comment.user.type === 'Bot') &&
381-
comment.body.includes('CLA Agreement Confirmed')
382-
);
383-
console.log('Confirmation comment exists:', confirmationExists);
340+
body: `## CLA Agreement Confirmed
384341
385-
if (!confirmationExists) {
386-
await github.rest.issues.createComment({
387-
issue_number: prNumber,
388-
owner: context.repo.owner,
389-
repo: context.repo.repo,
390-
body: `## CLA Agreement Confirmed
391-
392-
Thank you @${prAuthor}! Your response has been recorded.
342+
The trademark license agreement has been approved for @${prAuthor}.
393343
394344
**Status:** Approved
395345
**Date:** ${new Date().toISOString()}
346+
**Approved by:** @${{ github.actor }}
396347
397348
This PR is now unblocked and can proceed with normal review!`
398-
});
399-
console.log('Posted confirmation comment');
400-
}
401-
402-
console.log('CLA processing completed successfully');
403-
} else {
404-
console.log('CLA not agreed, keeping PR blocked');
405-
// CLA not agreed - keep it blocked
406-
core.setFailed('Documentation CLA agreement required before merge');
349+
});
350+
console.log('Posted confirmation comment');
407351
}
408-
console.log('=== END CLA AGREEMENT CHECK DEBUG ===');
352+
353+
console.log('CLA approval processing completed successfully');
354+
console.log('=== END CLA APPROVAL PROCESSING DEBUG ===');
409355
} catch (error) {
410-
console.error('Error in CLA agreement check:', error);
356+
console.error('Error in CLA approval processing:', error);
411357
throw error;
412358
}

0 commit comments

Comments
 (0)