Merge branch 'curl-matrix': fix #116
[m6w6/ext-http] / scripts / gen_github_workflow_curl-matrix.php
diff --git a/scripts/gen_github_workflow_curl-matrix.php b/scripts/gen_github_workflow_curl-matrix.php
new file mode 100755 (executable)
index 0000000..66b50c9
--- /dev/null
@@ -0,0 +1,104 @@
+#!/usr/bin/env php
+<?php echo "# generated file; do not edit!\n"; ?>
+
+name: curl-matrix
+on:
+  workflow_dispatch:
+  push:
+
+jobs:
+<?php
+
+if ($argc > 1) {
+  $curlver = array_map(fn($v) => strtr($v, ".", "_"), array_unique(array_slice($argv, 1)));
+} else {
+  $curlver = array_unique(
+    iterator_to_array(
+      (function() {
+        $split = function($sep, $subject, $def = [""]) {
+          return array_filter(array_map("trim", explode($sep, $subject))) + $def;
+        };
+        foreach (file(__DIR__."/curlver.dist") as $line) {
+          $rec = $split(":", $split("#", $line)[0]);
+          if (!empty($rec[1])) foreach ($split(" ", $rec[1], []) as $dist_ver) {
+            yield strtr($dist_ver, ".", "_");
+          }
+        }
+      })()
+    )
+  );
+}
+
+rsort($curlver, SORT_NATURAL);
+
+$gen = include __DIR__ . "/ci/gen-matrix.php";
+$job = $gen->github([
+"curl" => [
+    "PHP" => "8.0",
+    "CURL" => $curlver,
+    "enable_debug" => "yes",
+    "enable_iconv" => "yes",
+    "with_http_libcurl_dir" => "/opt",
+]]);
+foreach ($job as $id => $env) {
+    printf("  curl-%s:\n", $env["CURL"]);
+    printf("    name: curl-%s\n", $env["CURL"]);
+    printf("    continue-on-error: true\n");
+    printf("    env:\n");
+    foreach ($env as $key => $val) {
+        printf("      %s: \"%s\"\n", $key, $val);
+    }
+?>
+    runs-on: ubuntu-18.04
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: true
+          path: http
+      - uses: actions/checkout@v2
+        with:
+          repository: curl/curl
+          path: curl
+<?php if ($env["CURL"] !== "master") : ?>
+          ref: curl-<?=$env["CURL"]?> #
+<?php endif; ?>
+      - name: Install
+        run: |
+          echo 'deb-src http://azure.archive.ubuntu.com/ubuntu bionic main' | sudo tee -a /etc/apt/sources.list && \
+          echo 'deb-src http://azure.archive.ubuntu.com/ubuntu bionic-updates main' | sudo tee -a /etc/apt/sources.list && \
+          sudo apt-get update -y &&  \
+          sudo apt-get build-dep -y libcurl4-openssl-dev && \
+          sudo apt-get install -y \
+            php-cli \
+            php-pear \
+            libidn11-dev \
+            libidn2-0-dev \
+            libicu-dev \
+            libevent-dev \
+            libbrotli-dev \
+            re2c
+      - name: Curl
+        run: |
+          sudo chmod +x /usr/share/libtool/build-aux/ltmain.sh
+          sudo ln -s /usr/share/libtool/build-aux/ltmain.sh /usr/bin/libtool
+          cd curl
+          ./buildconf
+          ./configure --prefix=/opt --disable-dependency-tracking --with-ssl --with-openssl --without-libssh2
+          make -j2
+          make install
+      - name: Prepare
+        run: |
+          cd http
+          make -f scripts/ci/Makefile php || make -f scripts/ci/Makefile clean php
+          make -f scripts/ci/Makefile pecl PECL=m6w6/ext-raphf.git:raphf:master
+      - name: Build
+        run: |
+          cd http
+          make -f scripts/ci/Makefile ext PECL=http
+      - name: Test
+        run: |
+          cd http
+          make -f scripts/ci/Makefile test
+
+<?php
+}