Giter Club home page Giter Club logo

fescobar / allure-docker-service Goto Github PK

View Code? Open in Web Editor NEW
593.0 22.0 171.0 24.9 MB

This docker container allows you to see up to date reports simply mounting your "allure-results" directory in the container (for a Single Project) or your "projects" directory (for Multiple Projects). Every time appears new results (generated for your tests), Allure Docker Service will detect those changes and it will generate a new report automatically (optional: send results / generate report through API), what you will see refreshing your browser.

License: Apache License 2.0

Shell 19.37% Python 55.79% HTML 13.12% Groovy 9.52% PowerShell 2.19%
allure docker report reporting report-generator reporting-tool allure-framework allure2 docker-compose testing

allure-docker-service's People

Contributors

abhidp avatar apulverizer avatar avin avatar blbaker3 avatar daniel-jimenezgarcia-ow avatar fescobar avatar horodchukanton avatar lazytesting avatar raymondmouthaan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

allure-docker-service's Issues

Emailable Report

I will implement the emailable report.

  • Custom reports
  • Getting reports from API (zip and html)

Add ability to navigate between build results in Trends

Hello,

When I have a report with results from 2 or more builds I am unable to navigate between these builds by clicking on column in Trends. For Example I want to open the previous report but it's impossible.
As I know, such feature exists in Jenkins plugin for Allure report.

Please let me know if it possible to implement this in your version of Allure report.

Thanks in advance.

Allure report unknown

I downloaded container today. Immediately after running the container all is alright.
The command was:
docker run --user="$(id -u):$(id -g)" -p 5050:5050 -e CHECK_RESULTS_EVERY_SECONDS=3 -e KEEP_HISTORY=1
-v ${PWD}/allure-results:/app/allure-results
frankescobar/all

--user="$(id -u):$(id -g)" - is because my boss install ubuntu with root for me firstly.

But after a first auto-detect of a new allure results on page of report (/allure-docker-service/projects/default/reports/latest/index.html) - ALLURE REPORT UNKNOWN.

Log of container:
"Detecting results changes for PROJECT_ID: default
Automatic Execution in Progress for PROJECT_ID: default...
Creating history on results directory for PROJECT_ID: default ...
mkdir: cannot create directory ‘/app/allure-docker-api/static/projects/default/results/history’: No such file or directory
Copying history from previous results...
cp: cannot create directory '/app/allure-docker-api/static/projects/default/results/history': No such file or directory
Creating executor.json for PROJECT_ID: default
/app/generateAllureReport.sh: line 57: /app/allure-docker-api/static/projects/default/results/executor.json: No such file or directory
Generating report for PROJECT_ID: default
Report successfully generated to /app/allure-docker-api/static/projects/default/reports/latest
Storing report history for PROJECT_ID: default
BUILD_ORDER:2
Status: 200"

How to check specified test round result?

I running the allure server docker in multiple projects version, the scenario is:

project id: my-project-id

Run test with total test cases = 10, and all test cases failed, then publish the allure-results directory to allure server by API call (for example, CURL or shell script), and then generate the test report by the API call (by CURL or shell script, etc.).
Then the first report in allure-server is available with URL:
http://localhost:5050/allure-docker-service/projects/my-project-id/reports/1/index.html#

The report will show all the test cases are failed, it is expected.

