From 54786f1f1f132821b2d02d45c418dc7c87c3b355 Mon Sep 17 00:00:00 2001
From: Julian Simioni <julian@simioni.org>
Date: Tue, 26 Nov 2024 18:01:57 +0100
Subject: [PATCH 1/5] CI: update checkout and setup-node actions to latest

This just keeps us up to date and avoids warnings for deprecated Node.js versions in CI.
---
 .github/workflows/push.yml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index 1b941bf..9fc9150 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -12,9 +12,9 @@ jobs:
           - 14.x
           - 16.x
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
       - name: 'Install node.js ${{ matrix.node-version }}'
-        uses: actions/setup-node@v2-beta
+        uses: actions/setup-node@v4
         with:
           node-version: '${{ matrix.node-version }}'
       - name: Run unit tests
@@ -26,9 +26,9 @@ jobs:
     if: github.ref == 'refs/heads/master' && github.event_name == 'push'
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
       - name: Install Node.js
-        uses: actions/setup-node@v2-beta
+        uses: actions/setup-node@v4
         with:
           node-version: 16.x
       - name: Run semantic-release
@@ -46,7 +46,7 @@ jobs:
     needs: [unit-tests, npm-publish]
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
       - name: Build Docker images
         env:
           DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}

From af488d62e24e58bc561cae21c46607f17643e3f2 Mon Sep 17 00:00:00 2001
From: Julian Simioni <julian@simioni.org>
Date: Tue, 26 Nov 2024 18:01:59 +0100
Subject: [PATCH 2/5] CI: update all hardcoded Ubuntu versions to 22.04

We were all over the place with these, with some going all the way back to Ubuntu 16!

Connects https://github.com/pelias/pelias/issues/951
---
 .github/workflows/push.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index 9fc9150..2e89046 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -6,7 +6,7 @@ jobs:
     strategy:
       matrix:
         os:
-          - ubuntu-20.04
+          - ubuntu-22.04
         node-version:
           - 12.x
           - 14.x
@@ -24,7 +24,7 @@ jobs:
   npm-publish:
     needs: unit-tests
     if: github.ref == 'refs/heads/master' && github.event_name == 'push'
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@v4
       - name: Install Node.js
@@ -44,7 +44,7 @@ jobs:
     # note: github actions won't run a job if you don't call one of the status check functions, so `always()` is called since it evalutes to `true`
     if: ${{ always() && needs.unit-tests.result == 'success' && (needs.npm-publish.result == 'success' || needs.npm-publish.result == 'skipped') }}
     needs: [unit-tests, npm-publish]
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@v4
       - name: Build Docker images

From 282709d3b16e72ac1f82ddab7f437c66d46ddee2 Mon Sep 17 00:00:00 2001
From: Julian Simioni <julian@simioni.org>
Date: Tue, 26 Nov 2024 18:02:02 +0100
Subject: [PATCH 3/5] CI: remove EOL Node.js 12/16/18

https://github.com/pelias/pelias/issues/950
---
 .github/workflows/push.yml | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index 2e89046..c653fdf 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -8,9 +8,6 @@ jobs:
         os:
           - ubuntu-22.04
         node-version:
-          - 12.x
-          - 14.x
-          - 16.x
     steps:
       - uses: actions/checkout@v4
       - name: 'Install node.js ${{ matrix.node-version }}'

From 4ac5dda40ac6f66a4dab7e5a73a0298bdd3959da Mon Sep 17 00:00:00 2001
From: Julian Simioni <julian@simioni.org>
Date: Tue, 26 Nov 2024 18:02:04 +0100
Subject: [PATCH 4/5] CI: Test Node.js versions supported by this repo

This also rewrites our CI config so that all Node.js versions are on one line for ease of future grepping

https://github.com/pelias/pelias/issues/950
---
 .github/workflows/push.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index c653fdf..aaa85bd 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -7,7 +7,7 @@ jobs:
       matrix:
         os:
           - ubuntu-22.04
-        node-version:
+        node-version: [ 18.x, 20.x, 22.x ]
     steps:
       - uses: actions/checkout@v4
       - name: 'Install node.js ${{ matrix.node-version }}'

