Skip to content

Commit

Permalink
Add Google sheets API and check for usernames
Browse files Browse the repository at this point in the history
  • Loading branch information
siddheshranade committed Jan 23, 2024
1 parent 323899b commit 581540f
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 2 deletions.
114 changes: 114 additions & 0 deletions .github/actions/check-for-CLA/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import { google } from "googleapis";

// TODO: id: process.env.PR_NUMBER
const PULL_REQUST_INFO = {
id: 11781,
owner: process.env.GITHUB_REPOSITORY.split('/')[0],
repoName: process.env.GITHUB_REPOSITORY.split('/')[1],
username: process.env.GITHUB_ACTOR,
gitHubToken: process.env.GITHUB_TOKEN
};

/* TODO: Store in repo secrets */
/* TODO: Replace with actual Cesium spreadsheet Ids - these are test sheets that I'll delete, so okay to git push */
const GOOGLE_SHEETS_INFO = {
individualCLASheetId: '1oRRS8OG4MfXaQ8uA4uWQWukaOqxEE3N-JuqzrqGGeaE',
corporateCLASheetId: '1dnoqifzpXB81G1V4bsVJYM3D19gXuwyVZZ-IgNgCkC8'
};

const main = async () => {
console.log('main()');
console.log(PULL_REQUST_INFO.repoName, PULL_REQUST_INFO.owner, PULL_REQUST_INFO.username);

let hasSignedCLA;
let errorFoundOnCLACheck;

try {
hasSignedCLA = await checkIfUserHasSignedAnyCLA();
} catch (error) {
console.log('ERROR2 ', error);
errorFoundOnCLACheck = error.toString();
}

console.log('pre-comment...');
// const response = await postCommentOnPullRequest(hasSignedCLA, errorFoundOnCLACheck);
console.log('post-comment, response: ', response);
};

const checkIfUserHasSignedAnyCLA = async () => {
const googleSheetsApi = await getGoogleSheetsApiClient();

let foundIndividualCLA = await checkIfIndividualCLAFound(googleSheetsApi);
console.log('CLA #1 ', foundIndividualCLA);
if (foundIndividualCLA) {
return true;
}

let foundCorporateCLA = await checkIfCorporateCLAFound(googleSheetsApi);
console.log('CLA #2 ', foundCorporateCLA);
return foundCorporateCLA;
};

const getGoogleSheetsApiClient = async () => {
const auth = new google.auth.GoogleAuth({
// TODO: get from GitHub secrets
// (JSON contains keys for my personal Service account, so okay to git push)
keyFile: 'TempGoogleConfig.json',
scopes: ['https://www.googleapis.com/auth/spreadsheets']
});
const googleAuthClient = await auth.getClient();

return google.sheets({version: 'v4', auth: googleAuthClient });
};

const checkIfIndividualCLAFound = async (googleSheetsApi) => {
const response = await googleSheetsApi.spreadsheets.values.get({
spreadsheetId: GOOGLE_SHEETS_INFO.individualCLASheetId,
range: 'D2:D'
});

const rows = response.data.values;
for (let i = 0; i < rows.length; i++) {
if(rows[i].length === 0) {
continue;
}

const rowUsername = rows[i][0].toLowerCase();
if (PULL_REQUST_INFO.username.toLowerCase() === rowUsername) {
return true;
}
}

return false;
};

const checkIfCorporateCLAFound = async (googleSheetsApi) => {
const response = await googleSheetsApi.spreadsheets.values.get({
spreadsheetId: GOOGLE_SHEETS_INFO.corporateCLASheetId,
range: 'H2:H'
});

const rows = response.data.values;
for (let i = 0; i < rows.length; i++) {
if(rows[i].length === 0) {
continue;
}

// We're more lenient with the ScheduleA username check since it's an unformatted text field.
let rowScheduleA = rows[i][0].toLowerCase();
rowScheduleA = rowScheduleA.replace(/\n/g, ' ');
const words = rowScheduleA.split(' ');

for (let j = 0; j < words.length; j++) {
// Checking for substrings because many input their
// GitHub username as "github.com/username".
if (words[j].includes(PULL_REQUST_INFO.username.toLowerCase())) {
return true;
}
}
}

return false;
};

main();
1 change: 0 additions & 1 deletion .github/actions/verify-package/check-for-CLA/index.js

This file was deleted.

