From 92bf9e1c578e27ef10a913d87ec29d6c19c080a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Casta=C3=B1o=20Arteaga?= Date: Mon, 29 Aug 2022 15:34:14 +0200 Subject: [PATCH] Remove organization concept MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is some groundwork to eventually use the landscape YAML file as data source. Related to #471 Signed-off-by: Sergio Castaño Arteaga Signed-off-by: Cintia Sanchez Garcia Co-authored-by: Sergio Castaño Arteaga Co-authored-by: Cintia Sanchez Garcia --- .gitpod/sample_data.sql | 19 +- clomonitor-apiserver/src/db.rs | 62 +---- clomonitor-apiserver/src/handlers.rs | 21 +- clomonitor-apiserver/src/router.rs | 59 ++-- database/data/cncf/organizations.csv | 128 --------- database/data/cncf/projects.csv | 258 +++++++++--------- database/data/lfaidata/organizations.csv | 37 --- database/data/lfaidata/projects.csv | 76 +++--- .../functions/projects/get_project.sql | 9 +- .../functions/projects/search_projects.sql | 13 +- .../get_repositories_with_checks.sql | 7 +- .../functions/stats/average_section_score.sql | 3 +- .../migrations/functions/stats/get_stats.sql | 9 +- .../stats/repositories_passing_check.sql | 3 +- database/migrations/schema/001_initial.sql | 23 +- .../tests/functions/projects/get_project.sql | 21 +- .../functions/projects/get_project_checks.sql | 13 +- .../projects/get_project_passed_checks.sql | 13 +- .../functions/projects/search_projects.sql | 74 ++--- .../get_repositories_with_checks.sql | 13 +- database/tests/functions/stats/get_stats.sql | 21 +- database/tests/schema/schema.sql | 22 +- web/src/App.tsx | 11 +- web/src/api/index.test.tsx | 8 +- web/src/api/index.ts | 4 +- web/src/layout/common/BadgeModal.test.tsx | 9 +- web/src/layout/common/BadgeModal.tsx | 7 +- .../layout/common/ProjectDropdown.test.tsx | 1 - web/src/layout/common/ProjectDropdown.tsx | 3 - .../layout/common/ReportSummaryModal.test.tsx | 7 +- web/src/layout/common/ReportSummaryModal.tsx | 5 +- .../__snapshots__/BadgeModal.test.tsx.snap | 6 +- .../ReportSummaryModal.test.tsx.snap | 6 +- web/src/layout/detail/index.test.tsx | 8 +- web/src/layout/detail/index.tsx | 21 +- web/src/layout/navigation/Searchbar.test.tsx | 4 +- web/src/layout/navigation/Searchbar.tsx | 2 +- web/src/layout/search/Card.test.tsx | 3 - web/src/layout/search/Card.tsx | 2 +- web/src/types.ts | 11 - 40 files changed, 336 insertions(+), 686 deletions(-) delete mode 100644 database/data/cncf/organizations.csv delete mode 100644 database/data/lfaidata/organizations.csv diff --git a/.gitpod/sample_data.sql b/.gitpod/sample_data.sql index cdd08ebc..7b0b14c8 100644 --- a/.gitpod/sample_data.sql +++ b/.gitpod/sample_data.sql @@ -1,16 +1,9 @@ -insert into organization (organization_id, name, home_url, logo_url, foundation) -values ('00000001-0000-0000-0000-000000000000', 'artifact-hub', 'https://artifacthub.io/', 'https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg', 'cncf'); -insert into organization (organization_id, name, home_url, logo_url, foundation) -values ('00000002-0000-0000-0000-000000000000', 'containerd', 'https://containerd.io', 'https://raw.githubusercontent.com/cncf/artwork/master/projects/containerd/icon/color/containerd-icon-color.svg', 'cncf'); -insert into organization (organization_id, name, home_url, logo_url, foundation) -values ('00000003-0000-0000-0000-000000000000', 'core-dns', 'https://coredns.io', 'https://raw.githubusercontent.com/cncf/artwork/master/projects/coredns/icon/color/coredns-icon-color.svg', 'cncf'); - -insert into project (project_id, name, display_name, description, category, devstats_url, maturity, organization_id) -values ('00000000-0001-0000-0000-000000000000', 'artifact-hub', 'Artifact Hub', 'Artifact Hub is a web-based application that enables finding, installing, and publishing packages and configurations for CNCF projects.', 'app definition', 'https://artifacthub.devstats.cncf.io/', 'sandbox', '00000001-0000-0000-0000-000000000000'); -insert into project (project_id, name, description, category, devstats_url, maturity, organization_id) -values ('00000000-0002-0000-0000-000000000000', 'containerd', 'An industry-standard container runtime with an emphasis on simplicity, robustness and portability.', 'runtime', 'https://containerd.devstats.cncf.io', 'graduated', '00000002-0000-0000-0000-000000000000'); -insert into project (project_id, name, display_name, category, description, devstats_url, maturity, organization_id) -values ('00000000-0003-0000-0000-000000000000', 'core-dns', 'CoreDNS', 'CoreDNS is a DNS server. It is written in Go. It can be used in a multitude of environments because of its flexibility.', 'orchestration', 'https://coredns.devstats.cncf.io', 'graduated', '00000003-0000-0000-0000-000000000000'); +insert into project (project_id, name, display_name, description, category, devstats_url, maturity, foundation_id) +values ('00000000-0001-0000-0000-000000000000', 'artifact-hub', 'Artifact Hub', 'Artifact Hub is a web-based application that enables finding, installing, and publishing packages and configurations for CNCF projects.', 'app definition', 'https://artifacthub.devstats.cncf.io/', 'sandbox', 'cncf'); +insert into project (project_id, name, description, category, devstats_url, maturity, foundation_id) +values ('00000000-0002-0000-0000-000000000000', 'containerd', 'An industry-standard container runtime with an emphasis on simplicity, robustness and portability.', 'runtime', 'https://containerd.devstats.cncf.io', 'graduated', 'cncf'); +insert into project (project_id, name, display_name, category, description, devstats_url, maturity, foundation_id) +values ('00000000-0003-0000-0000-000000000000', 'core-dns', 'CoreDNS', 'CoreDNS is a DNS server. It is written in Go. It can be used in a multitude of environments because of its flexibility.', 'orchestration', 'https://coredns.devstats.cncf.io', 'graduated', 'cncf'); insert into repository (repository_id, name, url, check_sets, project_id) values ('00000000-0000-0001-0000-000000000000', 'artifact-hub', 'https://github.com/artifacthub/hub', '{community,code}', '00000000-0001-0000-0000-000000000000'); diff --git a/clomonitor-apiserver/src/db.rs b/clomonitor-apiserver/src/db.rs index 4fd07f7a..d2a10299 100644 --- a/clomonitor-apiserver/src/db.rs +++ b/clomonitor-apiserver/src/db.rs @@ -22,28 +22,13 @@ type Count = i64; #[cfg_attr(test, automock)] pub(crate) trait DB { /// Get project's details in json format. - async fn project( - &self, - foundation: &str, - org: &str, - project: &str, - ) -> Result>; + async fn project(&self, foundation: &str, project: &str) -> Result>; /// Get project's rating. - async fn project_rating( - &self, - foundation: &str, - org: &str, - project: &str, - ) -> Result>; + async fn project_rating(&self, foundation: &str, project: &str) -> Result>; /// Get project's score. - async fn project_score( - &self, - foundation: &str, - org: &str, - project: &str, - ) -> Result>; + async fn project_score(&self, foundation: &str, project: &str) -> Result>; /// Get all repositories including checks details. async fn repositories_with_checks(&self) -> Result; @@ -69,31 +54,21 @@ impl PgDB { #[async_trait] impl DB for PgDB { - async fn project( - &self, - foundation: &str, - org: &str, - project: &str, - ) -> Result> { + async fn project(&self, foundation: &str, project: &str) -> Result> { let row = self .pool .get() .await? .query_one( - "select get_project($1::text, $2::text, $3::text)::text", - &[&foundation, &org, &project], + "select get_project($1::text, $2::text)::text", + &[&foundation, &project], ) .await?; let project: Option = row.get(0); Ok(project) } - async fn project_rating( - &self, - foundation: &str, - org: &str, - project: &str, - ) -> Result> { + async fn project_rating(&self, foundation: &str, project: &str) -> Result> { let rows = self .pool .get() @@ -102,12 +77,10 @@ impl DB for PgDB { " select rating from project p - join organization o using (organization_id) - where o.foundation::text = $1::text - and o.name = $2::text - and p.name = $3::text + where p.foundation_id = $1::text + and p.name = $2::text ", - &[&foundation, &org, &project], + &[&foundation, &project], ) .await?; if rows.len() != 1 { @@ -117,12 +90,7 @@ impl DB for PgDB { Ok(rating) } - async fn project_score( - &self, - foundation: &str, - org: &str, - project: &str, - ) -> Result> { + async fn project_score(&self, foundation: &str, project: &str) -> Result> { let rows = self .pool .get() @@ -131,12 +99,10 @@ impl DB for PgDB { " select score from project p - join organization o using (organization_id) - where o.foundation::text = $1::text - and o.name = $2::text - and p.name = $3::text + where p.foundation_id = $1::text + and p.name = $2::text ", - &[&foundation, &org, &project], + &[&foundation, &project], ) .await?; if rows.len() != 1 { diff --git a/clomonitor-apiserver/src/handlers.rs b/clomonitor-apiserver/src/handlers.rs index c506b6b3..b2b06b37 100644 --- a/clomonitor-apiserver/src/handlers.rs +++ b/clomonitor-apiserver/src/handlers.rs @@ -40,11 +40,11 @@ pub const REPORT_SUMMARY_HEIGHT: u32 = 470; /// Handler that returns the information needed to render the project's badge. pub(crate) async fn badge( Extension(db): Extension, - Path((foundation, org, project)): Path<(String, String, String)>, + Path((foundation, project)): Path<(String, String)>, ) -> impl IntoResponse { // Get project rating from database let rating = db - .project_rating(&foundation, &org, &project) + .project_rating(&foundation, &project) .await .map_err(internal_error)?; if rating.is_none() { @@ -121,7 +121,7 @@ pub(crate) async fn index( pub(crate) async fn index_project( Extension(cfg): Extension>, Extension(tmpl): Extension>, - Path((foundation, org, project)): Path<(String, String, String)>, + Path((foundation, project)): Path<(String, String)>, ) -> impl IntoResponse { let mut ctx = Context::new(); ctx.insert("title", &project); @@ -129,11 +129,10 @@ pub(crate) async fn index_project( ctx.insert( "image", &format!( - "{}/projects/{}/{}/{}/report-summary.png", + "{}/projects/{}/{}/report-summary.png", cfg.get_string("apiserver.baseURL") .expect("base url not found"), &foundation, - &org, &project ), ); @@ -151,11 +150,11 @@ pub(crate) async fn index_project( /// Handler that returns some information about the requested project. pub(crate) async fn project( Extension(db): Extension, - Path((foundation, org, project)): Path<(String, String, String)>, + Path((foundation, project)): Path<(String, String)>, ) -> impl IntoResponse { // Get project from database let project = db - .project(&foundation, &org, &project) + .project(&foundation, &project) .await .map_err(internal_error)?; @@ -190,11 +189,11 @@ impl ReportSummaryTemplate { /// Handler that returns a PNG image with the project's report summary. pub(crate) async fn report_summary_png( Extension(db): Extension, - Path((foundation, org, project)): Path<(String, String, String)>, + Path((foundation, project)): Path<(String, String)>, ) -> impl IntoResponse { // Get project score from database let score = db - .project_score(&foundation, &org, &project) + .project_score(&foundation, &project) .await .map_err(internal_error)?; if score.is_none() { @@ -231,12 +230,12 @@ pub(crate) async fn report_summary_png( /// Handler that returns an SVG image with the project's report summary. pub(crate) async fn report_summary_svg( Extension(db): Extension, - Path((foundation, org, project)): Path<(String, String, String)>, + Path((foundation, project)): Path<(String, String)>, Query(params): Query>, ) -> impl IntoResponse { // Get project score from database let score = db - .project_score(&foundation, &org, &project) + .project_score(&foundation, &project) .await .map_err(internal_error)?; diff --git a/clomonitor-apiserver/src/router.rs b/clomonitor-apiserver/src/router.rs index a67773af..b74ba31e 100644 --- a/clomonitor-apiserver/src/router.rs +++ b/clomonitor-apiserver/src/router.rs @@ -46,10 +46,10 @@ pub(crate) fn setup(cfg: Arc, db: DynDB) -> Result { // Setup API routes let api_routes = Router::new() .route("/projects/search", get(search_projects)) - .route("/projects/:foundation/:org/:project", get(project)) - .route("/projects/:foundation/:org/:project/badge", get(badge)) + .route("/projects/:foundation/:project", get(project)) + .route("/projects/:foundation/:project/badge", get(badge)) .route( - "/projects/:foundation/:org/:project/report-summary", + "/projects/:foundation/:project/report-summary", get(report_summary_svg), ) .route("/stats", get(stats)); @@ -57,9 +57,9 @@ pub(crate) fn setup(cfg: Arc, db: DynDB) -> Result { // Setup router let mut router = Router::new() .route("/", get(index)) - .route("/projects/:foundation/:org/:project", get(index_project)) + .route("/projects/:foundation/:project", get(index_project)) .route( - "/projects/:foundation/:org/:project/report-summary.png", + "/projects/:foundation/:project/report-summary.png", get(report_summary_png), ) .route("/data/repositories.csv", get(repositories_checks)) @@ -123,24 +123,21 @@ mod tests { const TESTDATA_PATH: &str = "src/testdata"; const FOUNDATION: &str = "cncf"; - const ORG: &str = "artifact-hub"; const PROJECT: &str = "artifact-hub"; #[tokio::test] async fn badge_found() { let mut db = MockDB::new(); db.expect_project_rating() - .with(eq(FOUNDATION), eq(ORG), eq(PROJECT)) + .with(eq(FOUNDATION), eq(PROJECT)) .times(1) - .returning(|_: &str, _: &str, _: &str| { - Box::pin(future::ready(Ok(Some("a".to_string())))) - }); + .returning(|_: &str, _: &str| Box::pin(future::ready(Ok(Some("a".to_string()))))); let response = setup_test_router(db) .oneshot( Request::builder() .method("GET") - .uri(format!("/api/projects/{FOUNDATION}/{ORG}/{PROJECT}/badge")) + .uri(format!("/api/projects/{FOUNDATION}/{PROJECT}/badge")) .body(Body::empty()) .unwrap(), ) @@ -174,15 +171,15 @@ mod tests { async fn badge_not_found() { let mut db = MockDB::new(); db.expect_project_rating() - .with(eq(FOUNDATION), eq(ORG), eq(PROJECT)) + .with(eq(FOUNDATION), eq(PROJECT)) .times(1) - .returning(|_: &str, _: &str, _: &str| Box::pin(future::ready(Ok(None)))); + .returning(|_: &str, _: &str| Box::pin(future::ready(Ok(None)))); let response = setup_test_router(db) .oneshot( Request::builder() .method("GET") - .uri(format!("/api/projects/{FOUNDATION}/{ORG}/{PROJECT}/badge")) + .uri(format!("/api/projects/{FOUNDATION}/{PROJECT}/badge")) .body(Body::empty()) .unwrap(), ) @@ -280,7 +277,7 @@ mod tests { .oneshot( Request::builder() .method("GET") - .uri(format!("/projects/{FOUNDATION}/{ORG}/{PROJECT}")) + .uri(format!("/projects/{FOUNDATION}/{PROJECT}")) .body(Body::empty()) .unwrap(), ) @@ -298,7 +295,7 @@ mod tests { render_index( PROJECT, INDEX_META_DESCRIPTION_PROJECT, - "http://localhost:8000/projects/cncf/artifact-hub/artifact-hub/report-summary.png" + "http://localhost:8000/projects/cncf/artifact-hub/report-summary.png" ) ); } @@ -307,9 +304,9 @@ mod tests { async fn project_found() { let mut db = MockDB::new(); db.expect_project() - .with(eq(FOUNDATION), eq(ORG), eq(PROJECT)) + .with(eq(FOUNDATION), eq(PROJECT)) .times(1) - .returning(|_, _, _| { + .returning(|_, _| { Box::pin(future::ready(Ok(Some( r#"{"project": "info"}"#.to_string(), )))) @@ -319,7 +316,7 @@ mod tests { .oneshot( Request::builder() .method("GET") - .uri(format!("/api/projects/{FOUNDATION}/{ORG}/{PROJECT}")) + .uri(format!("/api/projects/{FOUNDATION}/{PROJECT}")) .body(Body::empty()) .unwrap(), ) @@ -342,15 +339,15 @@ mod tests { async fn project_not_found() { let mut db = MockDB::new(); db.expect_project() - .with(eq(FOUNDATION), eq(ORG), eq(PROJECT)) + .with(eq(FOUNDATION), eq(PROJECT)) .times(1) - .returning(|_: &str, _: &str, _: &str| Box::pin(future::ready(Ok(None)))); + .returning(|_: &str, _: &str| Box::pin(future::ready(Ok(None)))); let response = setup_test_router(db) .oneshot( Request::builder() .method("GET") - .uri(format!("/api/projects/{FOUNDATION}/{ORG}/{PROJECT}")) + .uri(format!("/api/projects/{FOUNDATION}/{PROJECT}")) .body(Body::empty()) .unwrap(), ) @@ -364,16 +361,16 @@ mod tests { async fn report_summary_png_not_found() { let mut db = MockDB::new(); db.expect_project_score() - .with(eq(FOUNDATION), eq(ORG), eq(PROJECT)) + .with(eq(FOUNDATION), eq(PROJECT)) .times(1) - .returning(|_: &str, _: &str, _: &str| Box::pin(future::ready(Ok(None)))); + .returning(|_: &str, _: &str| Box::pin(future::ready(Ok(None)))); let response = setup_test_router(db) .oneshot( Request::builder() .method("GET") .uri(format!( - "/projects/{FOUNDATION}/{ORG}/{PROJECT}/report-summary.png" + "/projects/{FOUNDATION}/{PROJECT}/report-summary.png" )) .body(Body::empty()) .unwrap(), @@ -388,9 +385,9 @@ mod tests { async fn report_summary_svg_found() { let mut db = MockDB::new(); db.expect_project_score() - .with(eq(FOUNDATION), eq(ORG), eq(PROJECT)) + .with(eq(FOUNDATION), eq(PROJECT)) .times(1) - .returning(|_: &str, _: &str, _: &str| { + .returning(|_: &str, _: &str| { let score = Score { global: 80.0, documentation: Some(80.0), @@ -405,7 +402,7 @@ mod tests { Request::builder() .method("GET") .uri(format!( - "/api/projects/{FOUNDATION}/{ORG}/{PROJECT}/report-summary" + "/api/projects/{FOUNDATION}/{PROJECT}/report-summary" )) .body(Body::empty()) .unwrap(), @@ -429,16 +426,16 @@ mod tests { async fn report_summary_svg_not_found() { let mut db = MockDB::new(); db.expect_project_score() - .with(eq(FOUNDATION), eq(ORG), eq(PROJECT)) + .with(eq(FOUNDATION), eq(PROJECT)) .times(1) - .returning(|_: &str, _: &str, _: &str| Box::pin(future::ready(Ok(None)))); + .returning(|_: &str, _: &str| Box::pin(future::ready(Ok(None)))); let response = setup_test_router(db) .oneshot( Request::builder() .method("GET") .uri(format!( - "/api/projects/{FOUNDATION}/{ORG}/{PROJECT}/report-summary" + "/api/projects/{FOUNDATION}/{PROJECT}/report-summary" )) .body(Body::empty()) .unwrap(), diff --git a/database/data/cncf/organizations.csv b/database/data/cncf/organizations.csv deleted file mode 100644 index a2dcbb7a..00000000 --- a/database/data/cncf/organizations.csv +++ /dev/null @@ -1,128 +0,0 @@ -organization_id;name;home_url;logo_url;foundation -00000001-0000-0000-0000-000000000000;artifact-hub;https://artifacthub.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg;cncf -00000002-0000-0000-0000-000000000000;containerd;https://containerd.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/containerd/icon/color/containerd-icon-color.svg;cncf -00000003-0000-0000-0000-000000000000;core-dns;https://coredns.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/coredns/icon/color/coredns-icon-color.svg;cncf -00000004-0000-0000-0000-000000000000;envoy;https://www.envoyproxy.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/envoy/icon/color/envoy-icon-color.svg;cncf -00000005-0000-0000-0000-000000000000;etcd;https://github.com/etcd-io;https://raw.githubusercontent.com/cncf/artwork/master/projects/etcd/icon/color/etcd-icon-color.svg;cncf -00000006-0000-0000-0000-000000000000;fluentd;https://www.fluentd.org/;https://raw.githubusercontent.com/cncf/artwork/master/projects/fluentd/icon/color/fluentd-icon-color.svg;cncf -00000007-0000-0000-0000-000000000000;harbor;https://goharbor.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/harbor/icon/color/harbor-icon-color.svg;cncf -00000008-0000-0000-0000-000000000000;helm;https://helm.sh/;https://raw.githubusercontent.com/cncf/artwork/master/projects/helm/icon/color/helm-icon-color.svg;cncf -00000009-0000-0000-0000-000000000000;jaeger;https://www.jaegertracing.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/jaeger/icon/color/jaeger-icon-color.svg;cncf -00000010-0000-0000-0000-000000000000;kubernetes;https://kubernetes.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubernetes/icon/color/kubernetes-icon-color.svg;cncf -00000011-0000-0000-0000-000000000000;linkerd;https://linkerd.io/;https://raw.githubusercontent.com/cncf/artwork/275957f868af92f9a1456ded0d3629cce961645c/projects/linkerd/icon/color/linkerd-icon-color.svg;cncf -00000012-0000-0000-0000-000000000000;opa;https://www.openpolicyagent.org/;https://raw.githubusercontent.com/cncf/artwork/master/projects/opa/icon/color/opa-icon-color.svg;cncf -00000013-0000-0000-0000-000000000000;prometheus;https://prometheus.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/prometheus/icon/color/prometheus-icon-color.svg;cncf -00000014-0000-0000-0000-000000000000;rook;https://rook.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/rook/icon/color/rook-icon-color.svg;cncf -00000015-0000-0000-0000-000000000000;tuf;https://theupdateframework.github.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/tuf/icon/color/tuf-icon-color.svg;cncf -00000016-0000-0000-0000-000000000000;tikv;https://tikv.org/;https://raw.githubusercontent.com/cncf/artwork/master/projects/tikv/icon/color/tikv-icon-color.svg;cncf -00000017-0000-0000-0000-000000000000;vitess;https://vitess.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/vitess/icon/color/vitess-icon-color.svg;cncf -00000018-0000-0000-0000-000000000000;argo;https://argoproj.github.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/argo/icon/color/argo-icon-color.svg;cncf -00000019-0000-0000-0000-000000000000;buildpacks;https://buildpacks.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/buildpacks/icon/color/buildpacks-icon-color.svg;cncf -00000020-0000-0000-0000-000000000000;cilium;https://cilium.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/cilium/icon/color/cilium_icon-color.svg;cncf -00000021-0000-0000-0000-000000000000;cloudevents;https://cloudevents.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/cloudevents/icon/color/cloudevents-icon-color.svg;cncf -00000022-0000-0000-0000-000000000000;cni;https://github.com/containernetworking;https://raw.githubusercontent.com/cncf/artwork/master/projects/cni/icon/color/cni-icon-color.svg;cncf -00000023-0000-0000-0000-000000000000;contour;https://projectcontour.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/contour/icon/color/contour-icon-color.svg;cncf -00000024-0000-0000-0000-000000000000;cortex;https://github.com/cortexproject;https://raw.githubusercontent.com/cncf/artwork/master/projects/cortex/icon/color/cortex-icon-color.svg;cncf -00000025-0000-0000-0000-000000000000;cri-o;https://cri-o.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/crio/icon/color/crio-icon-color.svg;cncf -00000026-0000-0000-0000-000000000000;crossplane;https://crossplane.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/crossplane/icon/color/crossplane-icon-color.svg;cncf -00000027-0000-0000-0000-000000000000;dapr;https://dapr.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/dapr/icon/color/dapr-icon-color.svg;cncf -00000028-0000-0000-0000-000000000000;dragonfly;https://d7y.io/en-us/;https://raw.githubusercontent.com/cncf/artwork/master/projects/dragonfly/icon/color/dragonfly-icon-color.svg;cncf -00000029-0000-0000-0000-000000000000;ambassador;https://www.getambassador.io/;https://cdn-images-1.medium.com/max/216/1*YnBpgr6Mpn_kaDlfcuVlFg@2x.png;cncf -00000030-0000-0000-0000-000000000000;falco;https://falco.org/;https://raw.githubusercontent.com/cncf/artwork/master/projects/falco/icon/color/falco-icon-color.svg;cncf -00000031-0000-0000-0000-000000000000;flux-cd;https://fluxcd.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/flux/icon/color/flux-icon-color.svg;cncf -00000032-0000-0000-0000-000000000000;grpc;https://grpc.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/grpc/icon/color/grpc-icon-color.svg;cncf -00000033-0000-0000-0000-000000000000;keda;https://keda.sh/;https://raw.githubusercontent.com/cncf/artwork/master/projects/keda/icon/color/keda-icon-color.svg;cncf -00000034-0000-0000-0000-000000000000;kube-edge;https://kubeedge.io/en/;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubeedge/icon/color/kubeedge-icon-color.svg;cncf -00000035-0000-0000-0000-000000000000;litmus;https://litmuschaos.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/litmus/icon/color/litmus-icon-color.svg;cncf -00000036-0000-0000-0000-000000000000;longhorn;https://github.com/longhorn/longhorn;https://raw.githubusercontent.com/cncf/artwork/master/projects/longhorn/icon/color/longhorn-icon-color.svg;cncf -00000037-0000-0000-0000-000000000000;nats;https://nats.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/nats/icon/color/nats-icon-color.svg;cncf -00000038-0000-0000-0000-000000000000;notary;https://github.com/notaryproject/notary;https://raw.githubusercontent.com/cncf/artwork/master/projects/notary/icon/color/notary-icon-color.svg;cncf -00000039-0000-0000-0000-000000000000;open-telemetry;https://opentelemetry.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/opentelemetry/icon/color/opentelemetry-icon-color.svg;cncf -00000040-0000-0000-0000-000000000000;operator-framework;https://cloud.redhat.com/learn/topics/operators;https://raw.githubusercontent.com/cncf/artwork/master/projects/operatorframework/icon/color/operatorframework-icon-color.svg;cncf -00000041-0000-0000-0000-000000000000;spiffe;https://spiffe.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/spiffe/icon/color/spiffe-icon-color.svg;cncf -00000042-0000-0000-0000-000000000000;thanos;https://thanos.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/thanos/icon/color/thanos-icon-color.svg;cncf -00000043-0000-0000-0000-000000000000;akri;https://docs.akri.sh/;https://raw.githubusercontent.com/cncf/artwork/master/projects/akri/icon/light/akri-icon-light.svg;cncf -00000044-0000-0000-0000-000000000000;antrea;https://antrea.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/antrea/icon/color/antrea-icon-color.svg;cncf -00000045-0000-0000-0000-000000000000;athenz;https://www.athenz.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/athenz/icon/color/athenz-icon-color.svg;cncf -00000046-0000-0000-0000-000000000000;backstage;https://backstage.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/backstage/icon/color/backstage-icon-color.svg;cncf -00000047-0000-0000-0000-000000000000;bfenetworks;https://github.com/bfenetworks/bfe;https://raw.githubusercontent.com/cncf/artwork/master/projects/bfe/icon/color/bfe-icon-color.svg;cncf -00000048-0000-0000-0000-000000000000;brigade;https://brigade.sh/;https://raw.githubusercontent.com/cncf/artwork/master/projects/brigade/icon/color/brigade-icon-color.svg;cncf -00000049-0000-0000-0000-000000000000;cdk8s;https://cdk8s.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/cdk8s/icon/color/cdk8s-icon-color.svg;cncf -00000050-0000-0000-0000-000000000000;jet-stack;https://www.jetstack.io/open-source/;https://www.venafi.com/sites/default/files/2020-08/jetstack%20TN%20logo.png;cncf -00000051-0000-0000-0000-000000000000;chaos-mesh;https://github.com/chaos-mesh/chaos-mesh;https://raw.githubusercontent.com/cncf/artwork/master/projects/chaosmesh/icon/color/chaosmesh-icon-color.svg;cncf -00000052-0000-0000-0000-000000000000;chaos-blade;https://github.com/chaosblade-io/chaosblade;https://raw.githubusercontent.com/cncf/artwork/master/projects/chaosblade/icon/color/chaosblade-icon-color.svg;cncf -00000053-0000-0000-0000-000000000000;chubao-fs;https://chubao.io/cgi-sys/suspendedpage.cgi;https://raw.githubusercontent.com/cncf/artwork/master/projects/chubaofs/icon/color/chubaofs-icon-color.svg;cncf -00000054-0000-0000-0000-000000000000;cloud-custodian;https://cloudcustodian.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/cloudcustodian/icon/color/cloudcustodian-icon-color.svg;cncf -00000055-0000-0000-0000-000000000000;cni-genie;https://github.com/cni-genie/CNI-Genie;https://landscape.cncf.io/logos/cni-genie.svg;cncf -00000056-0000-0000-0000-000000000000;curiefense;https://www.curiefense.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/curiefense/icon/color/curiefense-icon-color.svg;cncf -00000057-0000-0000-0000-000000000000;dex;https://github.com/dexidp/dex;https://raw.githubusercontent.com/cncf/artwork/master/projects/dex/icon/color/dex-icon-color.svg;cncf -00000058-0000-0000-0000-000000000000;fluid;http://pasa-bigdata.nju.edu.cn/fluid/index.html;https://raw.githubusercontent.com/cncf/artwork/master/projects/fluid/icon/color/fluid-icon-color.svg;cncf -00000059-0000-0000-0000-000000000000;fonio;https://github.com/foniod/project;https://raw.githubusercontent.com/cncf/artwork/master/projects/fonio/icon/color/fonio-icon-color.svg;cncf -00000060-0000-0000-0000-000000000000;in-toto;https://in-toto.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/in-toto/icon/color/in-toto-icon-color.svg;cncf -00000061-0000-0000-0000-000000000000;alibaba;https://www.alibabagroup.com/;https://vignette.wikia.nocookie.net/logopedia/images/0/04/Alibaba.svg/revision/latest?cb=20170221094406;cncf -00000062-0000-0000-0000-000000000000;k3s;https://k3s.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/k3s/icon/color/k3s-icon-color.svg;cncf -00000063-0000-0000-0000-000000000000;k8gb;https://www.k8gb.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/k8gb/icon/color/k8gb-icon-color.svg;cncf -00000064-0000-0000-0000-000000000000;k8up;https://k8up.io/k8up/2.1/index.html;https://raw.githubusercontent.com/cncf/artwork/master/projects/k8up/icon/k8up-icon-color.svg;cncf -00000065-0000-0000-0000-000000000000;karmada;https://karmada.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/karmada/icon/color/karmada-icon-color.svg;cncf -00000066-0000-0000-0000-000000000000;keptn;https://www.keptn.sh/;https://raw.githubusercontent.com/cncf/artwork/master/projects/keptn/icon/color/keptn-icon-color.svg;cncf -00000067-0000-0000-0000-000000000000;keylime;https://keylime.dev;https://raw.githubusercontent.com/cncf/artwork/master/projects/keylime/icon/color/keylime-icon-color.svg;cncf -00000068-0000-0000-0000-000000000000;krustlet;https://krustlet.dev;https://raw.githubusercontent.com/cncf/artwork/master/projects/krustlet/icon/color/krustlet-icon-color.svg;cncf -00000069-0000-0000-0000-000000000000;kube-ovn;https://kube-ovn.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/kube-ovn/icon/color/kube-ovn-icon-color.svg;cncf -00000070-0000-0000-0000-000000000000;kuberhealthy;https://github.com/kuberhealthy/kuberhealthy;https://raw.githubusercontent.com/cncf/artwork/master/projects/kuberhealthy/icon/color/kuberhealthy-icon-color.svg;cncf -00000071-0000-0000-0000-000000000000;oam-dev;https://oam.dev;https://oam.dev/images/logos/ohm-borderless.svg;cncf -00000072-0000-0000-0000-000000000000;kubevirt;https://kubevirt.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubevirt/icon/color/kubevirt-icon-color.svg;cncf -00000073-0000-0000-0000-000000000000;kudo-builder;https://kudo.dev;https://raw.githubusercontent.com/cncf/artwork/master/projects/kudo/icon/color/kudo-icon-color.svg;cncf -00000074-0000-0000-0000-000000000000;kuma;https://kuma.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/kuma/icon/color/kuma-icon-color.svg;cncf -00000075-0000-0000-0000-000000000000;kyverno;https://kyverno.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/kyverno/icon/color/kyverno-icon-color.svg;cncf -00000076-0000-0000-0000-000000000000;meshery;https://meshery.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/meshery/icon/meshery-logo-light.svg;cncf -00000077-0000-0000-0000-000000000000;metal3-io;https://metal3.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/metal3/icon/color/metal3-icon-color.svg;cncf -00000078-0000-0000-0000-000000000000;network-service-mesh;https://networkservicemesh.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/networkservicemesh/icon/color/networkservicemesh-icon-color.svg;cncf -00000079-0000-0000-0000-000000000000;nocalhost;https://nocalhost.dev;https://raw.githubusercontent.com/cncf/artwork/master/projects/nocalhost/icon/color/nocalhost-icon-color.svg;cncf -00000080-0000-0000-0000-000000000000;ocm;https://open-cluster-management.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/open-cluster-management/icon/color/ocm-icon-color.png;cncf -00000081-0000-0000-0000-000000000000;osm;https://openservicemesh.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/openservicemesh/icon/color/openservicemesh-icon-color.svg;cncf -00000082-0000-0000-0000-000000000000;openebs;https://openebs.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/openebs/icon/color/openebs-icon-color.svg;cncf -00000083-0000-0000-0000-000000000000;open-gitops;https://opengitops.dev;https://raw.githubusercontent.com/cncf/artwork/master/projects/opengitops/icon/color/opengitops-icon-color.svg;cncf -00000084-0000-0000-0000-000000000000;open-kruise;https://openkruise.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/openkruise/icon/color/openkruise-icon-color.svg;cncf -00000085-0000-0000-0000-000000000000;open-metrics;https://openmetrics.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/openmetrics/icon/color/openmetrics-icon-color.svg;cncf -00000086-0000-0000-0000-000000000000;openyurt;https://openyurt.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/openyurt/icon/color/openyurt-icon-color.svg;cncf -00000087-0000-0000-0000-000000000000;oras;https://oras.land;https://raw.githubusercontent.com/cncf/artwork/master/projects/oras/horizontal/color/oras-horizontal-color.svg;cncf -00000088-0000-0000-0000-000000000000;parsec;https://github.com/parallaxsecond/parsec;https://raw.githubusercontent.com/cncf/artwork/master/projects/parsec/icon/color/parsec-icon-color.svg;cncf -00000089-0000-0000-0000-000000000000;piraeus;https://piraeus.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/piraeus/icon/color/piraeus-icon-color.svg;cncf -00000090-0000-0000-0000-000000000000;pixie;https://px.dev;https://raw.githubusercontent.com/cncf/artwork/master/projects/pixie/icon/color/pixie-icon-color.svg;cncf -00000091-0000-0000-0000-000000000000;porter;https://porter.sh;https://raw.githubusercontent.com/cncf/artwork/master/projects/porter/icon/color/porter-icon-color.svg;cncf -00000092-0000-0000-0000-000000000000;pravega;https://cncf.pravega.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/pravega/icon/color/pravega-icon-color.svg;cncf -00000093-0000-0000-0000-000000000000;schemahero;https://schemahero.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/schemahero/icon/color/schemahero-icon-color.svg;cncf -00000094-0000-0000-0000-000000000000;serverless-workflow;https://serverlessworkflow.github.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/serverlessworkflow/icon/color/serverlessworkflow-icon-color.svg;cncf -00000095-0000-0000-0000-000000000000;smi;https://smi-spec.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/servicemeshinterface/icon/color/servicemeshinterface-icon-color.svg;cncf -00000096-0000-0000-0000-000000000000;smp;https://smp-spec.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/servicemeshperformance/icon/smp-dark.svg;cncf -00000097-0000-0000-0000-000000000000;skooner;https://github.com/skooner-k8s/skooner;https://raw.githubusercontent.com/cncf/artwork/master/projects/skooner/icon/color/Skooner-icon-color.svg;cncf -00000098-0000-0000-0000-000000000000;strimzi;https://strimzi.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/strimzi/icon/color/strimzi-icon-color.svg;cncf -00000099-0000-0000-0000-000000000000;submariner;https://submariner.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/submariner/icon/color/submariner-icon-color.svg;cncf -00000100-0000-0000-0000-000000000000;superedge;https://superedge.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/superedge/icon/color/superedge-icon-color.svg;cncf -00000101-0000-0000-0000-000000000000;telepresence;https://www.telepresence.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/telepresence/icon/color/telepresence-icon-color.svg;cncf -00000102-0000-0000-0000-000000000000;tinkerbell;https://tinkerbell.org;https://raw.githubusercontent.com/cncf/artwork/master/projects/tinkerbell/icon/color-light/tinkerbell-icon-color-light.svg;cncf -00000103-0000-0000-0000-000000000000;tremor;https://www.tremor.rs;https://raw.githubusercontent.com/cncf/artwork/master/projects/tremor/icon/color/tremor-icon-color.svg;cncf -00000104-0000-0000-0000-000000000000;trickster;https://github.com/trickstercache/trickster;https://raw.githubusercontent.com/cncf/artwork/master/projects/trickster/icon/color/trickster-icon-color.svg;cncf -00000105-0000-0000-0000-000000000000;vineyard;https://v6d.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/vineyard/icon/color/vineyard-icon-color.svg;cncf -00000106-0000-0000-0000-000000000000;virtual-kubelet;https://virtual-kubelet.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/virtualkubelet/icon/color/virtualkubelet-icon-color.svg;cncf -00000107-0000-0000-0000-000000000000;volcano;https://volcano.sh/en/;https://raw.githubusercontent.com/cncf/artwork/master/projects/volcano/icon/color/volcano-icon-color.svg;cncf -00000108-0000-0000-0000-000000000000;wasm-cloud;https://wasmcloud.com;https://raw.githubusercontent.com/cncf/artwork/master/projects/wasmcloud/icon/color/wasmcloud.icon_green.svg;cncf -00000109-0000-0000-0000-000000000000;wasm-edge;https://wasmedge.org;https://raw.githubusercontent.com/cncf/artwork/master/projects/wasm-edge-runtime/icon/color/wasm-edge-runtime-icon-color.svg;cncf -00000110-0000-0000-0000-000000000000;knative;https://knative.dev;https://raw.githubusercontent.com/cncf/artwork/master/projects/knative/icon/color/knative-icon-color.svg;cncf -00000111-0000-0000-0000-000000000000;krator-rs;https://github.com/krator-rs;https://raw.githubusercontent.com/cncf/artwork/master/projects/krator/icon/color/krator-icon-color.svg;cncf -00000112-0000-0000-0000-000000000000;devfile;https://devfile.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/devfile/icon/color/devfile-icon-color.svg;cncf -00000113-0000-0000-0000-000000000000;kube-rs;https://kube.rs;https://raw.githubusercontent.com/cncf/artwork/master/projects/kube-rs/icon/black/kube-rs-icon-black.svg;cncf -00000114-0000-0000-0000-000000000000;kubedl;https://kubedl.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubedl/icon/color/kubedl-icon-color.svg;cncf -00000115-0000-0000-0000-000000000000;openelb;https://openelb.github.io/;https://landscape.cncf.io/logos/open-elb.svg;cncf -00000116-0000-0000-0000-000000000000;confidential-containers;https://github.com/confidential-containers;https://raw.githubusercontent.com/cncf/artwork/master/projects/confidential-containers/icon/color/confidential-containers-icon.svg;cncf -00000117-0000-0000-0000-000000000000;openfunction;https://openfunction.dev;https://raw.githubusercontent.com/cncf/artwork/master/projects/openfunction/icon/color/openfunction-icon-color.svg;cncf -00000118-0000-0000-0000-000000000000;sealer;http://sealer.cool;https://landscape.cncf.io/logos/sealer.svg;cncf -00000119-0000-0000-0000-000000000000;teller;https://tlr.dev;https://raw.githubusercontent.com/cncf/artwork/master/projects/teller/icon/color/teller-icon-color.svg;cncf -00000120-0000-0000-0000-000000000000;fabedge;http://www.fabedge.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/fabedge/icon/color/fabedge-color.svg;cncf -00000121-0000-0000-0000-000000000000;clusterpedia;https://clusterpedia.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/clusterpedia/icon/color/clusterpedia-icon-color.svg;cncf -00000122-0000-0000-0000-000000000000;kubecost;https://www.kubecost.com;https://raw.githubusercontent.com/cncf/artwork/master/projects/opencost/icon/color/Opencost_Icon_Color.svg;cncf -00000123-0000-0000-0000-000000000000;aeraki-mesh;https://aeraki.net/;https://landscape.cncf.io/logos/aeraki-mesh.svg;cncf -00000124-0000-0000-0000-000000000000;curve;https://www.opencurve.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/curve/icon/color/curve_icon_color.svg;cncf -00000125-0000-0000-0000-000000000000;openfeature;https://openfeature.dev/;https://landscape.cncf.io/logos/open-feature.svg;cncf -00000126-0000-0000-0000-000000000000;kubewarden;https://www.kubewarden.io;https://www.kubewarden.io/images/logo-kubewarden.svg;cncf -00000127-0000-0000-0000-000000000000;devstream;https://www.devstream.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/devstream/icon/color/devstream-icon-color.svg;cncf diff --git a/database/data/cncf/projects.csv b/database/data/cncf/projects.csv index 6e6f1cb9..eb312ce6 100644 --- a/database/data/cncf/projects.csv +++ b/database/data/cncf/projects.csv @@ -1,129 +1,129 @@ -project_id;name;display_name;description;category;home_url;logo_url;devstats_url;accepted_at;maturity;organization_id -00000000-0001-0000-0000-000000000000;artifact-hub;Artifact Hub;Artifact Hub is a web-based application that enables finding, installing, and publishing packages and configurations for CNCF projects.;app definition;;;https://artifacthub.devstats.cncf.io/;2020-06-23;sandbox;00000001-0000-0000-0000-000000000000 -00000000-0002-0000-0000-000000000000;containerd;;An industry-standard container runtime with an emphasis on simplicity, robustness and portability.;runtime;;;https://containerd.devstats.cncf.io;2017-03-29;graduated;00000002-0000-0000-0000-000000000000 -00000000-0003-0000-0000-000000000000;core-dns;CoreDNS;CoreDNS is a DNS server. It is written in Go. It can be used in a multitude of environments because of its flexibility. ;orchestration;;;https://coredns.devstats.cncf.io;2017-02-27;graduated;00000003-0000-0000-0000-000000000000 -00000000-0004-0000-0000-000000000000;envoy;Envoy;Envoy is an open source edge and service proxy, designed for cloud-native applications.;orchestration;;;https://envoy.devstats.cncf.io/;2017-09-13;graduated;00000004-0000-0000-0000-000000000000 -00000000-0005-0000-0000-000000000000;etcd;etcd;Distributed reliable key-value store for the most critical data of a distributed system.;orchestration;;;https://etcd.devstats.cncf.io/;2018-12-11;graduated;00000005-0000-0000-0000-000000000000 -00000000-0006-0000-0000-000000000000;fluentd;Fluentd;Fluentd is an open source data collector for unified logging layer.;observability;;;https://fluentd.devstats.cncf.io/;2016-11-08;graduated;00000006-0000-0000-0000-000000000000 -00000000-0007-0000-0000-000000000000;harbor;Harbor;An open source trusted cloud native registry project that stores, signs, and scans content.;provisioning;;;https://harbor.devstats.cncf.io/;2018-07-31;graduated;00000007-0000-0000-0000-000000000000 -00000000-0008-0000-0000-000000000000;helm;Helm;The Kubernetes Package Manager.;app definition;;;https://helm.devstats.cncf.io/;2018-06-01;graduated;00000008-0000-0000-0000-000000000000 -00000000-0009-0000-0000-000000000000;jaeger;Jaeger;Jaeger: open source, end-to-end distributed tracing. Monitor and troubleshoot transactions in complex distributed systems.;observability;;;https://jaeger.devstats.cncf.io/;2017-09-13;graduated;00000009-0000-0000-0000-000000000000 -00000000-0010-0000-0000-000000000000;kubernetes;Kubernetes;Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.;orchestration;;;https://k8s.devstats.cncf.io/;2016-03-10;graduated;00000010-0000-0000-0000-000000000000 -00000000-0011-0000-0000-000000000000;linkerd;Linkerd;Ultralight, security-first service mesh for Kubernetes. Main repo for Linkerd 2.x.;orchestration;;;https://linkerd.devstats.cncf.io/;2017-01-23;graduated;00000011-0000-0000-0000-000000000000 -00000000-0012-0000-0000-000000000000;opa;Open Policy Agent;An open source, general-purpose policy engine.;provisioning;;;https://opa.devstats.cncf.io/;2018-03-29;graduated;00000012-0000-0000-0000-000000000000 -00000000-0013-0000-0000-000000000000;prometheus;Prometheus;The Prometheus monitoring system and time series database.;observability;;;https://prometheus.devstats.cncf.io/;2016-05-09;graduated;00000013-0000-0000-0000-000000000000 -00000000-0014-0000-0000-000000000000;rook;Rook;Storage Orchestration for Kubernetes.;runtime;;;https://rook.devstats.cncf.io/;2018-01-29;graduated;00000014-0000-0000-0000-000000000000 -00000000-0015-0000-0000-000000000000;tuf;The Update Framework;Python reference implementation of The Update Framework (TUF).;provisioning;;;https://tuf.devstats.cncf.io/;2017-10-24;graduated;00000015-0000-0000-0000-000000000000 -00000000-0016-0000-0000-000000000000;tikv;TiKV;A distributed transactional key-value database. Based on the design of Google Spanner and HBase, but simpler to manage and without dependencies on any distributed filesystem.;app definition;;;https://tikv.devstats.cncf.io/;2018-08-28;graduated;00000016-0000-0000-0000-000000000000 -00000000-0017-0000-0000-000000000000;vitess;Vitess;Vitess is a database clustering system for horizontal scaling of MySQL.;app definition;;;https://vitess.devstats.cncf.io/;2018-02-05;graduated;00000017-0000-0000-0000-000000000000 -00000000-0018-0000-0000-000000000000;argo;Argo;Open source tools for Kubernetes to run workflows, manage clusters, and do GitOps right.;app definition;;;https://argo.devstats.cncf.io/;2020-04-07;incubating;00000018-0000-0000-0000-000000000000 -00000000-0019-0000-0000-000000000000;buildpacks;Buildpacks;Cloud Native Buildpacks transform your application source code into images that can run on any cloud.;app definition;;;https://buildpacks.devstats.cncf.io/;2018-10-03;incubating;00000019-0000-0000-0000-000000000000 -00000000-0020-0000-0000-000000000000;cilium;Cilium;eBPF-based Networking, Observability, and Security.;runtime;;;https://cilium.devstats.cncf.io/;2021-10-13;incubating;00000020-0000-0000-0000-000000000000 -00000000-0021-0000-0000-000000000000;cloudevents;CloudEvents;A specification for describing event data in a common way.;app definition;;;https://cloudevents.devstats.cncf.io/;2018-05-22;incubating;00000021-0000-0000-0000-000000000000 -00000000-0022-0000-0000-000000000000;cni;Container Network Interface;Container Network Interface - networking for Linux containers.;runtime;;;https://cni.devstats.cncf.io/;2017-05-23;incubating;00000022-0000-0000-0000-000000000000 -00000000-0023-0000-0000-000000000000;contour;Contour;Contour is an open source Kubernetes ingress controller providing the control plane for the Envoy edge and service proxy.;orchestration;;;https://contour.devstats.cncf.io/;2020-07-07;incubating;00000023-0000-0000-0000-000000000000 -00000000-0024-0000-0000-000000000000;cortex;Cortex;A multitenant, horizontally scalable Prometheus as a Service.;observability;;;https://cortex.devstats.cncf.io/;2018-09-20;incubating;00000024-0000-0000-0000-000000000000 -00000000-0025-0000-0000-000000000000;cri-o;CRI-O;Open Container Initiative-based implementation of Kubernetes Container Runtime Interface.;runtime;;;https://crio.devstats.cncf.io/;2019-04-08;incubating;00000025-0000-0000-0000-000000000000 -00000000-0026-0000-0000-000000000000;crossplane;Crossplane;Compose cloud infrastructure and services into custom platform APIs.;orchestration;;;https://crossplane.devstats.cncf.io/;2020-06-23;incubating;00000026-0000-0000-0000-000000000000 -00000000-0027-0000-0000-000000000000;dapr;Distributed Application Runtime;Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.;serverless;;;https://dapr.devstats.cncf.io/;2021-11-03;incubating;00000027-0000-0000-0000-000000000000 -00000000-0028-0000-0000-000000000000;dragonfly;Dragonfly;Dragonfly is an intelligent P2P based image and file distribution system, it also provides a variety of enterprise-level (efficiency, stability, safety, low-cost) product features.;provisioning;;;https://dragonfly.devstats.cncf.io/;2018-11-15;incubating;00000028-0000-0000-0000-000000000000 -00000000-0029-0000-0000-000000000000;emissary-ingress;Emissary-Ingress;open source Kubernetes-native API gateway for microservices built on the Envoy Proxy.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/emissary-ingress/icon/color/emissary-ingress-icon-color.svg;https://emissaryingress.devstats.cncf.io/;2021-04-14;incubating;00000029-0000-0000-0000-000000000000 -00000000-0030-0000-0000-000000000000;falco;Falco;Falco, the cloud-native runtime security project, is the de facto Kubernetes threat detection engine.;provisioning;;;https://falco.devstats.cncf.io/;2018-10-10;incubating;00000030-0000-0000-0000-000000000000 -00000000-0031-0000-0000-000000000000;flux-project;Flux;Open and extensible continuous delivery solution for Kubernetes. Powered by GitOps Toolkit.;app definition;;;https://flux.devstats.cncf.io/;2019-07-15;incubating;00000031-0000-0000-0000-000000000000 -00000000-0032-0000-0000-000000000000;grpc;gRPC;A high performance, open source universal RPC framework.;orchestration;;;https://grpc.devstats.cncf.io/;2017-02-16;incubating;00000032-0000-0000-0000-000000000000 -00000000-0033-0000-0000-000000000000;keda;KEDA;KEDA is a Kubernetes-based Event Driven Autoscaling component. It provides event driven scale for any container running in Kubernetes.;serverless;;;https://keda.devstats.cncf.io/;2020-03-09;incubating;00000033-0000-0000-0000-000000000000 -00000000-0034-0000-0000-000000000000;kube-edge;KubeEdge;A Kubernetes Native Edge Computing Framework.;provisioning;;;https://kubeedge.devstats.cncf.io/;2019-03-18;incubating;00000034-0000-0000-0000-000000000000 -00000000-0035-0000-0000-000000000000;litmus-chaos;Litmus;Litmus is an open source Chaos Engineering platform that enables teams to identify weaknesses & potential outages in infrastructures by inducing chaos tests in a controlled way.;observability;;;https://litmuschaos.devstats.cncf.io/;2020-06-23;incubating;00000035-0000-0000-0000-000000000000 -00000000-0036-0000-0000-000000000000;longhorn;Longhorn;Cloud-Native distributed storage built on and for Kubernetes.;runtime;;;https://longhorn.devstats.cncf.io/;2019-10-11;incubating;00000036-0000-0000-0000-000000000000 -00000000-0037-0000-0000-000000000000;nats;NATS;Connective Technology for Adaptive Edge & Distributed Systems.;app definition;;;https://nats.devstats.cncf.io/;2018-03-15;incubating;00000037-0000-0000-0000-000000000000 -00000000-0038-0000-0000-000000000000;notary;Notary;Notary is a project that allows anyone to have trust over arbitrary collections of data.;provisioning;;;https://notary.devstats.cncf.io/;2017-10-24;incubating;00000038-0000-0000-0000-000000000000 -00000000-0039-0000-0000-000000000000;open-telemetry;OpenTelemetry;High-quality, ubiquitous, and portable telemetry to enable effective observability.;observability;;;https://opentelemetry.devstats.cncf.io/;2019-05-07;incubating;00000039-0000-0000-0000-000000000000 -00000000-0040-0000-0000-000000000000;operator-framework;Operator Framework;SDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.;app definition;;;https://operatorframework.devstats.cncf.io/;2020-07-09;incubating;00000040-0000-0000-0000-000000000000 -00000000-0041-0000-0000-000000000000;spiffe;SPIFFE;A universal identity control plane for distributed systems.;provisioning;;;https://spiffe.devstats.cncf.io/;2018-03-29;incubating;00000041-0000-0000-0000-000000000000 -00000000-0042-0000-0000-000000000000;thanos;Thanos;Open source, highly available Prometheus setup with long term storage capabilities.;app definition;;;https://thanos.devstats.cncf.io/;2019-07-20;incubating;00000042-0000-0000-0000-000000000000 -00000000-0043-0000-0000-000000000000;akri;Akri;A Kubernetes Resource Interface for the Edge.;provisioning;;;https://akri.devstats.cncf.io/;2021-09-14;sandbox;00000043-0000-0000-0000-000000000000 -00000000-0044-0000-0000-000000000000;antrea;Antrea;Kubernetes networking based on Open vSwitch.;runtime;;;https://antrea.devstats.cncf.io/;2021-04-27;sandbox;00000044-0000-0000-0000-000000000000 -00000000-0045-0000-0000-000000000000;athenz;Athenz;Open source platform for X.509 certificate based service authentication and fine grained access control in dynamic infrastructures.;provisioning;;;https://athenz.devstats.cncf.io/;2021-01-26;sandbox;00000045-0000-0000-0000-000000000000 -00000000-0046-0000-0000-000000000000;backstage;Backstage;Backstage is an open platform for building developer portals.;app definition;;;https://backstage.devstats.cncf.io/;2020-09-08;incubating;00000046-0000-0000-0000-000000000000 -00000000-0047-0000-0000-000000000000;bfe;Beyond Front End;Open-source layer 7 load balancer derived from proprietary Baidu FrontEnd.;orchestration;;;https://bfe.devstats.cncf.io/;2020-06-23;sandbox;00000047-0000-0000-0000-000000000000 -00000000-0048-0000-0000-000000000000;brigade;Brigade;Brigade is a tool for running scriptable, automated tasks.;app definition;;;https://brigade.devstats.cncf.io/;2019-03-18;sandbox;00000048-0000-0000-0000-000000000000 -00000000-0049-0000-0000-000000000000;cdk8s;;Cloud Development Kit for Kubernetes.;provisioning;;;https://cdk8s.devstats.cncf.io/;2020-11-10;sandbox;00000049-0000-0000-0000-000000000000 -00000000-0050-0000-0000-000000000000;cert-manager;Cloud native certificate management;Automatically provision and manage TLS certificates in Kubernetes.;provisioning;https://cert-manager.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/cert-manager/icon/color/cert-manager-icon-color.svg;https://certmanager.devstats.cncf.io/;2020-11-10;sandbox;00000050-0000-0000-0000-000000000000 -00000000-0051-0000-0000-000000000000;chaos-mesh;Chaos Mesh;A Chaos Engineering Platform for Kubernetes.;observability;;;https://chaosmesh.devstats.cncf.io/;2020-07-14;incubating;00000051-0000-0000-0000-000000000000 -00000000-0052-0000-0000-000000000000;chaos-blade;ChaosBlade;An easy to use and powerful chaos engineering experiment toolkit.;observability;;;https://chaosblade.devstats.cncf.io/;2021-04-27;sandbox;00000052-0000-0000-0000-000000000000 -00000000-0053-0000-0000-000000000000;chubao-fs;CubeFS;CubeFS (formerly ChubaoFS) is a cloud native distributed file system and object store.;runtime;;;https://chubaofs.devstats.cncf.io/;2019-12-17;sandbox;00000053-0000-0000-0000-000000000000 -00000000-0054-0000-0000-000000000000;cloud-custodian;Cloud Custodian;Rules engine for cloud security, cost optimization, and governance, DSL in yaml for policies to query, filter, and take actions on resources.;provisioning;;;https://cloudcustodian.devstats.cncf.io/;2020-06-23;sandbox;00000054-0000-0000-0000-000000000000 -00000000-0055-0000-0000-000000000000;cni-genie;CNI-Genie;CNI-Genie for choosing pod network of your choice during deployment time. Supported pod networks - Calico, Flannel, Romana, Weave.;runtime;;;https://cnigenie.devstats.cncf.io/;2020-06-23;sandbox;00000055-0000-0000-0000-000000000000 -00000000-0056-0000-0000-000000000000;curiefense;Curiefense;Curiefense is a unified, open source platform protecting cloud native applications.;provisioning;;;https://curiefense.devstats.cncf.io/;2021-01-26;sandbox;00000056-0000-0000-0000-000000000000 -00000000-0057-0000-0000-000000000000;dex;Dex;OpenID Connect (OIDC) identity and OAuth 2.0 provider with pluggable connectors.;provisioning;;;https://dex.devstats.cncf.io/;2020-06-23;sandbox;00000057-0000-0000-0000-000000000000 -00000000-0058-0000-0000-000000000000;fluid;Fluid;Fluid is an orchestration platform for elastic data abstraction and acceleration in cloud native environment.;orchestration;;;https://fluid.devstats.cncf.io/;2021-04-27;sandbox;00000058-0000-0000-0000-000000000000 -00000000-0059-0000-0000-000000000000;fonio;foniod;Data first monitoring agent using (e)BPF, built on RedBPF.;observability;;;https://ingraind.devstats.cncf.io/;2021-03-30;sandbox;00000059-0000-0000-0000-000000000000 -00000000-0060-0000-0000-000000000000;in-toto;;in-toto is a framework to protect supply chain integrity.;provisioning;;;https://intoto.devstats.cncf.io/;2019-08-21;incubating;00000060-0000-0000-0000-000000000000 -00000000-0061-0000-0000-000000000000;inclavare;Inclavare Containers;A novel container runtime, aka confidential container, for cloud-native confidential computing and enclave runtime ecosystem.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/inclavare/icon/color/inclavare-icon-color.svg;https://inclavarecontainers.devstats.cncf.io/;2021-09-14;sandbox;00000061-0000-0000-0000-000000000000 -00000000-0062-0000-0000-000000000000;flagger;Flagger;Progressive delivery Kubernetes operator (Canary, A/B Testing and Blue/Green deployments).;app definition;https://docs.flagger.app/;https://raw.githubusercontent.com/cncf/artwork/master/projects/flux/flagger/icon/color/flagger-icon-color.svg;;2019-07-15;incubating;00000031-0000-0000-0000-000000000000 -00000000-0063-0000-0000-000000000000;k3s;K3s;The certified Kubernetes distribution built for IoT & Edge computing.;platform;;;https://k3s.devstats.cncf.io/;2020-08-19;sandbox;00000062-0000-0000-0000-000000000000 -00000000-0064-0000-0000-000000000000;k8gb;K8GB;A cloud native Kubernetes Global Balancer.;orchestration;;;https://k8gb.devstats.cncf.io/;2021-03-30;sandbox;00000063-0000-0000-0000-000000000000 -00000000-0065-0000-0000-000000000000;k8up;K8up;K8up is a Kubernetes Operator distributed via a Helm chart, compatible with OpenShift and plain Kubernetes.;runtime;;;https://k8up.devstats.cncf.io/;2021-11-16;sandbox;00000064-0000-0000-0000-000000000000 -00000000-0066-0000-0000-000000000000;karmada;Karmada;Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration.;orchestration;;;https://karmada.devstats.cncf.io/;2021-09-14;sandbox;00000065-0000-0000-0000-000000000000 -00000000-0067-0000-0000-000000000000;keptn;Keptn;Cloud-native application life-cycle orchestration. Keptn automates your SLO-driven multi-stage delivery and operations & remediation of your applications.;app definition;;;https://keptn.devstats.cncf.io/;2020-06-23;sandbox;00000066-0000-0000-0000-000000000000 -00000000-0068-0000-0000-000000000000;keylime;Keylime;Bootstrap & Maintain Trust on the Edge / Cloud and IoT.;provisioning;;;https://keylime.devstats.cncf.io/;2020-09-22;sandbox;00000067-0000-0000-0000-000000000000 -00000000-0069-0000-0000-000000000000;krustlet;Krustlet;Run WebAssembly workloads in your Kubernetes cluster.;serverless;;;https://krustlet.devstats.cncf.io/;2021-05-24;sandbox;00000068-0000-0000-0000-000000000000 -00000000-0070-0000-0000-000000000000;kube-ovn;Kube-OVN;A Kubernetes Network Fabric for Enterprises that is Rich in Functions and Easy in Operations.;runtime;;;https://kubeovn.devstats.cncf.io/;2021-01-26;sandbox;00000069-0000-0000-0000-000000000000 -00000000-0071-0000-0000-000000000000;kuberhealthy;Kuberhealthy;A Kubernetes operator for running synthetic checks as pods. Works great with Prometheus!;observability;;;https://kuberhealthy.devstats.cncf.io/;2021-03-30;sandbox;00000070-0000-0000-0000-000000000000 -00000000-0072-0000-0000-000000000000;kubevela;KubeVela;Make shipping applications more enjoyable.;app definition;https://kubevela.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubevela/icon/color/kubevela-icon-color.svg;https://kubevela.devstats.cncf.io/;2021-04-05;sandbox;00000071-0000-0000-0000-000000000000 -00000000-0073-0000-0000-000000000000;kubevirt;KubeVirt;Kubernetes Virtualization API and runtime in order to define and manage virtual machines.;app definition;;;https://kubevirt.devstats.cncf.io/;2019-09-09;incubating;00000072-0000-0000-0000-000000000000 -00000000-0074-0000-0000-000000000000;kudo;KUDO;Kubernetes Universal Declarative Operator.;app definition;;;https://kudo.devstats.cncf.io/;2020-06-23;sandbox;00000073-0000-0000-0000-000000000000 -00000000-0075-0000-0000-000000000000;kuma;Kuma;The universal Envoy service mesh for distributed service connectivity.;orchestration;;;https://kuma.devstats.cncf.io/;2020-06-23;sandbox;00000074-0000-0000-0000-000000000000 -00000000-0076-0000-0000-000000000000;kyverno;Kyverno;Kubernetes Native Policy Management.;provisioning;;;https://kyverno.devstats.cncf.io/;2020-11-10;sandbox;00000075-0000-0000-0000-000000000000 -00000000-0077-0000-0000-000000000000;meshery;Meshery;The service mesh management plane.;orchestration;;;https://meshery.devstats.cncf.io/;2021-06-21;sandbox;00000076-0000-0000-0000-000000000000 -00000000-0078-0000-0000-000000000000;metal3-io;Metal3;Bare metal host provisioning for Kubernetes.;provisioning;;;https://metal3.devstats.cncf.io/;2020-09-08;sandbox;00000077-0000-0000-0000-000000000000 -00000000-0079-0000-0000-000000000000;network-service-mesh;Network Service Mesh;The Hybrid/Multi-cloud IP Service Mesh.;runtime;;;https://networkservicemesh.devstats.cncf.io/;2019-04-11;sandbox;00000078-0000-0000-0000-000000000000 -00000000-0080-0000-0000-000000000000;nocalhost;Nocalhost;Nocalhost is Cloud Native Development Environment.;app definition;;;https://nocalhost.devstats.cncf.io/;2021-11-16;sandbox;00000079-0000-0000-0000-000000000000 -00000000-0081-0000-0000-000000000000;ocm;Open Cluster Management;Make working with many Kubernetes clusters super easy regardless of where they are deployed.;orchestration;;;https://openclustermanagement.devstats.cncf.io/;2021-11-09;sandbox;00000080-0000-0000-0000-000000000000 -00000000-0082-0000-0000-000000000000;osm;Open Service Mesh;Open Service Mesh (OSM) is a lightweight, extensible, cloud native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for highly dynamic microservice environments.;orchestration;;;https://openservicemesh.devstats.cncf.io/;2020-09-08;sandbox;00000081-0000-0000-0000-000000000000 -00000000-0083-0000-0000-000000000000;openebs;OpenEBS;Leading Open Source Container Attached Storage, built using Cloud Native Architecture, simplifies running Stateful Applications on Kubernetes.;runtime;;;https://openebs.devstats.cncf.io/;2019-05-14;sandbox;00000082-0000-0000-0000-000000000000 -00000000-0084-0000-0000-000000000000;open-gitops;OpenGitOps;OpenGitOps is a set of open-source standards, best practices, and community-focused education to help organizations adopt a structured, standardized approach to implementing GitOps.;app definition;;;https://gitopswg.devstats.cncf.io/;2021-01-26;sandbox;00000083-0000-0000-0000-000000000000 -00000000-0085-0000-0000-000000000000;open-kruise;OpenKruise;Automate application management on Kubernetes.;app definition;;;https://openkruise.devstats.cncf.io/;2020-11-10;sandbox;00000084-0000-0000-0000-000000000000 -00000000-0086-0000-0000-000000000000;open-metrics;OpenMetrics;Evolving the Prometheus exposition format into a standard.;observability;;;https://openmetrics.devstats.cncf.io/;2018-08-10;incubating;00000085-0000-0000-0000-000000000000 -00000000-0087-0000-0000-000000000000;openyurt;OpenYurt;An open platform that extending your native Kubernetes to edge.;provisioning;;;https://openyurt.devstats.cncf.io/;2020-09-08;sandbox;00000086-0000-0000-0000-000000000000 -00000000-0088-0000-0000-000000000000;oras;ORAS;ORAS is the tool for working with OCI Artifacts.;runtime;;;https://oras.devstats.cncf.io/;2021-06-02;sandbox;00000087-0000-0000-0000-000000000000 -00000000-0089-0000-0000-000000000000;parsec;PARSEC;Platform AbstRaction for SECurity service.;provisioning;;;https://parsec.devstats.cncf.io/;2020-06-23;sandbox;00000088-0000-0000-0000-000000000000 -00000000-0090-0000-0000-000000000000;piraeus;Piraeus;High Available Datastore for Kubernetes.;runtime;;;https://piraeus.devstats.cncf.io/;2021-01-26;sandbox;00000089-0000-0000-0000-000000000000 -00000000-0091-0000-0000-000000000000;pixie;Pixie;Open source Kubernetes observability for developers.;observability;;;https://pixie.devstats.cncf.io/;2021-06-15;sandbox;00000090-0000-0000-0000-000000000000 -00000000-0092-0000-0000-000000000000;porter;Porter;Porter enables you to package your application artifact, client tools, configuration and deployment logic together as a versioned bundle that you can distribute, and install with a single command.;app definition;;;https://porter.devstats.cncf.io/;2020-09-08;sandbox;00000091-0000-0000-0000-000000000000 -00000000-0093-0000-0000-000000000000;pravega;Pravega;Streaming as a new software defined storage primitive.;app definition;;;https://pravega.devstats.cncf.io/;2020-11-10;sandbox;00000092-0000-0000-0000-000000000000 -00000000-0094-0000-0000-000000000000;schemahero;SchemaHero;A Kubernetes operator for declarative database schema management (gitops for database schemas).;app definition;;;https://schemahero.devstats.cncf.io/;2020-11-10;sandbox;00000093-0000-0000-0000-000000000000 -00000000-0095-0000-0000-000000000000;serverless-workflow;Serverless Workflow;Standards-based DSL and open-source dev tools and runtimes are at the heart of the Serverless Workflow project.;app definition;;;https://serverlessworkflow.devstats.cncf.io/;2020-07-14;sandbox;00000094-0000-0000-0000-000000000000 -00000000-0096-0000-0000-000000000000;smi;Service Mesh Interface;A standard interface for service meshes on Kubernetes.;orchestration;;;https://smi.devstats.cncf.io/;2020-03-16;sandbox;00000095-0000-0000-0000-000000000000 -00000000-0097-0000-0000-000000000000;smp;Service Mesh Performance;Standardizing Service Mesh Value Measurement.;orchestration;;;https://servicemeshperformance.devstats.cncf.io/;2021-06-21;sandbox;00000096-0000-0000-0000-000000000000 -00000000-0098-0000-0000-000000000000;skooner;Skooner;Simple Kubernetes real-time dashboard and management.;observability;;;https://k8dash.devstats.cncf.io/;;sandbox;00000097-0000-0000-0000-000000000000 -00000000-0099-0000-0000-000000000000;strimzi;Strimzi;Apache Kafka running on Kubernetes.;app definition;;;https://strimzi.devstats.cncf.io/;2019-08-28;sandbox;00000098-0000-0000-0000-000000000000 -00000000-0100-0000-0000-000000000000;submariner;Submariner;Submariner enables direct networking between Pods and Services in different Kubernetes clusters, either on-premises or in the cloud.;runtime;;;https://submariner.devstats.cncf.io/;2021-04-27;sandbox;00000099-0000-0000-0000-000000000000 -00000000-0101-0000-0000-000000000000;superedge;SuperEdge;An edge-native container management system for edge computing.;provisioning;;;https://superedge.devstats.cncf.io/;2021-09-14;sandbox;00000100-0000-0000-0000-000000000000 -00000000-0102-0000-0000-000000000000;telepresence;Telepresence;Local development against a remote Kubernetes or OpenShift cluster.;app definition;;;https://telepresence.devstats.cncf.io/;2018-05-22;sandbox;00000101-0000-0000-0000-000000000000 -00000000-0103-0000-0000-000000000000;tinkerbell;Tinkerbell;A workflow engine for provisioning bare metal.;provisioning;;;https://tinkerbell.devstats.cncf.io/;2020-11-10;sandbox;00000102-0000-0000-0000-000000000000 -00000000-0104-0000-0000-000000000000;tremor;Tremor;An early-stage event processing system for unstructured data with rich support for structural pattern-matching, filtering and transformation.;app definition;;;https://tremor.devstats.cncf.io/;2020-09-08;sandbox;00000103-0000-0000-0000-000000000000 -00000000-0105-0000-0000-000000000000;trickster;Trickster;Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator.;observability;;;https://trickster.devstats.cncf.io/;2021-03-30;sandbox;00000104-0000-0000-0000-000000000000 -00000000-0106-0000-0000-000000000000;vineyard;Vineyard;Vineyard (v6d) is an in-memory immutable data manager.;runtime;;;https://vineyard.devstats.cncf.io/;2021-04-27;sandbox;00000105-0000-0000-0000-000000000000 -00000000-0107-0000-0000-000000000000;virtual-kubelet;Virtual Kubelet;Virtual Kubelet is an open source Kubernetes kubelet implementation.;serverless;;;https://virtualkubelet.devstats.cncf.io/;2018-12-04;sandbox;00000106-0000-0000-0000-000000000000 -00000000-0108-0000-0000-000000000000;volcano;Volcano;A Kubernetes native system for high-performance workloads.;orchestration;;;https://volcano.devstats.cncf.io/;2020-04-10;incubating;00000107-0000-0000-0000-000000000000 -00000000-0109-0000-0000-000000000000;wasm-cloud;wasmCloud;wasmCloud allows for simple, secure, distributed application development using WebAssembly actors and capability providers.;orchestration;;;https://wasmcloud.devstats.cncf.io/;2021-07-12;sandbox;00000108-0000-0000-0000-000000000000 -00000000-0110-0000-0000-000000000000;wasm-edge;WasmEdge;WasmEdge is a lightweight, high-performance, and extensible WebAssembly runtime for cloud native, edge, and decentralized applications. It powers serverless apps, embedded functions, microservices, smart contracts, and IoT devices.;runtime;;;https://wasmedge.devstats.cncf.io/;2021-04-27;sandbox;00000109-0000-0000-0000-000000000000 -00000000-0111-0000-0000-000000000000;knative;Knative;Kubernetes-based platform to build, deploy, and manage modern serverless workloads.;serverless;;;;2022-03-02;incubating;00000110-0000-0000-0000-000000000000 -00000000-0113-0000-0000-000000000000;krator;Krator;Kubernetes Rust State Machine Operator.;app definition;;;https://krator.devstats.cncf.io/;2021-05-26;sandbox;00000111-0000-0000-0000-000000000000 -00000000-0114-0000-0000-000000000000;devfile;Devfile;An open standard defining containerized development environments that enables developer tools to simplify and accelerate workflows.;app definition;;;https://devfile.devstats.cncf.io/;2021-01-11;sandbox;00000112-0000-0000-0000-000000000000 -00000000-0115-0000-0000-000000000000;kube-rs;;rust kubernetes client and controller runtime.;orchestration;;;https://kubers.devstats.cncf.io/;2021-11-16;sandbox;00000113-0000-0000-0000-000000000000 -00000000-0116-0000-0000-000000000000;kubedl;KubeDL;Run your deep learning workloads on Kubernetes more easily and efficiently.;provisioning;;;https://kubedl.devstats.cncf.io/;2021-05-14;sandbox;00000114-0000-0000-0000-000000000000 -00000000-0117-0000-0000-000000000000;openelb;OpenELB;Load Balancer Implementation for Kubernetes in Bare-Metal, Edge, and Virtualization.;provisioning;;;https://openelb.devstats.cncf.io;2021-09-11;sandbox;00000115-0000-0000-0000-000000000000 -00000000-0118-0000-0000-000000000000;confidential-containers;Confidential Containers;Confidential Containers is an open source community working to enable cloud native confidential computing by leveraging Trusted Execution Environments to protect containers and data.;provisioning;;;https://confidentialcontainers.devstats.cncf.io/;2022-03-08;sandbox;00000116-0000-0000-0000-000000000000 -00000000-0119-0000-0000-000000000000;openfunction;Open Function;Cloud Native Function-as-a-Service Platform;serverless;;;https://openfunction.devstats.cncf.io;2021-11-09;sandbox;00000117-0000-0000-0000-000000000000 -00000000-0120-0000-0000-000000000000;sealer;;A tool to seal application's all dependencies and Kubernetes into CloudImage, distribute this application anywhere via CloudImage, and run it within any cluster in one command.;app definition;;;https://sealer.devstats.cncf.io;2022-04-26;sandbox;00000118-0000-0000-0000-000000000000 -00000000-0121-0000-0000-000000000000;teller;Teller;A secrets management tool for developers built in Go - never leave your command line for secrets.;provisioning;;;https://teller.devstats.cncf.io;2022-04-26;sandbox;00000119-0000-0000-0000-000000000000 -00000000-0122-0000-0000-000000000000;fabedge;FabEdge;A Secure Edge Computing Container Networking Solution based on Kubernetes & KubeEdge.;runtime;;;https://fabedge.devstats.cncf.io;2022-03-08;sandbox;00000120-0000-0000-0000-000000000000 -00000000-0123-0000-0000-000000000000;clusterpedia;Clusterpedia;Clusterpedia is used for complex resources search across multiple clusters, support simultaneous search of a single kind of resource or multiple kinds of resources existing in multiple clusters.;orchestration;;;https://clusterpedia.devstats.cncf.io;2022-06-14;sandbox;00000121-0000-0000-0000-000000000000 -00000000-0124-0000-0000-000000000000;opencost;Opencost;OpenCost provides visibility into current and historical Kubernetes spend and resource allocation.;observability;https://www.opencost.io;;https://opencost.teststats.cncf.io/;2022-06-14;sandbox;00000122-0000-0000-0000-000000000000 -00000000-0125-0000-0000-000000000000;aeraki-mesh;Aeraki Mesh;Aeraki Mesh allows you to manage any layer-7 traffic in a service mesh.;orchestration;;;https://aerakimesh.teststats.cncf.io/;2022-06-14;sandbox;00000123-0000-0000-0000-000000000000 -00000000-0126-0000-0000-000000000000;curve;Curve;Curve is a high-performance, lightweight-operation, cloud-native open source distributed storage system.;app definition;;;https://curve.teststats.cncf.io/;2022-06-14;sandbox;00000124-0000-0000-0000-000000000000 -00000000-0127-0000-0000-000000000000;openfeature;OpenFeature;Standardizing Feature Flagging for Everyone.;app definition;;;https://openfeature.teststats.cncf.io/;2022-06-14;sandbox;00000125-0000-0000-0000-000000000000 -00000000-0128-0000-0000-000000000000;kubewarden;Kubewarden;Kubewarden is a policy engine for Kubernetes. It helps with keeping your Kubernetes clusters secure and compliant.;provisioning;;;https://kubewarden.teststats.cncf.io/;2022-06-14;sandbox;00000126-0000-0000-0000-000000000000 -00000000-0129-0000-0000-000000000000;devstream;DevStream;DevStream: the open-source DevOps toolchain manager (DTM).;provisioning;;;https://devstream.teststats.cncf.io/;2022-06-14;sandbox;00000127-0000-0000-0000-000000000000 +project_id;name;display_name;description;category;home_url;logo_url;devstats_url;accepted_at;maturity;foundation +00000000-0001-0000-0000-000000000000;artifact-hub;Artifact Hub;Artifact Hub is a web-based application that enables finding, installing, and publishing packages and configurations for CNCF projects.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg;https://artifacthub.devstats.cncf.io/;2020-06-23;sandbox;cncf +00000000-0002-0000-0000-000000000000;containerd;;An industry-standard container runtime with an emphasis on simplicity, robustness and portability.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/containerd/icon/color/containerd-icon-color.svg;https://containerd.devstats.cncf.io;2017-03-29;graduated;cncf +00000000-0003-0000-0000-000000000000;core-dns;CoreDNS;CoreDNS is a DNS server. It is written in Go. It can be used in a multitude of environments because of its flexibility. ;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/coredns/icon/color/coredns-icon-color.svg;https://coredns.devstats.cncf.io;2017-02-27;graduated;cncf +00000000-0004-0000-0000-000000000000;envoy;Envoy;Envoy is an open source edge and service proxy, designed for cloud-native applications.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/envoy/icon/color/envoy-icon-color.svg;https://envoy.devstats.cncf.io/;2017-09-13;graduated;cncf +00000000-0005-0000-0000-000000000000;etcd;etcd;Distributed reliable key-value store for the most critical data of a distributed system.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/etcd/icon/color/etcd-icon-color.svg;https://etcd.devstats.cncf.io/;2018-12-11;graduated;cncf +00000000-0006-0000-0000-000000000000;fluentd;Fluentd;Fluentd is an open source data collector for unified logging layer.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/fluentd/icon/color/fluentd-icon-color.svg;https://fluentd.devstats.cncf.io/;2016-11-08;graduated;cncf +00000000-0007-0000-0000-000000000000;harbor;Harbor;An open source trusted cloud native registry project that stores, signs, and scans content.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/harbor/icon/color/harbor-icon-color.svg;https://harbor.devstats.cncf.io/;2018-07-31;graduated;cncf +00000000-0008-0000-0000-000000000000;helm;Helm;The Kubernetes Package Manager.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/helm/icon/color/helm-icon-color.svg;https://helm.devstats.cncf.io/;2018-06-01;graduated;cncf +00000000-0009-0000-0000-000000000000;jaeger;Jaeger;Jaeger: open source, end-to-end distributed tracing. Monitor and troubleshoot transactions in complex distributed systems.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/jaeger/icon/color/jaeger-icon-color.svg;https://jaeger.devstats.cncf.io/;2017-09-13;graduated;cncf +00000000-0010-0000-0000-000000000000;kubernetes;Kubernetes;Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubernetes/icon/color/kubernetes-icon-color.svg;https://k8s.devstats.cncf.io/;2016-03-10;graduated;cncf +00000000-0011-0000-0000-000000000000;linkerd;Linkerd;Ultralight, security-first service mesh for Kubernetes. Main repo for Linkerd 2.x.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/275957f868af92f9a1456ded0d3629cce961645c/projects/linkerd/icon/color/linkerd-icon-color.svg;https://linkerd.devstats.cncf.io/;2017-01-23;graduated;cncf +00000000-0012-0000-0000-000000000000;opa;Open Policy Agent;An open source, general-purpose policy engine.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/opa/icon/color/opa-icon-color.svg;https://opa.devstats.cncf.io/;2018-03-29;graduated;cncf +00000000-0013-0000-0000-000000000000;prometheus;Prometheus;The Prometheus monitoring system and time series database.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/prometheus/icon/color/prometheus-icon-color.svg;https://prometheus.devstats.cncf.io/;2016-05-09;graduated;cncf +00000000-0014-0000-0000-000000000000;rook;Rook;Storage Orchestration for Kubernetes.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/rook/icon/color/rook-icon-color.svg;https://rook.devstats.cncf.io/;2018-01-29;graduated;cncf +00000000-0015-0000-0000-000000000000;tuf;The Update Framework;Python reference implementation of The Update Framework (TUF).;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/tuf/icon/color/tuf-icon-color.svg;https://tuf.devstats.cncf.io/;2017-10-24;graduated;cncf +00000000-0016-0000-0000-000000000000;tikv;TiKV;A distributed transactional key-value database. Based on the design of Google Spanner and HBase, but simpler to manage and without dependencies on any distributed filesystem.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/tikv/icon/color/tikv-icon-color.svg;https://tikv.devstats.cncf.io/;2018-08-28;graduated;cncf +00000000-0017-0000-0000-000000000000;vitess;Vitess;Vitess is a database clustering system for horizontal scaling of MySQL.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/vitess/icon/color/vitess-icon-color.svg;https://vitess.devstats.cncf.io/;2018-02-05;graduated;cncf +00000000-0018-0000-0000-000000000000;argo;Argo;Open source tools for Kubernetes to run workflows, manage clusters, and do GitOps right.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/argo/icon/color/argo-icon-color.svg;https://argo.devstats.cncf.io/;2020-04-07;incubating;cncf +00000000-0019-0000-0000-000000000000;buildpacks;Buildpacks;Cloud Native Buildpacks transform your application source code into images that can run on any cloud.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/buildpacks/icon/color/buildpacks-icon-color.svg;https://buildpacks.devstats.cncf.io/;2018-10-03;incubating;cncf +00000000-0020-0000-0000-000000000000;cilium;Cilium;eBPF-based Networking, Observability, and Security.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/cilium/icon/color/cilium_icon-color.svg;https://cilium.devstats.cncf.io/;2021-10-13;incubating;cncf +00000000-0021-0000-0000-000000000000;cloudevents;CloudEvents;A specification for describing event data in a common way.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/cloudevents/icon/color/cloudevents-icon-color.svg;https://cloudevents.devstats.cncf.io/;2018-05-22;incubating;cncf +00000000-0022-0000-0000-000000000000;cni;Container Network Interface;Container Network Interface - networking for Linux containers.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/cni/icon/color/cni-icon-color.svg;https://cni.devstats.cncf.io/;2017-05-23;incubating;cncf +00000000-0023-0000-0000-000000000000;contour;Contour;Contour is an open source Kubernetes ingress controller providing the control plane for the Envoy edge and service proxy.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/contour/icon/color/contour-icon-color.svg;https://contour.devstats.cncf.io/;2020-07-07;incubating;cncf +00000000-0024-0000-0000-000000000000;cortex;Cortex;A multitenant, horizontally scalable Prometheus as a Service.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/cortex/icon/color/cortex-icon-color.svg;https://cortex.devstats.cncf.io/;2018-09-20;incubating;cncf +00000000-0025-0000-0000-000000000000;cri-o;CRI-O;Open Container Initiative-based implementation of Kubernetes Container Runtime Interface.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/crio/icon/color/crio-icon-color.svg;https://crio.devstats.cncf.io/;2019-04-08;incubating;cncf +00000000-0026-0000-0000-000000000000;crossplane;Crossplane;Compose cloud infrastructure and services into custom platform APIs.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/crossplane/icon/color/crossplane-icon-color.svg;https://crossplane.devstats.cncf.io/;2020-06-23;incubating;cncf +00000000-0027-0000-0000-000000000000;dapr;Distributed Application Runtime;Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.;serverless;;https://raw.githubusercontent.com/cncf/artwork/master/projects/dapr/icon/color/dapr-icon-color.svg;https://dapr.devstats.cncf.io/;2021-11-03;incubating;cncf +00000000-0028-0000-0000-000000000000;dragonfly;Dragonfly;Dragonfly is an intelligent P2P based image and file distribution system, it also provides a variety of enterprise-level (efficiency, stability, safety, low-cost) product features.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/dragonfly/icon/color/dragonfly-icon-color.svg;https://dragonfly.devstats.cncf.io/;2018-11-15;incubating;cncf +00000000-0029-0000-0000-000000000000;emissary-ingress;Emissary-Ingress;open source Kubernetes-native API gateway for microservices built on the Envoy Proxy.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/emissary-ingress/icon/color/emissary-ingress-icon-color.svg;https://emissaryingress.devstats.cncf.io/;2021-04-14;incubating;cncf +00000000-0030-0000-0000-000000000000;falco;Falco;Falco, the cloud-native runtime security project, is the de facto Kubernetes threat detection engine.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/falco/icon/color/falco-icon-color.svg;https://falco.devstats.cncf.io/;2018-10-10;incubating;cncf +00000000-0031-0000-0000-000000000000;flux-project;Flux;Open and extensible continuous delivery solution for Kubernetes. Powered by GitOps Toolkit.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/flux/icon/color/flux-icon-color.svg;https://flux.devstats.cncf.io/;2019-07-15;incubating;cncf +00000000-0032-0000-0000-000000000000;grpc;gRPC;A high performance, open source universal RPC framework.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/grpc/icon/color/grpc-icon-color.svg;https://grpc.devstats.cncf.io/;2017-02-16;incubating;cncf +00000000-0033-0000-0000-000000000000;keda;KEDA;KEDA is a Kubernetes-based Event Driven Autoscaling component. It provides event driven scale for any container running in Kubernetes.;serverless;;https://raw.githubusercontent.com/cncf/artwork/master/projects/keda/icon/color/keda-icon-color.svg;https://keda.devstats.cncf.io/;2020-03-09;incubating;cncf +00000000-0034-0000-0000-000000000000;kube-edge;KubeEdge;A Kubernetes Native Edge Computing Framework.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubeedge/icon/color/kubeedge-icon-color.svg;https://kubeedge.devstats.cncf.io/;2019-03-18;incubating;cncf +00000000-0035-0000-0000-000000000000;litmus-chaos;Litmus;Litmus is an open source Chaos Engineering platform that enables teams to identify weaknesses & potential outages in infrastructures by inducing chaos tests in a controlled way.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/litmus/icon/color/litmus-icon-color.svg;https://litmuschaos.devstats.cncf.io/;2020-06-23;incubating;cncf +00000000-0036-0000-0000-000000000000;longhorn;Longhorn;Cloud-Native distributed storage built on and for Kubernetes.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/longhorn/icon/color/longhorn-icon-color.svg;https://longhorn.devstats.cncf.io/;2019-10-11;incubating;cncf +00000000-0037-0000-0000-000000000000;nats;NATS;Connective Technology for Adaptive Edge & Distributed Systems.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/nats/icon/color/nats-icon-color.svg;https://nats.devstats.cncf.io/;2018-03-15;incubating;cncf +00000000-0038-0000-0000-000000000000;notary;Notary;Notary is a project that allows anyone to have trust over arbitrary collections of data.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/notary/icon/color/notary-icon-color.svg;https://notary.devstats.cncf.io/;2017-10-24;incubating;cncf +00000000-0039-0000-0000-000000000000;open-telemetry;OpenTelemetry;High-quality, ubiquitous, and portable telemetry to enable effective observability.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/opentelemetry/icon/color/opentelemetry-icon-color.svg;https://opentelemetry.devstats.cncf.io/;2019-05-07;incubating;cncf +00000000-0040-0000-0000-000000000000;operator-framework;Operator Framework;SDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/operatorframework/icon/color/operatorframework-icon-color.svg;https://operatorframework.devstats.cncf.io/;2020-07-09;incubating;cncf +00000000-0041-0000-0000-000000000000;spiffe;SPIFFE;A universal identity control plane for distributed systems.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/spiffe/icon/color/spiffe-icon-color.svg;https://spiffe.devstats.cncf.io/;2018-03-29;incubating;cncf +00000000-0042-0000-0000-000000000000;thanos;Thanos;Open source, highly available Prometheus setup with long term storage capabilities.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/thanos/icon/color/thanos-icon-color.svg;https://thanos.devstats.cncf.io/;2019-07-20;incubating;cncf +00000000-0043-0000-0000-000000000000;akri;Akri;A Kubernetes Resource Interface for the Edge.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/akri/icon/light/akri-icon-light.svg;https://akri.devstats.cncf.io/;2021-09-14;sandbox;cncf +00000000-0044-0000-0000-000000000000;antrea;Antrea;Kubernetes networking based on Open vSwitch.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/antrea/icon/color/antrea-icon-color.svg;https://antrea.devstats.cncf.io/;2021-04-27;sandbox;cncf +00000000-0045-0000-0000-000000000000;athenz;Athenz;Open source platform for X.509 certificate based service authentication and fine grained access control in dynamic infrastructures.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/athenz/icon/color/athenz-icon-color.svg;https://athenz.devstats.cncf.io/;2021-01-26;sandbox;cncf +00000000-0046-0000-0000-000000000000;backstage;Backstage;Backstage is an open platform for building developer portals.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/backstage/icon/color/backstage-icon-color.svg;https://backstage.devstats.cncf.io/;2020-09-08;incubating;cncf +00000000-0047-0000-0000-000000000000;bfe;Beyond Front End;Open-source layer 7 load balancer derived from proprietary Baidu FrontEnd.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/bfe/icon/color/bfe-icon-color.svg;https://bfe.devstats.cncf.io/;2020-06-23;sandbox;cncf +00000000-0048-0000-0000-000000000000;brigade;Brigade;Brigade is a tool for running scriptable, automated tasks.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/brigade/icon/color/brigade-icon-color.svg;https://brigade.devstats.cncf.io/;2019-03-18;sandbox;cncf +00000000-0049-0000-0000-000000000000;cdk8s;;Cloud Development Kit for Kubernetes.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/cdk8s/icon/color/cdk8s-icon-color.svg;https://cdk8s.devstats.cncf.io/;2020-11-10;sandbox;cncf +00000000-0050-0000-0000-000000000000;cert-manager;Cloud native certificate management;Automatically provision and manage TLS certificates in Kubernetes.;provisioning;https://cert-manager.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/cert-manager/icon/color/cert-manager-icon-color.svg;https://certmanager.devstats.cncf.io/;2020-11-10;sandbox;cncf +00000000-0051-0000-0000-000000000000;chaos-mesh;Chaos Mesh;A Chaos Engineering Platform for Kubernetes.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/chaosmesh/icon/color/chaosmesh-icon-color.svg;https://chaosmesh.devstats.cncf.io/;2020-07-14;incubating;cncf +00000000-0052-0000-0000-000000000000;chaos-blade;ChaosBlade;An easy to use and powerful chaos engineering experiment toolkit.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/chaosblade/icon/color/chaosblade-icon-color.svg;https://chaosblade.devstats.cncf.io/;2021-04-27;sandbox;cncf +00000000-0053-0000-0000-000000000000;chubao-fs;CubeFS;CubeFS (formerly ChubaoFS) is a cloud native distributed file system and object store.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/chubaofs/icon/color/chubaofs-icon-color.svg;https://chubaofs.devstats.cncf.io/;2019-12-17;sandbox;cncf +00000000-0054-0000-0000-000000000000;cloud-custodian;Cloud Custodian;Rules engine for cloud security, cost optimization, and governance, DSL in yaml for policies to query, filter, and take actions on resources.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/cloudcustodian/icon/color/cloudcustodian-icon-color.svg;https://cloudcustodian.devstats.cncf.io/;2020-06-23;sandbox;cncf +00000000-0055-0000-0000-000000000000;cni-genie;CNI-Genie;CNI-Genie for choosing pod network of your choice during deployment time. Supported pod networks - Calico, Flannel, Romana, Weave.;runtime;;https://landscape.cncf.io/logos/cni-genie.svg;https://cnigenie.devstats.cncf.io/;2020-06-23;sandbox;cncf +00000000-0056-0000-0000-000000000000;curiefense;Curiefense;Curiefense is a unified, open source platform protecting cloud native applications.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/curiefense/icon/color/curiefense-icon-color.svg;https://curiefense.devstats.cncf.io/;2021-01-26;sandbox;cncf +00000000-0057-0000-0000-000000000000;dex;Dex;OpenID Connect (OIDC) identity and OAuth 2.0 provider with pluggable connectors.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/dex/icon/color/dex-icon-color.svg;https://dex.devstats.cncf.io/;2020-06-23;sandbox;cncf +00000000-0058-0000-0000-000000000000;fluid;Fluid;Fluid is an orchestration platform for elastic data abstraction and acceleration in cloud native environment.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/fluid/icon/color/fluid-icon-color.svg;https://fluid.devstats.cncf.io/;2021-04-27;sandbox;cncf +00000000-0059-0000-0000-000000000000;fonio;foniod;Data first monitoring agent using (e)BPF, built on RedBPF.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/fonio/icon/color/fonio-icon-color.svg;https://ingraind.devstats.cncf.io/;2021-03-30;sandbox;cncf +00000000-0060-0000-0000-000000000000;in-toto;;in-toto is a framework to protect supply chain integrity.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/in-toto/icon/color/in-toto-icon-color.svg;https://intoto.devstats.cncf.io/;2019-08-21;incubating;cncf +00000000-0061-0000-0000-000000000000;inclavare;Inclavare Containers;A novel container runtime, aka confidential container, for cloud-native confidential computing and enclave runtime ecosystem.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/inclavare/icon/color/inclavare-icon-color.svg;https://inclavarecontainers.devstats.cncf.io/;2021-09-14;sandbox;cncf +00000000-0062-0000-0000-000000000000;flagger;Flagger;Progressive delivery Kubernetes operator (Canary, A/B Testing and Blue/Green deployments).;app definition;https://docs.flagger.app/;https://raw.githubusercontent.com/cncf/artwork/master/projects/flux/flagger/icon/color/flagger-icon-color.svg;;2019-07-15;incubating;cncf +00000000-0063-0000-0000-000000000000;k3s;K3s;The certified Kubernetes distribution built for IoT & Edge computing.;platform;;https://raw.githubusercontent.com/cncf/artwork/master/projects/k3s/icon/color/k3s-icon-color.svg;https://k3s.devstats.cncf.io/;2020-08-19;sandbox;cncf +00000000-0064-0000-0000-000000000000;k8gb;K8GB;A cloud native Kubernetes Global Balancer.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/k8gb/icon/color/k8gb-icon-color.svg;https://k8gb.devstats.cncf.io/;2021-03-30;sandbox;cncf +00000000-0065-0000-0000-000000000000;k8up;K8up;K8up is a Kubernetes Operator distributed via a Helm chart, compatible with OpenShift and plain Kubernetes.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/k8up/icon/k8up-icon-color.svg;https://k8up.devstats.cncf.io/;2021-11-16;sandbox;cncf +00000000-0066-0000-0000-000000000000;karmada;Karmada;Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/karmada/icon/color/karmada-icon-color.svg;https://karmada.devstats.cncf.io/;2021-09-14;sandbox;cncf +00000000-0067-0000-0000-000000000000;keptn;Keptn;Cloud-native application life-cycle orchestration. Keptn automates your SLO-driven multi-stage delivery and operations & remediation of your applications.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/keptn/icon/color/keptn-icon-color.svg;https://keptn.devstats.cncf.io/;2020-06-23;sandbox;cncf +00000000-0068-0000-0000-000000000000;keylime;Keylime;Bootstrap & Maintain Trust on the Edge / Cloud and IoT.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/keylime/icon/color/keylime-icon-color.svg;https://keylime.devstats.cncf.io/;2020-09-22;sandbox;cncf +00000000-0069-0000-0000-000000000000;krustlet;Krustlet;Run WebAssembly workloads in your Kubernetes cluster.;serverless;;https://raw.githubusercontent.com/cncf/artwork/master/projects/krustlet/icon/color/krustlet-icon-color.svg;https://krustlet.devstats.cncf.io/;2021-05-24;sandbox;cncf +00000000-0070-0000-0000-000000000000;kube-ovn;Kube-OVN;A Kubernetes Network Fabric for Enterprises that is Rich in Functions and Easy in Operations.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kube-ovn/icon/color/kube-ovn-icon-color.svg;https://kubeovn.devstats.cncf.io/;2021-01-26;sandbox;cncf +00000000-0071-0000-0000-000000000000;kuberhealthy;Kuberhealthy;A Kubernetes operator for running synthetic checks as pods. Works great with Prometheus!;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kuberhealthy/icon/color/kuberhealthy-icon-color.svg;https://kuberhealthy.devstats.cncf.io/;2021-03-30;sandbox;cncf +00000000-0072-0000-0000-000000000000;kubevela;KubeVela;Make shipping applications more enjoyable.;app definition;https://kubevela.io/;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubevela/icon/color/kubevela-icon-color.svg;https://kubevela.devstats.cncf.io/;2021-04-05;sandbox;cncf +00000000-0073-0000-0000-000000000000;kubevirt;KubeVirt;Kubernetes Virtualization API and runtime in order to define and manage virtual machines.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubevirt/icon/color/kubevirt-icon-color.svg;https://kubevirt.devstats.cncf.io/;2019-09-09;incubating;cncf +00000000-0074-0000-0000-000000000000;kudo;KUDO;Kubernetes Universal Declarative Operator.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kudo/icon/color/kudo-icon-color.svg;https://kudo.devstats.cncf.io/;2020-06-23;sandbox;cncf +00000000-0075-0000-0000-000000000000;kuma;Kuma;The universal Envoy service mesh for distributed service connectivity.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kuma/icon/color/kuma-icon-color.svg;https://kuma.devstats.cncf.io/;2020-06-23;sandbox;cncf +00000000-0076-0000-0000-000000000000;kyverno;Kyverno;Kubernetes Native Policy Management.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kyverno/icon/color/kyverno-icon-color.svg;https://kyverno.devstats.cncf.io/;2020-11-10;sandbox;cncf +00000000-0077-0000-0000-000000000000;meshery;Meshery;The service mesh management plane.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/meshery/icon/meshery-logo-light.svg;https://meshery.devstats.cncf.io/;2021-06-21;sandbox;cncf +00000000-0078-0000-0000-000000000000;metal3-io;Metal3;Bare metal host provisioning for Kubernetes.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/metal3/icon/color/metal3-icon-color.svg;https://metal3.devstats.cncf.io/;2020-09-08;sandbox;cncf +00000000-0079-0000-0000-000000000000;network-service-mesh;Network Service Mesh;The Hybrid/Multi-cloud IP Service Mesh.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/networkservicemesh/icon/color/networkservicemesh-icon-color.svg;https://networkservicemesh.devstats.cncf.io/;2019-04-11;sandbox;cncf +00000000-0080-0000-0000-000000000000;nocalhost;Nocalhost;Nocalhost is Cloud Native Development Environment.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/nocalhost/icon/color/nocalhost-icon-color.svg;https://nocalhost.devstats.cncf.io/;2021-11-16;sandbox;cncf +00000000-0081-0000-0000-000000000000;ocm;Open Cluster Management;Make working with many Kubernetes clusters super easy regardless of where they are deployed.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/open-cluster-management/icon/color/ocm-icon-color.png;https://openclustermanagement.devstats.cncf.io/;2021-11-09;sandbox;cncf +00000000-0082-0000-0000-000000000000;osm;Open Service Mesh;Open Service Mesh (OSM) is a lightweight, extensible, cloud native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for highly dynamic microservice environments.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/openservicemesh/icon/color/openservicemesh-icon-color.svg;https://openservicemesh.devstats.cncf.io/;2020-09-08;sandbox;cncf +00000000-0083-0000-0000-000000000000;openebs;OpenEBS;Leading Open Source Container Attached Storage, built using Cloud Native Architecture, simplifies running Stateful Applications on Kubernetes.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/openebs/icon/color/openebs-icon-color.svg;https://openebs.devstats.cncf.io/;2019-05-14;sandbox;cncf +00000000-0084-0000-0000-000000000000;open-gitops;OpenGitOps;OpenGitOps is a set of open-source standards, best practices, and community-focused education to help organizations adopt a structured, standardized approach to implementing GitOps.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/opengitops/icon/color/opengitops-icon-color.svg;https://gitopswg.devstats.cncf.io/;2021-01-26;sandbox;cncf +00000000-0085-0000-0000-000000000000;open-kruise;OpenKruise;Automate application management on Kubernetes.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/openkruise/icon/color/openkruise-icon-color.svg;https://openkruise.devstats.cncf.io/;2020-11-10;sandbox;cncf +00000000-0086-0000-0000-000000000000;open-metrics;OpenMetrics;Evolving the Prometheus exposition format into a standard.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/openmetrics/icon/color/openmetrics-icon-color.svg;https://openmetrics.devstats.cncf.io/;2018-08-10;incubating;cncf +00000000-0087-0000-0000-000000000000;openyurt;OpenYurt;An open platform that extending your native Kubernetes to edge.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/openyurt/icon/color/openyurt-icon-color.svg;https://openyurt.devstats.cncf.io/;2020-09-08;sandbox;cncf +00000000-0088-0000-0000-000000000000;oras;ORAS;ORAS is the tool for working with OCI Artifacts.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/oras/horizontal/color/oras-horizontal-color.svg;https://oras.devstats.cncf.io/;2021-06-02;sandbox;cncf +00000000-0089-0000-0000-000000000000;parsec;PARSEC;Platform AbstRaction for SECurity service.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/parsec/icon/color/parsec-icon-color.svg;https://parsec.devstats.cncf.io/;2020-06-23;sandbox;cncf +00000000-0090-0000-0000-000000000000;piraeus;Piraeus;High Available Datastore for Kubernetes.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/piraeus/icon/color/piraeus-icon-color.svg;https://piraeus.devstats.cncf.io/;2021-01-26;sandbox;cncf +00000000-0091-0000-0000-000000000000;pixie;Pixie;Open source Kubernetes observability for developers.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/pixie/icon/color/pixie-icon-color.svg;https://pixie.devstats.cncf.io/;2021-06-15;sandbox;cncf +00000000-0092-0000-0000-000000000000;porter;Porter;Porter enables you to package your application artifact, client tools, configuration and deployment logic together as a versioned bundle that you can distribute, and install with a single command.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/porter/icon/color/porter-icon-color.svg;https://porter.devstats.cncf.io/;2020-09-08;sandbox;cncf +00000000-0093-0000-0000-000000000000;pravega;Pravega;Streaming as a new software defined storage primitive.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/pravega/icon/color/pravega-icon-color.svg;https://pravega.devstats.cncf.io/;2020-11-10;sandbox;cncf +00000000-0094-0000-0000-000000000000;schemahero;SchemaHero;A Kubernetes operator for declarative database schema management (gitops for database schemas).;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/schemahero/icon/color/schemahero-icon-color.svg;https://schemahero.devstats.cncf.io/;2020-11-10;sandbox;cncf +00000000-0095-0000-0000-000000000000;serverless-workflow;Serverless Workflow;Standards-based DSL and open-source dev tools and runtimes are at the heart of the Serverless Workflow project.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/serverlessworkflow/icon/color/serverlessworkflow-icon-color.svg;https://serverlessworkflow.devstats.cncf.io/;2020-07-14;sandbox;cncf +00000000-0096-0000-0000-000000000000;smi;Service Mesh Interface;A standard interface for service meshes on Kubernetes.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/servicemeshinterface/icon/color/servicemeshinterface-icon-color.svg;https://smi.devstats.cncf.io/;2020-03-16;sandbox;cncf +00000000-0097-0000-0000-000000000000;smp;Service Mesh Performance;Standardizing Service Mesh Value Measurement.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/servicemeshperformance/icon/smp-dark.svg;https://servicemeshperformance.devstats.cncf.io/;2021-06-21;sandbox;cncf +00000000-0098-0000-0000-000000000000;skooner;Skooner;Simple Kubernetes real-time dashboard and management.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/skooner/icon/color/Skooner-icon-color.svg;https://k8dash.devstats.cncf.io/;;sandbox;cncf +00000000-0099-0000-0000-000000000000;strimzi;Strimzi;Apache Kafka running on Kubernetes.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/strimzi/icon/color/strimzi-icon-color.svg;https://strimzi.devstats.cncf.io/;2019-08-28;sandbox;cncf +00000000-0100-0000-0000-000000000000;submariner;Submariner;Submariner enables direct networking between Pods and Services in different Kubernetes clusters, either on-premises or in the cloud.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/submariner/icon/color/submariner-icon-color.svg;https://submariner.devstats.cncf.io/;2021-04-27;sandbox;cncf +00000000-0101-0000-0000-000000000000;superedge;SuperEdge;An edge-native container management system for edge computing.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/superedge/icon/color/superedge-icon-color.svg;https://superedge.devstats.cncf.io/;2021-09-14;sandbox;cncf +00000000-0102-0000-0000-000000000000;telepresence;Telepresence;Local development against a remote Kubernetes or OpenShift cluster.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/telepresence/icon/color/telepresence-icon-color.svg;https://telepresence.devstats.cncf.io/;2018-05-22;sandbox;cncf +00000000-0103-0000-0000-000000000000;tinkerbell;Tinkerbell;A workflow engine for provisioning bare metal.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/tinkerbell/icon/color-light/tinkerbell-icon-color-light.svg;https://tinkerbell.devstats.cncf.io/;2020-11-10;sandbox;cncf +00000000-0104-0000-0000-000000000000;tremor;Tremor;An early-stage event processing system for unstructured data with rich support for structural pattern-matching, filtering and transformation.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/tremor/icon/color/tremor-icon-color.svg;https://tremor.devstats.cncf.io/;2020-09-08;sandbox;cncf +00000000-0105-0000-0000-000000000000;trickster;Trickster;Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator.;observability;;https://raw.githubusercontent.com/cncf/artwork/master/projects/trickster/icon/color/trickster-icon-color.svg;https://trickster.devstats.cncf.io/;2021-03-30;sandbox;cncf +00000000-0106-0000-0000-000000000000;vineyard;Vineyard;Vineyard (v6d) is an in-memory immutable data manager.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/vineyard/icon/color/vineyard-icon-color.svg;https://vineyard.devstats.cncf.io/;2021-04-27;sandbox;cncf +00000000-0107-0000-0000-000000000000;virtual-kubelet;Virtual Kubelet;Virtual Kubelet is an open source Kubernetes kubelet implementation.;serverless;;https://raw.githubusercontent.com/cncf/artwork/master/projects/virtualkubelet/icon/color/virtualkubelet-icon-color.svg;https://virtualkubelet.devstats.cncf.io/;2018-12-04;sandbox;cncf +00000000-0108-0000-0000-000000000000;volcano;Volcano;A Kubernetes native system for high-performance workloads.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/volcano/icon/color/volcano-icon-color.svg;https://volcano.devstats.cncf.io/;2020-04-10;incubating;cncf +00000000-0109-0000-0000-000000000000;wasm-cloud;wasmCloud;wasmCloud allows for simple, secure, distributed application development using WebAssembly actors and capability providers.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/wasmcloud/icon/color/wasmcloud.icon_green.svg;https://wasmcloud.devstats.cncf.io/;2021-07-12;sandbox;cncf +00000000-0110-0000-0000-000000000000;wasm-edge;WasmEdge;WasmEdge is a lightweight, high-performance, and extensible WebAssembly runtime for cloud native, edge, and decentralized applications. It powers serverless apps, embedded functions, microservices, smart contracts, and IoT devices.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/wasm-edge-runtime/icon/color/wasm-edge-runtime-icon-color.svg;https://wasmedge.devstats.cncf.io/;2021-04-27;sandbox;cncf +00000000-0111-0000-0000-000000000000;knative;Knative;Kubernetes-based platform to build, deploy, and manage modern serverless workloads.;serverless;;https://raw.githubusercontent.com/cncf/artwork/master/projects/knative/icon/color/knative-icon-color.svg;;2022-03-02;incubating;cncf +00000000-0113-0000-0000-000000000000;krator;Krator;Kubernetes Rust State Machine Operator.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/krator/icon/color/krator-icon-color.svg;https://krator.devstats.cncf.io/;2021-05-26;sandbox;cncf +00000000-0114-0000-0000-000000000000;devfile;Devfile;An open standard defining containerized development environments that enables developer tools to simplify and accelerate workflows.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/devfile/icon/color/devfile-icon-color.svg;https://devfile.devstats.cncf.io/;2021-01-11;sandbox;cncf +00000000-0115-0000-0000-000000000000;kube-rs;;rust kubernetes client and controller runtime.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kube-rs/icon/black/kube-rs-icon-black.svg;https://kubers.devstats.cncf.io/;2021-11-16;sandbox;cncf +00000000-0116-0000-0000-000000000000;kubedl;KubeDL;Run your deep learning workloads on Kubernetes more easily and efficiently.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/kubedl/icon/color/kubedl-icon-color.svg;https://kubedl.devstats.cncf.io/;2021-05-14;sandbox;cncf +00000000-0117-0000-0000-000000000000;openelb;OpenELB;Load Balancer Implementation for Kubernetes in Bare-Metal, Edge, and Virtualization.;provisioning;;https://landscape.cncf.io/logos/open-elb.svg;https://openelb.devstats.cncf.io;2021-09-11;sandbox;cncf +00000000-0118-0000-0000-000000000000;confidential-containers;Confidential Containers;"Confidential Containers is an open source community working to enable cloud native confidential computing by leveraging Trusted Execution Environments to protect containers and data.";provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/confidential-containers/icon/color/confidential-containers-icon.svg;https://confidentialcontainers.devstats.cncf.io/;2022-03-08;sandbox;cncf +00000000-0119-0000-0000-000000000000;openfunction;Open Function;Cloud Native Function-as-a-Service Platform;serverless;;https://raw.githubusercontent.com/cncf/artwork/master/projects/openfunction/icon/color/openfunction-icon-color.svg;https://openfunction.devstats.cncf.io;2021-11-09;sandbox;cncf +00000000-0120-0000-0000-000000000000;sealer;;A tool to seal application's all dependencies and Kubernetes into CloudImage, distribute this application anywhere via CloudImage, and run it within any cluster in one command.;app definition;;https://landscape.cncf.io/logos/sealer.svg;https://sealer.devstats.cncf.io;2022-04-26;sandbox;cncf +00000000-0121-0000-0000-000000000000;teller;Teller;A secrets management tool for developers built in Go - never leave your command line for secrets.;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/teller/icon/color/teller-icon-color.svg;https://teller.devstats.cncf.io;2022-04-26;sandbox;cncf +00000000-0122-0000-0000-000000000000;fabedge;FabEdge;A Secure Edge Computing Container Networking Solution based on Kubernetes & KubeEdge.;runtime;;https://raw.githubusercontent.com/cncf/artwork/master/projects/fabedge/icon/color/fabedge-color.svg;https://fabedge.devstats.cncf.io;2022-03-08;sandbox;cncf +00000000-0123-0000-0000-000000000000;clusterpedia;Clusterpedia;Clusterpedia is used for complex resources search across multiple clusters, support simultaneous search of a single kind of resource or multiple kinds of resources existing in multiple clusters.;orchestration;;https://raw.githubusercontent.com/cncf/artwork/master/projects/clusterpedia/icon/color/clusterpedia-icon-color.svg;https://clusterpedia.devstats.cncf.io;2022-06-14;sandbox;cncf +00000000-0124-0000-0000-000000000000;opencost;Opencost;OpenCost provides visibility into current and historical Kubernetes spend and resource allocation.;observability;https://www.opencost.io;https://raw.githubusercontent.com/cncf/artwork/master/projects/opencost/icon/color/Opencost_Icon_Color.svg;https://opencost.teststats.cncf.io/;2022-06-14;sandbox;cncf +00000000-0125-0000-0000-000000000000;aeraki-mesh;Aeraki Mesh;Aeraki Mesh allows you to manage any layer-7 traffic in a service mesh.;orchestration;;https://landscape.cncf.io/logos/aeraki-mesh.svg;https://aerakimesh.teststats.cncf.io/;2022-06-14;sandbox;cncf +00000000-0126-0000-0000-000000000000;curve;Curve;Curve is a high-performance, lightweight-operation, cloud-native open source distributed storage system.;app definition;;https://raw.githubusercontent.com/cncf/artwork/master/projects/curve/icon/color/curve_icon_color.svg;https://curve.teststats.cncf.io/;2022-06-14;sandbox;cncf +00000000-0127-0000-0000-000000000000;openfeature;OpenFeature;Standardizing Feature Flagging for Everyone.;app definition;;https://landscape.cncf.io/logos/open-feature.svg;https://openfeature.teststats.cncf.io/;2022-06-14;sandbox;cncf +00000000-0128-0000-0000-000000000000;kubewarden;Kubewarden;Kubewarden is a policy engine for Kubernetes. It helps with keeping your Kubernetes clusters secure and compliant.;provisioning;;https://www.kubewarden.io/images/logo-kubewarden.svg;https://kubewarden.teststats.cncf.io/;2022-06-14;sandbox;cncf +00000000-0129-0000-0000-000000000000;devstream;DevStream;DevStream: the open-source DevOps toolchain manager (DTM).;provisioning;;https://raw.githubusercontent.com/cncf/artwork/master/projects/devstream/icon/color/devstream-icon-color.svg;https://devstream.teststats.cncf.io/;2022-06-14;sandbox;cncf diff --git a/database/data/lfaidata/organizations.csv b/database/data/lfaidata/organizations.csv deleted file mode 100644 index 500ec2a7..00000000 --- a/database/data/lfaidata/organizations.csv +++ /dev/null @@ -1,37 +0,0 @@ -organization_id;name;home_url;logo_url;foundation -10000001-0000-0000-0000-000000000000;angel-ml;https://angelml.ai/;https://raw.githubusercontent.com/lfai/artwork/main/projects/angel/icon/color/angel-icon-color.svg;lfaidata -10000002-0000-0000-0000-000000000000;pyro-ppl;https://pyro.ai/;https://raw.githubusercontent.com/lfai/artwork/main/projects/pyro/icon/color/pyro-icon-color.svg;lfaidata -10000003-0000-0000-0000-000000000000;milvus-project;https://milvus.io/;https://raw.githubusercontent.com/lfai/artwork/main/projects/milvus/icon/color/milvus-icon-color.png;lfaidata -10000004-0000-0000-0000-000000000000;odpi;https://egeria.odpi.org/;http://insidebigdata.com/wp-content/uploads/2016/04/ODPi_logo.png;lfaidata -10000005-0000-0000-0000-000000000000;horovod;https://horovod.ai/;https://raw.githubusercontent.com/lfai/artwork/main/projects/horovod/icon/color/horovod-icon-color.svg;lfaidata -10000006-0000-0000-0000-000000000000;onnx;https://onnx.ai;https://raw.githubusercontent.com/lfai/artwork/main/projects/onnx/icon/color/onnx-icon-color.svg;lfaidata -10000007-0000-0000-0000-000000000000;acumos;https://www.acumos.org/;https://raw.githubusercontent.com/lfai/artwork/main/projects/acumos/icon/color/acumos-icon-color.svg;lfaidata -10000008-0000-0000-0000-000000000000;flyteorg;https://flyte.org/;https://raw.githubusercontent.com/lfai/artwork/main/projects/flyte/icon/color/flyte-icon-color.svg;lfaidata -10000009-0000-0000-0000-000000000000;ibm;https://developer.ibm.com/open/projects/adversarial-robustness-toolbox/;https://upload.wikimedia.org/wikipedia/commons/5/51/IBM_logo.svg;lfaidata -10000010-0000-0000-0000-000000000000;forestflow;https://forestflow.ai/;https://raw.githubusercontent.com/lfai/artwork/main/projects/forestflow/icon/color/forestflow-icon-color.svg;lfaidata -10000011-0000-0000-0000-000000000000;tony;https://github.com/tony-framework;https://raw.githubusercontent.com/lfai/artwork/main/projects/tony/icon/color/TonY-icon-color.svg;lfaidata -10000012-0000-0000-0000-000000000000;kompute;https://kompute.cc/;https://raw.githubusercontent.com/lfai/artwork/main/projects/kompute/icon/color/kompute-icon-color.svg;lfaidata -10000013-0000-0000-0000-000000000000;datapractices;https://datapractices.org/;https://raw.githubusercontent.com/lfai/artwork/main/projects/datapractices/icon/color/datapractices-icon-color.svg;lfaidata -10000014-0000-0000-0000-000000000000;janusgraph;https://janusgraph.org/;https://raw.githubusercontent.com/lfai/artwork/main/projects/janusgraph/icon/color/janusgraph-icon-color.svg;lfaidata -10000015-0000-0000-0000-000000000000;amundsen;https://www.amundsen.io/;https://raw.githubusercontent.com/lfai/artwork/main/projects/amundsen/icon/color/amundsen-icon-color.svg;lfaidata -10000016-0000-0000-0000-000000000000;datashim;https://github.com/datashim-io/datashim;https://raw.githubusercontent.com/lfai/artwork/main/projects/datashim/horizontal/color/datashim-horizontal-color.svg;lfaidata -10000017-0000-0000-0000-000000000000;marquez;https://marquezproject.github.io/marquez;https://raw.githubusercontent.com/lfai/artwork/main/projects/marquez/icon/color/marquez-icon-color.svg;lfaidata -10000018-0000-0000-0000-000000000000;feast;https://feast.dev/;https://raw.githubusercontent.com/lfai/artwork/main/projects/feast/icon/color/feast-icon-color.svg;lfaidata -10000019-0000-0000-0000-000000000000;nnstreamer;https://nnstreamer.ai/;https://raw.githubusercontent.com/lfai/artwork/main/projects/nnstreamer/icon/color/nnstreamer-icon-color.svg;lfaidata -10000020-0000-0000-0000-000000000000;adlik;https://adlik.ai/;https://raw.githubusercontent.com/lfai/artwork/main/projects/adlik/icon/color/adlik-icon-color.svg;lfaidata -10000021-0000-0000-0000-000000000000;kserve;https://kserve.io/;https://raw.githubusercontent.com/lfai/artwork/main/projects/kserve/icon/color/k-serve-icon-color.svg;lfaidata -10000022-0000-0000-0000-000000000000;substra;https://github.com/Substra;https://raw.githubusercontent.com/lfai/artwork/main/projects/substra/icon/color/substra-icon-color.svg;lfaidata -10000023-0000-0000-0000-000000000000;ludwig;https://ludwig-ai.github.io/ludwig-docs/;https://raw.githubusercontent.com/lfai/artwork/main/projects/ludwig/icon/ludwig-icon-empty.svg;lfaidata -10000024-0000-0000-0000-000000000000;kedro;https://kedro.readthedocs.io/en/stable;https://raw.githubusercontent.com/lfai/artwork/main/projects/kedro/icon/color/kedro-icon-color.svg;lfaidata -10000025-0000-0000-0000-000000000000;aix360;http://aix360.mybluemix.net/;https://raw.githubusercontent.com/lfai/artwork/main/projects/ai-explainability-360/icon/color/ai-explainability-360-icon-color.svg;lfaidata -10000026-0000-0000-0000-000000000000;aif360;https://developer.ibm.com/open/projects/ai-fairness-360/;https://raw.githubusercontent.com/lfai/artwork/main/projects/ai-fairness-360/icon/color/ai-fairness-360-icon-color.svg;lfaidata -10000027-0000-0000-0000-000000000000;elasticdeeplearning;https://elasticdeeplearning.ai/;https://raw.githubusercontent.com/lfai/artwork/main/projects/edl/icon/color/edl-icon-color.svg;lfaidata -10000028-0000-0000-0000-000000000000;soajs;https://www.soajs.org/;https://raw.githubusercontent.com/lfai/artwork/main/projects/soajs/icon/color/soajs-icon-color.svg;lfaidata -10000029-0000-0000-0000-000000000000;sparklyr;https://sparklyr.ai/;https://raw.githubusercontent.com/lfai/artwork/main/projects/sparklyr/color/sparklyr-color.svg;lfaidata -10000030-0000-0000-0000-000000000000;delta;https://delta-didi.readthedocs.io/en/latest;https://raw.githubusercontent.com/lfai/artwork/main/projects/delta/icon/color/delta-icon-color.svg;lfaidata -10000031-0000-0000-0000-000000000000;openbytes;https://openbytes.io/;https://raw.githubusercontent.com/lfai/artwork/main/projects/openbytes/icon/color/OpenBytes-icon-color.svg;lfaidata -10000032-0000-0000-0000-000000000000;openlineage;https://github.com/OpenLineage;https://raw.githubusercontent.com/lfai/artwork/main/projects/openlineage/horizontal/color/openlineage-horizontal-color.svg;lfaidata -10000033-0000-0000-0000-000000000000;artigraph;https://github.com/artigraph/;https://landscape.lfai.foundation/logos/artigraph.svg;lfaidata -10000034-0000-0000-0000-000000000000;ml-exchange;https://ml-exchange.org/;https://raw.githubusercontent.com/lfai/artwork/main/projects/mlx/icon/color/mlx-icon-color.svg;lfaidata -10000035-0000-0000-0000-000000000000;rosaenlg;https://rosaenlg.org/;https://raw.githubusercontent.com/lfai/artwork/main/projects/rosaenlg/icon/color/RosaeNLG-icon-color.svg;lfaidata -10000036-0000-0000-0000-000000000000;1chipml;https://github.com/1chipML/;https://raw.githubusercontent.com/lfai/artwork/main/projects/1chipML/color/1chipML_color.svg;lfaidata diff --git a/database/data/lfaidata/projects.csv b/database/data/lfaidata/projects.csv index 68400b70..c2679241 100644 --- a/database/data/lfaidata/projects.csv +++ b/database/data/lfaidata/projects.csv @@ -1,38 +1,38 @@ -project_id;name;display_name;description;category;home_url;logo_url;accepted_at;maturity;organization_id -10000000-0001-0000-0000-000000000000;angel-ml;Angel ML;The Angel Project is a high-performance distributed machine learning platform based on Parameter Server, running on YARN and Apache Spark;machine learning;;;2018-06-07;graduated;10000001-0000-0000-0000-000000000000 -10000000-0002-0000-0000-000000000000;pyro;Pyro;Deep universal probabilistic programming with Python and PyTorch;programming;;;2019-01-17;graduated;10000002-0000-0000-0000-000000000000 -10000000-0003-0000-0000-000000000000;milvus;Milvus;An open source vector database powered by Faiss, NMSLIB and Annoy;data;;;2020-01-16;graduated;10000003-0000-0000-0000-000000000000 -10000000-0004-0000-0000-000000000000;egeria;Egeria;Open Metadata and Governance;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/egeria/icon/color/egeria-icon-color.svg;2020-09-24;graduated;10000004-0000-0000-0000-000000000000 -10000000-0005-0000-0000-000000000000;horovod;Horovod;Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet;model;;;2018-12-06;graduated;10000005-0000-0000-0000-000000000000 -10000000-0006-0000-0000-000000000000;onnx;ONNX;Open standard for machine learning interoperability;model;;;2019-10-31;graduated;10000006-0000-0000-0000-000000000000 -10000000-0007-0000-0000-000000000000;acumos;Acumos;LF AI & Data Foundation supports open source innovation in artificial intelligence and data;model;;;2018-03-26;graduated;10000007-0000-0000-0000-000000000000 -10000000-0008-0000-0000-000000000000;flyte;Flyte;Kubernetes-native workflow automation platform for complex, mission-critical data and ML processes at scale. It has been battle-tested at Lyft, Spotify, Freenome, and others and is truly open-source;model;;;2021-02-25;graduated;10000008-0000-0000-0000-000000000000 -10000000-0009-0000-0000-000000000000;adversarial-robustness-toolbox;Adversarial Robustness Toolbox;Adversarial Robustness Toolbox (ART) - Python Library for Machine Learning Security - Evasion, Poisoning, Extraction, Inference - Red and Blue Teams;trusted & responsible ai;https://adversarial-robustness-toolbox.org;https://raw.githubusercontent.com/lfai/artwork/main/projects/adversarial-robustness-toolbox/icon/color/adversarial-robustness-toolbox-icon-color.svg;2020-06-18;graduated;10000009-0000-0000-0000-000000000000 -10000000-0010-0000-0000-000000000000;forestflow;ForestFlow;ForestFlow is a policy-driven Machine Learning Model Server. It is an LF AI Foundation incubation project.;machine learning;;;2020-03-26;incubating;10000010-0000-0000-0000-000000000000 -10000000-0011-0000-0000-000000000000;tony;TonY;TonY is a framework to natively run deep learning frameworks on Apache Hadoop.;deep learning;;;2021-07-15;incubating;10000011-0000-0000-0000-000000000000 -10000000-0012-0000-0000-000000000000;kompute;Kompute;General purpose GPU compute framework built on Vulkan to support 1000s of cross vendor graphics cards (AMD, Qualcomm, NVIDIA & friends). Blazing fast, mobile-enabled, asynchronous and optimized for advanced GPU data processing usecases. Backed by the Linux Foundation.;programming;;;2021-05-06;incubating;10000012-0000-0000-0000-000000000000 -10000000-0013-0000-0000-000000000000;datapractices;DataPractices;Datapractices site;data;;;2020-11-05;incubating;10000013-0000-0000-0000-000000000000 -10000000-0014-0000-0000-000000000000;opends4all;OpenDS4All;OpenDS4All project, hosted by LF AI & Data;data;https://github.com/odpi/OpenDS4All;https://raw.githubusercontent.com/lfai/artwork/main/projects/opends4all/icon/color/opends4all-icon-color.svg;2020-09-24;incubating;10000004-0000-0000-0000-000000000000 -10000000-0015-0000-0000-000000000000;janusgraph;JanusGraph;JanusGraph: an open-source, distributed graph database;data;;;2020-12-03;incubating;10000014-0000-0000-0000-000000000000 -10000000-0016-0000-0000-000000000000;amundsen;Amundsen;Amundsen is a metadata driven application for improving the productivity of data analysts, data scientists and engineers when interacting with data;data;;;2020-08-30;incubating;10000015-0000-0000-0000-000000000000 -10000000-0017-0000-0000-000000000000;datashim;Datashim;A kubernetes based framework for hassle free handling of datasets;data;;;2021-01-14;incubating;10000016-0000-0000-0000-000000000000 -10000000-0018-0000-0000-000000000000;marquez;Marquez;Collect, aggregate, and visualize a data ecosystem's metadata;data;;;2019-12-19;incubating;10000017-0000-0000-0000-000000000000 -10000000-0019-0000-0000-000000000000;feast;Feast;Feature Store for Machine Learning;data;;;2020-09-24;incubating;10000018-0000-0000-0000-000000000000 -10000000-0020-0000-0000-000000000000;nnstreamer;NNStreamer;Neural Network (NN) Streamer, Stream Processing Paradigm for Neural Network Apps/Devices;data;;;2020-03-12;incubating;10000019-0000-0000-0000-000000000000 -10000000-0021-0000-0000-000000000000;adlik;Adlik;Toolkit for Accelerating Deep Learning Inference;model;;;2019-09-26;incubating;10000020-0000-0000-0000-000000000000 -10000000-0022-0000-0000-000000000000;kserve;KServe;Serverless Inferencing on Kubernetes;model;;;2021-11-18;incubating;10000021-0000-0000-0000-000000000000 -10000000-0023-0000-0000-000000000000;substra;Substra;Substra is a framework for traceable ML orchestration on decentralized sensitive data;model;;;2021-03-25;incubating;10000022-0000-0000-0000-000000000000 -10000000-0024-0000-0000-000000000000;ludwig;Ludwig;Ludwig is a toolbox that allows to train and evaluate deep learning models without the need to write code;model;;;2020-05-07;incubating;10000023-0000-0000-0000-000000000000 -10000000-0025-0000-0000-000000000000;kedro;Kedro;A Python framework for creating reproducible, maintainable and modular data science code;model;;;2021-09-09;incubating;10000024-0000-0000-0000-000000000000 -10000000-0026-0000-0000-000000000000;aix360;AI Explainability 360 Toolkit;Interpretability and explainability of data and machine learning models;trusted & responsible ai;;;2020-06-18;incubating;10000025-0000-0000-0000-000000000000 -10000000-0027-0000-0000-000000000000;aif360;AI Fairness 360 Toolkit;A comprehensive set of fairness metrics for datasets and machine learning models, explanations for these metrics, and algorithms to mitigate bias in datasets and models;trusted & responsible ai;;;2020-06-18;incubating;10000026-0000-0000-0000-000000000000 -10000000-0028-0000-0000-000000000000;elasticdeeplearning;Elastic Deep Learning;Elastic Deep Learning for deep learning framework on Kubernetes;distributed computing;;;2018-07-05;incubating;10000027-0000-0000-0000-000000000000 -10000000-0029-0000-0000-000000000000;soajs;SOAJS;LF AI & Data Foundation supports open source innovation in artificial intelligence and data.;distributed computing;;;2020-09-10;incubating;10000028-0000-0000-0000-000000000000 -10000000-0030-0000-0000-000000000000;sparklyr;;R interface for Apache Spark;distributed computing;;;2019-12-05;incubating;10000029-0000-0000-0000-000000000000 -10000000-0031-0000-0000-000000000000;delta;DELTA;DELTA is a deep learning based natural language and speech processing platform;natural language processing;;;2020-09-10;incubating;10000030-0000-0000-0000-000000000000 -10000000-0032-0000-0000-000000000000;openbytes;OpenBytes;This repo contains documentation related to the operation of the OpenBytes project;data;;;2021-10-21;sandbox;10000031-0000-0000-0000-000000000000 -10000000-0033-0000-0000-000000000000;openlineage;OpenLineage;An Open Standard for lineage metadata collection;data;;;2021-05-20;sandbox;10000032-0000-0000-0000-000000000000 -10000000-0034-0000-0000-000000000000;artigraph;Artigraph;Artigraph is a tool to improve the authorship, management, and quality of data. It emphasizes that the core deliverable of a data pipeline or workflow is the data, not the tasks;data;;;2022-01-27;sandbox;10000033-0000-0000-0000-000000000000 -10000000-0035-0000-0000-000000000000;ml-exchange;Machine Learning eXchange;Machine Learning eXchange (MLX). Data and AI Assets Catalog and Execution Engine;model;;;2021-05-06;sandbox;10000034-0000-0000-0000-000000000000 -10000000-0036-0000-0000-000000000000;rosaenlg;RosaeNLG;RosaeNLG is a Natural Language Generation library for node.js and browser rendering, based on the Pug template engine;natural language processing;;;2021-03-11;sandbox;10000035-0000-0000-0000-000000000000 -10000000-0037-0000-0000-000000000000;1chipml;1chipML;1chipML is a library for numerical crunching and machine learning on microcontrollers;machine learning;;;2022-04-07;sandbox;10000036-0000-0000-0000-000000000000 +project_id;name;display_name;description;category;home_url;logo_url;accepted_at;maturity;foundation_id +10000000-0001-0000-0000-000000000000;angel-ml;Angel ML;The Angel Project is a high-performance distributed machine learning platform based on Parameter Server, running on YARN and Apache Spark;machine learning;;https://raw.githubusercontent.com/lfai/artwork/main/projects/angel/icon/color/angel-icon-color.svg;2018-06-07;graduated;lfaidata +10000000-0002-0000-0000-000000000000;pyro;Pyro;Deep universal probabilistic programming with Python and PyTorch;programming;;https://raw.githubusercontent.com/lfai/artwork/main/projects/pyro/icon/color/pyro-icon-color.svg;2019-01-17;graduated;lfaidata +10000000-0003-0000-0000-000000000000;milvus;Milvus;An open source vector database powered by Faiss, NMSLIB and Annoy;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/milvus/icon/color/milvus-icon-color.png;2020-01-16;graduated;lfaidata +10000000-0004-0000-0000-000000000000;egeria;Egeria;Open Metadata and Governance;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/egeria/icon/color/egeria-icon-color.svg;2020-09-24;graduated;lfaidata +10000000-0005-0000-0000-000000000000;horovod;Horovod;Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/horovod/icon/color/horovod-icon-color.svg;2018-12-06;graduated;lfaidata +10000000-0006-0000-0000-000000000000;onnx;ONNX;Open standard for machine learning interoperability;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/onnx/icon/color/onnx-icon-color.svg;2019-10-31;graduated;lfaidata +10000000-0007-0000-0000-000000000000;acumos;Acumos;LF AI & Data Foundation supports open source innovation in artificial intelligence and data;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/acumos/icon/color/acumos-icon-color.svg;2018-03-26;graduated;lfaidata +10000000-0008-0000-0000-000000000000;flyte;Flyte;Kubernetes-native workflow automation platform for complex, mission-critical data and ML processes at scale. It has been battle-tested at Lyft, Spotify, Freenome, and others and is truly open-source;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/flyte/icon/color/flyte-icon-color.svg;2021-02-25;graduated;lfaidata +10000000-0009-0000-0000-000000000000;adversarial-robustness-toolbox;Adversarial Robustness Toolbox;Adversarial Robustness Toolbox (ART) - Python Library for Machine Learning Security - Evasion, Poisoning, Extraction, Inference - Red and Blue Teams;trusted & responsible ai;https://adversarial-robustness-toolbox.org;https://raw.githubusercontent.com/lfai/artwork/main/projects/adversarial-robustness-toolbox/icon/color/adversarial-robustness-toolbox-icon-color.svg;2020-06-18;graduated;lfaidata +10000000-0010-0000-0000-000000000000;forestflow;ForestFlow;ForestFlow is a policy-driven Machine Learning Model Server. It is an LF AI Foundation incubation project.;machine learning;;https://raw.githubusercontent.com/lfai/artwork/main/projects/forestflow/icon/color/forestflow-icon-color.svg;2020-03-26;incubating;lfaidata +10000000-0011-0000-0000-000000000000;tony;TonY;TonY is a framework to natively run deep learning frameworks on Apache Hadoop.;deep learning;;https://raw.githubusercontent.com/lfai/artwork/main/projects/tony/icon/color/TonY-icon-color.svg;2021-07-15;incubating;lfaidata +10000000-0012-0000-0000-000000000000;kompute;Kompute;General purpose GPU compute framework built on Vulkan to support 1000s of cross vendor graphics cards (AMD, Qualcomm, NVIDIA & friends). Blazing fast, mobile-enabled, asynchronous and optimized for advanced GPU data processing usecases. Backed by the Linux Foundation.;programming;;https://raw.githubusercontent.com/lfai/artwork/main/projects/kompute/icon/color/kompute-icon-color.svg;2021-05-06;incubating;lfaidata +10000000-0013-0000-0000-000000000000;datapractices;DataPractices;Datapractices site;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/datapractices/icon/color/datapractices-icon-color.svg;2020-11-05;incubating;lfaidata +10000000-0014-0000-0000-000000000000;opends4all;OpenDS4All;OpenDS4All project, hosted by LF AI & Data;data;https://github.com/odpi/OpenDS4All;https://raw.githubusercontent.com/lfai/artwork/main/projects/opends4all/icon/color/opends4all-icon-color.svg;2020-09-24;incubating;lfaidata +10000000-0015-0000-0000-000000000000;janusgraph;JanusGraph;JanusGraph: an open-source, distributed graph database;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/janusgraph/icon/color/janusgraph-icon-color.svg;2020-12-03;incubating;lfaidata +10000000-0016-0000-0000-000000000000;amundsen;Amundsen;Amundsen is a metadata driven application for improving the productivity of data analysts, data scientists and engineers when interacting with data;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/amundsen/icon/color/amundsen-icon-color.svg;2020-08-30;incubating;lfaidata +10000000-0017-0000-0000-000000000000;datashim;Datashim;A kubernetes based framework for hassle free handling of datasets;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/datashim/horizontal/color/datashim-horizontal-color.svg;2021-01-14;incubating;lfaidata +10000000-0018-0000-0000-000000000000;marquez;Marquez;Collect, aggregate, and visualize a data ecosystem's metadata;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/marquez/icon/color/marquez-icon-color.svg;2019-12-19;incubating;lfaidata +10000000-0019-0000-0000-000000000000;feast;Feast;Feature Store for Machine Learning;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/feast/icon/color/feast-icon-color.svg;2020-09-24;incubating;lfaidata +10000000-0020-0000-0000-000000000000;nnstreamer;NNStreamer;Neural Network (NN) Streamer, Stream Processing Paradigm for Neural Network Apps/Devices;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/nnstreamer/icon/color/nnstreamer-icon-color.svg;2020-03-12;incubating;lfaidata +10000000-0021-0000-0000-000000000000;adlik;Adlik;Toolkit for Accelerating Deep Learning Inference;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/adlik/icon/color/adlik-icon-color.svg;2019-09-26;incubating;lfaidata +10000000-0022-0000-0000-000000000000;kserve;KServe;Serverless Inferencing on Kubernetes;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/kserve/icon/color/k-serve-icon-color.svg;2021-11-18;incubating;lfaidata +10000000-0023-0000-0000-000000000000;substra;Substra;Substra is a framework for traceable ML orchestration on decentralized sensitive data;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/substra/icon/color/substra-icon-color.svg;2021-03-25;incubating;lfaidata +10000000-0024-0000-0000-000000000000;ludwig;Ludwig;Ludwig is a toolbox that allows to train and evaluate deep learning models without the need to write code;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/ludwig/icon/ludwig-icon-empty.svg;2020-05-07;incubating;lfaidata +10000000-0025-0000-0000-000000000000;kedro;Kedro;A Python framework for creating reproducible, maintainable and modular data science code;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/kedro/icon/color/kedro-icon-color.svg;2021-09-09;incubating;lfaidata +10000000-0026-0000-0000-000000000000;aix360;AI Explainability 360 Toolkit;Interpretability and explainability of data and machine learning models;trusted & responsible ai;;https://raw.githubusercontent.com/lfai/artwork/main/projects/ai-explainability-360/icon/color/ai-explainability-360-icon-color.svg;2020-06-18;incubating;lfaidata +10000000-0027-0000-0000-000000000000;aif360;AI Fairness 360 Toolkit;A comprehensive set of fairness metrics for datasets and machine learning models, explanations for these metrics, and algorithms to mitigate bias in datasets and models;trusted & responsible ai;;https://raw.githubusercontent.com/lfai/artwork/main/projects/ai-fairness-360/icon/color/ai-fairness-360-icon-color.svg;2020-06-18;incubating;lfaidata +10000000-0028-0000-0000-000000000000;elasticdeeplearning;Elastic Deep Learning;Elastic Deep Learning for deep learning framework on Kubernetes;distributed computing;;https://raw.githubusercontent.com/lfai/artwork/main/projects/edl/icon/color/edl-icon-color.svg;2018-07-05;incubating;lfaidata +10000000-0029-0000-0000-000000000000;soajs;SOAJS;LF AI & Data Foundation supports open source innovation in artificial intelligence and data.;distributed computing;;https://raw.githubusercontent.com/lfai/artwork/main/projects/soajs/icon/color/soajs-icon-color.svg;2020-09-10;incubating;lfaidata +10000000-0030-0000-0000-000000000000;sparklyr;;R interface for Apache Spark;distributed computing;;https://raw.githubusercontent.com/lfai/artwork/main/projects/sparklyr/color/sparklyr-color.svg;2019-12-05;incubating;lfaidata +10000000-0031-0000-0000-000000000000;delta;DELTA;DELTA is a deep learning based natural language and speech processing platform;natural language processing;;https://raw.githubusercontent.com/lfai/artwork/main/projects/delta/icon/color/delta-icon-color.svg;2020-09-10;incubating;lfaidata +10000000-0032-0000-0000-000000000000;openbytes;OpenBytes;This repo contains documentation related to the operation of the OpenBytes project;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/openbytes/icon/color/OpenBytes-icon-color.svg;2021-10-21;sandbox;lfaidata +10000000-0033-0000-0000-000000000000;openlineage;OpenLineage;An Open Standard for lineage metadata collection;data;;https://raw.githubusercontent.com/lfai/artwork/main/projects/openlineage/horizontal/color/openlineage-horizontal-color.svg;2021-05-20;sandbox;lfaidata +10000000-0034-0000-0000-000000000000;artigraph;Artigraph;Artigraph is a tool to improve the authorship, management, and quality of data. It emphasizes that the core deliverable of a data pipeline or workflow is the data, not the tasks;data;;https://landscape.lfai.foundation/logos/artigraph.svg;2022-01-27;sandbox;lfaidata +10000000-0035-0000-0000-000000000000;ml-exchange;Machine Learning eXchange;Machine Learning eXchange (MLX). Data and AI Assets Catalog and Execution Engine;model;;https://raw.githubusercontent.com/lfai/artwork/main/projects/mlx/icon/color/mlx-icon-color.svg;2021-05-06;sandbox;lfaidata +10000000-0036-0000-0000-000000000000;rosaenlg;RosaeNLG;RosaeNLG is a Natural Language Generation library for node.js and browser rendering, based on the Pug template engine;natural language processing;;https://raw.githubusercontent.com/lfai/artwork/main/projects/rosaenlg/icon/color/RosaeNLG-icon-color.svg;2021-03-11;sandbox;lfaidata +10000000-0037-0000-0000-000000000000;1chipml;1chipML;1chipML is a library for numerical crunching and machine learning on microcontrollers;machine learning;;https://raw.githubusercontent.com/lfai/artwork/main/projects/1chipML/color/1chipML_color.svg;2022-04-07;sandbox;lfaidata diff --git a/database/migrations/functions/projects/get_project.sql b/database/migrations/functions/projects/get_project.sql index d3a245a1..3e1b45cd 100644 --- a/database/migrations/functions/projects/get_project.sql +++ b/database/migrations/functions/projects/get_project.sql @@ -1,7 +1,6 @@ -- Returns some information about a project in json format. create or replace function get_project( p_foundation text, - p_org_name text, p_project_name text ) returns json as $$ @@ -12,7 +11,7 @@ returns json as $$ 'description', p.description, 'category', p.category, 'home_url', p.home_url, - 'logo_url', coalesce(p.logo_url, o.logo_url), + 'logo_url', p.logo_url, 'devstats_url', p.devstats_url, 'score', p.score, 'rating', p.rating, @@ -41,11 +40,9 @@ returns json as $$ from repository r where project_id = p.project_id ), - 'foundation', o.foundation + 'foundation', p.foundation_id )) from project p - join organization o using (organization_id) - where o.foundation::text = p_foundation - and o.name = p_org_name + where p.foundation_id = p_foundation and p.name = p_project_name; $$ language sql; diff --git a/database/migrations/functions/projects/search_projects.sql b/database/migrations/functions/projects/search_projects.sql index 5a3c5eed..fb916de7 100644 --- a/database/migrations/functions/projects/search_projects.sql +++ b/database/migrations/functions/projects/search_projects.sql @@ -47,7 +47,7 @@ begin p.description, p.category, p.home_url, - coalesce(p.logo_url, o.logo_url) as logo_url, + p.logo_url, p.devstats_url, p.score, p.rating, @@ -55,10 +55,8 @@ begin p.accepted_at, p.updated_at, p.maturity, - o.name as organization_name, - o.foundation + p.foundation_id from project p - join organization o using (organization_id) where score is not null and case when v_text is not null then @@ -66,7 +64,7 @@ begin end and case when cardinality(v_foundation) > 0 then - o.foundation::text = any(v_foundation) else true end + p.foundation_id = any(v_foundation) else true end and case when cardinality(v_maturity) > 0 then p.maturity::text = any(v_maturity) else true end @@ -113,10 +111,7 @@ begin left join report rp using (repository_id) where project_id = fp.project_id ), - 'organization', json_build_object( - 'name', organization_name - ), - 'foundation', foundation + 'foundation', foundation_id ))), '[]') from ( select * diff --git a/database/migrations/functions/repositories/get_repositories_with_checks.sql b/database/migrations/functions/repositories/get_repositories_with_checks.sql index 389147ec..eb4492a6 100644 --- a/database/migrations/functions/repositories/get_repositories_with_checks.sql +++ b/database/migrations/functions/repositories/get_repositories_with_checks.sql @@ -3,7 +3,7 @@ create or replace function get_repositories_with_checks() returns setof text as $$ with repositories as ( select - o.foundation, + p.foundation_id as foundation, p.name as project, r.url as repository_url, r.check_sets, @@ -41,11 +41,10 @@ returns setof text as $$ (rp.data->'security'->'signed_releases'->'passed')::boolean as signed_releases, (rp.data->'security'->'token_permissions'->'passed')::boolean as token_permissions, (rp.data->'legal'->'trademark_disclaimer'->'passed')::boolean as trademark_disclaimer - from organization o - join project p using (organization_id) + from project p join repository r using (project_id) join report rp using (repository_id) - order by o.foundation asc, p.name asc + order by p.foundation_id asc, p.name asc ) select 'Foundation,Project,Repository URL,Check Sets,Adopters,Changelog,Code of Conduct,Contributing,Governance,Maintainers,Readme,Roadmap,Website,License Approved,License Scanning,License SPDX ID,Analytics,ArtifactHub Badge,CLA,Community Meeting,DCO,GitHub discussions,OpenSSF Badge,Recent Release,Slack Presence,Binary Artifacts,Code Review,Dangerous Workflow,Dependency Update Tool,Maintained,SBOM,Security Policy,Signed Releases,Token Permissions,Trademark Disclaimer' union all diff --git a/database/migrations/functions/stats/average_section_score.sql b/database/migrations/functions/stats/average_section_score.sql index 0fd73c21..ec5d5622 100644 --- a/database/migrations/functions/stats/average_section_score.sql +++ b/database/migrations/functions/stats/average_section_score.sql @@ -8,11 +8,10 @@ create or replace function average_section_score( returns real as $$ select round(avg((p.score->>p_section)::real))::real from project p - join organization o using (organization_id) where p.score ? p_section and case when p_foundation is not null then - o.foundation::text = p_foundation else true end + p.foundation_id = p_foundation else true end and case when p_maturity is not null then p.maturity::text = p_maturity diff --git a/database/migrations/functions/stats/get_stats.sql b/database/migrations/functions/stats/get_stats.sql index f7878dcd..0cf3af2e 100644 --- a/database/migrations/functions/stats/get_stats.sql +++ b/database/migrations/functions/stats/get_stats.sql @@ -6,11 +6,10 @@ returns json as $$ with ratings as ( select p.maturity, p.rating, count(*) as total from project p - join organization o using (organization_id) where p.rating is not null and case when p_foundation is not null then - o.foundation::text = p_foundation else true end + p.foundation_id = p_foundation else true end group by p.maturity, p.rating ) select json_strip_nulls(json_build_object( @@ -30,11 +29,10 @@ returns json as $$ date_trunc('month', p.accepted_at) as projects_month, count(*) as total from project p - join organization o using (organization_id) where p.accepted_at is not null and case when p_foundation is not null then - o.foundation::text = p_foundation else true end + p.foundation_id = p_foundation else true end group by date_trunc('month', p.accepted_at) ) mt ) rt @@ -47,11 +45,10 @@ returns json as $$ extract('month' from p.accepted_at) as month, count(*) as total from project p - join organization o using (organization_id) where p.accepted_at is not null and case when p_foundation is not null then - o.foundation::text = p_foundation else true end + p.foundation_id = p_foundation else true end group by extract('year' from p.accepted_at), extract('month' from p.accepted_at) diff --git a/database/migrations/functions/stats/repositories_passing_check.sql b/database/migrations/functions/stats/repositories_passing_check.sql index cf058006..e0c4f765 100644 --- a/database/migrations/functions/stats/repositories_passing_check.sql +++ b/database/migrations/functions/stats/repositories_passing_check.sql @@ -11,11 +11,10 @@ returns real as $$ from report rp join repository r using (repository_id) join project p using (project_id) - join organization o using (organization_id) where (rp.data->p_category)->p_check_name <> 'null' and case when p_foundation is not null then - o.foundation::text = p_foundation else true end + p.foundation_id = p_foundation else true end ) select case when (select count(*) from reports_containing_check) > 0 then diff --git a/database/migrations/schema/001_initial.sql b/database/migrations/schema/001_initial.sql index 4077d34a..2b68dca1 100644 --- a/database/migrations/schema/001_initial.sql +++ b/database/migrations/schema/001_initial.sql @@ -1,19 +1,14 @@ create extension if not exists pgcrypto; -create type foundation as enum ('cncf', 'lfaidata'); - -create table if not exists organization ( - organization_id uuid primary key default gen_random_uuid(), - name text not null check (name <> ''), - display_name text check (display_name <> ''), - description text check (description <> ''), - home_url text check (home_url <> ''), - logo_url text check (logo_url <> ''), - created_at timestamptz default current_timestamp not null, - foundation foundation not null, - unique (foundation, name) +create table if not exists foundation ( + foundation_id text primary key, + display_name text not null check (display_name <> ''), + data_url text not null check (data_url <> '') ); +insert into foundation values ('cncf', 'CNCF', 'https://raw.githubusercontent.com/cncf/landscape/master/landscape.yml'); +insert into foundation values ('lfaidata', 'LF AI & Data', 'https://raw.githubusercontent.com/lfai/lfai-landscape/main/landscape.yml'); + create type maturity as enum ('graduated', 'incubating', 'sandbox'); create table if not exists project ( @@ -32,8 +27,8 @@ create table if not exists project ( created_at timestamptz default current_timestamp not null, updated_at timestamptz default current_timestamp not null, maturity maturity not null, - organization_id uuid not null references organization on delete cascade, - unique (organization_id, name) + foundation_id text not null references foundation on delete restrict, + unique (foundation_id, name) ); create type check_set as enum ('code', 'code-lite', 'community', 'docs'); diff --git a/database/tests/functions/projects/get_project.sql b/database/tests/functions/projects/get_project.sql index 1aab4409..a0c6fee2 100644 --- a/database/tests/functions/projects/get_project.sql +++ b/database/tests/functions/projects/get_project.sql @@ -4,23 +4,12 @@ select plan(2); -- Non existing project select is( - get_project('non-existing', 'non-existing', 'non-existing')::jsonb, + get_project('non-existing', 'non-existing')::jsonb, (null::jsonb), 'Null is returned if the requested project does not exist' ); -- Seed some data -insert into organization ( - organization_id, - name, - logo_url, - foundation -) values ( - '00000001-0000-0000-0000-000000000000', - 'artifact-hub', - 'https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg', - 'cncf' -); insert into project ( project_id, name, @@ -28,13 +17,14 @@ insert into project ( description, category, home_url, + logo_url, devstats_url, score, rating, accepted_at, updated_at, maturity, - organization_id + foundation_id ) values ( '00000000-0001-0000-0000-000000000000', 'artifact-hub', @@ -42,13 +32,14 @@ insert into project ( 'Artifact Hub is a web-based application that enables finding, installing, and publishing packages and configurations for CNCF projects.', 'category1', 'https://artifacthub.io', + 'https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg', 'https://artifacthub.devstats.cncf.io/', '{"k": "v"}', 'a', '2021-01-01', '2022-02-24 09:40:42.695654+01', 'sandbox', - '00000001-0000-0000-0000-000000000000' + 'cncf' ); insert into repository ( repository_id, @@ -81,7 +72,7 @@ insert into report ( -- Run some tests select is( - get_project('cncf', 'artifact-hub', 'artifact-hub')::jsonb, + get_project('cncf', 'artifact-hub')::jsonb, '{ "category": "category1", "description": "Artifact Hub is a web-based application that enables finding, installing, and publishing packages and configurations for CNCF projects.", diff --git a/database/tests/functions/projects/get_project_checks.sql b/database/tests/functions/projects/get_project_checks.sql index 97ce4dac..e1cacf3c 100644 --- a/database/tests/functions/projects/get_project_checks.sql +++ b/database/tests/functions/projects/get_project_checks.sql @@ -3,15 +3,6 @@ begin; select plan(1); -- Seed some data -insert into organization ( - organization_id, - name, - foundation -) values ( - '00000001-0000-0000-0000-000000000000', - 'org1', - 'cncf' -); insert into project ( project_id, name, @@ -20,7 +11,7 @@ insert into project ( rating, accepted_at, maturity, - organization_id + foundation_id ) values ( '00000000-0001-0000-0000-000000000000', 'project1', @@ -29,7 +20,7 @@ insert into project ( 'a', '2022-02-25', 'sandbox', - '00000001-0000-0000-0000-000000000000' + 'cncf' ); insert into repository ( repository_id, diff --git a/database/tests/functions/projects/get_project_passed_checks.sql b/database/tests/functions/projects/get_project_passed_checks.sql index 6635687d..f02bd862 100644 --- a/database/tests/functions/projects/get_project_passed_checks.sql +++ b/database/tests/functions/projects/get_project_passed_checks.sql @@ -3,15 +3,6 @@ begin; select plan(1); -- Seed some data -insert into organization ( - organization_id, - name, - foundation -) values ( - '00000001-0000-0000-0000-000000000000', - 'org1', - 'cncf' -); insert into project ( project_id, name, @@ -20,7 +11,7 @@ insert into project ( rating, accepted_at, maturity, - organization_id + foundation_id ) values ( '00000000-0001-0000-0000-000000000000', 'project1', @@ -29,7 +20,7 @@ insert into project ( 'a', '2022-02-25', 'sandbox', - '00000001-0000-0000-0000-000000000000' + 'cncf' ); insert into repository ( repository_id, diff --git a/database/tests/functions/projects/search_projects.sql b/database/tests/functions/projects/search_projects.sql index babc0ce7..4e49850a 100644 --- a/database/tests/functions/projects/search_projects.sql +++ b/database/tests/functions/projects/search_projects.sql @@ -14,39 +14,6 @@ select results_eq( ); -- Seed some data -insert into organization ( - organization_id, - name, - logo_url, - foundation -) values ( - '00000001-0000-0000-0000-000000000000', - 'artifact-hub', - 'https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg', - 'cncf' -); -insert into organization ( - organization_id, - name, - logo_url, - foundation -) values ( - '00000002-0000-0000-0000-000000000000', - 'containerd', - 'https://raw.githubusercontent.com/cncf/artwork/master/projects/containerd/icon/color/containerd-icon-color.svg', - 'cncf' -); -insert into organization ( - organization_id, - name, - logo_url, - foundation -) values ( - '00000015-0000-0000-0000-000000000000', - 'tuf', - 'https://raw.githubusercontent.com/cncf/artwork/master/projects/tuf/icon/color/tuf-icon-color.svg', - 'cncf' -); insert into project ( project_id, name, @@ -54,13 +21,14 @@ insert into project ( description, category, home_url, + logo_url, devstats_url, score, rating, accepted_at, updated_at, maturity, - organization_id + foundation_id ) values ( '00000000-0001-0000-0000-000000000000', 'artifact-hub', @@ -68,13 +36,14 @@ insert into project ( 'Artifact Hub is a web-based application that enables finding, installing, and publishing packages and configurations for CNCF projects.', 'category1', 'https://artifacthub.io', + 'https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg', 'https://artifacthub.devstats.cncf.io/', '{"k": "v"}', 'a', '2020-01-01', '2022-02-25 12:54:17.80674+01', 'sandbox', - '00000001-0000-0000-0000-000000000000' + 'cncf' ); insert into project ( project_id, @@ -82,26 +51,28 @@ insert into project ( description, category, home_url, + logo_url, devstats_url, score, rating, accepted_at, updated_at, - organization_id, - maturity + maturity, + foundation_id ) values ( '00000000-0002-0000-0000-000000000000', 'containerd', 'An industry-standard container runtime with an emphasis on simplicity, robustness and portability.', 'category1', 'https://containerd.io', + 'https://raw.githubusercontent.com/cncf/artwork/master/projects/containerd/icon/color/containerd-icon-color.svg', 'https://containerd.devstats.cncf.io', '{"k": "v"}', 'a', '2021-01-01', '2022-02-25 12:54:25.952208+01', - '00000002-0000-0000-0000-000000000000', - 'graduated' + 'graduated', + 'cncf' ); insert into project ( project_id, @@ -110,13 +81,14 @@ insert into project ( description, category, home_url, + logo_url, devstats_url, score, rating, accepted_at, updated_at, - organization_id, - maturity + maturity, + foundation_id ) values ( '00000000-0015-0000-0000-000000000000', 'tuf', @@ -124,13 +96,14 @@ insert into project ( 'Python reference implementation of The Update Framework (TUF).', 'category2', 'https://theupdateframework.com', + 'https://raw.githubusercontent.com/cncf/artwork/master/projects/tuf/icon/color/tuf-icon-color.svg', 'https://tuf.devstats.cncf.io', '{"k": "v"}', 'b', '2022-01-01', '2022-02-25 12:54:23.937134+01', - '00000015-0000-0000-0000-000000000000', - 'graduated' + 'graduated', + 'cncf' ); insert into repository ( repository_id, @@ -212,9 +185,6 @@ select results_eq( "logo_url": "https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg", "maturity": "sandbox", "name": "artifact-hub", - "organization": { - "name": "artifact-hub" - }, "rating": "a", "repositories": [ { @@ -238,9 +208,6 @@ select results_eq( "logo_url": "https://raw.githubusercontent.com/cncf/artwork/master/projects/containerd/icon/color/containerd-icon-color.svg", "maturity": "graduated", "name": "containerd", - "organization": { - "name": "containerd" - }, "rating": "a", "repositories": [ { @@ -264,9 +231,6 @@ select results_eq( "logo_url": "https://raw.githubusercontent.com/cncf/artwork/master/projects/tuf/icon/color/tuf-icon-color.svg", "maturity": "graduated", "name": "tuf", - "organization": { - "name": "tuf" - }, "rating": "b", "repositories": [ { @@ -309,9 +273,6 @@ select results_eq( "logo_url": "https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg", "maturity": "sandbox", "name": "artifact-hub", - "organization": { - "name": "artifact-hub" - }, "rating": "a", "repositories": [ { @@ -350,9 +311,6 @@ select results_eq( "logo_url": "https://raw.githubusercontent.com/cncf/artwork/master/projects/artifacthub/icon/color/artifacthub-icon-color.svg", "maturity": "sandbox", "name": "artifact-hub", - "organization": { - "name": "artifact-hub" - }, "rating": "a", "repositories": [ { diff --git a/database/tests/functions/repositories/get_repositories_with_checks.sql b/database/tests/functions/repositories/get_repositories_with_checks.sql index b8c4f98e..791381b8 100644 --- a/database/tests/functions/repositories/get_repositories_with_checks.sql +++ b/database/tests/functions/repositories/get_repositories_with_checks.sql @@ -3,15 +3,6 @@ begin; select plan(1); -- Seed some data -insert into organization ( - organization_id, - name, - foundation -) values ( - '00000001-0000-0000-0000-000000000000', - 'org1', - 'cncf' -); insert into project ( project_id, name, @@ -20,7 +11,7 @@ insert into project ( rating, accepted_at, maturity, - organization_id + foundation_id ) values ( '00000000-0001-0000-0000-000000000000', 'project1', @@ -29,7 +20,7 @@ insert into project ( 'a', '2022-02-25', 'sandbox', - '00000001-0000-0000-0000-000000000000' + 'cncf' ); insert into repository ( repository_id, diff --git a/database/tests/functions/stats/get_stats.sql b/database/tests/functions/stats/get_stats.sql index 21a91f0b..ea9f6016 100644 --- a/database/tests/functions/stats/get_stats.sql +++ b/database/tests/functions/stats/get_stats.sql @@ -3,15 +3,6 @@ begin; select plan(1); -- Seed some data -insert into organization ( - organization_id, - name, - foundation -) values ( - '00000001-0000-0000-0000-000000000000', - 'org1', - 'cncf' -); insert into project ( project_id, name, @@ -20,7 +11,7 @@ insert into project ( rating, accepted_at, maturity, - organization_id + foundation_id ) values ( '00000000-0001-0000-0000-000000000000', 'project1', @@ -29,7 +20,7 @@ insert into project ( 'a', '2022-02-25', 'sandbox', - '00000001-0000-0000-0000-000000000000' + 'cncf' ); insert into project ( project_id, @@ -39,7 +30,7 @@ insert into project ( rating, accepted_at, maturity, - organization_id + foundation_id ) values ( '00000000-0002-0000-0000-000000000000', 'project2', @@ -48,7 +39,7 @@ insert into project ( 'b', '2021-02-24', 'graduated', - '00000001-0000-0000-0000-000000000000' + 'cncf' ); insert into project ( project_id, @@ -58,7 +49,7 @@ insert into project ( rating, accepted_at, maturity, - organization_id + foundation_id ) values ( '00000000-0003-0000-0000-000000000000', 'project3', @@ -67,7 +58,7 @@ insert into project ( 'c', '2021-02-25', 'graduated', - '00000001-0000-0000-0000-000000000000' + 'cncf' ); insert into repository ( repository_id, diff --git a/database/tests/schema/schema.sql b/database/tests/schema/schema.sql index d2350d03..796c56f5 100644 --- a/database/tests/schema/schema.sql +++ b/database/tests/schema/schema.sql @@ -6,21 +6,16 @@ select plan(20); select has_extension('pgcrypto'); -- Check expected tables exist -select has_table('organization'); +select has_table('foundation'); select has_table('project'); select has_table('report'); select has_table('repository'); -- Check tables have expected columns -select columns_are('organization', array[ - 'organization_id', - 'name', +select columns_are('foundation', array[ + 'foundation_id', 'display_name', - 'description', - 'home_url', - 'logo_url', - 'created_at', - 'foundation' + 'data_url' ]); select columns_are('project', array[ 'project_id', @@ -38,7 +33,7 @@ select columns_are('project', array[ 'created_at', 'updated_at', 'maturity', - 'organization_id' + 'foundation_id' ]); select columns_are('report', array[ 'report_id', @@ -61,13 +56,12 @@ select columns_are('repository', array[ ]); -- Check tables have expected indexes -select indexes_are('organization', array[ - 'organization_pkey', - 'organization_foundation_name_key' +select indexes_are('foundation', array[ + 'foundation_pkey' ]); select indexes_are('project', array[ 'project_pkey', - 'project_organization_id_name_key' + 'project_foundation_id_name_key' ]); select indexes_are('report', array[ 'report_pkey', diff --git a/web/src/App.tsx b/web/src/App.tsx index 31bc404a..a9d88777 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -12,8 +12,8 @@ import StatsView from './layout/stats'; // Old path without :foundation is redirected to CNCF foundation by default const ProjectsRedirection = () => { - const { org, project } = useParams(); - return ; + const { project } = useParams(); + return ; }; function App() { @@ -36,11 +36,8 @@ function App() { /> } /> - } /> - } - /> + } /> + } /> } /> } /> diff --git a/web/src/api/index.test.tsx b/web/src/api/index.test.tsx index 431676b2..29110c3f 100644 --- a/web/src/api/index.test.tsx +++ b/web/src/api/index.test.tsx @@ -24,7 +24,7 @@ describe('API', () => { status: 400, }); - await expect(API.getProjectDetail('org1', 'proj1', 'foundation1')).rejects.toEqual({ + await expect(API.getProjectDetail('proj1', 'foundation1')).rejects.toEqual({ kind: ErrorKind.Other, }); expect(fetchMock).toHaveBeenCalledTimes(1); @@ -38,7 +38,7 @@ describe('API', () => { status: 400, }); - await expect(API.getProjectDetail('org1', 'proj1', 'foundation1')).rejects.toEqual({ + await expect(API.getProjectDetail('proj1', 'foundation1')).rejects.toEqual({ kind: ErrorKind.Other, message: 'custom error', }); @@ -56,10 +56,10 @@ describe('API', () => { status: 200, }); - const response = await API.getProjectDetail('org1', 'proj1', 'foundation1'); + const response = await API.getProjectDetail('proj1', 'foundation1'); expect(fetchMock).toHaveBeenCalledTimes(1); - expect(fetchMock.mock.calls[0][0]).toEqual('/api/projects/foundation1/org1/proj1'); + expect(fetchMock.mock.calls[0][0]).toEqual('/api/projects/foundation1/proj1'); expect(response).toEqual(projectDetail); }); }); diff --git a/web/src/api/index.ts b/web/src/api/index.ts index f61d6804..ef3bf022 100644 --- a/web/src/api/index.ts +++ b/web/src/api/index.ts @@ -105,8 +105,8 @@ class API_CLASS { .catch((error) => Promise.reject(error)); } - public getProjectDetail(org: string, project: string, foundation: string): Promise { - return this.apiFetch({ url: `${this.API_BASE_URL}/projects/${foundation}/${org}/${project}` }); + public getProjectDetail(project: string, foundation: string): Promise { + return this.apiFetch({ url: `${this.API_BASE_URL}/projects/${foundation}/${project}` }); } public getStats(foundation: string | null): Promise { diff --git a/web/src/layout/common/BadgeModal.test.tsx b/web/src/layout/common/BadgeModal.test.tsx index 71aafbd8..302675bb 100644 --- a/web/src/layout/common/BadgeModal.test.tsx +++ b/web/src/layout/common/BadgeModal.test.tsx @@ -8,7 +8,6 @@ const mockOnCloseModal = jest.fn(); const defaultProps = { foundation: Foundation.cncf, - orgName: 'org', projectName: 'proj', openStatus: { status: true, name: 'badge' }, onCloseModal: mockOnCloseModal, @@ -36,12 +35,12 @@ describe('BadgeModal', () => { expect(badge).toBeInTheDocument(); expect(badge).toHaveProperty( 'src', - 'https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/org/proj/badge' + 'https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/proj/badge' ); const code = screen.getByTestId('code'); expect(code).toBeInTheDocument(); expect(code).toHaveTextContent( - '[![CLOMonitor](https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/org/proj/badge)](http://localhost/projects/cncf/org/proj)' + '[![CLOMonitor](https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/proj/badge)](http://localhost/projects/cncf/proj)' ); }); @@ -57,12 +56,12 @@ describe('BadgeModal', () => { expect(badge).toBeInTheDocument(); expect(badge).toHaveProperty( 'src', - 'https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/org/proj/badge' + 'https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/proj/badge' ); const code = screen.getByTestId('code'); expect(code).toBeInTheDocument(); expect(code).toHaveTextContent( - 'http://localhost/projects/cncf/org/proj[image:https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/org/proj/badge[CLOMonitor]]' + 'http://localhost/projects/cncf/proj[image:https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/proj/badge[CLOMonitor]]' ); }); }); diff --git a/web/src/layout/common/BadgeModal.tsx b/web/src/layout/common/BadgeModal.tsx index aef2e88d..84aa266f 100644 --- a/web/src/layout/common/BadgeModal.tsx +++ b/web/src/layout/common/BadgeModal.tsx @@ -10,7 +10,6 @@ interface OpenModalStatus { interface Props { foundation: Foundation; - orgName: string; projectName: string; openStatus: OpenModalStatus; onCloseModal: () => void; @@ -18,9 +17,9 @@ interface Props { const BadgeModal = (props: Props) => { const origin = window.location.origin; - const badgeImage = `https://img.shields.io/endpoint?url=${origin}/api/projects/${props.foundation}/${props.orgName}/${props.projectName}/badge`; - const markdownLink = `[![CLOMonitor](${badgeImage})](${origin}/projects/${props.foundation}/${props.orgName}/${props.projectName})`; - const asciiLink = `${origin}/projects/${props.foundation}/${props.orgName}/${props.projectName}[image:${badgeImage}[CLOMonitor]]`; + const badgeImage = `https://img.shields.io/endpoint?url=${origin}/api/projects/${props.foundation}/${props.projectName}/badge`; + const markdownLink = `[![CLOMonitor](${badgeImage})](${origin}/projects/${props.foundation}/${props.projectName})`; + const asciiLink = `${origin}/projects/${props.foundation}/${props.projectName}[image:${badgeImage}[CLOMonitor]]`; return ( { { { expect(screen.getAllByText('Markdown')).toHaveLength(2); expect(screen.getByTestId('code')).toHaveTextContent( - '[![CLOMonitor report summary](http://localhost/api/projects/cncf/org/proj/report-summary?theme=light)](http://localhost/projects/cncf/org/proj)' + '[![CLOMonitor report summary](http://localhost/api/projects/cncf/proj/report-summary?theme=light)](http://localhost/projects/cncf/proj)' ); expect( screen.getByRole('button', { name: 'Copy report summary markdown link to clipboard' }) @@ -84,7 +83,7 @@ describe('ReportSummaryModal', () => { await userEvent.click(btn); expect(screen.getByTestId('code')).toHaveTextContent( - 'http://localhost/projects/cncf/org/proj[image:http://localhost/api/projects/cncf/org/proj/report-summary?theme=light[CLOMonitor report summary]]' + 'http://localhost/projects/cncf/proj[image:http://localhost/api/projects/cncf/proj/report-summary?theme=light[CLOMonitor report summary]]' ); expect(screen.getByRole('button', { name: 'Copy report summary Ascii link to clipboard' })).toBeInTheDocument(); }); @@ -98,7 +97,7 @@ describe('ReportSummaryModal', () => { await userEvent.click(btn); expect(screen.getByTestId('code')).toHaveTextContent( - 'CLOMonitor report summary' + 'CLOMonitor report summary' ); expect(screen.getByRole('button', { name: 'Copy report summary html link to clipboard' })).toBeInTheDocument(); }); diff --git a/web/src/layout/common/ReportSummaryModal.tsx b/web/src/layout/common/ReportSummaryModal.tsx index 1b5a8372..89a49073 100644 --- a/web/src/layout/common/ReportSummaryModal.tsx +++ b/web/src/layout/common/ReportSummaryModal.tsx @@ -29,7 +29,6 @@ const THEMES: ReportSummaryTheme[] = [ interface Props { foundation: Foundation; - orgName: string; projectName: string; openStatus: OpenModalStatus; onCloseModal: () => void; @@ -38,8 +37,8 @@ interface Props { const ReportSummaryModal = (props: Props) => { const origin = window.location.origin; const [theme, setTheme] = useState(DEFAULT_THEME); - const image = `${origin}/api/projects/${props.foundation}/${props.orgName}/${props.projectName}/report-summary?theme=${theme}`; - const projectLink = `${origin}/projects/${props.foundation}/${props.orgName}/${props.projectName}`; + const image = `${origin}/api/projects/${props.foundation}/${props.projectName}/report-summary?theme=${theme}`; + const projectLink = `${origin}/projects/${props.foundation}/${props.projectName}`; const markdownLink = `[![CLOMonitor report summary](${image})](${projectLink})`; const asciiLink = `${projectLink}[image:${image}[CLOMonitor report summary]]`; const htmlLink = `CLOMonitor report summary`; diff --git a/web/src/layout/common/__snapshots__/BadgeModal.test.tsx.snap b/web/src/layout/common/__snapshots__/BadgeModal.test.tsx.snap index 5efb5e5d..89c9bb4a 100644 --- a/web/src/layout/common/__snapshots__/BadgeModal.test.tsx.snap +++ b/web/src/layout/common/__snapshots__/BadgeModal.test.tsx.snap @@ -93,7 +93,7 @@ exports[`BadgeModal creates snapshot 1`] = ` > CLOMonitor badge
- https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/org/proj/badge + https://img.shields.io/endpoint?url=http://localhost/api/projects/cncf/proj/badge )]( @@ -129,7 +129,7 @@ exports[`BadgeModal creates snapshot 1`] = ` - http://localhost/projects/cncf/org/proj + http://localhost/projects/cncf/proj ) diff --git a/web/src/layout/common/__snapshots__/ReportSummaryModal.test.tsx.snap b/web/src/layout/common/__snapshots__/ReportSummaryModal.test.tsx.snap index 39c4fdec..3427ccb0 100644 --- a/web/src/layout/common/__snapshots__/ReportSummaryModal.test.tsx.snap +++ b/web/src/layout/common/__snapshots__/ReportSummaryModal.test.tsx.snap @@ -287,7 +287,7 @@ exports[`ReportSummaryModal creates snapshot 1`] = ` - http://localhost/api/projects/cncf/org/proj/report-summary?theme=light + http://localhost/api/projects/cncf/proj/report-summary?theme=light )]( @@ -295,7 +295,7 @@ exports[`ReportSummaryModal creates snapshot 1`] = ` - http://localhost/projects/cncf/org/proj + http://localhost/projects/cncf/proj ) @@ -376,7 +376,7 @@ exports[`ReportSummaryModal creates snapshot 1`] = ` CLOMonitor report summary
diff --git a/web/src/layout/detail/index.test.tsx b/web/src/layout/detail/index.test.tsx index 958eba35..b20a6a95 100644 --- a/web/src/layout/detail/index.test.tsx +++ b/web/src/layout/detail/index.test.tsx @@ -45,7 +45,7 @@ const defaultProps = { describe('Project detail index', () => { beforeEach(() => { - jest.spyOn(ReactRouter, 'useParams').mockReturnValue({ org: 'org', project: 'proj', foundation: 'cncf' }); + jest.spyOn(ReactRouter, 'useParams').mockReturnValue({ project: 'proj', foundation: 'cncf' }); jest.spyOn(ReactRouter, 'useLocation').mockReturnValue(path); }); @@ -82,7 +82,7 @@ describe('Project detail index', () => { await waitFor(() => { expect(API.getProjectDetail).toHaveBeenCalledTimes(1); - expect(API.getProjectDetail).toHaveBeenCalledWith('org', 'proj', 'cncf'); + expect(API.getProjectDetail).toHaveBeenCalledWith('proj', 'cncf'); }); expect(screen.getByAltText('Artifact Hub logo')).toBeInTheDocument(); @@ -118,7 +118,7 @@ describe('Project detail index', () => { await waitFor(() => { expect(API.getProjectDetail).toHaveBeenCalledTimes(1); - expect(API.getProjectDetail).toHaveBeenCalledWith('org', 'proj', 'cncf'); + expect(API.getProjectDetail).toHaveBeenCalledWith('proj', 'cncf'); }); const backBtn = screen.getByRole('button', { name: 'Back to results' }); @@ -141,7 +141,7 @@ describe('Project detail index', () => { await waitFor(() => { expect(API.getProjectDetail).toHaveBeenCalledTimes(1); - expect(API.getProjectDetail).toHaveBeenCalledWith('org', 'proj', 'cncf'); + expect(API.getProjectDetail).toHaveBeenCalledWith('proj', 'cncf'); }); expect(screen.getByText('Sorry, the project you requested was not found.')).toBeInTheDocument(); diff --git a/web/src/layout/detail/index.tsx b/web/src/layout/detail/index.tsx index d76e10f7..81531f79 100644 --- a/web/src/layout/detail/index.tsx +++ b/web/src/layout/detail/index.tsx @@ -35,7 +35,7 @@ const Detail = (props: Props) => { const navigate = useNavigate(); const location = useLocation(); const currentState = location.state as { currentSearch?: string }; - const { org, project, foundation } = useParams(); + const { project, foundation } = useParams(); const [detail, setDetail] = useState(); const [isLoadingProject, setIsLoadingProject] = useState(false); @@ -71,7 +71,7 @@ const Detail = (props: Props) => { setIsLoadingProject(true); props.setInvisibleFooter(true); try { - const projectDetail = await API.getProjectDetail(org!, project!, foundation!); + const projectDetail = await API.getProjectDetail(project!, foundation!); setDetail(projectDetail); updateMetaIndex(projectDetail.display_name || projectDetail.name, projectDetail.description); setIsLoadingProject(false); @@ -82,10 +82,10 @@ const Detail = (props: Props) => { props.setInvisibleFooter(false); } } - if (!isUndefined(org) && !isUndefined(project)) { + if (!isUndefined(project)) { fetchProjectDetail(); } - }, [org, project, foundation]); /* eslint-disable-line react-hooks/exhaustive-deps */ + }, [project, foundation]); /* eslint-disable-line react-hooks/exhaustive-deps */ return ( <> @@ -184,14 +184,11 @@ const Detail = (props: Props) => {
- {org && ( - - )} +
diff --git a/web/src/layout/navigation/Searchbar.test.tsx b/web/src/layout/navigation/Searchbar.test.tsx index 7134bbc4..1ffb5f64 100644 --- a/web/src/layout/navigation/Searchbar.test.tsx +++ b/web/src/layout/navigation/Searchbar.test.tsx @@ -235,7 +235,7 @@ describe('Searchbar', () => { await userEvent.click(items[1]); expect(mockUseNavigate).toHaveBeenCalledTimes(1); - expect(mockUseNavigate).toHaveBeenCalledWith('/projects/cncf/backstage/backstage'); + expect(mockUseNavigate).toHaveBeenCalledWith('/projects/cncf/backstage'); }); it('loads new search from search dropdown', async () => { @@ -330,7 +330,7 @@ describe('Searchbar', () => { await userEvent.keyboard('{enter}'); expect(mockUseNavigate).toHaveBeenCalledTimes(1); - expect(mockUseNavigate).toHaveBeenCalledWith('/projects/cncf/keptn/keptn'); + expect(mockUseNavigate).toHaveBeenCalledWith('/projects/cncf/keptn'); }); }); diff --git a/web/src/layout/navigation/Searchbar.tsx b/web/src/layout/navigation/Searchbar.tsx index 14e1c137..48a41237 100644 --- a/web/src/layout/navigation/Searchbar.tsx +++ b/web/src/layout/navigation/Searchbar.tsx @@ -78,7 +78,7 @@ const Searchbar = (props: Props) => { forceBlur(); setValue(''); cleanProjectsSearch(); - navigate(`/projects/${selectedProject.foundation}/${selectedProject.organization.name}/${selectedProject.name}`); + navigate(`/projects/${selectedProject.foundation}/${selectedProject.name}`); }; const forceBlur = (): void => { diff --git a/web/src/layout/search/Card.test.tsx b/web/src/layout/search/Card.test.tsx index 52f89abc..71fb9729 100644 --- a/web/src/layout/search/Card.test.tsx +++ b/web/src/layout/search/Card.test.tsx @@ -29,9 +29,6 @@ const defaultProps = { maturity: Maturity.sandbox, foundation: Foundation.cncf, name: 'artifact-hub', - organization: { - name: 'artifact-hub', - }, rating: 'a', repositories: [ { diff --git a/web/src/layout/search/Card.tsx b/web/src/layout/search/Card.tsx index 63e71fb1..e89b2bf3 100644 --- a/web/src/layout/search/Card.tsx +++ b/web/src/layout/search/Card.tsx @@ -32,7 +32,7 @@ const Card = (props: Props) => { role="button" onClick={() => { props.saveScrollPosition(); - navigate(`/projects/${props.project.foundation}/${props.project.organization.name}/${props.project.name}`, { + navigate(`/projects/${props.project.foundation}/${props.project.name}`, { state: { currentSearch: props.currentQueryString }, }); }} diff --git a/web/src/types.ts b/web/src/types.ts index f99fc689..f7f29728 100644 --- a/web/src/types.ts +++ b/web/src/types.ts @@ -1,11 +1,3 @@ -export interface Organization { - name: string; - display_name?: string; - description?: string; - home_url: string; - logo_url?: string; -} - export interface BaseProject { id: string; name: string; @@ -24,9 +16,6 @@ export interface BaseProject { export interface Project extends BaseProject { repositories: BaseRepository[]; - organization: { - name: string; - }; } export interface ProjectDetail extends BaseProject {