From 6f32f840a934449ea5c5064b581507730e0a7685 Mon Sep 17 00:00:00 2001
From: James Briggs <35938317+jamescalam@users.noreply.github.com>
Date: Fri, 14 Mar 2025 12:07:31 +0400
Subject: [PATCH] feat: improved workflow selection

---
 .github/workflows/diff.yml           | 45 ++++++++++++++++++++++++++++
 .github/workflows/docs.yml           |  5 ++--
 .github/workflows/lint.yml           |  2 +-
 .github/workflows/test.yml           |  2 +-
 .github/workflows/triggers_merge.yml | 24 +++++++++++++++
 .github/workflows/triggers_pr.yml    | 30 +++++++++++++++++++
 6 files changed, 103 insertions(+), 5 deletions(-)
 create mode 100644 .github/workflows/diff.yml
 create mode 100644 .github/workflows/triggers_merge.yml
 create mode 100644 .github/workflows/triggers_pr.yml

diff --git a/.github/workflows/diff.yml b/.github/workflows/diff.yml
new file mode 100644
index 00000000..be3e3fc2
--- /dev/null
+++ b/.github/workflows/diff.yml
@@ -0,0 +1,45 @@
+name: Diff
+on:
+  workflow_call:
+    inputs:
+      config:
+        type: string
+        required: true
+        description: 'YAML file containing modules to track'
+    outputs:
+      diff:
+        description: "diff"
+        value: "${{ jobs.diff.outputs.diff }}"
+      tags:
+        description: "tags"
+        value: "${{ jobs.diff.outputs.tags }}"
+      modules:
+        description: "modules"
+        value: "${{ jobs.diff.outputs.modules }}"
+      changed:
+        description: "changed"
+        value: "${{ jobs.diff.outputs.changed }}"
+
+jobs:
+  diff:
+    name: Compare
+    runs-on: ubuntu-latest
+    outputs:
+      diff: ${{ steps.run.outputs.diff }}
+      tags: ${{ steps.run.outputs.tags }}
+      modules: ${{ steps.run.outputs.modules }}
+      changed: ${{ steps.run.outputs.changed }}
+    steps:
+
+    - name: Checkout
+      uses: actions/checkout@v4
+
+    - id: run
+      name: Diff action
+      uses: aurelio-labs/diff-action@0.2.0
+      with:
+        token: ${{ secrets.GITHUB_TOKEN }}
+        config: ${{ inputs.config }}
+
+    - name: Print output
+      run: echo '${{ toJSON(steps.run.outputs) }}' | jq .
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 88646ba1..b5d00c64 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -1,9 +1,8 @@
 name: Release Docs
 
 on:
-  push:
-    branches:
-    - main
+  workflow_call:
+
 
 jobs:
   build-docs:
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 3b2e2013..8d40b060 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -1,7 +1,7 @@
 name: lint
 
 on:
-  pull_request:
+  workflow_call:
 
 
 jobs:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 17e6a6e7..ef872e12 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,7 +1,7 @@
 name: Test
 
 on:
-  pull_request:
+  workflow_call:
 
 
 jobs:
diff --git a/.github/workflows/triggers_merge.yml b/.github/workflows/triggers_merge.yml
new file mode 100644
index 00000000..7f432228
--- /dev/null
+++ b/.github/workflows/triggers_merge.yml
@@ -0,0 +1,24 @@
+name: Merge Workflow
+
+permissions:
+  id-token: write
+  contents: read
+
+on:
+  merge:
+    branches:
+    - main
+
+jobs:
+
+  diff:
+    name: "Diff"
+    uses: ./.github/workflows/diff.yaml
+    with:
+      config: diff-config.yaml
+
+  docs:
+    needs: [ diff ]
+    name: "Docs"
+    if: ${{ fromJson(needs.diff.outputs.tags).docs.changed }}
+    uses: ./.github/workflows/docs.yml
diff --git a/.github/workflows/triggers_pr.yml b/.github/workflows/triggers_pr.yml
new file mode 100644
index 00000000..aadd8b02
--- /dev/null
+++ b/.github/workflows/triggers_pr.yml
@@ -0,0 +1,30 @@
+name: PR Workflow
+
+permissions:
+  id-token: write
+  contents: read
+
+on:
+  pull_request:
+    types: [ opened, synchronize, ready_for_review ]
+    branches: [ 'main' ]
+
+jobs:
+
+  diff:
+    name: "Diff"
+    uses: ./.github/workflows/diff.yaml
+    with:
+      config: diff-config.yaml
+
+  lint:
+    needs: [ diff ]
+    name: "Lint"
+    if: ${{ fromJson(needs.diff.outputs.tags).code.changed }}
+    uses: ./.github/workflows/lint.yml
+
+  tests:
+    needs: [ diff ]
+    name: "Tests"
+    if: ${{ fromJson(needs.diff.outputs.tags).code.changed }}
+    uses: ./.github/workflows/test.yml
-- 
GitLab