{"id":27693063,"url":"https://github.com/raphw/build-buddy","last_synced_at":"2025-06-10T16:32:11.628Z","repository":{"id":270042808,"uuid":"881327834","full_name":"raphw/build-buddy","owner":"raphw","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-21T13:57:44.000Z","size":798,"stargazers_count":13,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-05T13:14:26.953Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raphw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-10-31T11:01:10.000Z","updated_at":"2025-02-21T13:57:48.000Z","dependencies_parsed_at":"2024-12-28T00:19:30.706Z","dependency_job_id":"522aa364-4ac0-4019-8a7c-389a17c59fb5","html_url":"https://github.com/raphw/build-buddy","commit_stats":null,"previous_names":["raphw/build-buddy"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphw%2Fbuild-buddy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphw%2Fbuild-buddy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphw%2Fbuild-buddy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphw%2Fbuild-buddy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raphw","download_url":"https://codeload.github.com/raphw/build-buddy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphw%2Fbuild-buddy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259109997,"owners_count":22806632,"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":[],"created_at":"2025-04-25T12:49:18.351Z","updated_at":"2025-06-10T16:32:11.578Z","avatar_url":"https://github.com/raphw.png","language":"Java","readme":"Build Buddy\n===========\n\nPOC for a simple-enough, yet powerful enough build tool that targets Java, and is written and configured in Java, and \nthat has inherent support for (a) parallel incremental builds, and therewith build reproducibility and (b) supply-chain \nsecurity when it comes to downloading external resources.\n\nAs a side goal, the build tool should be storable as source code alongside another project, without a need of explicit \ninstallation. At the same time, it should be possible to compile the build to avoid repeated compilation. Doing so, a \nbuild should be executable by using the JVM only once a copy of a project's source is obtained, by embracing the JVM's \nability to run programs from source files. This avoids storing precompiled binaries in repositories, and allows for the \nexecution of builds in environments that only have the JVM installed without the deployment of build tool wrappers that \noften entail a (cachable) download of the tool. It should be possible to manage updates of these sources easily, and to \nadd extensions (plugins) to the base implementation alongside.\n\nThe build tool should only rely on the Java standard library and should be launchable using a command such as:\n\n    java build/Main.java\n\nwhere `Main` is a user defined class located in the project's build folder, which assembles the build using the\nclasses of this build tool. This is also demonstrated within this project, where the build tool is the source but\nalso linked into the build folder as it would be suggested to users of this tool. This would also be possible by\nusing for example Git Submodules. For IDE-support, a POM is stored alongside, and it should always be possible to\nbuild this project using Maven to debug errors in the project source which is used for building itself.\n\nBy automatically caching results of single build steps, expensive but commonly stable tasks should be cached implicitly.\nThis avoids the need of, for example, repeated resolution of dependency trees. As the result of such resolution can\nbe stored in a textual format, dependency resolution could also be checked into a source repository. This allows both \nto store checksums of previously resolved files for validation, and stabilizes resolution process which can otherwise\nrender builds non-deterministic, for example when version ranges are declared in (transitive) dependencies.\n\nTo allow for an effective implementation of such caching, dependency descriptors should not be defined as a part of the \nbuild description, but separately. In the simplest format, it should always be possible to express information in the \nJava properties format. Based on this, it is trivial to translate common descriptions into this format. As a \ndemonstration of this concept, Java module info classes should be offered as a canonical way of defining (build) module \nnames and dependencies.\n\nSpecific implementations of dependency resolution or repositories should not be hard-coded into the build tool. \nThere should, for example, not be any hard dependency on Maven concepts, to allow for their substitution. \n\nThe POC is currently missing:\n- API to rename inherited identifiers within modules for the runtime of the module.\n- Convention object for `MultiProject` to avoid manual construction of identifiers.\n- Task for creating POM files from module-info.java.\n- Task for javadoc.\n- Task for source-jars.\n- Task to add GPG signatures of artifacts.\n- Task to publish to Maven Central and local Maven repository.\n- Extend all build step implementations to support their standard options.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphw%2Fbuild-buddy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraphw%2Fbuild-buddy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphw%2Fbuild-buddy/lists"}