From 0b16518fffd895fbef333c83f4e76a9f4565bf40 Mon Sep 17 00:00:00 2001
From: Rusty Key <rusty@hey.com>
Date: Tue, 23 Jul 2024 16:42:43 +0100
Subject: [PATCH] Add opam example

---
 examples.md | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/examples.md b/examples.md
index 1bcde91..6a707ea 100644
--- a/examples.md
+++ b/examples.md
@@ -24,6 +24,7 @@
 - [Node - Yarn](#node---yarn)
 - [Node - Yarn 2](#node---yarn-2)
 - [OCaml/Reason - esy](#ocamlreason---esy)
+- [OCaml/Reason - opam](#ocamlreason---opam)
 - [PHP - Composer](#php---composer)
 - [Python - pip](#python---pip)
   - [Simple example](#simple-example)
@@ -416,6 +417,30 @@ Esy allows you to export built dependencies and import pre-built dependencies.
       if: steps.restore-cache.outputs.cache-hit != 'true'
 ```
 
+## OCaml/Reason - opam
+
+This example requires you to have `opam.locked` file which you can generate with `opam lock .`.
+
+It's worth noting that even if lock file was change, it might be optimal to restore previous cache, so `hashFiles` in the key and if statement in "Save opam cache" step are optional.
+```yaml
+    - name: Restore opam cache
+      id: restore-cache
+      uses: actions/cache/restore@v4
+      with:
+        path: _opam
+        key: ${{ runner.os }}-opam-${{ hashFiles('opam.locked') }}
+
+    - name: Install dependencies
+      run: opam install . --locked --deps-only -y
+
+    - name: Save opam cache
+      if: steps.restore-cache.outputs.cache-hit != 'true'
+      uses: actions/cache/save@v4
+      with:
+        path: _opam
+        key: ${{ steps.restore-cache.outputs.cache-primary-key }}
+```
+
 ## PHP - Composer
 
 ```yaml