7 changes: 6 additions & 1 deletion .github/workflows/cla.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,10 @@ jobs:
uses: actions/setup-node@v3
with:
node-version: '20'
- name: install npm packages
run: npm install googleapis
- name: run script
run: node .github/actions/check-for-CLA/index.js
run: node .github/actions/check-for-CLA/index.js
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.number }}
13 changes: 13 additions & 0 deletions TempGoogleConfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"type": "service_account",
"project_id": "cla-checking-test",
"private_key_id": "2ca902fd1e98c42f514c395d1926dc64464e8268",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVlB8SxNcogpRt\nDnLewY/tcwxvN+8PSTjBjVF7BwenYcgZ6i+abPVVfoMJ3G8w3VV2WNszNTEaK2ct\nqW/unGvTphF7+0kCBVZ5wMjAAlpN8VBA3VwzWd0T3kzlfmcGEWBMvcFRAVmVat86\nbO557GLtMzkXxMaeAXFiDWJ+HNFY5SttefSOxeh96U7XjIuGNZERkNmxinhXmU/O\n2qKOiT9yp9l8E6MS8aE8hUUY82z5WkcS1imjvOzxoDMmF4rIDeAiqaaygdmx8TUp\niQJEOQhfS8a2iJuCnI/zP8LTonnKYaIgh7EXYdtzxETQbzJEfEwo4pQ3ZqvLMDpF\nxOS9NfIZAgMBAAECggEALE1kka3bjJdjhuilmr/PZVuFQ4e4crUHTRzNf0XSyF1f\n1sJNXAzIahLLRy8esGXk/Z7KX0mkFQ/WP/JC2d2//x/WRh+2gfEOAkTjT3LdfQf2\nk/Hm128HTQECdeM9pxRRI7IDyNQNG1GXGuUwJYHLdnT23Y+PfISDmql4mfzLzxKf\nZNePGSl2wCsz9HtEbZDubQuLmTz2xikW6i63SY4yQUFlWhSiM1iQJgdMfPEXb0ZU\nJGj//sCVxAFfvBPlV/RXcRHcBjlQUP3nz4JelgqO33M8HNlXckD6kTecpPTUj3nL\nofSdYBkhEcXXQT8KkF47b9q6ORW8z0zy3pwcZ/3epQKBgQDuFwf1MtuhJayQ6Ynd\n2nG7vz23u0ViyJalYUJV9G+UXeFTS9TF/0ZZkViC4zucBtJbWYoYo0N0EFhUhwCw\n865yzgJcFuyUqQXIOb3wQFhbGgMb5FBNB8sU0sO4Lb5sN2NSA+V0jqJwWMYY4Z2U\nd/dgj+wTl1+g0OUMJw0lPoZmZQKBgQDlpRFSjDZIw5KsIWgmHZg11VrTy+qqIc3w\n24MJ/pvkQSTz4eDq2jphbHeK+i0So4v0/muPJQGOwEai5yoR5gFFhcd3zT/eO5FE\nzvKekgPYpOTeXIO7BJmtXZlI6Ik0c2RlexoaImrVZZ1E2ZqxdyQdsT42F/YYtbkt\nKJJbmLl3pQKBgQCzEOtRRQDeQEF7c8nW65YiiIDYkKZs10RF+dI0Z3UL91eimCPd\nDlNQxfn15wVMIe1P+xXb1d7Dig+E80xXyc5oVfx8WllwrXbF0nfCHALX8cZo0dx7\nMuNQM/wzp2PSbA3s/zUx5pzRNlM3H2iu41NQcq4xReYMQ1AhRbWjT1Ux6QKBgFao\nmsfWx2lf/ApetOmlQ1oVQCgqjExVY1yfyWxNG1DgUGyD8ZdOcLdw8g+M5tNgyiDS\nnY4v/c17u2wf5Z1JeXNdz27jElXvjpszqRSzryXi28cZjFBXpRJp/r0nmxci8GDn\nOmtgT4ZlyRpBL4IGnqdhykMpeaHLeayT4d8U2/BNAoGBAIwAWTalDPr/7huJ0K/J\nc6VUUJTsE9T/w0mgVPa6lQD+y+ANg+lhhjeeqadwa3ZDVMDvPechAQH57PXbDbVG\nj4DhNNC7HSZE6p5Ehjz8E7LrtEwbH12eXJCBRHpPnMnyovuN3QkmY8r4PTJAoHgc\ndCtp8ZwuSkSrwYk7aL01OCF3\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "117725460460642833499",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/siddhesh%40cla-checking-test.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}

0 comments on commit 581540f

Please sign in to comment.