{"id":36656268,"url":"https://github.com/osuripple/cheesegull","last_synced_at":"2026-01-12T10:19:26.133Z","repository":{"id":110988925,"uuid":"77707149","full_name":"osuripple/cheesegull","owner":"osuripple","description":"CheeseGull is an osu! mirror developed for Ripple.","archived":false,"fork":false,"pushed_at":"2024-05-07T07:43:49.000Z","size":931,"stargazers_count":14,"open_issues_count":4,"forks_count":8,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-06-18T20:10:42.586Z","etag":null,"topics":["beatmap","beatmap-downloader","beatmap-mirror","osu"],"latest_commit_sha":null,"homepage":null,"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/osuripple.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}},"created_at":"2016-12-30T19:51:25.000Z","updated_at":"2024-05-07T07:38:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"fc857911-6234-4d11-a938-1d70dd5a52d6","html_url":"https://github.com/osuripple/cheesegull","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/osuripple/cheesegull","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osuripple%2Fcheesegull","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osuripple%2Fcheesegull/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osuripple%2Fcheesegull/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osuripple%2Fcheesegull/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osuripple","download_url":"https://codeload.github.com/osuripple/cheesegull/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osuripple%2Fcheesegull/sbom","scorecard":{"id":713991,"data":{"date":"2025-08-11","repo":{"name":"github.com/osuripple/cheesegull","commit":"efa2a3a98e86dd13c1f862afd2f2fcfed1ddfbcf"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/17 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.1.0 not signed: https://api.github.com/repos/osuripple/cheesegull/releases/10524900","Warn: release artifact v2.0.4 not signed: https://api.github.com/repos/osuripple/cheesegull/releases/8293990","Warn: release artifact v2.0.3 not signed: https://api.github.com/repos/osuripple/cheesegull/releases/8220506","Warn: release artifact v2.1.0 does not have provenance: https://api.github.com/repos/osuripple/cheesegull/releases/10524900","Warn: release artifact v2.0.4 does not have provenance: https://api.github.com/repos/osuripple/cheesegull/releases/8293990","Warn: release artifact v2.0.3 does not have provenance: https://api.github.com/repos/osuripple/cheesegull/releases/8220506"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 14 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T08:58:35.179Z","repository_id":110988925,"created_at":"2025-08-22T08:58:35.179Z","updated_at":"2025-08-22T08:58:35.179Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["beatmap","beatmap-downloader","beatmap-mirror","osu"],"created_at":"2026-01-12T10:19:20.898Z","updated_at":"2026-01-12T10:19:26.124Z","avatar_url":"https://github.com/osuripple.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"https://y.zxq.co/jobeei.png\"\u003e\u003c/p\u003e\n\n# CheeseGull\n\nCheeseGull creates an unofficial \"slave\" database of the official osu! beatmap\ndatabase, trying to keep every beatmap up to date as much as possible, as well\nas a cache middleman for osz files.\n\nThe main purpose for this is, as you can see from the owner of the repository,\nfor running a sort of \"beatmap mirror\" for Ripple's osu! direct. We originally\nused an actual osu! beatmap mirror which had all of the beatmaps on osu!\ndownloaded, but it ended up taking wayyyy too much space, and the cheapest\nserver we could find that had at least 2 TB of HDD had an upload speed of\n30mbit - as you can guess, this meant that for the Ripple users who didn't have\na third world connection the download speed was pretty poor.\n\nCheeseGull tries to hold a replica of the osu! database as updated as possible.\nThough of course, not having any way to see the latest updated beatmaps, or have\na system for subscribing to updates to beatmap, or anything else which could\nhelp us identify what has been updated recently makes it very hard to do keep\nan updated copy at all times (Takeaway: the osu! API is completely shit). In\norder to do this, CheeseGull updates WIP, Pending or Qualified beatmaps when\nat least 30 minutes have passed since the time they were checked, whereas for\nall other beatmaps (including Graveyard, Ranked, Approved, etc) at least 4 days\nmust have passed. This is not a problem for ranked/approved (it's highly\nunlikely for a ranked beatmap to ever change state, and Graveyard beatmaps\nare rarely resurrected, so there's that).\n\nBeatmap downloads are also provided by going at `/d/\u003cid\u003e`. In case the beatmap\nis not stored in the local cache, the beatmap will be downloaded on-the-fly\n(this assumes the machine's internet connection is fast enough to download a\nbeatmap before a HTTP timeout happens). In case the beatmap already is in the\ncache, then well, as you can imagine, it is served straight from there. Oh, yes,\nmultiple people downloading a not cached beatmap at the same time is a case we\nhandle. Or should be able to handle, at least.\n\n## [API docs](http://docs.ripple.moe/docs/cheesegull/cheesegull-api)\n\n## Getting Started\n\nYou can find binaries of the latest release\n[here.](https://github.com/osuripple/cheesegull/releases/latest)\n\nIf you want to compile from source, if you have Go installed it should only be\na `go get github.com/osuripple/cheesegull` away.\n\nThe only requirements at the moment are a MySQL server and an osu! account.\nCheck out `cheesegull --help` to see how you can set them up for cheesegull to\nwork properly.\n\n## Contributing\n\nNo strict contribution guide at the moment. Just fork, clone, then\n\n```sh\ngit checkout -b your-new-feature\ncode . # make changes\ngit add .\ngit commit -m \"Added thing\"\ngit push origin your-new-feature\n```\n\nGo to the GitHub website, and create a pull request.\n\n## Sphinx set-up\n\nIf you want to test search using Sphinx, you will need to set it up.\n[Here is the sphinx.conf used in production, you probably only need to change lines 23-35](https://gist.github.com/thehowl/3dc046e2a0ab93fa1ffe5f0eca085905)\n\nTo index the data, you'd then need to run `sudo indexer --all`. If you want to run\nthe indexer without having to shutdown sphinx, run `sudo indexer --all --rotate`.\nIn production, this is run as a cronjob every 5 minutes.\n\n(No, we're not using ElasticSearch. Search is meant to be fast and not take too\nmuch memory. Any Java solution can thus be tossed away since it does not suit\nthese basic two requirements.)\n\n## License\n\nSeeing as this project is not meant exclusively for usage by Ripple, the license,\nunlike most other Ripple projects, is [MIT](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosuripple%2Fcheesegull","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosuripple%2Fcheesegull","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosuripple%2Fcheesegull/lists"}