Update format
This commit is contained in:
parent
4a87df9e72
commit
4ae8eb90ce
1 changed files with 36 additions and 6 deletions
40
.github/workflows/approve_dco.yaml
vendored
40
.github/workflows/approve_dco.yaml
vendored
|
|
@ -11,13 +11,43 @@ jobs:
|
||||||
- name: Validate Developer Certificate of Origin statement
|
- name: Validate Developer Certificate of Origin statement
|
||||||
uses: actions/github-script@v6
|
uses: actions/github-script@v6
|
||||||
with:
|
with:
|
||||||
|
# If using the built-in GITHUB_TOKEN, ensure it has 'read:org' permission.
|
||||||
|
# In GitHub Enterprise or private orgs, you might need a PAT (personal access token) with read:org scope.
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
script: |
|
script: |
|
||||||
|
const orgName = 'YOUR_ORGANIZATION_NAME'; // Replace with your org
|
||||||
|
const prUser = context.payload.pull_request.user.login;
|
||||||
const prBody = context.payload.pull_request.body || '';
|
const prBody = context.payload.pull_request.body || '';
|
||||||
// This is the exact text required in the PR body:
|
|
||||||
|
// Exact text you require in the PR body
|
||||||
const requiredStatement = "I affirm that all code in every commit of this pull request conforms to the terms of the Topoteretes Developer Certificate of Origin";
|
const requiredStatement = "I affirm that all code in every commit of this pull request conforms to the terms of the Topoteretes Developer Certificate of Origin";
|
||||||
|
|
||||||
if (!prBody.includes(requiredStatement)) {
|
// 1. Check if user is in the org
|
||||||
core.setFailed(
|
let isOrgMember = false;
|
||||||
`DCO check failed. The PR body must include the following statement:\n\n${requiredStatement}`
|
try {
|
||||||
);
|
// Attempt to get membership info
|
||||||
|
const membership = await github.rest.orgs.getMembershipForUser({
|
||||||
|
org: orgName,
|
||||||
|
username: prUser,
|
||||||
|
});
|
||||||
|
// If we get here without an error, user is in the org
|
||||||
|
isOrgMember = true;
|
||||||
|
console.log(`${prUser} is a member of ${orgName}. Skipping DCO check.`);
|
||||||
|
} catch (error) {
|
||||||
|
// If we get a 404, user is NOT an org member
|
||||||
|
if (error.status === 404) {
|
||||||
|
console.log(`${prUser} is NOT a member of ${orgName}. Enforcing DCO check.`);
|
||||||
|
} else {
|
||||||
|
// Some other error—fail the workflow or handle accordingly
|
||||||
|
core.setFailed(`Error checking organization membership: ${error.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. If user is not in the org, enforce the DCO statement
|
||||||
|
if (!isOrgMember) {
|
||||||
|
if (!prBody.includes(requiredStatement)) {
|
||||||
|
core.setFailed(
|
||||||
|
`DCO check failed. The PR body must include the following statement:\n\n${requiredStatement}`
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue