From 3ba46bbbfa0adb5314e6366c2966b7f61c53b3d5 Mon Sep 17 00:00:00 2001
From: Alejandro Celaya <alejandrocelaya@gmail.com>
Date: Fri, 14 Apr 2023 08:58:54 +0200
Subject: [PATCH] Add support for openswoole 22

---
 .github/workflows/ci-db-tests.yml          |  2 +-
 .github/workflows/ci-mutation-tests.yml    |  2 +-
 .github/workflows/ci-tests.yml             |  2 +-
 .github/workflows/ci.yml                   |  2 +-
 .github/workflows/publish-release.yml      |  2 +-
 .github/workflows/publish-swagger-spec.yml |  2 +-
 CHANGELOG.md                               | 17 +++++++++++++++++
 Dockerfile                                 |  2 +-
 composer.json                              |  4 ++--
 config/container.php                       | 11 ++++++++++-
 data/infra/swoole.Dockerfile               |  2 +-
 11 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/.github/workflows/ci-db-tests.yml b/.github/workflows/ci-db-tests.yml
index 6bf9ad2c..0c77ded6 100644
--- a/.github/workflows/ci-db-tests.yml
+++ b/.github/workflows/ci-db-tests.yml
@@ -27,7 +27,7 @@ jobs:
       - uses: './.github/actions/ci-setup'
         with:
           php-version: ${{ matrix.php-version }}
-          php-extensions: openswoole-4.12.1, pdo_sqlsrv-5.10.1
+          php-extensions: openswoole-22.0.0, pdo_sqlsrv-5.10.1
           extensions-cache-key: db-tests-extensions-${{ matrix.php-version }}-${{ inputs.platform }}
       - name: Create test database
         if: ${{ inputs.platform == 'ms' }}
diff --git a/.github/workflows/ci-mutation-tests.yml b/.github/workflows/ci-mutation-tests.yml
index 237b37cb..20e5aefa 100644
--- a/.github/workflows/ci-mutation-tests.yml
+++ b/.github/workflows/ci-mutation-tests.yml
@@ -19,7 +19,7 @@ jobs:
       - uses: './.github/actions/ci-setup'
         with:
           php-version: ${{ matrix.php-version }}
-          php-extensions: openswoole-4.12.1
+          php-extensions: openswoole-22.0.0
           extensions-cache-key: mutation-tests-extensions-${{ matrix.php-version }}-${{ inputs.test-group }}
       - uses: actions/download-artifact@v3
         with:
diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml
index ba9fb991..043a3824 100644
--- a/.github/workflows/ci-tests.yml
+++ b/.github/workflows/ci-tests.yml
@@ -25,7 +25,7 @@ jobs:
       - uses: './.github/actions/ci-setup'
         with:
           php-version: ${{ matrix.php-version }}
-          php-extensions: openswoole-4.12.1
+          php-extensions: openswoole-22.0.0
           extensions-cache-key: tests-extensions-${{ matrix.php-version }}-${{ inputs.test-group }}
       - run: composer test:${{ inputs.test-group }}:ci
       - uses: actions/upload-artifact@v3
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 270c2b0d..f01aa66f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -36,7 +36,7 @@ jobs:
       - uses: './.github/actions/ci-setup'
         with:
           php-version: ${{ matrix.php-version }}
-          php-extensions: openswoole-4.12.1
+          php-extensions: openswoole-22.0.0
           extensions-cache-key: tests-extensions-${{ matrix.php-version }}-${{ matrix.command }}
       - run: composer ${{ matrix.command }}
 
diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml
index abfbd456..bda463a9 100644
--- a/.github/workflows/publish-release.yml
+++ b/.github/workflows/publish-release.yml
@@ -17,7 +17,7 @@ jobs:
       - uses: './.github/actions/ci-setup'
         with:
           php-version: ${{ matrix.php-version }}
-          php-extensions: openswoole-4.12.1
+          php-extensions: openswoole-22.0.0
           extensions-cache-key: publish-swagger-spec-extensions-${{ matrix.php-version }}
           install-deps: 'no'
       - if: ${{ matrix.swoole == 'yes' }}
diff --git a/.github/workflows/publish-swagger-spec.yml b/.github/workflows/publish-swagger-spec.yml
index 9b5dbb32..f7be6502 100644
--- a/.github/workflows/publish-swagger-spec.yml
+++ b/.github/workflows/publish-swagger-spec.yml
@@ -20,7 +20,7 @@ jobs:
       - uses: './.github/actions/ci-setup'
         with:
           php-version: ${{ matrix.php-version }}
