From cf1a8281115780f96a2c85c7a50f8367489ac82b Mon Sep 17 00:00:00 2001 From: Maximilian Techritz Date: Fri, 14 Mar 2025 16:48:40 +0100 Subject: [PATCH 1/7] docs: update org profile (#1) --- profile/README.md | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/profile/README.md b/profile/README.md index c387176..1b30727 100755 --- a/profile/README.md +++ b/profile/README.md @@ -1,10 +1,23 @@ -### Run better together with Open Source - -- [Open Source @ SAP](https://opensource.sap.com) -- [SAP Open Source Manifesto](https://github.com/SAP/open-source-manifesto) -- [Open Source Community @ SAP](https://pages.community.sap.com/topics/open-source) -- [Podcast series "The Open Source Way"](https://podcast.opensap.info/open-source-way/) -- [Webinar series "SAP Open Source"](https://webinars.sap.com/ospo-webinar-series/en/home) -- [Blog posts](https://community.sap.com/t5/open-source-blogs/bg-p/open-sourceblog-board) -- [Jobs](https://jobs.sap.com/search/?q=%22open+source%22) -- [External Report 2023](https://dam.sap.com/mac/app/e/pdf/preview/embed/NG3Cg8G?ltr=a&rc=10&includeRelatedAssets=true) +# Welcome to the Open Managed Control Plane (openMCP) Project on GitHub + +:wave: Welcome to the official GitHub presence of openMCP. We are part of [ApeiroRA](https://apeirora.eu/content/projects/) which is an Important Project of Common European Interest - Next Generation Cloud Infrastructures and Services (IPCEI-CIS). + +## :globe_with_meridians: ApeiroRA? + +ApeiroRA is a reference blueprint for an open, flexible, secure, and compliant next-generation cloud-edge continuum and therefore a key contribution to IPCEI-CIS. At a high level, the projects of ApeiroRA allow users to provider-agnostically fetch, request and consume services, and for service providers to describe, offer and provision their services. + +By being open source, ApeiroRA provides a cross-border spillover effect, solidifying the foundation and future of the project. + +Learn more about ApeiroRA by checking out the official website at [https://apeirora.eu/](https://apeirora.eu/). + +## :handshake: openMCP and ApeiroRA + +The Open Managed Control Plane (openMCP) enables extensible Infrastructure- and Configuration-as-Data capabilities as a Service. Based on the Kubernetes Resource Model, all resources in the cloud-edge continuum with ApeiroRA are accessible and managed via a declarative API and corresponding controllers and operators. Together with the controller which understand OCM and declarative deployment orchestrators, consumers can subscribe to a product release-train of software producers and implement an automated, GitOps-driven deployment workflow at the edges. + +## :busts_in_silhouette: Get Involved + +We welcome contributions of all kinds, from code to documentation, testing, and design. If you're interested in getting involved, check out our [open issues](https://github.com/issues?q=is%3Aopen+is%3Aissue+org%3Aopenmcp-project+archived%3Afalse+). + +## :blue_heart: Code of Conduct + +To facilitate a nice environment for all, check out [our Code of Conduct](https://github.com/openmcp-project/.github/blob/main/CODE_OF_CONDUCT.md). \ No newline at end of file From 1ad7ec14e00aa189f98abdb74da12d413f59c537 Mon Sep 17 00:00:00 2001 From: Johannes Ott Date: Mon, 24 Mar 2025 13:31:35 +0100 Subject: [PATCH 2/7] Update README.md --- profile/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/profile/README.md b/profile/README.md index 1b30727..874d79f 100755 --- a/profile/README.md +++ b/profile/README.md @@ -18,6 +18,6 @@ The Open Managed Control Plane (openMCP) enables extensible Infrastructure- and We welcome contributions of all kinds, from code to documentation, testing, and design. If you're interested in getting involved, check out our [open issues](https://github.com/issues?q=is%3Aopen+is%3Aissue+org%3Aopenmcp-project+archived%3Afalse+). -## :blue_heart: Code of Conduct +## 🌈 Code of Conduct -To facilitate a nice environment for all, check out [our Code of Conduct](https://github.com/openmcp-project/.github/blob/main/CODE_OF_CONDUCT.md). \ No newline at end of file +To facilitate a nice environment for all, check out [our Code of Conduct](https://github.com/openmcp-project/.github/blob/main/CODE_OF_CONDUCT.md). From 70e8b42659ddf0825fa6dbfe80c42d765cee2db4 Mon Sep 17 00:00:00 2001 From: Johannes Ott Date: Tue, 15 Apr 2025 19:25:06 +0200 Subject: [PATCH 3/7] add gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store From 80111d4f3ee75d732c8b3ea1904bf2b720c2d5a6 Mon Sep 17 00:00:00 2001 From: Johannes Ott Date: Tue, 15 Apr 2025 19:32:42 +0200 Subject: [PATCH 4/7] add refinement to backlog workflow --- .../workflows/addRefinedIssuesToBacklog.yml | 192 ++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 .github/workflows/addRefinedIssuesToBacklog.yml diff --git a/.github/workflows/addRefinedIssuesToBacklog.yml b/.github/workflows/addRefinedIssuesToBacklog.yml new file mode 100644 index 0000000..c33985b --- /dev/null +++ b/.github/workflows/addRefinedIssuesToBacklog.yml @@ -0,0 +1,192 @@ +name: Move Issues with Status "Done" from Refinement to Backlog Project + +on: + schedule: + - cron: "0 7 * * *" # Runs at 07:00 UTC every day + workflow_dispatch: # Allows manual trigger + +env: + ACTIONS_STEP_DEBUG: true + +jobs: + move-done-issues: + runs-on: ubuntu-latest + steps: + + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Move Issues from Refinement Board (in Status "Done") to Project Backlog (with Status "ToDo") + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GH_READ_TOKEN }} + script: | + const org = context.repo.owner; + const projectP1 = ${{ env.PROJECT_REFINEMENT_ID }}; // Project ID for "Refinement Board" + const projectP2 = ${{ env.PROJECT_BACKLOG_ID }}; // Project ID for "Backlog Project" + const statusFieldIdP1 =${{ env.ISSUE_REFINEMENT_STATUS_ID }}; // Issue Status field ID for Refinement Board + const statusFieldIdP2 = ${{ env.ISSUE_BACKLOG_STATUS_ID }}; // Issue Status field ID for Project Backlog + const doneStatus = ${{ env.ISSUE_REFINEMENT_DONE_STATUS_ID }}; // "Done" Status Option ID of Refinement Board + const todoStatus = ${{ env.ISSUE_BACKLOG_TODO_STATUS_ID }}; // "ToDo Status Option ID of Backlog Project + + // Fetch all issues in Refinement Board + const query = ` + query { + node(id: "${projectP1}") { + ... on ProjectV2 { + items(first: 100) { + nodes { + id + content { + __typename + ... on Issue { + id + number + title + } + } + fieldValues(first: 10) { + nodes { + __typename + ... on ProjectV2ItemFieldSingleSelectValue { + field { + __typename + ... on ProjectV2SingleSelectField { + id + name + options { + id + name + } + } + } + optionId + } + } + } + } + } + } + } + } + `; + + const result = await github.graphql(query); + const items = result.node.items.nodes; + const doneItems = []; + + // log the items structure for debugging + // console.log("items structure: ", JSON.stringify(items, null, 2)); + + // log the field values structure for debugging + items.forEach(item => { + // console.log(JSON.stringify(item.fieldValues.nodes, null, 2)); + item.fieldValues.nodes.forEach(field => { + if (field.__typename === "ProjectV2ItemFieldSingleSelectValue") { + if (field.optionId === doneStatus) { + console.log(`Issue ${item.content.title} (#${item.content.number}) is in "Done" status -> should be added to Backlog.`); + doneItems.push(item); + } + } + }); + }); + + if (doneItems.length === 0) { + console.log("No issues in 'Done' status, nothing to do."); + return; + } + + // Main Loop over all items in "Done" status + // 1. Adds issue to Project Backlog + // 2. Sets status to "To Do" in Project Backlog + // 3. Removes issue from Refinement Board + for (const item of doneItems) { + if (!item.content || !item.content.number) continue; + + let issueNumber = item.content.number; + let issueTitle = item.content.title; + console.log(`**** Start Processing Issue ${issueTitle} (#${issueNumber}) ****`); + + // 1. Add issue to Project Backlog + const addToProjectMutation = ` + mutation { + addProjectV2ItemById(input: { + projectId: "${projectP2}", + contentId: "${item.content.id}" + }) { + item { + id + } + } + } + `; + + let addToProjectResult; + try { + addToProjectResult = await github.graphql(addToProjectMutation); + + if (addToProjectResult && addToProjectResult.addProjectV2ItemById.item.id) { + console.log(`Issue ${issueTitle} (#${issueNumber}) successfully added to backlog project.`); + } else { + console.error("Failed to add issue ${issueTitle} (#${issueNumber}) to backlog project."); + } + } catch (error) { + console.error("Error in add to Backlog Project GraphQL mutation:", error); + } + + let newProjectItemId = addToProjectResult.addProjectV2ItemById.item.id; + + // 2. Set status to "To Do" in Backlog Project + const updateStatusMutation = ` + mutation { + updateProjectV2ItemFieldValue(input: { + projectId: "${projectP2}", + itemId: "${newProjectItemId}", + fieldId: "${statusFieldIdP2}", + value: { singleSelectOptionId: "${todoStatus}" } + }) { + projectV2Item { + id + } + } + } + `; + + let updateStatusResult; + try { + updateStatusResult = await github.graphql(updateStatusMutation); + if (updateStatusResult && updateStatusResult.updateProjectV2ItemFieldValue.projectV2Item.id) { + console.log(`Changed Status to TODO for Issue ${issueTitle} (#${issueNumber}).`); + } else { + console.error("Failed to change status to TODO for Issue ${issueTitle} (#${issueNumber})."); + } + } catch (error) { + console.error("Error in Change Status GraphQL mutation:", error); + } + + // 3. Remove issue from Refinement Board + const deleteMutation = ` + mutation { + deleteProjectV2Item(input: { + projectId: "${projectP1}", + itemId: "${item.id}" + }) { + deletedItemId + } + } + `; + + let deleteResult; + try { + deleteResult = await github.graphql(deleteMutation); + if (deleteResult && deleteResult.deleteProjectV2Item.deletedItemId) { + console.log(`Issue ${issueTitle} (#${issueNumber}) successfully removed from refinement project.`); + } else { + console.error("Failed to remove issue ${issueTitle} (#${issueNumber}) from refinement project."); + } + } catch (error) { + console.error("Error in delete from refinement project GraphQL mutation:", error); + } + + console.log(`**** Finished processing Issue ${issueTitle} (#${issueNumber}) ****`); + } \ No newline at end of file From dd14d0f12d6ee28695fef02786c3c9fc20dff3a1 Mon Sep 17 00:00:00 2001 From: Johannes Ott Date: Tue, 15 Apr 2025 19:37:52 +0200 Subject: [PATCH 5/7] Revert "docs: update org profile (#1)" This reverts commit cf1a8281115780f96a2c85c7a50f8367489ac82b. # Conflicts: # profile/README.md --- profile/README.md | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/profile/README.md b/profile/README.md index 874d79f..c387176 100755 --- a/profile/README.md +++ b/profile/README.md @@ -1,23 +1,10 @@ -# Welcome to the Open Managed Control Plane (openMCP) Project on GitHub - -:wave: Welcome to the official GitHub presence of openMCP. We are part of [ApeiroRA](https://apeirora.eu/content/projects/) which is an Important Project of Common European Interest - Next Generation Cloud Infrastructures and Services (IPCEI-CIS). - -## :globe_with_meridians: ApeiroRA? - -ApeiroRA is a reference blueprint for an open, flexible, secure, and compliant next-generation cloud-edge continuum and therefore a key contribution to IPCEI-CIS. At a high level, the projects of ApeiroRA allow users to provider-agnostically fetch, request and consume services, and for service providers to describe, offer and provision their services. - -By being open source, ApeiroRA provides a cross-border spillover effect, solidifying the foundation and future of the project. - -Learn more about ApeiroRA by checking out the official website at [https://apeirora.eu/](https://apeirora.eu/). - -## :handshake: openMCP and ApeiroRA - -The Open Managed Control Plane (openMCP) enables extensible Infrastructure- and Configuration-as-Data capabilities as a Service. Based on the Kubernetes Resource Model, all resources in the cloud-edge continuum with ApeiroRA are accessible and managed via a declarative API and corresponding controllers and operators. Together with the controller which understand OCM and declarative deployment orchestrators, consumers can subscribe to a product release-train of software producers and implement an automated, GitOps-driven deployment workflow at the edges. - -## :busts_in_silhouette: Get Involved - -We welcome contributions of all kinds, from code to documentation, testing, and design. If you're interested in getting involved, check out our [open issues](https://github.com/issues?q=is%3Aopen+is%3Aissue+org%3Aopenmcp-project+archived%3Afalse+). - -## 🌈 Code of Conduct - -To facilitate a nice environment for all, check out [our Code of Conduct](https://github.com/openmcp-project/.github/blob/main/CODE_OF_CONDUCT.md). +### Run better together with Open Source + +- [Open Source @ SAP](https://opensource.sap.com) +- [SAP Open Source Manifesto](https://github.com/SAP/open-source-manifesto) +- [Open Source Community @ SAP](https://pages.community.sap.com/topics/open-source) +- [Podcast series "The Open Source Way"](https://podcast.opensap.info/open-source-way/) +- [Webinar series "SAP Open Source"](https://webinars.sap.com/ospo-webinar-series/en/home) +- [Blog posts](https://community.sap.com/t5/open-source-blogs/bg-p/open-sourceblog-board) +- [Jobs](https://jobs.sap.com/search/?q=%22open+source%22) +- [External Report 2023](https://dam.sap.com/mac/app/e/pdf/preview/embed/NG3Cg8G?ltr=a&rc=10&includeRelatedAssets=true) From 11d82e0a0364948349bedaff31d8c34549095e9d Mon Sep 17 00:00:00 2001 From: Johannes Ott Date: Tue, 15 Apr 2025 19:48:54 +0200 Subject: [PATCH 6/7] remove scheduler --- .github/workflows/addRefinedIssuesToBacklog.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/addRefinedIssuesToBacklog.yml b/.github/workflows/addRefinedIssuesToBacklog.yml index c33985b..7f33bde 100644 --- a/.github/workflows/addRefinedIssuesToBacklog.yml +++ b/.github/workflows/addRefinedIssuesToBacklog.yml @@ -1,13 +1,5 @@ name: Move Issues with Status "Done" from Refinement to Backlog Project -on: - schedule: - - cron: "0 7 * * *" # Runs at 07:00 UTC every day - workflow_dispatch: # Allows manual trigger - -env: - ACTIONS_STEP_DEBUG: true - jobs: move-done-issues: runs-on: ubuntu-latest From 97399d79e846a983f7587f05828d5db355fa7a31 Mon Sep 17 00:00:00 2001 From: Johannes Ott Date: Wed, 16 Apr 2025 09:55:48 +0200 Subject: [PATCH 7/7] Revert "Revert "docs: update org profile (#1)"" This reverts commit dd14d0f12d6ee28695fef02786c3c9fc20dff3a1. --- profile/README.md | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/profile/README.md b/profile/README.md index c387176..874d79f 100755 --- a/profile/README.md +++ b/profile/README.md @@ -1,10 +1,23 @@ -### Run better together with Open Source - -- [Open Source @ SAP](https://opensource.sap.com) -- [SAP Open Source Manifesto](https://github.com/SAP/open-source-manifesto) -- [Open Source Community @ SAP](https://pages.community.sap.com/topics/open-source) -- [Podcast series "The Open Source Way"](https://podcast.opensap.info/open-source-way/) -- [Webinar series "SAP Open Source"](https://webinars.sap.com/ospo-webinar-series/en/home) -- [Blog posts](https://community.sap.com/t5/open-source-blogs/bg-p/open-sourceblog-board) -- [Jobs](https://jobs.sap.com/search/?q=%22open+source%22) -- [External Report 2023](https://dam.sap.com/mac/app/e/pdf/preview/embed/NG3Cg8G?ltr=a&rc=10&includeRelatedAssets=true) +# Welcome to the Open Managed Control Plane (openMCP) Project on GitHub + +:wave: Welcome to the official GitHub presence of openMCP. We are part of [ApeiroRA](https://apeirora.eu/content/projects/) which is an Important Project of Common European Interest - Next Generation Cloud Infrastructures and Services (IPCEI-CIS). + +## :globe_with_meridians: ApeiroRA? + +ApeiroRA is a reference blueprint for an open, flexible, secure, and compliant next-generation cloud-edge continuum and therefore a key contribution to IPCEI-CIS. At a high level, the projects of ApeiroRA allow users to provider-agnostically fetch, request and consume services, and for service providers to describe, offer and provision their services. + +By being open source, ApeiroRA provides a cross-border spillover effect, solidifying the foundation and future of the project. + +Learn more about ApeiroRA by checking out the official website at [https://apeirora.eu/](https://apeirora.eu/). + +## :handshake: openMCP and ApeiroRA + +The Open Managed Control Plane (openMCP) enables extensible Infrastructure- and Configuration-as-Data capabilities as a Service. Based on the Kubernetes Resource Model, all resources in the cloud-edge continuum with ApeiroRA are accessible and managed via a declarative API and corresponding controllers and operators. Together with the controller which understand OCM and declarative deployment orchestrators, consumers can subscribe to a product release-train of software producers and implement an automated, GitOps-driven deployment workflow at the edges. + +## :busts_in_silhouette: Get Involved + +We welcome contributions of all kinds, from code to documentation, testing, and design. If you're interested in getting involved, check out our [open issues](https://github.com/issues?q=is%3Aopen+is%3Aissue+org%3Aopenmcp-project+archived%3Afalse+). + +## 🌈 Code of Conduct + +To facilitate a nice environment for all, check out [our Code of Conduct](https://github.com/openmcp-project/.github/blob/main/CODE_OF_CONDUCT.md).