{"id":18841932,"url":"https://github.com/diskuv/dkml-workflows-monorepo-example","last_synced_at":"2026-01-04T02:40:47.244Z","repository":{"id":56725345,"uuid":"524209389","full_name":"diskuv/dkml-workflows-monorepo-example","owner":"diskuv","description":"Example for dkml-workflows for an Opam Monorepo and Dune build workflow","archived":false,"fork":false,"pushed_at":"2024-09-03T22:13:09.000Z","size":15037,"stargazers_count":0,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"v1","last_synced_at":"2025-03-18T14:21:23.926Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/diskuv.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":"2022-08-12T19:56:56.000Z","updated_at":"2022-08-12T20:00:19.000Z","dependencies_parsed_at":"2024-11-08T03:03:53.734Z","dependency_job_id":null,"html_url":"https://github.com/diskuv/dkml-workflows-monorepo-example","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/diskuv/dkml-workflows-monorepo-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows-monorepo-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows-monorepo-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows-monorepo-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows-monorepo-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/diskuv","download_url":"https://codeload.github.com/diskuv/dkml-workflows-monorepo-example/tar.gz/refs/heads/v1","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows-monorepo-example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273403443,"owners_count":25099294,"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","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-08T02:53:05.058Z","updated_at":"2026-01-04T02:40:47.217Z","avatar_url":"https://github.com/diskuv.png","language":"OCaml","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dkml-workflows-monorepo-example\n\n\u003e **Attention**: This example is not ready for public use yet! Even though this example\n\u003e looks like it is working, the `.opam.locked` file was hand-edited. The fix\n\u003e is being tracked in [issue opam-monorepo#327](https://github.com/ocamllabs/opam-monorepo/issues/327).\n\nAn [Opam Monorepo](https://github.com/ocamllabs/opam-monorepo#readme) example for the\n[dkml-workflows] collection of GitHub Action, GitLab CI/CD and desktop workflows. DKML helps you\ndistribute native OCaml applications on the most common operating systems.\nIn particular [dkml-workflows] builds:\n* Windows libraries and executables with the traditional Visual Studio compiler, avoiding hard-to-debug runtime issued caused by compiler incompatibilities\n* macOS libraries and executables for both Intel and ARM64 (Apple Silicon) architectures\n* Linux libraries and executables on an ancient \"glibc\" C library, letting you distribute your software to most Linux users\n  while avoiding the alternative approach of [static linking the system C library](https://gavinhoward.com/2021/10/static-linking-considered-harmful-considered-harmful/)\n\nThe full list of examples is:\n\n| Example                                                                                      | Who For                                                                                                                                         |\n| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |\n| [dkml-workflows-monorepo-example](https://github.com/diskuv/dkml-workflows-monorepo-example) | **Not ready for public use yet!**\u003cbr\u003eYou want to cross-compile ARM64 on Mac Intel.\u003cbr\u003eYou are building [Mirage unikernels](https://mirage.io/). |\n| [dkml-workflows-regular-example](https://github.com/diskuv/dkml-workflows-regular-example)   | Everybody else                                                                                                                                  |\n\u003e Before using these examples be sure to read the [advantages and disadvantages of setup-dkml][dkml-workflows].\n\u003e One particular limitation is that, as of today, [dkml-workflows] only supports OCaml 4.12.1.\n\nExpect to wait approximately:\n\n| Build Step                                               | First Time | Subsequent Times |\n| -------------------------------------------------------- | ---------- | ---------------- |\n| build / win32-windows_x86                                | `33m`      | `8m`             |\n| build / win32-windows_x86_64                             | `35m`      | `11m`            |\n| build / macos-darwin_all                                 | `26m`      | `6m`             |\n| build / manylinux2014-linux_x86 (CentOS 7, etc.)         | `20m`      | `5m`             |\n| build / manylinux2014-linux_x86_64 (CentOS 7, etc.)      | `16m`      | `5m`             |\n\nYou can see an example workflow at https://github.com/diskuv/dkml-workflows-monorepo-example/actions/workflows/package.yml\n\n[1] `setup-dkml/macos-darwin_all` is doing double-duty: it is compiling x86_64 and arm64 systems.\n\nFor news about Diskuv OCaml,\n[![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/diskuv.svg?style=social\u0026label=Follow%20%40diskuv)](https://twitter.com/diskuv) on Twitter.\n\n## Differences from the Opam Regular build flow\n\n* Opam Monorepo `pull` was used to pre-download all the Opam packages into the `duniverse/` directory\n* The `dkml-base-compiler` and `conf-dkml-cross-toolchain` packages are used to get a cross-compiler for\n  macOS.\n* The [dune-universe](https://github.com/dune-universe/opam-overlays.git) Opam repository was added so\n  that all Opam packages use Dune as their only build tool\n\n## Outstanding Issues before Public Release\n\n### Opam Monorepo Issues\n\n* Accept `dkml-base-compiler.4.12.1~v1.0.0` instead of just `ocaml-base-compiler.M.N.O`\n* `conf-dkml-cross-toolchain` needs to be installed before any of the Dune packages are built; it\n  provides the ocamlfind toolchains. Is this just `x-opam-monorepo-opam-provided`?\n\nTracked in [issue opam-monorepo#327](https://github.com/ocamllabs/opam-monorepo/issues/327)\n\n## Sponsor\n\n\u003ca href=\"https://ocaml-sf.org\"\u003e\n\u003cimg align=\"left\" alt=\"OCSF logo\" src=\"https://ocaml-sf.org/assets/ocsf_logo.svg\"/\u003e\n\u003c/a\u003e\nThanks to the \u003ca href=\"https://ocaml-sf.org\"\u003eOCaml Software Foundation\u003c/a\u003e\nfor economic support to the development of Diskuv OCaml.\n\u003cp/\u003e\n\n## Status\n\n| What             | Branch/Tag | Status                                                                                                                                                                                                        |\n| ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Builds and tests |            | [![Builds and tests](https://github.com/diskuv/dkml-workflows-monorepo-example/actions/workflows/build.yml/badge.svg)](https://github.com/diskuv/dkml-workflows-monorepo-example/actions/workflows/build.yml) |\n| Static checks    |            | [![Static checks](https://github.com/diskuv/dkml-workflows-monorepo-example/actions/workflows/static.yml/badge.svg)](https://github.com/diskuv/dkml-workflows-monorepo-example/actions/workflows/static.yml)  |\n\n[dkml-workflows]: https://github.com/diskuv/dkml-workflows#dkml-workflows\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiskuv%2Fdkml-workflows-monorepo-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiskuv%2Fdkml-workflows-monorepo-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiskuv%2Fdkml-workflows-monorepo-example/lists"}