{"id":21867411,"url":"https://github.com/lilgallon/lil-playground","last_synced_at":"2026-04-16T19:10:30.732Z","repository":{"id":187028650,"uuid":"676193732","full_name":"lilgallon/lil-playground","owner":"lilgallon","description":"A repository where I learn about advanced topics by doing funny things. Let's start with a physics engine powered by kotlin coroutines..","archived":false,"fork":false,"pushed_at":"2023-08-13T18:31:48.000Z","size":211,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-26T16:14:05.552Z","etag":null,"topics":["github-actions","gradle","kotlin-coroutines","lwjgl","physics"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lilgallon.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}},"created_at":"2023-08-08T16:30:44.000Z","updated_at":"2023-08-13T10:03:28.000Z","dependencies_parsed_at":"2023-08-08T18:24:38.549Z","dependency_job_id":"705a2dab-96de-478f-878a-7aacbf5a23df","html_url":"https://github.com/lilgallon/lil-playground","commit_stats":{"total_commits":24,"total_committers":2,"mean_commits":12.0,"dds":"0.29166666666666663","last_synced_commit":"ed9a7473e5ea434082db7cdc247c007b43b7b1d6"},"previous_names":["lilgallon/lil-playground"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lilgallon%2Flil-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lilgallon%2Flil-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lilgallon%2Flil-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lilgallon%2Flil-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lilgallon","download_url":"https://codeload.github.com/lilgallon/lil-playground/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244871212,"owners_count":20524014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["github-actions","gradle","kotlin-coroutines","lwjgl","physics"],"created_at":"2024-11-28T05:09:24.229Z","updated_at":"2026-04-16T19:10:25.701Z","avatar_url":"https://github.com/lilgallon.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lil playground\n\n![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/lilgallon/lil-playground/.github%2Fworkflows%2Fci.yml?style=for-the-badge\u0026logo=gradle\u0026label=CI\u0026link=https%3A%2F%2Fgithub.com%2Flilgallon%2Flil-playground%2Factions%2Fworkflows%2Fci.yml)\n![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/lilgallon/lil-playground/.github%2Fworkflows%2Fcd.yml?style=for-the-badge\u0026logo=gradle\u0026label=CD\u0026link=https%3A%2F%2Fgithub.com%2Flilgallon%2Flil-playground%2Factions%2Fworkflows%2Fcd.yml)\n![GitHub milestone](https://img.shields.io/github/milestones/progress-percent/lilgallon/lil-playground/1?style=for-the-badge)\n\n![Sonar Quality Gate](https://img.shields.io/sonar/quality_gate/lilgallon_lil-playground/main?server=https%3A%2F%2Fsonarcloud.io\u0026style=for-the-badge\u0026logo=sonarcloud)\n![Sonar Bugs](https://img.shields.io/sonar/bugs/lilgallon_lil-playground/main?server=https%3A%2F%2Fsonarcloud.io\u0026style=for-the-badge\u0026logo=sonarcloud)\n![Sonar Code Smells](https://img.shields.io/sonar/code_smells/lilgallon_lil-playground/main?server=https%3A%2F%2Fsonarcloud.io\u0026style=for-the-badge\u0026logo=sonarcloud)\n\nA place where I learn about advanced topics in a funny way. I also comment every\npart of the code to make sure I understand what I am doing.\n\n**I may be wrong on some statements, I'm still learning, do not take everything\nyou read as true**\n\n## 1. Challenges\n\n### 1.1. Gradle\n\nThis project has to follow all the best practices of gradle to have the best\npossible performance.\n\n**template:** I templated the project using https://gitlab.com/opensavvy/playgrounds/gradle\nthat already respect the best practices.\n\n**Gradle Enterprise using version catalog:** On top of that, I added Gradle\nEnterprise plugin by using the version catalog. It's not that easy because the\ncatalog feature is designed so that a settings plugin could define a version\ncatalog. But that means that the version catalog can not define settings plugins\nbecause for that the version catalog would need to be available before the\nplugins are evaluated.\n\nThe workaround is to create a custom settings plugin where we use the gradle\nenterprise plugin. Then we use our custom plugin in the root [settings.gradle.kts](settings.gradle.kts).\nEverything is in [commit 831dfd](https://github.com/lilgallon/lil-playground/commit/831dfd2bd2d640f349527b0ecff3636576d46e9e).\n\n### 1.2. Github workflows\n\n#### Challenge\n\nEverything that can be automated, has to be automated using github workflows.\nSome examples:\n- CI that comment the PR if there is an issue. The CI has to be optimized by\nusing gradle caching\n- CD that creates a Github release from a tag. In that release we need to have\nthe artefact and the changelog\n\n#### Solution\n\n**CI:** We can use the [github cache action](https://github.com/actions/cache).\nBut the best way to have caching for gradle in Github Workflows is to use\n[gradle build action](https://github.com/gradle/gradle-build-action).\n\n**CD:** It automatically builds the app when a tag is pushed on the repo. The\ntag as to respect a regex though. A github release will then be created with\na changelog and the built artefacts.\n\n### 1.3. Github projects\n\nAll the tasks and issues will be traced using [Github Projects](https://github.com/users/lilgallon/projects/5).\n\n### 1.4. Coroutines\n\nI need to learn more about Kotlin Coroutines. The best way for it is to do heavy\nparallel tasks. There are two interested things to do:\n- Fractal Viewer\n- Simple Physics Engine\n\nI will use JavaFX, because the API is nice to use with Kotlin, and it's easy to\ncode a GUI. It also has support to render scenes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flilgallon%2Flil-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flilgallon%2Flil-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flilgallon%2Flil-playground/lists"}