jenkins-x-plugins / jx-admin Goto Github PK
View Code? Open in Web Editor NEWthis plugin handles installing the git operator and viewing the logs
License: Apache License 2.0
this plugin handles installing the git operator and viewing the logs
License: Apache License 2.0
Dependabot can't resolve your Go dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
code.gitea.io/sdk/[email protected]: reading code.gitea.io/sdk/gitea/gitea/go.mod at revision gitea/v0.13.0: unknown revision gitea/v0.13.0
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
the pipeline user should be a contributor of the git repository URL - we should verify that before installing (like we do in jx admin create
)
Please we're facing an issue when installing Git Operator using the < jx admin operator --username mygituser --token mygittoken> command on Onpremise Kubernetes cluster.
All the Pods are in Init:Error state with the following message:
WARNING: could not default pipeline user/email from requirements as file does not exist: jx-requirements.yml
setup git user email [email protected]
generated Git credentials file: /workspace/xdg_config/git/credentials with username: *** email:
no custom git initialisation scripts
ran git init commands: echo 'no custom git initialisation scripts'
error: failed to git clone URL https://github.com/***/***.git to dir source: failed to clone repository https://github.com/***/***.git to directory: source: failed to run 'git clone https://github.com/***/***.git source' command in directory '.', output: 'Cloning into 'source'...
fatal: unable to access 'https://github.com/***/***.git/': Could not resolve host: github.com'
Dependabot can't resolve your Go dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
I've been having issues deploying the jx operator onto a freshly deployed OCP deployment.
I've been following the get started guide for Openshift, and I've not gotten very far with it. The step I have become stuck on, is the installation of the operator. I've (hopefully) attached a text output, from start to fail, of the execution of "jx admin operator"
Would someone be able to help me resolve the following errors:
Error from server (Invalid): error when creating "config-root/customresourcedefinitions/jx/jenkins-x-crds/environments.jenkins.io-crd.yaml": CustomResourceDefinition.apiextensions.k8s.io "environments.jenkins.io" is invalid: spec.versions[0].schema.openAPIV3Schema: Required value: schemas are required
Error from server (Invalid): error when creating "config-root/customresourcedefinitions/jx/jenkins-x-crds/pipelineactivities.jenkins.io-crd.yaml": CustomResourceDefinition.apiextensions.k8s.io "pipelineactivities.jenkins.io" is invalid: spec.versions[0].schema.openAPIV3Schema: Required value: schemas are required
Error from server (Invalid): error when creating "config-root/customresourcedefinitions/jx/jenkins-x-crds/releases.jenkins.io-crd.yaml": CustomResourceDefinition.apiextensions.k8s.io "releases.jenkins.io" is invalid: spec.versions[0].schema.openAPIV3Schema: Required value: schemas are required
Error from server (Invalid): error when creating "config-root/customresourcedefinitions/jx/jenkins-x-crds/sourcerepositories.jenkins.io-crd.yaml": CustomResourceDefinition.apiextensions.k8s.io "sourcerepositories.jenkins.io" is invalid: spec.versions[0].schema.openAPIV3Schema: Required value: schemas are required
make[1]: *** [versionStream/src/Makefile.mk:288: kubectl-apply] Error 1
make[1]: Leaving directory '/workspace/source'
error: failed to regenerate: failed to regenerate phase 1: failed to run 'make regen-phase-1' command in directory '.', output: ''
make: *** [versionStream/src/Makefile.mk:242: regen-check] Error 1
boot Job pod jx-boot-00355b81-9de9-4a3c-974f-45acc43b2dab--1-2l7hb has Failed
jx version: version: 3.2.188
Our team is trying to setup JenkinsX through the admin operator on a vanilla Kubernetes cluster in AWS EKS. Using a self hosted Gitlab repository and not using public Github.com.
Created our repository in our Gitlab instance with the following command:
jx admin create --git-kind gitlab --git-name adgantt --git-server https://gitlab.team-domain.com --git-token <PAT> --git-public false --no-operator --repo jenkins-x-admin
Repository creation was successful and looks like the expected files are present in the repo.
Proceeded to run the following admin operator command:
jx admin operator --username adgantt --token <PAT> -u https://gitlab.team-domain.com/admins/jenkins-x-admin
The installation runs as expected and logs the following health status summary:
jx gitops webhook update --warn-on-fail
WARNING: failed to create Scm client for https://github.com/admins/jenkins-x-admin.git: failed to find git token: could not find git token for git server https://github.com
jx health status -A
NAME NAMESPACE STATUS ERROR MESSAGE
daemonset kuberhealthy OK
deployment kuberhealthy OK
dns-status-internal kuberhealthy OK
jx-bot-token jx ERROR Check execution error: pod deleted unexpectedly
jx-pod-status kuberhealthy OK
jx-secrets kuberhealthy OK
jx-webhook jx ERROR Check execution error: jx/jx-webhook: error when waiting for pod to start: the khcheck check pod is deleted, waiting for start failed
jx-webhook-events jx ERROR Check execution error: jx/jx-webhook-events: error when waiting for pod to start: the khcheck check pod is deleted, waiting for start failed
network-connection-check kuberhealthy OK
Please note in the output, the reference to github.com instead of our expected gitlab.team-domain.com.
When reviewing the namespaces created from the process:
% kubectl get namespaces
NAME STATUS AGE
default Active 7d6h
istio-system Active 2d5h
jx Active 4h2m
jx-git-operator Active 7d4h
jx-production Active 4h2m
jx-staging Active 4h2m
kube-node-lease Active 7d6h
kube-public Active 7d6h
kube-system Active 7d6h
kuberhealthy Active 4h2m
nginx Active 4h2m
tekton-pipelines Active 4h2m
Looking at the pods in the various namespaces, I see the following issue in the jx namespace:
% kubectl -n jx get pods
NAME READY STATUS RESTARTS AGE
bucketrepo-bucketrepo-5697f998bc-pb2w7 1/1 Running 0 4h29m
jx-build-controller-57b8fcdb55-pthlv 0/1 CrashLoopBackOff 57 4h29m
jx-gcactivities-27175320-thlnj 0/1 Completed 0 61m
jx-gcactivities-27175350-fb6rj 0/1 Completed 0 31m
jx-gcpods-27175320-dkthf 0/1 Completed 0 61m
jx-gcpods-27175350-tn565 0/1 Completed 0 31m
jx-pipelines-visualizer-779cc99c9-xnkkd 1/1 Running 0 4h25m
jx-preview-gc-jobs-27175360-klqwd 0/1 Completed 0 21m
jx-preview-gc-jobs-27175370-gwngg 0/1 Completed 0 11m
jx-preview-gc-jobs-27175380-6q6mp 0/1 Completed 0 65s
lighthouse-foghorn-6b4dcfb95d-c4qdt 1/1 Running 0 4h25m
lighthouse-gc-jobs-27175320-s99qr 0/1 Completed 0 61m
lighthouse-gc-jobs-27175350-vl4fq 0/1 Completed 0 31m
lighthouse-gc-jobs-27175380-hfckw 0/1 Completed 0 65s
lighthouse-keeper-8579c6c87-4qzsw 1/1 Running 0 4h25m
lighthouse-tekton-controller-684b96dd8d-t2h6c 1/1 Running 0 4h25m
lighthouse-webhooks-5d8fbd6fbf-rbbbd 1/1 Running 0 35m
The logs for the jx-build-controller pod show the following, which also notes references to github.com instead of our expected Gitlab domain of gitlab.team-domain.com
% kubectl logs -n jx jx-build-controller-57b8fcdb55-pthlv
{"endpoint":"tempo.jx-observability:14268","level":"info","msg":"Initializing OpenTelemetry Traces Exporter","time":"2021-09-01T18:59:49Z","type":"jaeger:http:thrift"}
{"error":"Post \"http://tempo.jx-observability:14268/api/traces\": dial tcp: lookup tempo.jx-observability on 10.100.0.10:53: no such host","level":"warning","msg":"Traces Exporter Endpoint configuration error. Maybe you need to install/configure the Observability stack? https://jenkins-x.io/v3/admin/guides/observability/ The OpenTelemetry Tracing feature won't be enabled until this is fixed.","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"about to run: git config --global credential.helper store in dir .","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"starting build controller","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"starting secret watching masker","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"Watching for Secret resources in namespace jx","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"Watching for Secret resources in namespace jx-git-operator","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"Watching for PipelineActivity resources in namespace jx","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"The service is ready to listen and serve.","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"ignoring secret bucketrepo-config","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret jenkins-maven-settings entry settings-security.xml ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret jenkins-maven-settings entry settings.xml ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"ignoring secret jenkins-x-bucketrepo entry BASIC_AUTH_USER","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret jenkins-x-bucketrepo entry BASIC_AUTH_PASS ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret jx-basic-auth-htpasswd entry auth ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret jx-basic-auth-user-password entry password ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret jx-basic-auth-user-password entry username ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"ignoring secret jx-boot entry username","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret jx-boot entry gitInitCommands ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret jx-boot entry password ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"ignoring secret jx-boot entry url","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret lighthouse-hmac-token entry hmac ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret lighthouse-oauth-token entry oauth ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret tekton-container-registry-auth entry .dockerconfigjson ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret tekton-git entry username ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"adding mask of secret tekton-git entry password ","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"wrote git credentials file /tmp/git-creds/git/credentials","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"about to run: git clone https://github.com/admins/jenkins-x-admin.git /tmp/jx-git-154599549 in dir /tmp","time":"2021-09-01T18:59:49Z"}
{"level":"info","msg":"Cloning into '/tmp/jx-git-154599549'...\nremote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.\nremote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.\nfatal: Authentication failed for 'https://github.com/admins/jenkins-x-admin.git/'","time":"2021-09-01T18:59:50Z"}
{"level":"fatal","msg":"failed to get cluster requirements: failed to clone cluster git repo https://github.com/admins/jenkins-x-admin.git: failed to clone repository https://github.com/admins/jenkins-x-admin.git to directory: /tmp/jx-git-154599549: failed to run 'git clone https://github.com/admins/jenkins-x-admin.git /tmp/jx-git-154599549' command in directory '/tmp', output: 'Cloning into '/tmp/jx-git-154599549'...\nremote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.\nremote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.\nfatal: Authentication failed for 'https://github.com/admins/jenkins-x-admin.git/''","time":"2021-09-01T18:59:50Z"}
It appears that our non-Github.com git URL is not making its way through each of the propagated commands. We could use some help resolving the issue to use our Gitlab repository instead of the default Github.com service.
The Readme links to https://github.com/jenkins-x/jx-promote/blob/master/docs/cmd/jx-admin.md as the command reference
we don't have a clean jx admin destroy
command to remove all of the resources from gitops.
An implementation might be able to clone the cluster git repository and do something like kubectl delete -R -f config-root
?
can we default the project / region / cluster names in the requirements file from GKE automatically inside the boot job?
if so folks could just fork a GKE + Vault or GKE + GSM repo and use it with the operator without having to edit git
Dependabot can't resolve your Go dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
vbom.ml/[email protected]: unrecognized import path "vbom.ml/util" (https fetch: Get https://vbom.ml/util?go-get=1: EOF)
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
The output level for jx admin operator is too verbose. We should try to make it less verbose.
wrote /tmp/031637083/secret-infra/helmfile-namespace-secret-infra-7f3608e8-kubernetes-external-secrets/kubernetes-external-secrets/crds/kubernetes-client.io_externalsecrets_crd.yaml
wrote /tmp/031637083/secret-infra/helmfile-namespace-secret-infra-7f3608e8-kubernetes-external-secrets/kubernetes-external-secrets/templates/serviceaccount.yaml
wrote /tmp/031637083/secret-infra/helmfile-namespace-secret-infra-7f3608e8-kubernetes-external-secrets/kubernetes-external-secrets/templates/rbac.yaml
wrote /tmp/031637083/secret-infra/helmfile-namespace-secret-infra-7f3608e8-kubernetes-external-secrets/kubernetes-external-secrets/templates/rbac.yaml
wrote /tmp/031637083/secret-infra/helmfile-namespace-secret-infra-7f3608e8-kubernetes-external-secrets/kubernetes-external-secrets/templates/rbac.yaml
wrote /tmp/031637083/secret-infra/helmfile-namespace-secret-infra-7f3608e8-kubernetes-external-secrets/kubernetes-external-secrets/templates/service.yaml
wrote /tmp/031637083/secret-infra/helmfile-namespace-secret-infra-7f3608e8-kubernetes-external-secrets/kubernetes-external-secrets/templates/deployment.yaml
These lines are great when debugging, but not when doing a normal install.
Dependabot can't resolve your Go dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
rsc.io/[email protected]: unrecognized import path "rsc.io/binaryregexp" (parse https://rsc.io/binaryregexp?go-get=1: no go-import meta tags ())
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
Right now we tend to create a dummy commit in a cluster git repo to trigger a new boot job.
One idea could be to use a CronJob
, we can reuse this one https://github.com/jenkins-x/jx-cli/blob/master/charts/jx-cli/templates/cronjob.yaml and just configure the helm values. Then create a new command
jx admin sync
or jx admin operator trigger
or something?
which when that runs does the equivalent of
kubectl create job --from=cronjob/jx-operator foo
After running jx admin create
we see some helper text for next steps:
git clone https://github.com/cb-kubecd/jr-dev8
cd jr-dev8
jx remote secrets edit
jx remote run
jx remote secrets edit
Error: unknown command "remote" for "jx"
Lets remove the remote
part and not sure we need jx run
? As I think this has been replaced with deploying the gitops operator?
When running jx admin operator
inside a repository cloned using the SSH URL, the following error is returned:
error: failed to ensure the git URL is valid: failed to parse git URL [email protected]:user/repository-name.git: parse [email protected]:user/repository-name.git: first path segment in URL cannot contain colon
This can be worked around by using --url https://github.com/user/repository-name.git
If this an intended limitation (i.e. Jenkins X cannot access the git repo using the SSH URL), then the documentation may need to be updated to clarify this. If not, then the git URL parsing may need to be updated.
Notes:
url.Parse
because the [email protected]
is not a valid URLDependabot can't resolve your Go dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
vbom.ml/[email protected]: unrecognized import path "vbom.ml/util" (https fetch: Get https://vbom.ml/util?go-get=1: EOF)
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
the jx admin log command waits for a boot Job pod to startup and tails the log; it'd be nice to show a bit more output while its waiting for the git operator to start etc.
e.g. maybe show waiting for the git operator to start... its ready...
... now boot pod is created, ... waiting for it to be ready... now here's the log
Dependabot couldn't parse the go.mod found at /go.mod
.
The error Dependabot encountered was:
go: writing go.mod cache: write /opt/go/gopath/pkg/mod/cache/download/github.com/onsi/gomega/@v/v1.8.1.mod49627420.tmp: no space left on device
go: writing go.mod cache: write /opt/go/gopath/pkg/mod/cache/download/golang.org/x/sync/@v/v0.0.0-20180314180146-1d60e4601c6f.mod698928721.tmp: no space left on device
go: writing go.mod cache: write /opt/go/gopath/pkg/mod/cache/download/golang.org/x/lint/@v/v0.0.0-20200302205851-738671d3881b.mod460965343.tmp: no space left on device
go: writing go.mod cache: rename /opt/go/gopath/pkg/mod/cache/download/golang.org/x/net/@v/v0.0.0-20200202094626-16171245cfb2.mod115503653.tmp /opt/go/gopath/pkg/mod/cache/download/golang.org/x/net/@v/v0.0.0-20200202094626-16171245cfb2.mod: no space left on device
go: writing go.mod cache: write /opt/go/gopath/pkg/mod/cache/download/github.com/prometheus/client_model/@v/v0.0.0-20180712105110-5c3871d89910.mod709680147.tmp: no space left on device
go: writing go.mod cache: write /opt/go/gopath/pkg/mod/cache/download/github.com/go-openapi/spec/@v/v0.19.5.mod436098408.tmp: no space left on device
go: writing go.mod cache: write /opt/go/gopath/pkg/mod/cache/download/golang.org/x/net/@v/v0.0.0-20181114220301-adae6a3d119a.mod757135820.tmp: no space left on device
go: writing go.mod cache: write /opt/go/gopath/pkg/mod/cache/download/golang.org/x/sys/@v/v0.0.0-20181116152217-5ac8a444bdc5.mod740725727.tmp: no space left on device
go: failed to write version list: write /opt/go/gopath/pkg/mod/cache/download/github.com/prometheus/client_model/@v/list940498172.tmp: no space left on device
Some of the questions could give a bit more context, what is the repo for when asking for a name for example, and not sure folks will know what a git operator is when being asked to install it. I wonder if this should ask apply installer?
or something?
? git server for the new git repository: https://github.com
? git owner (user/organization) for the new git repository: cb-kubecd
? git repository name: jr-dev8
? Do you wish to use rawlingsj as the Git user name: (Y/n)
? do you want to install the git operator into the cluster? [? for help] (Y/n)
Started from here:
https://github.com/jx3-gitops-repositories/jx3-eks-terraform-vault
Got to install Git Operator.
Installed git operator and nothing happens after I hit this:
# lets wait for the ExternalSecrets service to populate the mandatory Secret resources
VAULT_ADDR=https://vault.secret-infra:8200 jx secret wait
waiting for the mandatory Secrets to be populated from ExternalSecrets...
jenkins-x-chartmuseum: key secret/data/jx/adminUser missing properties: password, username
jx-pipeline-git-github-github: key secret/data/jx/pipelineUser missing properties: token, username
knative-docker-user-pass: key secret/data/knative/docker/user/pass missing properties: .dockerconfigjson
knative-git-user-pass: key secret/data/jx/pipelineUser missing properties: token, username
lighthouse-hmac-token: key secret/data/lighthouse/hmac missing properties: token
lighthouse-oauth-token: key secret/data/lighthouse/oauth missing properties: token
nexus: key secret/data/nexus missing properties: password
Just kinda sitting there. Not sure what to do next.
Golang supports only 2 major releases: https://endoflife.date/go
Go 1.19 is expected to be out in August 2022.
Wrapping with the flow of this jenkins-x/jx#8283
There is a file .golangci.yaml in the repo but it is not being used.
We need to add lint as the step in pr-build.
Also the codebase is not linted.
trigger
cmd needs some documentation
Code: https://github.com/jenkins-x-plugins/jx-admin/blob/main/pkg/cmd/trigger/trigger.go#L38-L50
Current output:
~jx admin trigger -h Views the boot Job logs in the cluster
Usage:
jx-admin trigger [flags]
Aliases:
trigger, rerun
Examples:
* views the current boot logs
```bash
jx-admin log
```
Flags:
-b, --batch-mode Runs in batch mode without prompting for user input
--commit-sha string the git commit SHA to filter jobs by
-h, --help help for trigger
--log-level string Sets the logging level. If not specified defaults to $JX_LOG_LEVEL
-n, --namespace string the namespace where the boot jobs run. If not specified it will look in: jx-git-operator and jx
-s, --selector string the selector of the boot Job pods (default "app=jx-boot")
--verbose Enables verbose output. The environment variable JX_LOG_LEVEL has precedence over this flag and allows setting the logging level to any value of: panic, fatal, error, warn, info, debug, trace
If you grab a pod while it's initialising then it will error.
Could easily handle this and wait 5 seconds or give a nice error message to try again.
? select the Job to view: [Use arrows to move, enter to select, type to filter]
> #37 started 0s Running
#36 started 1h54m0s Succeeded
#35 started 2h8m0s Pending
#34 started 2h21m0s Failed
#33 started 2h23m0s Failed
#32 started 2h25m0s Succeeded
#31 started 3h28m0s Failed
? select the Job to view: #37 started 0s Running
tailing boot Job pod jx-boot-51ed180b54dae1a98d65d9b-nl8q5
Error from server (BadRequest): container "job" in pod "jx-boot-51ed180b54dae1a98d65d9b-nl8q5" is waiting to start: PodInitializing
Following the setup guidelines on a new Apple M1 will currently lead to
jx admin log
"ERROR: failed to install binary plugin jx-admin version 0.1.1 to /Users/steven/.jx3/plugins/bin: unable to locate binary for arm64 darwin for admin"
Dependabot can't resolve your Go dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
vbom.ml/[email protected]: unrecognized import path "vbom.ml/util" (parse https://vbom.ml/util?go-get=1: no go-import meta tags ())
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
if no git-token is supplied we should display the URL the user should use to create a git token
I added https://github.com/jx3-gitops-repositories/jx3-kubernetes as upstream in my repo to be able to compare my version with the upstream in case Kpt breaks something on jx gitops upgrade.
On the next jx admin operator, the operator confused it to be my url, create a secret for github instead of gitlab...
I think this is not expected behavior, am I wrong?
Dependabot can't resolve your Go dependency files.
As a result, Dependabot couldn't update your dependencies.
The error Dependabot encountered was:
gomodules.xyz/jsonpatch/[email protected]: unrecognized import path "gomodules.xyz/jsonpatch/v2" (parse https://gomodules.xyz/jsonpatch/v2?go-get=1: no go-import meta tags ())
If you think the above is an error on Dependabot's side please don't hesitate to get in touch - we'll do whatever we can to fix it.
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.