Skip to content

Commit c0a9eec

Browse files
authored
feat: add reusable workflows for cs and static analysis (#148)
1 parent a80e3cf commit c0a9eec

21 files changed

+139
-85
lines changed

.github/workflows/code-standards.yml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: PHP Code Standards
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
version:
7+
type: string
8+
default: "^3.0"
9+
config:
10+
type: string
11+
default: ""
12+
path:
13+
type: string
14+
default: "."
15+
rules:
16+
type: string
17+
default: |
18+
{
19+
"@PSR2": true,
20+
"array_syntax": {"syntax":"short"},
21+
"concat_space": {"spacing":"one"},
22+
"no_unused_imports": true,
23+
"ordered_imports": true,
24+
"new_with_parentheses": true,
25+
"whitespace_after_comma_in_array": true,
26+
"method_argument_space": {
27+
"keep_multiple_spaces_after_comma": true,
28+
"on_multiline": "ignore"
29+
},
30+
"return_type_declaration": {"space_before": "none"},
31+
"single_quote": true
32+
}
33+
34+
permissions:
35+
contents: read
36+
37+
jobs:
38+
php_code_standards:
39+
runs-on: ubuntu-latest
40+
name: PHP Code Standards
41+
steps:
42+
- uses: actions/checkout@v4
43+
- name: Setup PHP
44+
uses: shivammathur/setup-php@v2
45+
with:
46+
php-version: '8.2'
47+
- name: Run PHP CS Fixer
48+
run: |
49+
composer global require friendsofphp/php-cs-fixer:${{ inputs.version }} -q
50+
CONFIG="${{ inputs.config }}"
51+
RULES=$(echo $'${{ inputs.rules }}'|tr -d '\n\t\r ')
52+
53+
set -x
54+
55+
~/.composer/vendor/bin/php-cs-fixer fix \
56+
${{ inputs.path }} \
57+
$(if [ ! -z "$CONFIG" ]; then echo "--config=$CONFIG"; elif [ ! -z "$RULES" ]; then echo --rules=$RULES; fi) \
58+
--dry-run --diff

.github/workflows/static-analysis.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: PHP Static Analysis
2+
on:
3+
workflow_call:
4+
inputs:
5+
version:
6+
type: string
7+
default: "^1.8"
8+
paths:
9+
type: string
10+
default: "src"
11+
autoload-file:
12+
type: string
13+
default: "vendor/autoload.php"
14+
15+
permissions:
16+
contents: read
17+
18+
jobs:
19+
static_analysis:
20+
runs-on: ubuntu-latest
21+
name: PHPStan Static Analysis
22+
steps:
23+
- uses: actions/checkout@v4
24+
- name: Setup PHP
25+
uses: shivammathur/setup-php@v2
26+
with:
27+
php-version: '8.2'
28+
- name: Run Script
29+
run: |
30+
composer install -q
31+
composer global require phpstan/phpstan:${{ inputs.version }} -q
32+
~/.composer/vendor/bin/phpstan analyse ${{ inputs.paths }} \
33+
--autoload-file=${{ inputs.autoload-file }}

.github/workflows/tests.yml

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,11 @@ jobs:
3131
- name: Run Script
3232
run: vendor/bin/phpunit
3333

34-
style:
35-
runs-on: ubuntu-latest
36-
name: PHP Style Check
37-
steps:
38-
- uses: actions/checkout@v4
39-
- name: Setup PHP
40-
uses: shivammathur/setup-php@v2
41-
with:
42-
php-version: "8.1"
43-
- name: Install Dependencies
44-
uses: nick-invision/retry@v3
45-
with:
46-
timeout_minutes: 10
47-
max_attempts: 3
48-
command: composer install
49-
- name: Run Script
50-
run: vendor/bin/php-cs-fixer fix .
34+
code-standards:
35+
uses: ./.github/workflows/code-standards.yml
36+
with:
37+
path: src
38+
39+
static-analysis:
40+
uses: ./.github/workflows/static-analysis.yml
41+

.php-cs-fixer.dist.php

Lines changed: 0 additions & 16 deletions
This file was deleted.

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"paragonie/random_compat": ">=2",
4141
"phpunit/phpunit": "^9",
4242
"phpspec/prophecy-phpunit": "^2.0",
43-
"friendsofphp/php-cs-fixer": "^3.21",
43+
"friendsofphp/php-cs-fixer": "^3.62",
4444
"google/cloud-dlp": "^1.10",
4545
"google/cloud-storage": "^1.33",
4646
"google/cloud-secret-manager": "^1.12"

src/Fixers/ClientUpgradeFixer/ClientUpgradeFixer.php

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,21 @@
33
namespace Google\Cloud\Fixers\ClientUpgradeFixer;
44

55
use PhpCsFixer\AbstractFixer;
6-
use PhpCsFixer\Fixer\FixerInterface;
6+
use PhpCsFixer\Fixer\ConfigurableFixerInterface;
7+
use PhpCsFixer\Fixer\ConfigurableFixerTrait;
78
use PhpCsFixer\Fixer\Import\OrderedImportsFixer;
9+
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
10+
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
11+
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
12+
use PhpCsFixer\FixerDefinition\FixerDefinition;
813
use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
9-
use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer;
10-
use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis;
11-
use PhpCsFixer\Tokenizer\CT;
1214
use PhpCsFixer\Tokenizer\Token;
1315
use PhpCsFixer\Tokenizer\Tokens;
14-
use ReflectionClass;
15-
use ReflectionMethod;
16-
use PhpCsFixer\Fixer\ConfigurableFixerInterface;
17-
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
18-
use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
19-
use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
2016

2117
class ClientUpgradeFixer extends AbstractFixer implements ConfigurableFixerInterface
2218
{
19+
use ConfigurableFixerTrait;
20+
2321
/**
2422
* Check if the fixer is a candidate for given Tokens collection.
2523
*
@@ -34,19 +32,10 @@ public function isCandidate(Tokens $tokens): bool
3432
return true;
3533
}
3634

37-
/**
38-
* @param array<string, mixed> $configuration
39-
*/
40-
public function configure(array $configuration): void
41-
{
42-
// no configuration assumes true
43-
$this->configuration = $configuration;
44-
}
45-
4635
/**
4736
* Defines the available configuration options of the fixer.
4837
*/
49-
public function getConfigurationDefinition(): FixerConfigurationResolverInterface
38+
protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
5039
{
5140
return new FixerConfigurationResolver([
5241
(new FixerOptionBuilder('clientVars', 'A map of client variables to their new class names'))
@@ -199,10 +188,10 @@ protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
199188
$importedClasses = array_map(fn ($useDeclaration) => $useDeclaration->getFullName(), $useDeclarations);
200189
$classesToImport = array_filter(
201190
$classesToImport,
202-
fn($requestClass) => !isset($importedClasses[$requestClass->getName()])
191+
fn ($requestClass) => !isset($importedClasses[$requestClass->getName()])
203192
);
204193
$requestClassImportTokens = array_map(
205-
fn($requestClass) => $requestClass->getImportTokens(),
194+
fn ($requestClass) => $requestClass->getImportTokens(),
206195
array_values($classesToImport)
207196
);
208197
$tokens->insertAt($importStart, array_merge(...$requestClassImportTokens));

src/Fixers/ClientUpgradeFixer/RequestClass.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Google\Cloud\Fixers\ClientUpgradeFixer;
44

55
use PhpCsFixer\Tokenizer\Token;
6-
use PhpCsFixer\Tokenizer\Tokens;
76
use ReflectionClass;
87

98
class RequestClass

src/Fixers/ClientUpgradeFixer/RequestVariableCounter.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
namespace Google\Cloud\Fixers\ClientUpgradeFixer;
44

5-
use PhpCsFixer\Tokenizer\Tokens;
6-
75
class RequestVariableCounter
86
{
97
private array $varCounts = [];

src/Fixers/ClientUpgradeFixer/RpcMethod.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use PhpCsFixer\Tokenizer\Token;
77
use PhpCsFixer\Tokenizer\Tokens;
88
use ReflectionMethod;
9-
use ReflectionParameter;
109

1110
class RpcMethod
1211
{

src/TestUtils/CloudFunctionDeploymentTrait.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public function setUpClient()
142142

143143
public function getBaseUri()
144144
{
145-
return self::$fn->getBaseUrl(getenv("GOOGLE_SKIP_DEPLOYMENT") === 'true');
145+
return self::$fn->getBaseUrl(getenv('GOOGLE_SKIP_DEPLOYMENT') === 'true');
146146
}
147147

148148
/**

0 commit comments

Comments
 (0)