Run the test again that the test cases executed in step 2 that total is 10, and got the test result that all 10 test cases are passed.
Then publish the allure-results to allure-server` and generate the report by API, then we will get the second test report:
http://localhost:5050/allure-docker-service/projects/my-project-id/reports/2/index.html#

Then open the second report,
Expect:
the report displaying of this round's test information should be shown all test cases are passed.
Actually:
the report displays the testing information is aggregative testing information from all history report, so the report display failed cases that aggregate from the report history that did by step 2.

For example, below it is my the 10th round test report
image

the report list many test case failures and others passes.

actually, in the 10th round of the testing, only one test case executed and failed, the test case is below:
image

when I open this test round's report: http://192.168.1.80:5050/allure-docker-service/projects/my-project-id/reports/10/index.html#suites
I only care which test case failed in this round of test (melco.limo.LimoBookingDailyLimitTest #testADTFeatureForPatron), I don't care other round's test failed and passed (melco.limo.LimoBookingDailyLimitTest#afterMethod, actually this failed case happened in the 1st test round, fixed already), I only care about this test round's test result (pass and fail, most focus on failure).

would like to know is it possible to only display the single history report without aggregation? the url is: http://localhost:5050/allure-docker-service/projects/[project_id]reports/[history_id]/index.html#

and then the latest report of the project displays the aggregation of the test report history:
http://localhost:5050/allure-docker-service/projects/[project_id]reports/latest/index.html#

I know we can check the test case history from the tab History in the test case detail, but it is hard to debug when my current test has some test case failed to need to check the failure details.

Thanks.

Why files are sand and saved in format .bin ?

Good day! Rewrote the script from Python to Groovy, send reports to the server,
but attachments do not appear, if you upload them they are in .bin format. Tell me the pictures do not need to be encrypted when sending?
image
image

task sendReports {
    group "Work Allure Server api"
    description "send results test in remote server"
    doLast {
        File f = new File("${project.buildDir}/allure-results");
        if (f.exists() && f.isDirectory()) {
            def request = new Request()
            f.eachFile {
                Reports files = new Reports(
                        file_name: it.name,
                        content_base64: it.text.bytes.encodeBase64()
                )
                request.results.add(files)
            }
            def req = new URL(gradle.allureServer+"/send-results").openConnection()
            req.setRequestMethod("POST")
            req.setRequestProperty("Content-Type", "application/json; charset=UTF-8")
            req.setDoOutput(true)
            req.getOutputStream().write(JsonOutput.toJson(request).getBytes("UTF-8"))
            logger.quiet "Status code: ${req.getResponseCode()}"
            def resp = new JsonSlurper().parseText(req.getInputStream().getText())
            logger.quiet "Response: ${resp}"
        } else {
            logger.quiet "Not folder: ${project.buildDir}/allure-results"
        }
    }
}

class Request {
    List<Reports> results = new LinkedList<>()
}
class Reports {
    String file_name
    String content_base64
}

Duplicate history trends

It seems like the history trend is invalid.

Here is a simple repro case using the sample data:

  1. In the allure-api-usage directory call python send_results.py
  2. In the hosted api run generate-report on the default project

After a single test run I'm seeing a trend chart like:

Notice there are two entries for #1 this seems invalid.

Running allure server allure-results-example/ locally renders it like:
image
which is what I expect to see.

It seems like the history is getting duplicated somehow.

Logs:

Starting reporting_allure_1 ... done
Attaching to reporting_allure_1
allure_1  | Not checking results automatically
allure_1  | ALLURE_VERSION: 2.13.4
allure_1  | Generating default report
allure_1  | ls: cannot access '/app/allure-docker-api/static/projects/default/reports': No such file or directory
allure_1  | Creating results directory for PROJECT_ID: default
allure_1  | Creating executor.json for PROJECT_ID: default
allure_1  | Generating report for PROJECT_ID: default
allure_1  | Report successfully generated to /app/allure-docker-api/static/projects/default/reports/latest
allure_1  | Status: 200
allure_1  | 2020-07-27 17:27:33.819:INFO::main: Logging initialized @699ms to org.eclipse.jetty.util.log.StdErrLog
allure_1  | Creating history on results directory for PROJECT_ID: default ...
allure_1  | Copying history from previous results...
allure_1  | Status: 200

This is my compose file:

version: '3'
services:
  allure:
    image: "frankescobar/allure-docker-service"
    environment:
      CHECK_RESULTS_EVERY_SECONDS: NONE
      KEEP_HISTORY: "TRUE"
      KEEP_HISTORY_LATEST: 25
    ports:
      - "5050:5050"
    volumes:
      - ${PWD}/projects:/app/projects

Query: Add authentication to the report

Hosting this report in a container would make it available to everyone with the URL as it doesn't have any authentication method. We use Google cloud to host our service. Could you please advice what should be done to add authentication to it?

Upload results on server

My tests are executed on Gitlab CI with node image and I wish use this docker image like server to generate report and to keep history execution.
But how can I upload my results on this server from my job on Gitlab? I didn't see API for that, maybe another way to do that. Can you help me?
thanks

add report summary to emailable report template

Hi can we please add a report summary to the emailable report template (default.html), similar to what is on the dashboard of the allure report.

Ideally you want the following:

  1. Test Case percentage passed overall
  2. Total number of Test cases Passed
  3. Total number of Test cases Failed
  4. Total number of test cases Broken/Skipped (if possible to do this)

Thanks

Every 10 seconds >> allure_1 | 127.0.0.1 - - [09/Jun/2020 21:39:47] "GET / HTTP/1.1" 200 -

Every 10 sends i see in docker logs this massage:

allure_1                    | 127.0.0.1 - - [09/Jun/2020 21:39:27] "GET / HTTP/1.1" 200 -
allure_1                    | 127.0.0.1 - - [09/Jun/2020 21:39:37] "GET / HTTP/1.1" 200 -
allure_1                    | 127.0.0.1 - - [09/Jun/2020 21:39:47] "GET / HTTP/1.1" 200 -
allure_1                    | 127.0.0.1 - - [09/Jun/2020 21:39:57] "GET / HTTP/1.1" 200 -
allure_1                    | 127.0.0.1 - - [09/Jun/2020 21:40:07] "GET / HTTP/1.1" 200 -

Му docker-compose config:

  allure:
    image: "frankescobar/allure-docker-service"
    environment:
      CHECK_RESULTS_EVERY_SECONDS: NONE
      KEEP_HISTORY: "TRUE"
      KEEP_HISTORY_LATEST: 20
      SERVER_URL: "http://localhost:5050/latest-report"
    ports:
      - "5050:5050"
    volumes:
      - ./allure-results:/app/allure-results
      - ./allure-reports:/app/default-reports

That is this? How i can switch off this message?

generateAllureReport.sh fails when no. of allure-results files increases

When the test cases increases, the resulting number of files in allure-results keeps of increasing.
Before generating new report. Allure deletes the old reports using allure generate --clean

Deleting 1000s of files at one go gives out this error:

Detecting new results...
Generating report
Report successfully generated to allure-report
Detecting new results...
/app/checkAllureResultsFiles.sh: line 24: /app/generateAllureReport.sh: Argument list too long
/app/checkAllureResultsFiles.sh: line 26: /bin/sleep: Argument list too long
/app/checkAllureResultsFiles.sh: line 20: /bin/ls: Argument list too long
Detecting new results...
Generating report
Report successfully generated to allure-report
Detecting new results...
/app/checkAllureResultsFiles.sh: line 24: /app/generateAllureReport.sh: Argument list too long
/app/checkAllureResultsFiles.sh: line 26: /bin/sleep: Argument list too long
/app/checkAllureResultsFiles.sh: line 20: /bin/ls: Argument list too long
Detecting new results...
Generating report
Report successfully generated to allure-report
Detecting new results...
/app/checkAllureResultsFiles.sh: line 24: /app/generateAllureReport.sh: Argument list too long
/app/checkAllureResultsFiles.sh: line 26: /bin/sleep: Argument list too long
/app/checkAllureResultsFiles.sh: line 20: /bin/ls: Argument list too long

Resolution: According to me, before running allure generate --clean in generateAllureReport.sh you should delete the existing files in allure-results using the resolution given here

app/generateAllureReport.sh: line 56: /app/allure-docker-api/static/projects/default/results/executor.json: Permission denied

Latest docker image gives below errors
allure_1 | /app/generateAllureReport.sh: line 56: /app/allure-docker-api/static/projects/default/results/executor.json: Permission denied
cp: cannot create directory '/app/allure-docker-api/static/projects/default/results/history': Permission denied

Its NOT reloading when new results generating.I have to restart the service to see new results.
I'm using Ubuntu 18.04

below is my docker-compose.yml
version: '3'
services:
allure:
image: "frankescobar/allure-docker-service"
environment:
CHECK_RESULTS_EVERY_SECONDS: 1
KEEP_HISTORY: "TRUE"
ports:
- "4040:4040"
- "5050:5050"
volumes:
- ./allure-results:/app/allure-results

Help, not work api

I use an example from the documentation(allure-docker-service/allure-docker-api-usage/), I specified only the address of my server(allureServer = 'http://.194..24:5050')
Error returned
RESPONSE: { "meta_data": { "message": "local variable 'f' referenced before assignment" } } STATUS: 400
Tell me how to decide in which direction to look for the problem

Question.How json reporting?

A little confused. And how to generate a report only in json, because the html page is formed as a standard. Is there any kind of ready-made solution just a bunch (formation and sending).

container runs as root user

The docker container is run with the root user. The kubernetes platform where I wanted to deploy this service prohibits containers from running as root user, logging in with some low-privileged user instead. This leads to some directories being inaccessible (/app/allure-report/history for example) and therefore the app can't function fully.
I believe it is considered more secure to not run as root (which is probably also why the platform is prohibiting it)

Allure-maven-docker-plugin

hi @fescobar,

First of all, very nice to see a Docker project for Allure Reporting 👍 .

I took the opportunity to create an initially working Allure maven docker plugin for it. This plugin publishes the allure results in base64 encoding to a given Docker api.

For example http://<your_docker_server_ip>:5050/send-results.

This makes it possible to publish the results of test directly to your allure-docker-service right after unit test and/or integration tests.

Greets,
Ray

[proposal] Multi-Architectures support

Besides the plugin #36 , i really would like help to build Docker Manifest lists for your project to support multiple architectures (amd64, arm and arm64) for allure-docker-service. This means allure-docker-service also can be deployed on for example a Raspberry PI or PINE64. And is usable in a Docker Swarm with multi-arch nodes.

If you are interested in this and you wouldn't mind to use TravisCI as build server, to automatically build and publish the images to your Docker repo, please let me know :-).

In that case i'll do a PR with my solution.

Cheers,
Ray

15/Aug/2020 05:39:54] \"GET / HTTP/1.1\" 303 - 14 0.028 0.304\n"

hola que tal.
estoy haciendo un deployment de odoo en un cluster de kubernetes, y veo que en el log aparece la comprobación de estado 303.
15/Aug/2020 05:39:54] "GET / HTTP/1.1" 303 - 14 0.028 0.304\n"
que es lo que tengo que hacer para que me resuelva con un estado 200?
si yo configuro un LB sobre este workload, este si responde OK!, pero si lo quiero hacer con un "nodeport" el pods en el que esta corriendo resuelve con un estado HTTP 303, en lugar de un HTTP 200:
root@server01: curl -i 10.40.0.20:8069

HTTP/1.0 303 SEE OTHER

Content-Type: text/html; charset=utf-8
Content-Length: 215
Location: http://10.40.0.20:8069/web
Set-Cookie: session_id=81d12c47a0c23032c346cdb9fc1f05dd8ca1bca1; Expires=Fri, 13-Nov-2020 05:05:26 GMT; Max-Age=7776000; HttpOnly; Path=/
Server: Werkzeug/0.14.1 Python/3.7.3
Date: Sat, 15 Aug 2020 05:05:26 GMT

<title>Redirecting...</title>

Redirecting...

You should be redirected automatically to target URL: /web. If not click the link

UI Layer

We need a UI that allows us navigates reports for different projects and gives us a way to authentication.

Too many files causes the logging and the shell scripts to crash

When there are too many files (Over 50K, generated by 3000 tests in 5 - 10 runs) in the allure-results folder, the clean-results and clean-history APIs fail

Cleaning results
/app/cleanAllureResults.sh: line 5: /usr/bin/find: Argument list too long

I think it's unwise to expect even linux to run through these many files, but is there any way this can be sorted ?

Is it possible that the files can be batched into multiple folders?

Secondly, as the number of files increase in the folder, the response logging with list of file names becomes overbearing.
The web services have to transfer too much data to return a list of 10,000 plus filenames as response.

If this needs to be returned, there should be an env variable controlling the verbose response.
Will it make sense to only reply the count of the files present ? Which then falls back to the issue mentioned above listing so many files almost crashes the python process with memory overflow.

Infinite loop + 100% CPU if CHECK_RESULTS_EVERY_SECONDS: NONE

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26147 root 20 0 19720 3208 2948 R 100,0 0,0 0:09.91 checkAllureResu

CHECK_RESULTS_EVERY_SECONDS: 3600 works fine

if [ "$CHECK_RESULTS_EVERY_SECONDS" == "NONE" ] || [ "$CHECK_RESULTS_EVERY_SECONDS" == "none" ]; then
echo "Not checking results automatically"
while true ; do continue ; done
fi

Project Name in Report Title

Hi,

Currently html page for individual project has default title "Allure Report ".
Can it be customized to inclue project name in the title ?

Test results are duplicated

I use the send_results.py to update the result to allure server. But I found the test result are duplicated not override for some of tests. I have to clean results every time. How can it determine if it's the same test?
Capture

Permission denied /app/generateAllureReport.sh:

So when i use Single Project - Docker Compose

docker-compose up -d allure

in docker logs i see error

/app/generateAllureReport.sh: line 56: /app/allure-docker-api/static/projects/default/results/executor.json: Permission denied
Retrying call http://localhost:5050/allure-docker-service/emailable-report/render?project_id=default in 2 seconds
Could not generate report
java.nio.file.AccessDeniedException: /app/allure-docker-api/static/projects/default/reports/latest
at java.base/sun.nio.fs.UnixException.translateToIOException(Unknown Source)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(Unknown Source)
at java.base/java.nio.file.Files.createDirectory(Unknown Source)
at java.base/java.nio.file.Files.createAndCheckIsDirectory(Unknown Source)
at java.base/java.nio.file.Files.createDirectories(Unknown Source)
at io.qameta.allure.CommonJsonAggregator.aggregate(CommonJsonAggregator.java:51)
at io.qameta.allure.CompositeAggregator.aggregate(CompositeAggregator.java:43)
at io.qameta.allure.ReportGenerator.aggregate(ReportGenerator.java:53)
at io.qameta.allure.ReportGenerator.generate(ReportGenerator.java:70)
at io.qameta.allure.ReportGenerator.generate(ReportGenerator.java:58)
at io.qameta.allure.Commands.generate(Commands.java:104)
at io.qameta.allure.CommandLine.run(CommandLine.java:152)
at io.qameta.allure.CommandLine$$Lambda$9/00000000AC39C980.get(Unknown Source)
at java.base/java.util.Optional.orElseGet(Unknown Source)
at io.qameta.allure.CommandLine.main(CommandLine.java:88)
ls: cannot access '/app/allure-docker-api/static/projects/default/reports/latest': No such file or directory
ls: cannot access '/app/allure-docker-api/static/projects/default/reports/*': No such file or directory

Allure-docker-service Python3

Hi Frank,

Like we discussed earlier - current images are base on Python 2.7, which has end-of-life at 01/01/2020.

I took the opportunity to build the images on Python 3 and I think the api works very nicely. Please have a look at my Allure-Docker-Service images and feel free to test them.

Let me know how they work for you and I'll PR the changes I made.

Greets,
Ray

Add a documentation on how to implement allure-docker-service into existing project

Hi,
Is it possible to add step-by-step instruction for 'dummies' of how to implement allure-docker-service into existing project? You made a great work here, but unfortunately my lack of technical skills doesn't allow me to integrate this service into my project and all the examples that are provided are made for example projects, which are differs from testing setup.

GET /generate-report - Returns report url

Returns report_url for having bidirectional traceability.

{
   "data":{
      "allure_results_files":[
         "any_file.json"
      ],
      "report_url":"http://localhost:5050/projects/default/reports/5/index.html"
   },
   "meta_data":{
      "message":"Report successfully generated for project_id 'default'"
   }
}

Make executor counter customizable

Hello,

In current implementation executor counter is updating automatically starting from #1
Can you, please, make an update to /generate-report request with new parameter like ?build_number={integer}.

Also make this number a part of the URL to the report:
/projects/ui-test/reports/{build_number}/index.html

In case of automatic report generation this number will be generated automatically, as it is in current version. But if generate report by API request - allow adding custom build number.

executor00

It is useful in cases when we want to link a build number from CI/CD which triggered tests with the report version in Allure.

Thanks in advance.

allure history

docker logs -f allure_allure_1

Creating history on results directory...
mkdir: cannot create directory ‘/app/allure-results/history’: Permission denied
Copying history from previous results...
cp: cannot create directory '/app/allure-results/history': Permission denied
Generating report

Fix log message: Server started at <http://172.31.0.11:4040/>. Press <Ctrl+C> to exit

But i can't open http://192.168.16.11:4040/
localhost:5050 will be correct

allure_1 | Not checking results automatically
allure_1 | ALLURE_VERSION: 2.13.3
allure_1 | Opening existing report
allure_1 | Cleaning results for PROJECT_ID: default
allure_1 | Starting web server...
allure_1 | Creating history on results directory for PROJECT_ID: default ...
allure_1 | Copying history from previous results...
allure_1 | Creating executor.json for PROJECT_ID: default
allure_1 | Generating report for PROJECT_ID: default
allure_1 | 2020-06-16 13:32:11.991:INFO::main: Logging initialized @4421ms to org.eclipse.jetty.util.log.StdErrLog
allure_1 | Can not open browser because this capability is not supported on your platform. You can use the link below to open the report manually.
allure_1 | Server started at http://172.31.0.11:4040/. Press <Ctrl+C> to exit
allure_1 | Report successfully generated to /app/allure-docker-api/static/projects/default/reports/latest
allure_1 | Status: 200

allure:
image: "frankescobar/allure-docker-service"
environment:
CHECK_RESULTS_EVERY_SECONDS: NONE
KEEP_HISTORY: "TRUE"
KEEP_HISTORY_LATEST: 20
SERVER_URL: "http://localhost:5050/latest-report"
volumes:
- ./allure-results:/app/allure-results
- ./allure-reports:/app/default-reports
ports:
- "5050:5050"
- "4040:4040"

Support URL_PREFIX

Useful for reverse proxy configuration like NGINX

    environment:
      URL_PREFIX: "/reporting"

Add endpoint to export report data (zip)

I have a specific need for an endpoint to export report data.

I work with many (many) different teams on the same mobile app and I want to aggregate all test results from each team... but I want to create views for each test cycle separated by app version.

What happens in my reality:

  1. we create a new app version (eg 1.0)
  2. teams starting testing
  3. when tests are done, we release the app
  4. we create the next app version (eg 2.0)
  5. teams starting testing and so on.

In my case, it would be very helpful if I could export each report data after tests are done. With this service, I will save report data on s3 bucket and clean the container for the new test cycle (new version).

What do you think? I can explain in more details if needed.

Thanks.

Support multipart/form-data --> POST /send-results

To avoid encoding files in base64, it would be good if we implement "multipart/form-data" to load the files directly. Like this:

curl -X POST 'http://localhost:5050/send-results?project_id=default' -H 'Content-Type: multipart/form-data' -F 'files[]=@/my-dir/allure-results/my-file-01.json' -F 'files[]=@/my-dir/allure-results/my-file-02.json' -ik

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.