From fee87305d1c09d49b14c1daef770d0755262f3e7 Mon Sep 17 00:00:00 2001
From: Julian Simioni <julian@simioni.org>
Date: Tue, 26 Nov 2024 18:02:05 +0100
Subject: [PATCH 5/5] CI: use standard Github Action templates

A lot of our repositories have diverged from our intended template, so this copies a templated version over whatever was here before

Connects https://github.com/pelias/pelias/issues/951
---
 .github/workflows/_test.yml        | 21 ++++++++++++++++++
 .github/workflows/pull_request.yml |  7 ++++++
 .github/workflows/push.yml         | 35 +++---------------------------
 3 files changed, 31 insertions(+), 32 deletions(-)
 create mode 100644 .github/workflows/_test.yml
 create mode 100644 .github/workflows/pull_request.yml

diff --git a/.github/workflows/_test.yml b/.github/workflows/_test.yml
new file mode 100644
index 0000000..6efcedc
--- /dev/null
+++ b/.github/workflows/_test.yml
@@ -0,0 +1,21 @@
+name: Unit Tests
+on: workflow_call
+jobs:
+  unit-tests:
+    runs-on: '${{ matrix.os }}'
+    strategy:
+      matrix:
+        os:
+          - ubuntu-22.04
+        node-version: [ 18.x, 20.x, 22.x ]
+    steps:
+      - uses: actions/checkout@v4
+      - name: 'Install node.js ${{ matrix.node-version }}'
+        uses: actions/setup-node@v4
+        with:
+          node-version: '${{ matrix.node-version }}'
+      - name: Run unit tests
+        run: |
+          [[ -f ./bin/ci-setup ]] && ./bin/ci-setup
+          npm install
+          npm run ci
diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
new file mode 100644
index 0000000..c9533fc
--- /dev/null
+++ b/.github/workflows/pull_request.yml
@@ -0,0 +1,7 @@
+name: Continuous Integration
+on: pull_request
+jobs:
+  unit-tests:
+    # only run this job for forks
+    if: github.event.pull_request.head.repo.full_name != github.repository
+    uses: ./.github/workflows/_test.yml
diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
index aaa85bd..bc0d0e8 100644
--- a/.github/workflows/push.yml
+++ b/.github/workflows/push.yml
@@ -2,32 +2,17 @@ name: Continuous Integration
 on: push
 jobs:
   unit-tests:
-    runs-on: '${{ matrix.os }}'
-    strategy:
-      matrix:
-        os:
-          - ubuntu-22.04
-        node-version: [ 18.x, 20.x, 22.x ]
-    steps:
-      - uses: actions/checkout@v4
-      - name: 'Install node.js ${{ matrix.node-version }}'
-        uses: actions/setup-node@v4
-        with:
-          node-version: '${{ matrix.node-version }}'
-      - name: Run unit tests
-        run: |
-          npm install
-          npm run ci
+    uses: ./.github/workflows/_test.yml
   npm-publish:
     needs: unit-tests
-    if: github.ref == 'refs/heads/master' && github.event_name == 'push'
+    if: github.ref == 'refs/heads/master' && needs.unit-tests.result == 'success'
     runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@v4
       - name: Install Node.js
         uses: actions/setup-node@v4
         with:
-          node-version: 16.x
+          node-version: 20.x
       - name: Run semantic-release
         env:
           GH_TOKEN: ${{ secrets.GH_SEMANTIC_RELEASE_TOKEN }}
@@ -36,17 +21,3 @@ jobs:
           if [[ -n "$GH_TOKEN" && -n "$NPM_TOKEN" ]]; then
             curl "https://raw.githubusercontent.com/pelias/ci-tools/master/semantic-release.sh" | bash -
           fi
-  build-docker-images:
-    # run this job if the unit tests passed and the npm-publish job was a success or was skipped
-    # note: github actions won't run a job if you don't call one of the status check functions, so `always()` is called since it evalutes to `true`
-    if: ${{ always() && needs.unit-tests.result == 'success' && (needs.npm-publish.result == 'success' || needs.npm-publish.result == 'skipped') }}
-    needs: [unit-tests, npm-publish]
-    runs-on: ubuntu-22.04
-    steps:
-      - uses: actions/checkout@v4
-      - name: Build Docker images
-        env:
-          DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
-          DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
-        run: |
-          curl "https://raw.githubusercontent.com/pelias/ci-tools/master/build-docker-images.sh" | bash -