From 8f7fd97ebe17c0a104d02d7b4bc09723e6454726 Mon Sep 17 00:00:00 2001 From: sunxyw Date: Fri, 9 Sep 2022 18:54:55 +0800 Subject: [PATCH 1/5] refactor workflow --- .github/workflows/coding-style.yml | 27 +++++++ .github/workflows/integration-test.yml | 103 ------------------------- .github/workflows/static-analysis.yml | 27 +++++++ .github/workflows/test.yml | 39 ++++++++++ 4 files changed, 93 insertions(+), 103 deletions(-) create mode 100644 .github/workflows/coding-style.yml delete mode 100644 .github/workflows/integration-test.yml create mode 100644 .github/workflows/static-analysis.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/coding-style.yml b/.github/workflows/coding-style.yml new file mode 100644 index 00000000..37eacf2b --- /dev/null +++ b/.github/workflows/coding-style.yml @@ -0,0 +1,27 @@ +name: Code Style + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + analyse: + name: Code Style + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup PHP + uses: sunxyw/workflows/setup-environment@main + with: + php-version: 8.0 + php-extensions: swoole, posix, json + operating-system: ubuntu-latest + use-cache: true + + - name: Code Style + uses: sunxyw/workflows/coding-style@main diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml deleted file mode 100644 index d14f8f72..00000000 --- a/.github/workflows/integration-test.yml +++ /dev/null @@ -1,103 +0,0 @@ -name: Integration and Style Test - -on: - push: - branches: - - master - - '*-develop' - paths: - - '**/**.php' - pull_request: - branches: - - master - - '*-develop' - types: - - opened - - synchronize - - reopened - - ready_for_review - - review_requested - paths: - - '**/**.php' - -jobs: - integration: - name: Integration Test (PHP ${{ matrix.php-versions }}) (OS ${{ matrix.operating-system }}) - runs-on: ${{ matrix.operating-system }} - strategy: - matrix: - operating-system: [ "ubuntu-latest", "macos-latest", "windows-latest" ] - php-versions: [ "7.4", "8.0", "8.1" ] - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Setup PHP - uses: "shivammathur/setup-php@v2" - with: - php-version: ${{ matrix.php-versions }} - extensions: swoole, posix, json, mbstring, pdo, sqlite3, pdo_sqlite - env: - SWOOLE_CONFIGURE_OPTS: --enable-openssl - - - name: Setup problem matchers for PHP - run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" - - - name: Validate composer.json - run: "composer validate --strict" - - - name: Get composer cache directory - id: composer-cache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" - - - name: Cache dependencies - uses: actions/cache@v2 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} - restore-keys: ${{ runner.os }}-composer- - - - name: Install Composer Dependencies - run: "composer install --prefer-dist --no-progress --optimize-autoloader" - - - name: Run Static Analysis - run: "composer analyse" - - - name: Run PHPUnit - run: "composer test" - - cs-check: - name: PHP CS Fixer Check - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Setup PHP 8.1 - uses: "shivammathur/setup-php@v2" - with: - php-version: "8.1" - extensions: swoole, posix, json - - - name: Setup problem matchers for PHP - run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" - - - name: Validate composer.json - run: "composer validate --strict" - - - name: Get composer cache directory - id: composer-cache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" - - - name: Cache dependencies - uses: actions/cache@v2 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} - restore-keys: ${{ runner.os }}-composer- - - - name: Install Composer Dependencies - run: "composer install --prefer-dist --no-progress --optimize-autoloader" - - - name: Run PHP CS Fixer Check - run: "composer cs-fix -- --dry-run --diff" diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml new file mode 100644 index 00000000..c9bd057d --- /dev/null +++ b/.github/workflows/static-analysis.yml @@ -0,0 +1,27 @@ +name: Static Analysis + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + analyse: + name: Static Analysis + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup PHP + uses: sunxyw/workflows/setup-environment@main + with: + php-version: 8.0 + php-extensions: swoole, posix, json + operating-system: ubuntu-latest + use-cache: true + + - name: Static Analysis + uses: sunxyw/workflows/static-analysis@main diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..848a64df --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,39 @@ +name: Test + +on: + push: + branches: + - main + - develop + - '*-dev*' + pull_request: + types: + - opened + - reopened + - review_requested + workflow_dispatch: + +jobs: + test: + strategy: + matrix: + operating-system: [ ubuntu-latest, windows-latest, macos-latest ] + php-version: [ 7.4, 8.0 ] + name: PHP ${{ matrix.php-version }} Test (${{ matrix.operating-system }}) + runs-on: ${{ matrix.operating-system }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup PHP + uses: sunxyw/workflows/setup-environment@main + with: + php-version: ${{ matrix.php-version }} + php-extensions: swoole, posix, json + operating-system: ${{ matrix.operating-system }} + use-cache: true + + - name: Test + uses: sunxyw/workflows/test@main From 9d77d60887a94dc54d3ea39ab1ce0f95ee0ed7df Mon Sep 17 00:00:00 2001 From: sunxyw Date: Fri, 9 Sep 2022 18:59:46 +0800 Subject: [PATCH 2/5] fix styles --- src/ZM/Annotation/OneBot/BotCommand.php | 2 +- src/ZM/Config/ZMConfig.php | 2 +- src/ZM/Container/BoundMethod.php | 2 +- src/ZM/Container/Container.php | 2 +- src/ZM/Container/ContainerTrait.php | 11 ++++---- src/ZM/Middleware/Pipeline.php | 2 +- src/ZM/Process/ProcessStateManager.php | 2 +- src/ZM/Store/Database/DBQueryBuilder.php | 2 +- src/ZM/Store/Database/DBStatementWrapper.php | 8 +++--- src/ZM/Store/Database/DBWrapper.php | 28 ++++++++++---------- 10 files changed, 30 insertions(+), 31 deletions(-) diff --git a/src/ZM/Annotation/OneBot/BotCommand.php b/src/ZM/Annotation/OneBot/BotCommand.php index 49448200..7ece0f37 100644 --- a/src/ZM/Annotation/OneBot/BotCommand.php +++ b/src/ZM/Annotation/OneBot/BotCommand.php @@ -108,9 +108,9 @@ class BotCommand extends AnnotationBase implements Level } /** + * @return $this * @throws InvalidArgumentException * @throws ZMKnownException - * @return $this */ public function withArgument( string $name, diff --git a/src/ZM/Config/ZMConfig.php b/src/ZM/Config/ZMConfig.php index 70016028..bb425323 100644 --- a/src/ZM/Config/ZMConfig.php +++ b/src/ZM/Config/ZMConfig.php @@ -102,7 +102,7 @@ class ZMConfig foreach ($this->config_paths as $config_path) { $files = scandir($config_path); foreach ($files as $file) { - [, $ext, $load_type,] = $this->getFileMeta($file); + [, $ext, $load_type] = $this->getFileMeta($file); // 略过不支持的文件 if (!in_array($ext, self::ALLOWED_FILE_EXTENSIONS, true)) { continue; diff --git a/src/ZM/Container/BoundMethod.php b/src/ZM/Container/BoundMethod.php index 017d0082..301aa0b5 100644 --- a/src/ZM/Container/BoundMethod.php +++ b/src/ZM/Container/BoundMethod.php @@ -16,9 +16,9 @@ class BoundMethod * * @param Container $container * @param callable|string $callback + * @return mixed * @throws EntryResolutionException|ReflectionException * @throws InvalidArgumentException - * @return mixed */ public static function call(ContainerInterface $container, $callback, array $parameters = [], string $default_method = null) { diff --git a/src/ZM/Container/Container.php b/src/ZM/Container/Container.php index 8dcbcf44..7d22faff 100644 --- a/src/ZM/Container/Container.php +++ b/src/ZM/Container/Container.php @@ -41,8 +41,8 @@ class Container implements ContainerInterface * @template T * @param class-string $abstract 类或接口名 * @param array $parameters 参数 - * @throws EntryResolutionException * @return Closure|mixed|T 实例 + * @throws EntryResolutionException */ public function make(string $abstract, array $parameters = []) { diff --git a/src/ZM/Container/ContainerTrait.php b/src/ZM/Container/ContainerTrait.php index a79eef7d..a5562ed7 100644 --- a/src/ZM/Container/ContainerTrait.php +++ b/src/ZM/Container/ContainerTrait.php @@ -247,8 +247,8 @@ trait ContainerTrait * @template T * @param class-string $abstract 类或接口名 * @param array $parameters 参数 - * @throws EntryResolutionException * @return Closure|mixed|T 实例 + * @throws EntryResolutionException */ public function make(string $abstract, array $parameters = []) { @@ -317,8 +317,8 @@ trait ContainerTrait * 实例化具体的类实例 * * @param Closure|string $concrete 类名或对应的闭包 - * @throws EntryResolutionException * @return mixed + * @throws EntryResolutionException */ public function build($concrete) { @@ -394,10 +394,9 @@ trait ContainerTrait * * @param string $id identifier of the entry to look for * + * @return mixed entry * @throws NotFoundExceptionInterface no entry was found for **this** identifier * @throws ContainerExceptionInterface error while retrieving the entry - * - * @return mixed entry */ public function get(string $id) { @@ -640,8 +639,8 @@ trait ContainerTrait /** * 解析基本类型 * - * @throws EntryResolutionException 如参数不存在默认值,则抛出异常 * @return mixed 对应类型的默认值 + * @throws EntryResolutionException 如参数不存在默认值,则抛出异常 */ protected function resolvePrimitive(ReflectionParameter $parameter) { @@ -655,8 +654,8 @@ trait ContainerTrait /** * 解析类 * - * @throws EntryResolutionException 如果无法解析类,则抛出异常 * @return mixed + * @throws EntryResolutionException 如果无法解析类,则抛出异常 */ protected function resolveClass(ReflectionParameter $parameter) { diff --git a/src/ZM/Middleware/Pipeline.php b/src/ZM/Middleware/Pipeline.php index 728315c0..9054e0ce 100644 --- a/src/ZM/Middleware/Pipeline.php +++ b/src/ZM/Middleware/Pipeline.php @@ -45,8 +45,8 @@ class Pipeline * 接下来要调用的内容 * * @param callable $callback 然后调用一个什么东西 - * @throws InvalidArgumentException * @return null|mixed 返回调用结果或null + * @throws InvalidArgumentException */ public function then(callable $callback) { diff --git a/src/ZM/Process/ProcessStateManager.php b/src/ZM/Process/ProcessStateManager.php index b8c81a4c..3dd69727 100644 --- a/src/ZM/Process/ProcessStateManager.php +++ b/src/ZM/Process/ProcessStateManager.php @@ -65,8 +65,8 @@ class ProcessStateManager * 用于框架内部获取多进程运行状态的函数 * * @param mixed $id_or_name - * @throws ZMKnownException * @return false|int|mixed + * @throws ZMKnownException * @internal */ public static function getProcessState(int $type, $id_or_name = null) diff --git a/src/ZM/Store/Database/DBQueryBuilder.php b/src/ZM/Store/Database/DBQueryBuilder.php index ac6383ac..a5570f77 100644 --- a/src/ZM/Store/Database/DBQueryBuilder.php +++ b/src/ZM/Store/Database/DBQueryBuilder.php @@ -18,8 +18,8 @@ class DBQueryBuilder extends QueryBuilder } /** - * @throws DbException * @return DBStatementWrapper|int + * @throws DbException */ public function execute() { diff --git a/src/ZM/Store/Database/DBStatementWrapper.php b/src/ZM/Store/Database/DBStatementWrapper.php index dd6774f1..4aa9c421 100644 --- a/src/ZM/Store/Database/DBStatementWrapper.php +++ b/src/ZM/Store/Database/DBStatementWrapper.php @@ -45,8 +45,8 @@ class DBStatementWrapper /** * wrapper method - *@throws DBException * @return array|false|mixed + *@throws DBException */ public function fetchNumeric() { @@ -59,8 +59,8 @@ class DBStatementWrapper /** * wrapper method - *@throws DBException * @return array|false|mixed + *@throws DBException */ public function fetchAssociative() { @@ -73,8 +73,8 @@ class DBStatementWrapper /** * wrapper method - *@throws DBException * @return false|mixed + *@throws DBException */ public function fetchOne() { @@ -217,8 +217,8 @@ class DBStatementWrapper /** * wrapper method - * @throws DBException * @return int + * @throws DBException */ public function rowCount() { diff --git a/src/ZM/Store/Database/DBWrapper.php b/src/ZM/Store/Database/DBWrapper.php index e4d53fdc..f134416f 100644 --- a/src/ZM/Store/Database/DBWrapper.php +++ b/src/ZM/Store/Database/DBWrapper.php @@ -69,8 +69,8 @@ class DBWrapper /** * wrapper method - * @throws DBException * @return array|false + * @throws DBException */ public function fetchAssociative(string $query, array $params = [], array $types = []) { @@ -83,8 +83,8 @@ class DBWrapper /** * wrapper method - * @throws DBException * @return array|false + * @throws DBException */ public function fetchNumeric(string $query, array $params = [], array $types = []) { @@ -96,8 +96,8 @@ class DBWrapper } /** - * @throws DBException * @return false|mixed + * @throws DBException */ public function fetchOne(string $query, array $params = [], array $types = []) { @@ -199,8 +199,8 @@ class DBWrapper * @param array|array $params Query parameters * @param array|array $types Parameter types * - * @throws DBException * @return array> + * @throws DBException */ public function fetchAllNumeric(string $query, array $params = [], array $types = []): array { @@ -217,8 +217,8 @@ class DBWrapper * @param array|array $params Query parameters * @param array|array $types Parameter types * - * @throws DBException * @return array> + * @throws DBException */ public function fetchAllAssociative(string $query, array $params = [], array $types = []): array { @@ -252,8 +252,8 @@ class DBWrapper * @param array|array $params Query parameters * @param array|array $types Parameter types * - * @throws DBException * @return array> + * @throws DBException */ public function fetchAllAssociativeIndexed(string $query, array $params = [], array $types = []): array { @@ -270,8 +270,8 @@ class DBWrapper * @param array|array $params Query parameters * @param array|array $types Parameter types * - * @throws DBException * @return array + * @throws DBException */ public function fetchFirstColumn(string $query, array $params = [], array $types = []): array { @@ -288,8 +288,8 @@ class DBWrapper * @param array|array $params Query parameters * @param array|array $types Parameter types * - * @throws DBException * @return Traversable> + * @throws DBException */ public function iterateNumeric(string $query, array $params = [], array $types = []): Traversable { @@ -306,8 +306,8 @@ class DBWrapper * @param array|array $params Query parameters * @param array|array $types Parameter types * - * @throws DBException * @return Traversable> + * @throws DBException */ public function iterateAssociative(string $query, array $params = [], array $types = []): Traversable { @@ -324,8 +324,8 @@ class DBWrapper * @param array|array $params Query parameters * @param array|array $types Parameter types * - * @throws DBException * @return Traversable + * @throws DBException */ public function iterateKeyValue(string $query, array $params = [], array $types = []): Traversable { @@ -342,8 +342,8 @@ class DBWrapper * @param array|array $params Query parameters * @param array|array $types Parameter types * - * @throws DBException * @return Traversable> + * @throws DBException */ public function iterateAssociativeIndexed(string $query, array $params = [], array $types = []): Traversable { @@ -360,8 +360,8 @@ class DBWrapper * @param array|array $params Query parameters * @param array|array $types Parameter types * - * @throws DBException * @return Traversable + * @throws DBException */ public function iterateColumn(string $query, array $params = [], array $types = []): Traversable { @@ -414,8 +414,8 @@ class DBWrapper * @param array|array $params Statement parameters * @param array|array $types Parameter types * - * @throws DBException * @return int|string the number of affected rows + * @throws DBException */ public function executeStatement(string $sql, array $params = [], array $types = []) { @@ -446,8 +446,8 @@ class DBWrapper /** * overwrite method to $this->connection->transactional() - * @throws DBException * @return mixed + * @throws DBException */ public function transactional(Closure $func) { From 44c1ac054c822eb0a2b8683482ae25d5fc1e7344 Mon Sep 17 00:00:00 2001 From: sunxyw Date: Fri, 9 Sep 2022 20:55:44 +0800 Subject: [PATCH 3/5] avoid duplicate workflow runs --- .github/workflows/coding-style.yml | 17 ++++++++++++++++- .github/workflows/static-analysis.yml | 15 +++++++++++++++ .github/workflows/test.yml | 15 +++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/.github/workflows/coding-style.yml b/.github/workflows/coding-style.yml index 37eacf2b..16459d6d 100644 --- a/.github/workflows/coding-style.yml +++ b/.github/workflows/coding-style.yml @@ -6,7 +6,22 @@ on: workflow_dispatch: jobs: - analyse: + pre_job: + runs-on: ubuntu-latest + outputs: + should_skip: ${{ steps.skip_check.outputs.should_skip }} + steps: + - id: skip_check + uses: fkirc/skip-duplicate-actions@v4 + with: + concurrent_skipping: same_content_newer + skip_after_successful_duplicate: true + paths: '["src/**", "tests/**"]' + do_not_skip: '["workflow_dispatch", "schedule"]' + + cs-fix: + needs: pre_job + if: ${{ needs.pre_job.outputs.should_skip != 'true' }} name: Code Style runs-on: ubuntu-latest steps: diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index c9bd057d..5bd5689d 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -6,7 +6,22 @@ on: workflow_dispatch: jobs: + pre_job: + runs-on: ubuntu-latest + outputs: + should_skip: ${{ steps.skip_check.outputs.should_skip }} + steps: + - id: skip_check + uses: fkirc/skip-duplicate-actions@v4 + with: + concurrent_skipping: same_content_newer + skip_after_successful_duplicate: true + paths: '["src/**", "tests/**"]' + do_not_skip: '["workflow_dispatch", "schedule"]' + analyse: + needs: pre_job + if: ${{ needs.pre_job.outputs.should_skip != 'true' }} name: Static Analysis runs-on: ubuntu-latest steps: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 848a64df..35f077a5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,22 @@ on: workflow_dispatch: jobs: + pre_job: + runs-on: ubuntu-latest + outputs: + should_skip: ${{ steps.skip_check.outputs.should_skip }} + steps: + - id: skip_check + uses: fkirc/skip-duplicate-actions@v4 + with: + concurrent_skipping: same_content_newer + skip_after_successful_duplicate: true + paths: '["src/**", "tests/**", "bin/phpunit-zm"]' + do_not_skip: '["workflow_dispatch", "schedule"]' + test: + needs: pre_job + if: ${{ needs.pre_job.outputs.should_skip != 'true' }} strategy: matrix: operating-system: [ ubuntu-latest, windows-latest, macos-latest ] From 6c9cd06e4a6fbe67dc708968c6f80a09f859fd04 Mon Sep 17 00:00:00 2001 From: sunxyw Date: Fri, 9 Sep 2022 21:03:47 +0800 Subject: [PATCH 4/5] simplify incrememt build number --- .github/workflows/increment-build-number.yml | 25 ++++---------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/.github/workflows/increment-build-number.yml b/.github/workflows/increment-build-number.yml index 5fafab7d..a55b2fa2 100644 --- a/.github/workflows/increment-build-number.yml +++ b/.github/workflows/increment-build-number.yml @@ -22,27 +22,12 @@ jobs: ref: ${{ github.base_ref }} - name: Setup PHP - uses: "shivammathur/setup-php@v2" + uses: sunxyw/workflows/setup-environment@main with: - php-version: '8.1' - extensions: swoole, posix, json - - - name: Setup problem matchers for PHP - run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" - - - name: Get composer cache directory - id: composer-cache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" - - - name: Cache dependencies - uses: actions/cache@v2 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} - restore-keys: ${{ runner.os }}-composer- - - - name: Install Composer Dependencies - run: "composer install --prefer-dist --no-progress --optimize-autoloader" + php-version: 8.0 + php-extensions: swoole, posix, json + operating-system: ubuntu-latest + use-cache: true - name: Generate API Docs id: generate-api-docs From a18fcdb21ea1e3277c6ce1c29d5eec7ecb575713 Mon Sep 17 00:00:00 2001 From: sunxyw Date: Sat, 10 Sep 2022 16:04:15 +0800 Subject: [PATCH 5/5] adjust workflow php version --- .github/workflows/static-analysis.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 5bd5689d..92feeae8 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -33,7 +33,7 @@ jobs: - name: Setup PHP uses: sunxyw/workflows/setup-environment@main with: - php-version: 8.0 + php-version: 7.4 php-extensions: swoole, posix, json operating-system: ubuntu-latest use-cache: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 35f077a5..aaf76a72 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: strategy: matrix: operating-system: [ ubuntu-latest, windows-latest, macos-latest ] - php-version: [ 7.4, 8.0 ] + php-version: [ 7.4, 8.0, 8.1 ] name: PHP ${{ matrix.php-version }} Test (${{ matrix.operating-system }}) runs-on: ${{ matrix.operating-system }} steps: