From 717d4d1fd972b97c14272a4b70313b4eefd57ef4 Mon Sep 17 00:00:00 2001 From: Karun Agarwal <113603846+singhalkarun@users.noreply.github.com> Date: Thu, 12 Sep 2024 23:55:23 +0530 Subject: [PATCH 1/3] add workflow to build and push image --- .github/workflows/build-and-push.yaml | 57 +++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/workflows/build-and-push.yaml diff --git a/.github/workflows/build-and-push.yaml b/.github/workflows/build-and-push.yaml new file mode 100644 index 000000000..1e5823956 --- /dev/null +++ b/.github/workflows/build-and-push.yaml @@ -0,0 +1,57 @@ +name: Build and Push Docker Image + +on: + push: + branches: + - main + - dev + release: + types: [published] +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. + permissions: + contents: read + packages: write + steps: + + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + # minimal + type=pep440,pattern={{version}},value=${{ github.ref_name }},enable=${{ github.event_name == 'release' }} + # branch event + type=ref,event=branch + type=raw,value=latest,enable=${{ github.event_name == 'release' }} + + - name: Build and Push Docker image + uses: docker/build-push-action@v4 + with: + # build-args: + context: . + push: true + cache-from: type=gha + cache-to: type=gha,mode=max + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} From 5e057ca14a2e9e048b673d11732135facb3e0545 Mon Sep 17 00:00:00 2001 From: Shreyash-work-em Date: Mon, 30 Jun 2025 12:59:51 +0530 Subject: [PATCH 2/3] Feature/issues 2025 (#968) * added build and push workflow * 1. Added 2025 component for year 2025 Issues. 2. Made API endpoints Year Compatible 3. Made Index.js Reusable for coming years with minimum changes. * 1. Added Dummy data for 2025 * 1. Added labels for 2025 dmp issues --------- Co-authored-by: Karan Trehan Co-authored-by: Srijan-SS02 Co-authored-by: jaanbaaz <106968030+jaanbaaz@users.noreply.github.com> Co-authored-by: Shreyash --- docusaurus.config.js | 177 +++++++++++++++++++++++++- src/components/C4gt2025Description.js | 65 ++++++++++ src/components/Sidebar.js | 39 ++++-- src/pages/docs/2024/index.js | 42 +++--- src/pages/docs/2025/index.css | 113 ++++++++++++++++ src/pages/docs/2025/index.js | 149 ++++++++++++++++++++++ 6 files changed, 551 insertions(+), 34 deletions(-) create mode 100644 src/components/C4gt2025Description.js create mode 100644 src/pages/docs/2025/index.css create mode 100644 src/pages/docs/2025/index.js diff --git a/docusaurus.config.js b/docusaurus.config.js index 73c7e54fc..b626322f7 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -368,7 +368,182 @@ module.exports = { to: "/docs/2024?id=Zenysis%20Technologies", }, ] - } + }, + { + label: "2025", + position: "left", + to: "/docs/2025/", + items: [ + { + label: "ADC karnal", + to: "/docs/2025?id=ADC%20karnal", + }, + { + label: "ADC Mahendragarh", + to: "/docs/2025?id=ADC%20Mahendragarh", + }, + { + label: "ADC Rohtak", + to: "/docs/2025?id=ADC%20Rohtak", + }, + { + label: "Armman", + to: "/docs/2025?id=Armman", + }, + { + label: "Avanti Fellows", + to: "/docs/2025?id=Avanti%20Fellows", + }, + { + label: "Beckn Collective", + to: "/docs/2025?id=Beckn%20Collective", + }, + { + label: "CMC Ambala", + to: "/docs/2025?id=CMC%20Ambala", + }, + { + label: "Consul Democracy", + to: "/docs/2025?id=Consul%20Democracy", + }, + { + label: "COSS", + to: "/docs/2025?id=COSS", + }, + { + label: "Dhwani", + to: "/docs/2025?id=Dhwani", + }, + { + label: "Education Initiative", + to: "/docs/2025?id=Education%20Initiative", + }, + { + label: "Flywheel", + to: "/docs/2025?id=Flywheel", + }, + { + label: "Haqdarshak", + to: "/docs/2025?id=Haqdarshak", + }, + { + label: "iabsis", + to: "/docs/2025?id=iabsis", + }, + { + label: "IDInsight", + to: "/docs/2025?id=IDInsight", + }, + { + label: "IIIT-Delhi", + to: "/docs/2025?id=IIIT-Delhi", + }, + { + label: "IIIT-H RCTS", + to: "/docs/2025?id=IIIT-H%20RCTS", + }, + { + label: "Medic", + to: "/docs/2025?id=Medic", + }, + { + label: "MedPlat", + to: "/docs/2025?id=MedPlat", + }, + { + label: "Medtronic Labs", + to: "/docs/2025?id=Medtronic%20Labs", + }, + { + label: "MeitY", + to: "/docs/2025?id=MeitY", + }, + { + label: "Metabrainz", + to: "/docs/2025?id=Metabrainz", + }, + { + label: "Mifos", + to: "/docs/2025?id=Mifos", + }, + { + label: "Mojaloop Foundation", + to: "/docs/2025?id=Mojaloop%20Foundation", + }, + { + label: "MOSIP", + to: "/docs/2025?id=MOSIP", + }, + { + label: "National Urban Digital Mission", + to: "/docs/2025?id=National%20Urban%20Digital%20Mission", + }, + { + label: "NHA", + to: "/docs/2025?id=NHA", + }, + { + label: "NSUT in collaboration with C4GT, SEETA and AIC", + to: "/docs/2025?id=NSUT%20in%20collaboration%20with%20C4GT%2C%20SEETA%20and%20AIC", + }, + { + label: "OpenIMIS", + to: "/docs/2025?id=OpenIMIS", + }, + { + label: "OpenNyAI", + to: "/docs/2025?id=OpenNyAI", + }, + { + label: "Piramal Swasthya Management and Research Institute", + to: "/docs/2025?id=Piramal%20Swasthya%20Management%20and%20Research%20Institute", + }, + { + label: "PlanetRead", + to: "/docs/2025?id=PlanetRead", + }, + { + label: "Pratham Books", + to: "/docs/2025?id=Pratham%20Books", + }, + { + label: "Protean", + to: "/docs/2025?id=Protean", + }, + { + label: "Samanvay Foundation", + to: "/docs/2025?id=Samanvay%20Foundation", + }, + { + label: "Sampatti Card", + to: "/docs/2025?id=Sampatti%20Card", + }, + { + label: "ShikshaLokam", + to: "/docs/2025?id=ShikshaLokam", + }, + { + label: "Statwig", + to: "/docs/2025?id=Statwig", + }, + { + label: "Sugar Labs", + to: "/docs/2025?id=Sugar%20Labs", + }, + { + label: "Tattle", + to: "/docs/2025?id=Tattle", + }, + { + label: "Tekdi", + to: "/docs/2025?id=Tekdi", + }, + { + label: "The Apprentice Project", + to: "/docs/2025?id=The%20Apprentice%20Project", + }, + ], + }, ], }, footer: { diff --git a/src/components/C4gt2025Description.js b/src/components/C4gt2025Description.js new file mode 100644 index 000000000..90a9e9985 --- /dev/null +++ b/src/components/C4gt2025Description.js @@ -0,0 +1,65 @@ +// src/components/C4GT2025Description.js + +import React from "react"; + +function C4GT2025Description() { + return ( +
+
+
+
+
+ +
+
+

C4GT'25

+
+

+ C4GT Mentoring Program 2025 is shaping up to be an exciting summer coding program, building upon the success of previous years to foster a strong community focused on developing and contributing to global digital public goods. +

+
    +
  • + An opportunity for college students and working + professionals in India to dive into the GovTech space in 2025. +
  • +
  • Organized annually over 2 months (July-August)
  • +
  • + A new set of diverse and challenging GovTech problem + statements will be presented for participants to tackle in 2025. +
  • +
  • + Shortlisted contributors will receive mentorship from + leading experts in the GovTech ecosystem. +
  • +
+

We're thrilled to have you join us in 2025! 🚀

+
+
+
+
+
+
+ ); +} + +export default C4GT2025Description; \ No newline at end of file diff --git a/src/components/Sidebar.js b/src/components/Sidebar.js index 4aef1c984..62273f5ef 100644 --- a/src/components/Sidebar.js +++ b/src/components/Sidebar.js @@ -1,3 +1,5 @@ +// src/components/Sidebar.js + import React from "react"; import { useHistory } from "react-router-dom"; @@ -8,7 +10,8 @@ function Sidebar({ setCurrentOrg, currentIssue, setCurrentIssue, - setCurrentTab + setCurrentTab, + year, // Add year prop }) { const history = useHistory(); return ( @@ -17,16 +20,28 @@ function Sidebar({
  • { const newUrl = `/docs/2024/`; - history.push(newUrl); - setCurrentTab("c4gt") + history.push(newUrl); + setCurrentTab("c4gt"); }} > C4GT'24
  • +
  • +
    { + const newUrl = `/docs/2025/`; + history.push(newUrl); + setCurrentTab("c4gt"); + }} + > + C4GT'25 +
    +
  • {issueData == null ? ( <> ) : ( @@ -34,19 +49,19 @@ function Sidebar({ return (
  • { - const newUrl = `/docs/2024?id=${data?.org_name}`; + const newUrl = `/docs/${year}?id=${data?.org_name}`; history.push(newUrl); setCurrentOrg(() => data?.org_name); setCurrentIssue(() => null); }} >
    {data?.org_name}
    @@ -56,7 +71,7 @@ function Sidebar({ className="clean-btn menu__caret" >
    - {currentOrg == data?.org_name ? ( + {currentOrg === data?.org_name ? (
      { - const newUrl = `/docs/2024?id=${currentOrg}&issue=${d.id}`; + const newUrl = `/docs/${year}?id=${currentOrg}&issue=${d.id}`; history.push(newUrl); setCurrentIssue(() => d.id); }} @@ -102,4 +117,4 @@ function Sidebar({ ); } -export default Sidebar; +export default Sidebar; \ No newline at end of file diff --git a/src/pages/docs/2024/index.js b/src/pages/docs/2024/index.js index 73171bbc1..3d0137ff5 100644 --- a/src/pages/docs/2024/index.js +++ b/src/pages/docs/2024/index.js @@ -17,8 +17,9 @@ function C4GT2024() { const [currentIssue, setCurrentIssue] = useState(null); const [issueData, setIssueData] = useState(null); const [currentOrgData, setCurrentOrgData] = useState(null); - const [currentTab,setCurrentTab] = useState(null) + const [currentTab, setCurrentTab] = useState(null); const [error, setError] = useState(null); + const year = 2024; // Define year here useEffect(() => { setError(() => null); @@ -27,20 +28,21 @@ function C4GT2024() { const ifOrg = urlParams.get("id") ? urlParams.get("id") : null; const ifIssue = urlParams.get("issue") ? urlParams.get("issue") : null; const newUrl = ifIssue - ? `/docs/2024?id=${ifOrg}&issue=${ifIssue}` + ? `/docs/${year}?id=${ifOrg}&issue=${ifIssue}` : ifOrg - ? `/docs/2024?id=${ifOrg}` - : "/docs/2024/"; + ? `/docs/${year}?id=${ifOrg}` + : `/docs/${year}/`; history.push(newUrl); if (ifIssue) setCurrentIssue(() => ifIssue); else setCurrentIssue(null); - if (ifOrg) {setCurrentOrg(() => ifOrg); - setCurrentTab("org") - } - else {setCurrentOrg(null); - setCurrentTab("c4gt") + if (ifOrg) { + setCurrentOrg(() => ifOrg); + setCurrentTab("org"); + } else { + setCurrentOrg(null); + setCurrentTab("c4gt"); } - fetch(`${API_BASE_URL}/issues`, { + fetch(`${API_BASE_URL}/issues?year=${year}`, { method: "GET", headers: { "X-Secret-Key": API_AUTH_KEY, @@ -89,11 +91,11 @@ function C4GT2024() { }); return data; }); - setCurrentTab("org") + setCurrentTab("org"); } else { setCurrentOrg(null); setCurrentOrgData(null); - setCurrentTab("c4gt") + setCurrentTab("c4gt"); } }, [location]); @@ -114,16 +116,14 @@ function C4GT2024() { setCurrentIssue={setCurrentIssue} setCurrentOrg={setCurrentOrg} setCurrentTab={setCurrentTab} + year={`${year}`} // Pass the year prop here />
      - {currentTab==="c4gt" ? ( - - ) : currentIssue != null ? ( - + {currentTab === "c4gt" ? ( + + ) : currentIssue != null ? ( + ) : currentOrg != null ? ( )} -
      @@ -144,4 +143,5 @@ function C4GT2024() { ); } -export default C4GT2024; + +export default C4GT2024; \ No newline at end of file diff --git a/src/pages/docs/2025/index.css b/src/pages/docs/2025/index.css new file mode 100644 index 000000000..4e5f7f581 --- /dev/null +++ b/src/pages/docs/2025/index.css @@ -0,0 +1,113 @@ +.sidebar-container-2024{ + display: none; +} +.sidebar-container{ + width: 100%; + display: flex; +} +.main-container{ +display: flex; +width: 100%; +} +.breadcrumbs-items{ +--ifm-breadcrumb-size-multiplier: 0.7 !important; +background: #f5f6f7; +margin-bottom: .4rem; +} +.table-container{ +max-height: calc(100vh - 5.75rem); +overflow-y: auto; +position: sticky; +top: calc(4.75rem); +} +.right-side-table{ +display: flex; +align-items: center; +flex-direction: column; +justify-content: center; +padding-right: 0; +gap: 8px; +} +.header-layout{ +width: 100%; +display: flex; +justify-content: space-between; +gap: 28px; +} +.h2-font{ +font-size: 32px; +} + +table tr:nth-child(2n){ + background-color: #ffffff !important; +} + +.fullwidth-table th{ + background-color: #f5f6f7 !important; +} +.error{ + display: flex; + justify-content: center; + align-items: center; + width:100%; + height: 100vh; + flex-direction: column +} +.container-height{ + min-height: 60vh; +} +.breadcrumbs-margin{ + margin-bottom: .4rem; +} + + +@media screen and (max-width: 779px){ +.header-layout{ + flex-direction: column; +} +} +@media screen and (min-width: 997px) { +.sidebar-container-2024{ + display: block; + width: 300px; + margin-top: calc(-1* 3.75rem); + will-change: width; + clip-path: inset(0px); + border-right: 1px solid #dadde1; + transition: width 200ms ease; + } +.sidebar-styles{ + display: flex; + flex-direction: column; + height: 100%; + max-height: 100vh; + padding-top: 3.75rem; + position: sticky; + top: 0; + transition: opacity 50ms; + width: 300px; +} +.menu_styles{ + flex-grow: 1; + padding: .5rem; +} +.main-container{ + flex-grow: 1; + max-width: calc(100% - 300px); + height: 100%; +} +.width{ + max-width: 75% !important; +} +.breadcrumbs-items{ + --ifm-breadcrumb-size-multiplier: 0.8; +} + +.right-side-table{ +padding-right: 0; +} +.fullwidth-table{ + width: 100%; + display: table; +} +} \ No newline at end of file diff --git a/src/pages/docs/2025/index.js b/src/pages/docs/2025/index.js new file mode 100644 index 000000000..4374a0f47 --- /dev/null +++ b/src/pages/docs/2025/index.js @@ -0,0 +1,149 @@ +// src/pages/docs/2025/index.js + +import React, { useEffect, useState } from "react"; +import Layout from "@theme/Layout"; +import "./index.css"; +import { useHistory, useLocation } from "react-router-dom"; +import useParseMarkdown from "../../../hooks/useParseMarkdown"; +import ErrorComponent from "../../../components/ErrorComponent"; +import Sidebar from "../../../components/Sidebar"; +import C4GT2025Description from "../../../components/C4gt2025Description"; +import OrgDescription from "../../../components/OrgDescription"; +import IssueDescription from "../../../components/IssueDescription"; + +function C4GT2025() { + const location = useLocation(); + const history = useHistory(); + const { API_AUTH_KEY, API_BASE_URL } = useParseMarkdown(); + const [currentOrg, setCurrentOrg] = useState(null); + const [currentIssue, setCurrentIssue] = useState(null); + const [issueData, setIssueData] = useState(null); + const [currentOrgData, setCurrentOrgData] = useState(null); + const [currentTab, setCurrentTab] = useState(null); + const [error, setError] = useState(null); + const year = 2025; // Define year variable + + useEffect(() => { + setError(() => null); + const queryString = location.search; + const urlParams = new URLSearchParams(queryString); + const ifOrg = urlParams.get("id") ? urlParams.get("id") : null; + const ifIssue = urlParams.get("issue") ? urlParams.get("issue") : null; + const newUrl = ifIssue + ? `/docs/${year}?id=${ifOrg}&issue=${ifIssue}` + : ifOrg + ? `/docs/${year}?id=${ifOrg}` + : `/docs/${year}/`; + history.push(newUrl); + if (ifIssue) setCurrentIssue(() => ifIssue); + else setCurrentIssue(null); + if (ifOrg) { + setCurrentOrg(() => ifOrg); + setCurrentTab("org"); + } else { + setCurrentOrg(null); + setCurrentTab("c4gt"); + } + fetch(`${API_BASE_URL}/issues?year=${year}`, { // Modified API call + method: "GET", + headers: { + "X-Secret-Key": API_AUTH_KEY, + }, + }) + .then((response) => { + return response.json(); + }) + .then((data) => { + if (data?.message) { + throw new Error(`${data?.message}`); + } else if (data?.error) { + throw new Error(`${data?.error}`); + } else { + let issues = data?.issues; + setIssueData(() => issues); + if (ifOrg) { + setCurrentOrgData(() => { + let issue_data = issues?.filter((d, i) => { + if (d.org_name == ifOrg) return d.issues; + else return; + }); + return issue_data; + }); + } else setCurrentOrgData(null); + } + }) + .catch((error) => { + setError(() => error); + }); + }, []); + + useEffect(() => { + const queryString = location.search; + const urlParams = new URLSearchParams(queryString); + const ifOrg = urlParams.get("id") ? urlParams.get("id") : null; + const ifIssue = urlParams.get("issue") ? urlParams.get("issue") : null; + if (ifIssue) setCurrentIssue(() => ifIssue); + else setCurrentIssue(null); + if (ifOrg) { + setCurrentOrg(() => ifOrg); + setCurrentOrgData(() => { + let data = issueData?.filter((d, i) => { + if (d.org_name == ifOrg) return d.issues; + else return; + }); + return data; + }); + setCurrentTab("org"); + } else { + setCurrentOrg(null); + setCurrentOrgData(null); + setCurrentTab("c4gt"); + } + }, [location]); + + return ( + <> + {error ? ( + + ) : ( + +
      +
      + +
      + {currentTab === "c4gt" ? ( + + ) : currentIssue != null ? ( + + ) : currentOrg != null ? ( + + ) : ( + <> + )} +
      +
      +
      +
      + )} + + ); +} + +export default C4GT2025; \ No newline at end of file From 6ef018891cce502647c2e233f195de5ea9c90b78 Mon Sep 17 00:00:00 2001 From: praveenkumar911 Date: Wed, 13 Aug 2025 16:05:07 +0530 Subject: [PATCH 3/3] fixed sorting issue in 2025-index.js --- src/pages/docs/2025/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pages/docs/2025/index.js b/src/pages/docs/2025/index.js index 4374a0f47..afbccb2ae 100644 --- a/src/pages/docs/2025/index.js +++ b/src/pages/docs/2025/index.js @@ -60,6 +60,9 @@ function C4GT2025() { throw new Error(`${data?.error}`); } else { let issues = data?.issues; + // alpha order + issues = issues?.sort((a, b) => a.org_name.localeCompare(b.org_name)); + console.log(issues); setIssueData(() => issues); if (ifOrg) { setCurrentOrgData(() => {