socialgouv / kontinuous Goto Github PK
View Code? Open in Web Editor NEWKontinuous - GitOps for Kubernetes 🥷
Home Page: https://socialgouv.github.io/kontinuous/
License: MIT License
Kontinuous - GitOps for Kubernetes 🥷
Home Page: https://socialgouv.github.io/kontinuous/
License: MIT License
Looks like we could extract janitor logic to a dedicated plugin ?
depends on feat initcontainers
Implémentation de @socialgouv/parse-manifests
Permet une meilleure gestion des ressources du cluster et de prévenir une allocation de ressources excessive par une startup.
Idéalement, un service par startup.
jobs.build.skipExisting
should use authorize header with harbor registry
curl -s https://harbor.fabrique.social.gouv.fr/v2/fabrique/template/app/manifests/sha-410816bb29e8588789840b408e1a65c4270c0add
{"errors":[{"code":"UNAUTHORIZED","message":"authorize header needed to send HEAD to repository: authorize header needed to send HEAD to repository"}]}
Plutôt qu'un manifests.yaml
, construire plusieurs fichiers manifests-<slug($charts)>
.
Refléter chaque point de la doc dans un test et clarifier les tests existants. Inclure ces tests dans la doc comme exemples de code.
Dans le repo template
7cbff1b :
yarn
npx kontinuous test
dure anormalement longtemps et fini souvent par timeoutParfois un diff se produit alors qu'il n'y a pas encore de manifest généré.
WIP : #31
running on a fresh
➜ npx kontinuous build
[2022-07-26 15:43:50] INFO: missing rancher projectId, getting from cluster using ci-namespace "myProjectName-ci"
buildPath: "/var/folders/cj/ndwdv0lx5bq0hbbj6r5dbrf80000gn/T/kontinuous/build-WAhwrb"
workspacePath: "/Users/xxx/test-kontinuous"
plugin: "fabrique/patches/rancherProjectId"
/private/var/folders/cj/ndwdv0lx5bq0hbbj6r5dbrf80000gn/T/kontinuous/build-WAhwrb/charts/project/charts/fabrique/patches/rancher-project-id.js:43
await needBin(utils.needKubectl)
^
TypeError: needBin is not a function
maybe related to 9388f1e
replace standard-version by it's successor: commit-and-tag-version
Permet d'afficher, avant déploiement, les différences entre les manifests actuels et ceux qui vont être appliqués.
Mode de fonctionnement à adopter en premier à Fabrique Kontinuous MVP :
Kontinuous MVP migration : produit et mode de fonctionnement viable pour migrer les produits existants de la Fabrique.
Kontinuous MVP init : produit et mode de fonctionnement viable pour initialiser un nouveau produit de la Fabrique.
Kontinuous MVP webhook : pour plus tard
Validation de MVP migration :
www
: lancer en parallèle des branches kube-workflow
et kontinuous
kontinuous
doivent être aussi stables que les branches kube-workflow
template
: lancer des branches kontinuous-mvp
en parallèlePossibilité de désactiver la notification de déploiement Github ainsi que le commentaire sur la PR (de debug-manifest
).
À faire pour les Actions deploy-via-github
(à créer) et deploy-via-webhook
(à mettre à jour).
Cas d'usage : un pipeline qui déclenche seulement un Job.
Remonter les erreurs K8S autres que réseau, même quand on les retry.
Ne pas coupler Kontinuous au Sentry de la Fabrique. Le mettre donc en option en fonction d'une variable d'environnement SENTRY_DSN
par exemple.
définir les attendus côté cluster pour pouvoir faire tourner kontinuous avec/sans webhook
See what tests we could add
Component | tests | status |
---|---|---|
build | test manifests generation (templating) : snapshots | to complete |
deploy | e2e tests in kind ? | to complete |
webhook | test deploy and security | |
boilerplates | ? | |
cli | build and commands |
ideas :
ce serait cool d'avoir un schema de validation/autocompletion du fichier .kontinuous/config.yaml
)
j'imagine qu'il faudrait le re-générer à chaque release à partir des options possibles
une fois établi le schema pourrait target les .kontinuous/config.yaml
avec schemastore.org
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates are currently rate-limited. Click on a checkbox below to force their creation now.
These updates have been manually edited so Renovate will no longer make changes. To discard all commits and start over, click on a checkbox.
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
docker-compose.built.yaml
docker-compose.yaml
.github/actions/deploy-via-github/Dockerfile
.github/actions/deploy-via-webhook/Dockerfile
.github/actions/env/Dockerfile
packages/argocd/Dockerfile
argoproj/argocd v2.6.3
packages/degit/Dockerfile
ubuntu 22.04
packages/kontinuous/Dockerfile
ubuntu 22.04
packages/wait-needs/Dockerfile
node 20
node 20-alpine
packages/webhook/Dockerfile
ubuntu 22.04
packages/webhook/Dockerfile.dev
ubuntu 22.04
.github/actions/build-images/action.yaml
docker/login-action v2
docker/metadata-action v4
docker/build-push-action v4
.github/workflows/build-image-degit.yml
actions/checkout v3
.github/workflows/build-image-kontinuous.yml
actions/checkout v3
actions/checkout v3
.github/workflows/build-image-wait-needs.yml
actions/checkout v3
.github/workflows/build-image-webhook.yml
actions/checkout v3
.github/workflows/codeql-analysis.yml
actions/checkout v3
github/codeql-action v2
github/codeql-action v2
github/codeql-action v2
.github/workflows/release-commit.yml
actions/checkout v3
crazy-max/ghaction-import-gpg v5
.github/workflows/release-publish.yml
actions/checkout v3
actions/setup-node v3
JS-DevTools/npm-publish v2
softprops/action-gh-release v1
.github/workflows/review-e2e-linked.yml
actions/checkout v3
.github/workflows/sync-gitlab.yml
actions/checkout v3
socialgouv/gitlab-mirror-and-ci-action v1
.github/workflows/tests-build.yml
actions/checkout v3
actions/setup-node v3
.github/workflows/tests-deploy.yaml
actions/checkout v3
actions/setup-node v3
helm/kind-action v1.5.0
.github/workflows/tests-jsonschema.yml
actions/checkout v3
actions/setup-python v4
.github/workflows/tests-kubeconform.yml
actions/checkout v3
.github/workflows/tests-lint.yml
actions/checkout v3
actions/setup-node v3
.github/workflows/tests-webhook.yml
actions/checkout v3
actions/setup-node v3
.gitlab-ci.yml
boilerplates/infra-samples/argocd/kontinuous-webhook/values.yaml
packages/webhook/values.yaml
plugins/contrib/charts/job/values.yaml
debian stable
plugins/contrib/charts/jobs/values.yaml
debian stable
plugins/contrib/charts/redis/values.yaml
redis 6.2.6-alpine3.14
plugins/fabrique/charts/pg/values.yaml
ghcr.io/cloudnative-pg/postgis 14
boilerplates/infra-samples/argocd/kontinuous-webhook/Chart.yaml
plugins/contrib/Chart.yaml
plugins/contrib/charts/deactivate/Chart.yaml
plugins/contrib/charts/job/Chart.yaml
plugins/contrib/charts/jobs/Chart.yaml
plugins/fabrique/Chart.yaml
keycloakx 2.1.1
plugins/fabrique/charts/pg/Chart.yaml
plugins/fabrique/charts/pgweb/Chart.yaml
package.json
commit-and-tag-version ^11.0.0
docsify-cli ^4.4.4
eslint ^8.26.0
eslint-config-airbnb-base ^15.0.0
eslint-config-prettier ^8.5.0
eslint-import-resolver-alias ^1.1.2
eslint-plugin-import ^2.26.0
eslint-plugin-jest ^27.0.0
eslint-plugin-node ^11.1.0
eslint-plugin-prettier ^4.0.0
fs-extra ^11.1.1
husky ^8.0.0
js-yaml ^4.1.0
lint-staged ^13.0.0
prettier ^2.6.2
renovate ^35.0.0
node ^16.17 || ^18 || ^20
tar ^6.1.9
multer ^1.4.4-lts.1
fast-copy ^3.0.0
qs ^6.9.7
json5 ^2.2.2
cookiejar ^2.1.4
got ^11.8.5
yaml ^2.3.1
yarn 4.0.0-rc.39
packages/common/package.json
@npmcli/ci-detect ^3.0.2
@sentry/node ^7.20.1
async-retry ^1.3.3
axios ^1.2.5
axios-retry ^3.3.1
compare-versions ^5.0.1
cross-process-lock ^2.1.0
decompress ^4.2.1
direct-logger ^2.7.3
dotenv ^16.0.2
fs-extra ^11.1.1
jest-diff ^29.0.0
js-yaml ^4.1.0
lodash.camelcase ^4.3.0
lodash.kebabcase ^4.1.1
lodash.set ^4.3.2
micromatch ^4.0.5
ms ^2.1.3
nctx ^2.2.0
parse-url ^8.1.0
qs ^6.11.0
slugify ^1.6.5
sonic-boom ^3.0.0
tiged ^2.12.4
which ^3.0.0
yaml ^2.3.1
zx ^7.1.1
node ^16.17 || ^18 || ^20
packages/dev-tools/package.json
replace ^1.2.2
node ^16.17 || ^18 || ^20
packages/helm-tree/package.json
decompress ^4.2.1
fs-extra ^11.1.1
node ^16.17 || ^18 || ^20
packages/kontinuous/package.json
@babel/core ^7.20.5
@babel/preset-env ^7.18.2
@babel/preset-typescript ^7.17.12
@sentry/node ^7.30.0
@types/node ^20.1.0
async-retry ^1.3.3
cli-color ^2.0.3
cli-highlight ^2.1.11
commander ^10.0.0
decompress ^4.2.1
dotenv ^16.0.0
dree ^4.0.0
enquirer ^2.3.6
form-data ^4.0.0
fs-extra ^11.1.1
launch-editor ^2.4.0
link-module-alias ^1.2.0
lodash.camelcase ^4.3.0
lodash.clonedeep ^4.5.0
lodash.defaults ^4.2.0
lodash.defaultsdeep ^4.6.1
lodash.get ^4.4.2
lodash.mergewith ^4.6.2
lodash.omit ^4.5.0
lodash.pick ^4.4.0
lodash.set ^4.3.2
nctx ^2.2.0
nowtest ^1.1.1
qs ^6.10.5
ts-node ^10.8.1
typescript ^4.7.4
@vercel/ncc ^0.36.1
jest ^29.0.0
jest-specific-snapshot ^7.0.0
node ^16.17 || ^18 || ^20
packages/wait-needs/package.json
node ^16.17 || ^18 || ^20
yarn 4.0.0-rc.39
packages/webhook/package.json
@modjo/core ^1.2.6
@modjo/express ^1.2.6
@modjo/microservice-oapi ^1.2.6
@modjo/sentry ^1.2.6
@vercel/ncc ^0.36.0
async-retry ^1.3.3
chokidar ^3.5.3
fs-extra ^11.1.1
link-module-alias ^1.2.0
lodash.defaultsdeep ^4.6.1
lodash.mergewith ^4.6.2
nctx ^2.2.0
node-cron ^3.0.0
rimraf ^4.1.2
uuid ^9.0.0
jest ^29.0.0
jest-specific-snapshot ^7.0.0
nodemon ^2.0.15
supertest ^6.2.2
node ^16.17 || ^18 || ^20
plugins/contrib/package.json
async ^3.2.4
async-retry ^1.3.3
fs-extra ^11.1.1
kubernetes-resource-parser ^0.1.0
lodash.camelcase ^4.3.0
lodash.clonedeep ^4.5.0
lodash.defaults ^4.2.0
lodash.get ^4.4.2
lodash.omit ^4.5.0
lodash.pick ^4.4.0
lodash.set ^4.3.2
parse-duration ^1.1.0
slackstream ^0.2.1
jest ^29.3.1
node ^16.17 || ^18 || ^20
json5 2.2.3
yarn 4.0.0-rc.39
plugins/fabrique/package.json
@socialgouv/parse-manifests ^1.16.4
node ^16.17 || ^18 || ^20
yarn 4.0.0-rc.39
.nvmrc
node v20
.github/actions/deploy-via-webhook/Dockerfile
mikefarah/yq 4.31.1
packages/argocd/Dockerfile
node 20
packages/degit/Dockerfile
ubuntu 22.04
node 20.3.0
packages/kontinuous/Dockerfile
ubuntu 22.04
node 20.1.0
kubernetes/kubectl 1.27.1
helm/helm 3.11.3
socialgouv/rollout-status 1.13.5
stern/stern 1.25.0
yannh/kubeconform 0.6.1
packages/wait-needs/Dockerfile
node 20
socialgouv/rollout-status 1.13.5
kubernetes/kubectl 1.27.1
packages/webhook/Dockerfile
ubuntu 22.04
node 20
kubernetes/kubectl 1.27.1
socialgouv/rollout-status 1.13.5
packages/webhook/Dockerfile.dev
ubuntu 22.04
node 20
kubernetes/kubectl 1.27.1
socialgouv/rollout-status 1.13.5
packages/common/versions.js
helm/helm 3.11.3
kubernetes/kubectl 1.27.1
socialgouv/rollout-status 1.13.5
stern/stern 1.25.0
carvel-dev/kapp 0.54.3
yannh/kubeconform 0.6.1
Produit et mode de fonctionnement viable pour migrer les produits existants de la Fabrique :
Validation :
www
: lancer en parallèle des branches kube-workflow
et kontinuous
kontinuous
doivent être aussi stables que les branches kube-workflow
template
: lancer des branches kontinuous-mvp
en parallèleProduit et mode de fonctionnement viable pour migrer les produits existants et initialiser les nouveaux produits de la Fabrique en mode webhook :
Développer un moyen d'agréger les erreurs de tous les pods en erreur (et seulement les erreurs). À utiliser :
reporting
du webhook qui sera appelé par l'Action deploy-via-webhook
deploy-via-github
Permettra un meilleur reporting des erreurs sans les diluer dans le reste des logs.
Refacto et mieux découpler les actions et reusable workflows
par exemple en local je ne veux pas tout ce qui concerne sealed-secrets
Sur le cluster de dev via ArgoCD
Produit et mode de fonctionnement viable pour initialiser un nouveau produit de la Fabrique. Inclut toutes les contraintes de MVP migration (#83) et les contraintes suivantes :
Éviter d'avoir des anciennes APIs exposées en même temps que les nouvelles, problèmes posés : API incompatible avec une migration effectuée, frontend incompatible avec l'API, etc.
Implémentation avancée : peut également permettre de tester la nouvelle version alors que l'ancienne version est encore exposée.
Action pour lancer la commande cli kontinuous deactivate --chart deactivate --ignore-project-template
.
Retirer les settings webhook des repos qui ne seront pas utiles pour le MVP migration.
Retirer les secrets webhook et trouver une autre implémentation permettant d'agréger les tokens en un seul secret.
Faire en sorte que par défaut, en dev, sur les charts fournis par kontinuous, les resources requests (surtout cpu) soient assez basses
dans un 2 temps et si nécessaire, gérer le cas des charts qui ne permettent pas d'overrider ca ? (plutôt rare a priori)
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates are awaiting their schedule. Click on a checkbox to get an update now.
These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.
docker-compose.built.yaml
docker-compose.yaml
.github/actions/deploy-via-github/Dockerfile
.github/actions/deploy-via-webhook/Dockerfile
.github/actions/env/Dockerfile
packages/argocd/Dockerfile
argoproj/argocd v2.5.9
packages/degit/Dockerfile
node 18
packages/kontinuous/Dockerfile
ubuntu 22.04
ubuntu 22.04
packages/wait-needs/Dockerfile
node 18
node 18
packages/webhook/Dockerfile
ubuntu 22.04
packages/webhook/Dockerfile.dev
ubuntu 22.04
.github/actions/build-images/action.yaml
docker/login-action v2
docker/metadata-action v4
docker/build-push-action v3
.github/workflows/build-image-degit.yml
actions/checkout v3
.github/workflows/build-image-kontinuous.yml
actions/checkout v3
actions/checkout v3
.github/workflows/build-image-wait-needs.yml
actions/checkout v3
.github/workflows/build-image-webhook.yml
actions/checkout v3
.github/workflows/codeql-analysis.yml
actions/checkout v3
github/codeql-action v2
github/codeql-action v2
github/codeql-action v2
.github/workflows/release.yml
actions/checkout v3
JS-DevTools/npm-publish v1
softprops/action-gh-release v1
.github/workflows/review-e2e-linked.yml
actions/checkout v3
.github/workflows/sync-gitlab.yml
actions/checkout v3
socialgouv/gitlab-mirror-and-ci-action v1
.github/workflows/tests-build.yml
actions/checkout v3
actions/setup-node v3
.github/workflows/tests-deploy.yaml
actions/checkout v3
actions/setup-node v3
helm/kind-action v1.5.0
.github/workflows/tests-lint.yml
actions/checkout v3
actions/setup-node v3
.github/workflows/trigger-release-manual.yml
actions/checkout v3
.github/workflows/trigger-release-merge.yml
actions/checkout v3
.gitlab-ci.yml
boilerplates/infra-samples/argocd/kontinuous-webhook/values.yaml
packages/webhook/values.yaml
plugins/contrib/charts/job/values.yaml
debian stable
plugins/contrib/charts/jobs/values.yaml
debian stable
plugins/contrib/charts/maildev/values.yaml
boilerplates/infra-samples/argocd/kontinuous-webhook/Chart.yaml
plugins/contrib/Chart.yaml
plugins/contrib/charts/deactivate/Chart.yaml
plugins/contrib/charts/job/Chart.yaml
plugins/contrib/charts/jobs/Chart.yaml
plugins/fabrique/Chart.yaml
keycloakx 2.1.0
package.json
commit-and-tag-version ^11.0.0
docsify-cli ^4.4.4
eslint ^8.26.0
eslint-config-airbnb-base ^15.0.0
eslint-config-prettier ^8.5.0
eslint-import-resolver-alias ^1.1.2
eslint-plugin-import ^2.26.0
eslint-plugin-jest ^27.0.0
eslint-plugin-prettier ^4.0.0
fs-extra ^11.1.0
husky ^8.0.0
js-yaml ^4.1.0
lint-staged ^13.0.0
prettier ^2.6.2
renovate ^34.115.1
node >=16
tar ^6.1.9
multer ^1.4.4-lts.1
fast-copy ^3.0.0
qs ^6.9.7
json5 ^2.2.2
cookiejar ^2.1.4
got ^11.8.5
yarn 4.0.0-rc.36
packages/common/package.json
@sentry/node ^7.20.1
async-retry ^1.3.3
axios ^1.2.5
axios-retry ^3.3.1
compare-versions ^5.0.1
decompress ^4.2.1
direct-logger ^2.7.1
dotenv ^16.0.2
fs-extra ^11.1.0
jest-diff ^29.0.0
js-yaml ^4.1.0
lodash.camelcase ^4.3.0
lodash.kebabcase ^4.1.1
lodash.set ^4.3.2
micromatch ^4.0.5
ms ^2.1.3
nctx ^1.7.1
parse-github-url ^1.0.2
qs ^6.11.0
slugify ^1.6.5
sonic-boom ^3.0.0
tiged 2.12.3
which ^3.0.0
yaml ^2.0.1
zx ^7.1.1
node >=16
packages/dev-tools/package.json
replace ^1.2.2
packages/helm-tree/package.json
decompress ^4.2.1
fs-extra ^11.1.0
node >=16
packages/kontinuous/package.json
@babel/core ^7.20.5
@babel/preset-env ^7.18.2
@babel/preset-typescript ^7.17.12
@sentry/node ^7.30.0
@types/node ^18.0.0
async-retry ^1.3.3
cli-color ^2.0.3
cli-highlight ^2.1.11
commander ^10.0.0
decompress ^4.2.1
dotenv ^16.0.0
dree ^3.4.2
enquirer ^2.3.6
form-data ^4.0.0
fs-extra ^11.1.0
launch-editor ^2.4.0
link-module-alias ^1.2.0
lodash.camelcase ^4.3.0
lodash.defaults ^4.2.0
lodash.defaultsdeep ^4.6.1
lodash.get ^4.4.2
lodash.mergewith ^4.6.2
lodash.omit ^4.5.0
lodash.pick ^4.4.0
lodash.set ^4.3.2
nctx ^1.7.1
nowtest ^1.1.1
qs ^6.10.5
ts-node ^10.8.1
typescript ^4.7.4
jest ^29.0.0
jest-specific-snapshot ^7.0.0
node >=14.0.0
packages/wait-needs/package.json
yarn 4.0.0-rc.36
packages/webhook/package.json
@modjo-plugins/express ^1.0.14
@modjo-plugins/microservice-oapi ^1.0.5
@modjo-plugins/sentry ^1.2.0
@vercel/ncc ^0.36.0
async-retry ^1.3.3
chokidar ^3.5.3
fs-extra ^11.1.0
link-module-alias ^1.2.0
lodash.defaultsdeep ^4.6.1
lodash.mergewith ^4.6.2
nctx ^1.7.1
node-cron ^3.0.0
pino ^8.3.1
pino-bfuscate ^1.0.0
rimraf ^4.1.2
uuid ^9.0.0
jest ^29.0.0
jest-specific-snapshot ^7.0.0
nodemon ^2.0.15
supertest ^6.2.2
node >=16
plugins/contrib/package.json
async ^3.2.4
async-retry ^1.3.3
fs-extra ^11.1.0
kubernetes-resource-parser ^0.1.0
lodash.camelcase ^4.3.0
lodash.clonedeep ^4.5.0
lodash.defaults ^4.2.0
lodash.get ^4.4.2
lodash.omit ^4.5.0
lodash.pick ^4.4.0
lodash.set ^4.3.2
slackstream ^0.2.1
jest ^29.3.1
json5 2.2.3
yarn 4.0.0-rc.36
plugins/fabrique/package.json
@socialgouv/parse-manifests ^1.14.9
yarn 4.0.0-rc.36
.nvmrc
node v18
.github/actions/deploy-via-webhook/Dockerfile
mikefarah/yq 4.30.8
packages/argocd/Dockerfile
node 18
packages/kontinuous/Dockerfile
ubuntu 22.04
kubernetes/kubectl 1.26.1
helm/helm 3.11.0
carvel-dev/kapp 0.54.2
socialgouv/rollout-status 1.13.4
stern/stern 1.22.0
node 18
packages/wait-needs/Dockerfile
node 18
socialgouv/rollout-status 1.13.4
kubernetes/kubectl 1.26.1
packages/webhook/Dockerfile
ubuntu 22.04
node 18
kubernetes/kubectl 1.26.1
socialgouv/rollout-status 1.13.4
packages/webhook/Dockerfile.dev
ubuntu 22.04
node 18
kubernetes/kubectl 1.26.1
socialgouv/rollout-status 1.13.4
packages/common/versions.js
helm/helm 3.11.0
kubernetes/kubectl 1.26.1
socialgouv/rollout-status 1.13.4
stern/stern 1.22.0
carvel-dev/kapp 0.54.2
hostPath on _job.tpl action if env local
env==local: checkout: false, auto volumeMount on workspace
There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.
Location: .github/renovate.json5
Error type: The renovate configuration file contains some invalid settings
Message: Regex Managers must contain datasourceTemplate configuration or regex group named datasource
Evaluer possibilité d'utiliser un cluster dédié aux jobs kontinuous
Utiliser https://github.com/devthejo/direct-logger pour avoir du logging synchrone dans le package commonc/utils/logger-factory
lorsque qu'on passe par exemple l'option sync: true
.
Le but est de se passer de certaines partie de la configuration lors des execution locales de la solution.
Par exemple, en local il serait bon de ne pas exiger le RANCHER_PROJECT_ID
.
Reste à faire:
Le but est d'éviter la création des DBs de prod et de preprod depuis nos shell.
Reste à faire:
Reste à faire:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.