Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
e4563d3
fix(typecheck): address test typing issues
Harxhit Jun 3, 2026
6fa5dd0
fix: Fixed lint issues
Harxhit Jun 3, 2026
63f6406
fix: Fixed explicit return type lint issue
Harxhit Jun 3, 2026
28b11c8
fix(workflow) (#468)
Harxhit Jun 3, 2026
8b6d19f
Mobile module implementation (#472)
blankirigaya Jun 3, 2026
ab41438
refactor: remove entire web application directory and associated sour…
ShantKhatri Jun 3, 2026
bcdfc12
refactor: migrate web app from SvelteKit to React with new component …
ShantKhatri Jun 3, 2026
5ff2a40
chore: migrate from pnpm workspace to individual npm package manageme…
ShantKhatri Jun 4, 2026
b232ea0
docs: add SECURITY.md with vulnerability reporting policy (#303)
RehanAhmad25 Jun 5, 2026
c3d80ac
feat(backend): log method and url for each request (#480)
qorexdevs Jun 7, 2026
2734094
fix(analytics): use COUNT(DISTINCT viewer_id) for uniqueViewers inste…
Srejoye Jun 7, 2026
69af81e
test(connect): add regression testing for oauth callback flow (#411)
VIDYANKSHINI Jun 7, 2026
87d8508
fix(cards): prevent concurrent default card race condition (#344) (#385)
udaycodespace Jun 7, 2026
866c6d3
fix(ci): update merge comment and workflow configuration (#504)
Harxhit Jun 7, 2026
16f79cc
fix: resolve typecheck errors across the repository (#505)
Harxhit Jun 7, 2026
c66993e
feat(auth): add JWT token revocation with Redis blocklist (#476)
antharya05 Jun 9, 2026
102a3bb
feat(workflow): introduce slash-command based issue triage (#511)
Harxhit Jun 9, 2026
2b63c0f
feat(workflow): add automated pull request triage (#513)
Harxhit Jun 9, 2026
698d38e
fix(workflow): use pull_request_target for PR triage (#517)
Harxhit Jun 9, 2026
e0a705a
fix: improve feature card readability and contrast (#319) (#502)
Jai-Shankar1033 Jun 10, 2026
8a28ad5
refactor(auth): redesign authentication and identity models (#481)
Harxhit Jun 11, 2026
c157bea
style(backend): clean up lint violations and enforce explicit typings…
rajesh-puripanda Jun 11, 2026
212adf0
feat: implement GitHub platform auto-discovery from GitHub API (#506)
udaycodespace Jun 12, 2026
7265255
feat(shared): add isSupportedPlatform helper and unit tests (#555)
Satvik-art-creator Jun 13, 2026
4bf7161
Added TOC (#544)
Yogender-verma Jun 13, 2026
b8af8ef
feat(web): add smooth theme transition animation (#536)
Jai-Shankar1033 Jun 13, 2026
16c732b
fix: Added gssoc:approved label for opening new prs (#535)
Harxhit Jun 13, 2026
84f5922
fix: correct repository URL in LandingPage (#534)
tazmeen24 Jun 13, 2026
9d923be
refactor(auth): type jwt user payload and drop any casts (#541) (#560)
ramnnn2006 Jun 14, 2026
1992dc7
refactor(analytics): replace any casts with typed prehandler and pris…
ramnnn2006 Jun 15, 2026
0813efb
fix: improve type safety in follow.ts by removing `any` usages (#550)…
yachikadev Jun 15, 2026
95de43b
refactor(ci): remove web lint check and clean up workflow (#564)
Harxhit Jun 15, 2026
d0b1c4c
fix(seed): update prisma seed for latest schema (#580)
Harxhit Jun 15, 2026
5d220c5
Added Zod Validation for OAuth Authentication Initiation Endpoints (#…
sheeeuWu Jun 16, 2026
a4e5f66
fix(backend): remove any usages from profiles.ts to improve type safe…
Satvik-art-creator Jun 17, 2026
66f9f45
feat(auth): add Zod validation for OAuth callback endpoints (#593)
ramnnn2006 Jun 17, 2026
61362ab
fix: missing .js extension in import
ShantKhatri Jun 18, 2026
979543e
fix: add missing .js extensions to all ESM imports
ShantKhatri Jun 18, 2026
7759dca
fix: build shared package in Docker, add .js extensions
ShantKhatri Jun 18, 2026
4ea519b
fix: skip dotenv in production, secrets come from Kubernetes
ShantKhatri Jun 18, 2026
b266642
ci: configure UAT deployment pipeline
ShantKhatri Jun 18, 2026
5abc20c
fix: commented the test job in uat till tests are not fixed
ShantKhatri Jun 18, 2026
e0b442f
fix(public): fix self-view tracking logic in profile and card view ha…
hariom888 Jun 18, 2026
f829031
Auth flow from pr574 (#599)
blankirigaya Jun 21, 2026
2a52699
refactor(connect): remove any usage in connect.ts, type GitHub token …
hariom888 Jun 21, 2026
1a46b78
fix(backend): Typecheck
Harxhit Jun 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ Closes #

## Checklist

- [ ] My code follows the project's coding style (`pnpm -r run lint` passes).
- [ ] TypeScript compiles without errors (`pnpm -r run typecheck`).
- [ ] My code follows the project's coding style (`npm run lint` passes).
- [ ] TypeScript compiles without errors (`npm run typecheck --workspaces --if-present`).
- [ ] I have added or updated tests for the changes I made.
- [ ] All tests pass locally (`pnpm -r run test`).
- [ ] All tests pass locally (`npm run test --workspaces --if-present`).
- [ ] I have updated documentation where necessary.
- [ ] No new `console.log` or debug statements left in the code.
- [ ] Breaking changes are documented in this PR description.
Expand Down
79 changes: 33 additions & 46 deletions .github/scripts/ciScript.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
const isTestFile = (file) => /\.(test|spec)\.[jt]sx?$/.test(file);

const deriveTestFiles = (files) => {
return files.map((file) => {
if (isTestFile(file)) return file;

const withoutExt = file.replace(/\.[jt]sx?$/, '');
const parts = withoutExt.split('/');
const baseName = parts[parts.length - 1];
const dir = parts.slice(0, -1).join('/');

return `${dir}/__tests__/${baseName}.test.ts`;
});
};


module.exports = async ({ github, context, core }) => {
const owner = context.repo.owner;
const repo = context.repo.repo;
Expand All @@ -6,9 +22,9 @@ module.exports = async ({ github, context, core }) => {
const prState = pr.state;

const backendFiles = [];
const backendTests = [];
const mobileFiles = [];
const webFiles = [];
const dbFiles = [];

try {
if (prState === 'closed') {
Expand All @@ -34,60 +50,31 @@ module.exports = async ({ github, context, core }) => {

if (fileName.startsWith('apps/backend/')) {
backendFiles.push(fileName);

const relative = fileName.replace('apps/backend/src/', '');
const baseName = relative
.split('/')
.pop()
?.replace(/\.(ts|tsx|js|jsx)$/, '');

if (baseName) {
backendTests.push(`src/__tests__/${baseName}.test.ts`);
}

} else if (fileName.startsWith('apps/mobile/')) {
mobileFiles.push(fileName);
} else if (fileName.startsWith('apps/web/')) {
webFiles.push(fileName);
}else if(fileName.startsWith('apps/backend/prisma')){
dbFiles.push(fileName)
}else if(fileName.includes('schema.prisma') || fileName.includes('/migrations/')){
dbFiles.push(fileName)
}
});

console.log({
backendFiles,
backendTests,
mobileFiles,
webFiles,
});

core.setOutput(
"backendFiles",
backendFiles
.map(file => file.replace("apps/backend/", ""))
.join(" ")
);

core.setOutput(
"backendTests",
[...new Set(backendTests)].join(" ")
);

core.setOutput(
"mobileFiles",
mobileFiles
.map(file => file.replace("apps/mobile/", ""))
.join(" ")
);
const strippedBackend = backendFiles.map(f => f.replace('apps/backend/', ''));
const strippedMobile = mobileFiles.map(f => f.replace('apps/mobile/', ''));

core.setOutput(
"webFiles",
webFiles
.map(file => file.replace("apps/web/", ""))
.join(" ")
);
console.log({ backendFiles, mobileFiles, webFiles, dbFiles });

core.setOutput("backendChanged", backendFiles.length > 0);
core.setOutput("mobileChanged", mobileFiles.length > 0);
core.setOutput("webChanged", webFiles.length > 0);
core.setOutput('backendFiles', strippedBackend.join(' '));
core.setOutput('mobileFiles', strippedMobile.join(' '));
core.setOutput('dbFiles', dbFiles.join(' '));
core.setOutput('webFiles', webFiles.map(f => f.replace('apps/web/', '')).join(' '));
core.setOutput('backendTestFiles', deriveTestFiles(strippedBackend).join(' '));
core.setOutput('mobileTestFiles', deriveTestFiles(strippedMobile).join(' '));
core.setOutput('backendChanged', backendFiles.length > 0);
core.setOutput('mobileChanged', mobileFiles.length > 0);
core.setOutput('webChanged', webFiles.length > 0);

} catch (error) {
console.error(error);
Expand Down
69 changes: 33 additions & 36 deletions .github/scripts/commentResults.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,62 +9,59 @@ module.exports = async ({
backendTypecheck,
mobileLint,
mobileTest,
webCheck,
webBuild
webBuild,
backendLintOutput,
mobileLintOutput,
}) => {
const owner = context.repo.owner;
const repo = context.repo.repo;
const prNumber = context.payload.pull_request.number;

const emoji = (status) => {
if (status === 'success') return '';
if (status === 'failure') return '';
if (status === 'skipped') return '⏭️';
return '';
const status = (s) => {
if (s === 'success') return 'PASS';
if (s === 'failure') return 'FAIL';
if (s === 'skipped') return 'SKIP';
return '-';
};

const label = (status) => {
if (!status) return '⚪ unknown';
return `${emoji(status)} ${status}`;
const lintDetails = (output) => {
if (!output || !output.trim()) return '';
return `\n<details>\n<summary>View lint errors</summary>\n\n\`\`\`\n${output.trim()}\n\`\`\`\n</details>`;
};

const anyFailure = [
backend,
mobile,
web
].includes('failure');

const title = anyFailure
? '❌ Some checks failed'
: '✅ CI completed';

const anyFailure = [backend, mobile, web].includes('failure');
const title = anyFailure ? 'CI — Checks Failed' : 'CI — All Checks Passed';
const timestamp = new Date().toUTCString();

const body = `## CI Results — ${title}
const body = `## ${title}

### Backend — ${status(backend)}

### 🖥️ Backend (${label(backend)})
| Check | Status |
| Check | Result |
|---|---|
| Lint | ${label(backendLint)} |
| Test | ${label(backendTest)} |
| Typecheck | ${label(backendTypecheck)} |
| Lint | ${status(backendLint)} |
| Test | ${status(backendTest)} |
| Typecheck | ${status(backendTypecheck)} |
${backendLint === 'failure' ? lintDetails(backendLintOutput) : ''}

### 📱 Mobile (${label(mobile)})
| Check | Status |
### Mobile — ${status(mobile)}

| Check | Result |
|---|---|
| Lint | ${label(mobileLint)} |
| Test | ${label(mobileTest)} |
| Lint | ${status(mobileLint)} |
| Test | ${status(mobileTest)} |
${mobileLint === 'failure' ? lintDetails(mobileLintOutput) : ''}

### Web — ${status(web)}

### 🌐 Web (${label(web)})
| Check | Status |
| Check | Result |
|---|---|
| Check | ${label(webCheck)} |
| Build | ${label(webBuild)} |
| Build | ${status(webBuild)} |

---
🕐 Last updated: \`${timestamp}\``;
Last updated: \`${timestamp}\``;

const COMMENT_MARKER = '## CI Results —';
const COMMENT_MARKER = '## CI —';

try {
const comments = await github.paginate(
Expand Down
55 changes: 28 additions & 27 deletions .github/scripts/discordPinReminder.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,36 @@ module.exports = async ({ github, context }) => {
const ignoreUsers = [
'ShantKhatri',
'Harxhit',
'blankirigaya'
]
'blankirigaya',
];

try {
// Only continue if merged
if (!pr || !pr.merged) {
console.log('PR not merged.');
return;
}

const prNumber = pr.number;
const contributor = pr.user.login;
if (!pr || !pr.merged) {
console.log('PR not merged.');
return;
}

const prNumber = pr.number;
const contributor = pr.user.login;

if (ignoreUsers.includes(contributor)) {
console.log(`Ignoring PR #${prNumber} by ${contributor}`);
return;
}

await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: `Congratulations @${contributor} on getting PR #${prNumber} merged!

Thank you for your contribution to the project.

if(ignoreUsers.includes(contributor)){
console.log(`Ignoring PR #${prNumber} by ${contributor}`);
return;
}

await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: `Congratulations @${contributor} on getting PR #${prNumber} merged!
To receive the appropriate GSSoC labels and recognition, please mention @Harxhit in the **#get-labels** channel on our Discord server and share your merged PR link.`,
});

Thank you for your contribution. Please mention @Harxhit in our Discord server to receive the appropriate GSSoC labels and recognition.
`
});

console.log(`Comment added to PR #${prNumber}`);
console.log(`Comment added to PR #${prNumber}`);
} catch (error) {
console.error(error)
console.error(error);
}
};
};
Loading
Loading