@@ -3,8 +3,8 @@ name: Integrations - trademark license
3
3
on :
4
4
pull_request :
5
5
types : [opened, edited, synchronize]
6
- issue_comment :
7
- types : [created, edited ]
6
+ pull_request_target :
7
+ types : [labeled ]
8
8
9
9
# Set repository-level permissions
10
10
permissions : write-all
@@ -135,27 +135,28 @@ jobs:
135
135
run : |
136
136
echo "=== CLA REQUIREMENT DEBUG ==="
137
137
echo "Event name: ${{ github.event_name }}"
138
+ echo "Event action: ${{ github.event.action }}"
138
139
139
140
if [ "${{ github.event_name }}" = "pull_request" ]; then
140
141
echo "PR event - docs changed: ${{ steps.docs-changed.outputs.docs_changed }}"
141
142
echo "PR event - requires CLA: ${{ steps.docs-changed.outputs.requires_cla }}"
142
143
fi
143
144
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 }}"
149
150
fi
150
151
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"
153
156
echo "================================="
154
157
155
158
- 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'
159
160
uses : actions/github-script@v7
160
161
with :
161
162
github-token : ${{ steps.generate-token.outputs.token || secrets.GITHUB_TOKEN }}
@@ -169,10 +170,6 @@ jobs:
169
170
prNumber = context.issue.number;
170
171
prAuthor = '${{ github.event.pull_request.user.login }}';
171
172
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);
176
173
}
177
174
178
175
if (!prNumber || !prAuthor) {
@@ -280,7 +277,7 @@ jobs:
280
277
issue_number: prNumber,
281
278
owner: context.repo.owner,
282
279
repo: context.repo.repo,
283
- labels: ['cla-required', 'docs-changes ']
280
+ labels: ['cla-required', 'integrations-with-image-change ']
284
281
});
285
282
console.log('Labels added successfully');
286
283
} else {
@@ -292,121 +289,70 @@ jobs:
292
289
throw error;
293
290
}
294
291
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'
299
294
uses : actions/github-script@v7
300
295
with :
301
296
github-token : ${{ steps.generate-token.outputs.token || secrets.GITHUB_TOKEN }}
302
297
script : |
303
- console.log('=== CLA AGREEMENT CHECK DEBUG ===');
298
+ console.log('=== CLA APPROVAL PROCESSING DEBUG ===');
304
299
console.log('Event name:', context.eventName);
300
+ console.log('Label added:', '${{ github.event.label.name }}');
305
301
306
- let prNumber, prHeadSha, prAuthor;
302
+ const prNumber = context.issue.number;
303
+ const prAuthor = '${{ github.event.pull_request.user.login }}';
307
304
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}`);
326
306
327
307
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
330
323
const comments = await github.rest.issues.listComments({
331
324
issue_number: prNumber,
332
325
owner: context.repo.owner,
333
326
repo: context.repo.repo,
334
327
});
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
- }
348
328
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);
369
334
370
- await github.rest.issues.addLabels({
335
+ if (!confirmationExists) {
336
+ await github.rest.issues.createComment({
371
337
issue_number: prNumber,
372
338
owner: context.repo.owner,
373
339
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
384
341
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}.
393
343
394
344
**Status:** Approved
395
345
**Date:** ${new Date().toISOString()}
346
+ **Approved by:** @${{ github.actor }}
396
347
397
348
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');
407
351
}
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 ===');
409
355
} catch (error) {
410
- console.error('Error in CLA agreement check :', error);
356
+ console.error('Error in CLA approval processing :', error);
411
357
throw error;
412
358
}
0 commit comments