{"id":38896287,"url":"https://github.com/criyle/go-judge-demo","last_synced_at":"2026-01-17T15:00:02.094Z","repository":{"id":40238003,"uuid":"193423699","full_name":"criyle/go-judge-demo","owner":"criyle","description":"Demo front-end and back-end for a online judge implementation using go-judge","archived":false,"fork":false,"pushed_at":"2025-12-30T07:19:06.000Z","size":1505,"stargazers_count":27,"open_issues_count":1,"forks_count":10,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-14T14:49:14.882Z","etag":null,"topics":["go-judge","online-judge","sandbox"],"latest_commit_sha":null,"homepage":"https://goj.ac","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/criyle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-06-24T02:56:20.000Z","updated_at":"2026-01-11T09:24:12.000Z","dependencies_parsed_at":"2023-01-31T01:45:36.034Z","dependency_job_id":"b7b89563-d6b5-4af4-82ea-e90207c8844d","html_url":"https://github.com/criyle/go-judge-demo","commit_stats":{"total_commits":109,"total_committers":3,"mean_commits":"36.333333333333336","dds":0.01834862385321101,"last_synced_commit":"d0431e29231c96decc2effb9f3ce4fd14675fd0b"},"previous_names":["criyle/go-judger-demo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/criyle/go-judge-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criyle%2Fgo-judge-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criyle%2Fgo-judge-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criyle%2Fgo-judge-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criyle%2Fgo-judge-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/criyle","download_url":"https://codeload.github.com/criyle/go-judge-demo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criyle%2Fgo-judge-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28510928,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go-judge","online-judge","sandbox"],"created_at":"2026-01-17T15:00:01.314Z","updated_at":"2026-01-17T15:00:02.083Z","avatar_url":"https://github.com/criyle.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-judge-demo\n\nA simple demo site for the [go-judge](https://github.com/criyle/go-judge), deployed on M1 Mac Mini docker desktop [site](https://goj.ac).\n\nComponents:\n\n- Frontend: Vue 3, Naive UI, monaco editor\n- APIGateway: GO\n- Backend: GO\n- Judger Client: GO\n- Dev Server Compiler: Air, Overmind\n\nTools:\n\n- \u003chttps://github.com/air-verse/air\u003e\n- \u003chttps://github.com/DarthSim/overmind\u003e\n\n```bash\ngo install github.com/air-verse/air@latest\ngo install github.com/DarthSim/overmind@latest\ngo install google.golang.org/protobuf/cmd/protoc-gen-go@latest\ngo install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest\n```\n\n## API Gateway\n\n### Interface\n\n- GET /api/submission?id=_id: Query history submissions\n- POST /api/submit: Submit judge request\n- WS /api/ws/judge: Broadcast judge updates\n- WS /api/ws/shell: Interactive shell\n- GET /: SPA HTML \u0026 JS -\u003e /dist\n\n## Backend\n\nToken-based gRPC\n\n- submission(id)\n- submit(request)\n- updates(): stream judge updates\n- judge(): stream for judge client\n- shell(): stream for interactive shell\n\ndefault ports:\n\n- gRPC: `:5081`\n- metrics: `:5082`\n\n## Judge Client\n\nConnect to backend with judge()\n\n- metrics: `:2112`\n\n## Development\n\n```bash\n# front end\nnpm run dev\n# apigateway \n# demoserver\n# judger\novermind start -f Procfile.dev\n# mongoDB\ndocker run -p 27017:27017 mongo\n# exec server in go-judge directory\nair\n```\n\n## Docker build\n\n```bash\n# front end and api server\ndocker build -t apigateway -f Dockerfile.apigateway .\ndocker build -t demoserver -f Dockerfile.demoserver .\n# judge client and go-judge executor\ndocker build -t judger -f Dockerfile.judger .\ndocker build -t judger_exec -f Dockerfile.exec .\n```\n\n## Docker run\n\n```bash\n# mongo database\ndocker run --name mongo -d -p 27017:27017 mongo\n# demo server\ndocker run --name demo --link mongo -d -e MONGODB_URI=mongodb://mongo:27017/test -p 5081:5081 -p 5082:5082 demoserver\n# api gateway\ndocker run --name apigateway --link demo -d -e DEMO_SERVER=demo:5081 -p 5000:5000 apigateway\n# go-judge executor service\ndocker run --name exec -d --privileged -e ES_ENABLE_GRPC=1 -e ES_ENABLE_METRICS=1 -e ES_ENABLE_DEBUG=1 -p 5052:5052 -p 5051:5051 -p 5050:5050 judger_exec\n# judger client\ndocker run --name judger --link exec --link demo -d -e DEMO_SERVER=demo:5081 -e EXEC_SERVER=exec:5051 -p 2112:2112 judger\n```\n\n## Data Model\n\nLanguage:\n\n``` json\n{\n  \"name\": \"c++\",\n  \"sourceFileName\": \"a.cc\",\n  \"compileCmd\": \"g++ -o a a.cc\",\n  \"executables\": [ \"a\" ],\n  \"runCmd\": \"a\",\n}\n```\n\nResult:\n\n``` json\n{\n  \"_id\": \"primary key\",\n  \"language\": \"\u003clanguage\u003e\",\n  \"source\": \"\u003csource code\u003e\",\n  \"date\": \"\u003csubmit date\u003e\",\n  \"status\": \"\u003ccurrent status (AC / TLE / MLE / OLE / JGF)\u003e\",\n  \"totalTime\": \"total time\",\n  \"maxMemory\": \"max memory\",\n  \"results\": [\n    {\n      \"time\": \"\u003cuser time (ms)\u003e\",\n      \"memory\": \"\u003cmemory (kb)\u003e\",\n      \"stdin\": \"\u003cstdin\u003e\",\n      \"stdout\": \"\u003cstdout\u003e\",\n      \"stderr\": \"\u003cstderr\u003e\",\n      \"log\": \"\u003cjudger log\u003e\",\n    },\n  ],\n}\n```\n\n### POST /api/submit\n\nRequest:\n\n```json\n{\n  \"language\": \"\u003clanguage\u003e\",\n  \"source\": \"\u003csource code\u003e\",\n}\n```\n\nResponse:\n\n```json\n{\n  \"_id\": \"\u003c_id\u003e\"\n}\n```\n\n### Client WS\n\nS -\u003e C:\n\n``` json\n{\n  \"id\": \"\u003cid\u003e\",\n  \"status\": \"\u003cstatus\u003e\",\n  \"date\": \"\u003cdate\u003e\",\n  \"language\": \"language name\",\n  \"results\": \"results[]\"\n}\n```\n\n### Judger WS\n\nInclude `Authorization: Token token` in the HTTP Header when call for upgrade.\n\nJ -\u003e S:\n\nProgress:\n\n``` json\n{\n  \"id\": \"\u003cid\u003e\",\n  \"type\": \"progress\",\n  \"status\": \"\u003cstatus\u003e\",\n  \"date\": \"\u003cdate\u003e\",\n  \"language\": \"language name\",\n}\n```\n\nFinish:\n\n``` json\n{\n  \"id\": \"\u003cid\u003e\",\n  \"type\": \"finish\",\n  \"status\": \"\u003cstatus\u003e\",\n  \"date\": \"\u003cdate\u003e\",\n  \"language\": \"language name\",\n  \"results\": [ \"result\" ],\n}\n```\n\nS -\u003e J:\n\n``` json\n{\n  \"id\": \"\u003cid\u003e\",\n  \"language\": \"\u003clanguage\u003e\",\n  \"source\": \"source\",\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcriyle%2Fgo-judge-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcriyle%2Fgo-judge-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcriyle%2Fgo-judge-demo/lists"}