-          php-extensions: openswoole-4.12.1
+          php-extensions: openswoole-22.0.0
           extensions-cache-key: publish-swagger-spec-extensions-${{ matrix.php-version }}
       - run: composer swagger:inline
       - run: mkdir ${{ steps.determine_version.outputs.version }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 51f1facc..b51d9c8b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
 
 The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org).
 
+## [Unreleased]
+### Added
+* [#1656](https://github.com/shlinkio/shlink/issues/1656) Add support for openswoole 22
+
+### Changed
+* *Nothing*
+
+### Deprecated
+* *Nothing*
+
+### Removed
+* *Nothing*
+
+### Fixed
+* *Nothing*
+
+
 ## [3.5.4] - 2023-04-12
 ### Added
 * *Nothing*
diff --git a/Dockerfile b/Dockerfile
index 935c3d44..5116c57e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,7 +4,7 @@ ARG SHLINK_VERSION=latest
 ENV SHLINK_VERSION ${SHLINK_VERSION}
 ARG SHLINK_RUNTIME=openswoole
 ENV SHLINK_RUNTIME ${SHLINK_RUNTIME}
-ENV OPENSWOOLE_VERSION 4.12.1
+ENV OPENSWOOLE_VERSION 22.0.0
 ENV PDO_SQLSRV_VERSION 5.10.1
 ENV MS_ODBC_DOWNLOAD 'b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486'
 ENV MS_ODBC_SQL_VERSION 18_18.1.1.1
diff --git a/composer.json b/composer.json
index 03ff1457..48e949c1 100644
--- a/composer.json
+++ b/composer.json
@@ -63,7 +63,7 @@
         "cebe/php-openapi": "^1.7",
         "devster/ubench": "^2.1",
         "infection/infection": "^0.26.19",
-        "openswoole/ide-helper": "~4.11.5",
+        "openswoole/ide-helper": "~22.0.0",
         "phpstan/phpstan": "^1.9",
         "phpstan/phpstan-doctrine": "^1.3",
         "phpstan/phpstan-phpunit": "^1.3",
@@ -107,7 +107,7 @@
             "@parallel cs stan swagger:validate test:unit:ci test:db:sqlite:ci test:db:mysql test:db:maria test:db:postgres test:db:ms",
             "@parallel infect:test:api infect:test:cli infect:ci:unit infect:ci:db"
         ],
-        "cs": "phpcs",
+        "cs": "phpcs -s",
         "cs:fix": "phpcbf",
         "stan": "APP_ENV=test php vendor/bin/phpstan analyse module/*/src module/*/test* module/*/config config docker/config data/migrations --level=8",
         "test": [
diff --git a/config/container.php b/config/container.php
index 6e95e84d..6813ebd4 100644
--- a/config/container.php
+++ b/config/container.php
@@ -12,6 +12,16 @@ chdir(dirname(__DIR__));
 
 require 'vendor/autoload.php';
 
+// Workaround to make this compatible with both openswoole 22 and earlier versions.
+if (! function_exists('swoole_set_process_name')) {
+    // phpcs:disable
+    function swoole_set_process_name(string $name): void
+    {
+        OpenSwoole\Util::setProcessName($name);
+    }
+    // phpcs:enable
+}
+
 // This is one of the first files loaded. Configure the timezone here
 date_default_timezone_set(EnvVars::TIMEZONE->loadFromEnv(date_default_timezone_get()));
 
@@ -21,7 +31,6 @@ if (! class_exists(LOCAL_LOCK_FACTORY)) {
     class_alias(Lock\LockFactory::class, LOCAL_LOCK_FACTORY);
 }
 
-// Build container
 return (static function (): ServiceManager {
     $config = require __DIR__ . '/config.php';
     $container = new ServiceManager($config['dependencies']);
diff --git a/data/infra/swoole.Dockerfile b/data/infra/swoole.Dockerfile
index 6cab2561..42c27b14 100644
--- a/data/infra/swoole.Dockerfile
+++ b/data/infra/swoole.Dockerfile
@@ -3,7 +3,7 @@ MAINTAINER Alejandro Celaya <alejandro@alejandrocelaya.com>
 
 ENV APCU_VERSION 5.1.21
 ENV INOTIFY_VERSION 3.0.0
-ENV OPENSWOOLE_VERSION 4.12.1
+ENV OPENSWOOLE_VERSION 22.0.0
 ENV PDO_SQLSRV_VERSION 5.10.1
 ENV MS_ODBC_DOWNLOAD 'b/9/f/b9f3cce4-3925-46d4-9f46-da08869c6486'
 ENV MS_ODBC_SQL_VERSION 18_18.1.1.1