Skip to content

Commit 8c786df

Browse files
committed
fix: codecov configuration
allow to upload partial coverages from different workflows using flags
1 parent 193cdb4 commit 8c786df

8 files changed

Lines changed: 171 additions & 4 deletions

File tree

.codecov.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1+
codecov:
2+
notify:
3+
after_n_builds: 5
4+
15
comment:
26
layout: "condensed_header, diff, components"
7+
after_n_builds: 5
8+
9+
flag_management:
10+
default_rules:
11+
carryforward: true
312

413
component_management:
514
individual_components:

.github/workflows/job-arrow-extension.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,11 @@ jobs:
8282

8383
- name: Run Parquet Integration Tests with Arrow
8484
run: composer test:lib:parquet
85+
86+
- name: Upload to Codecov
87+
if: ${{ !cancelled() && matrix.php == '8.3' && matrix.os == 'ubuntu-latest' }}
88+
uses: codecov/codecov-action@v5
89+
with:
90+
token: ${{ secrets.CODECOV_TOKEN }}
91+
directory: ./var/phpunit/coverage/clover
92+
flags: arrow-extension

.github/workflows/job-extension-tests.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
on:
22
workflow_call:
3+
secrets:
4+
CODECOV_TOKEN:
5+
required: false
36

47
jobs:
58
extension-tests:
@@ -44,4 +47,12 @@ jobs:
4447
run: "composer test:lib:parquet -- --group zstd-extension"
4548

4649
- name: "Test Snappy"
47-
run: "composer test:lib:parquet -- --group snappy-extension"
50+
run: "composer test:lib:parquet -- --group snappy-extension"
51+
52+
- name: Upload to Codecov
53+
if: ${{ !cancelled() && matrix.php-version == '8.3' }}
54+
uses: codecov/codecov-action@v5
55+
with:
56+
token: ${{ secrets.CODECOV_TOKEN }}
57+
directory: ./var/phpunit/coverage/clover
58+
flags: extension-tests

.github/workflows/test-suite.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ jobs:
4040

4141
extension-tests:
4242
uses: ./.github/workflows/job-extension-tests.yml
43+
secrets: inherit
4344

4445
pg-query-extension:
4546
uses: ./.github/workflows/job-pg-query-extension.yml
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Flow\Parquet\Tests\Unit\Engine;
6+
7+
use Flow\Parquet\Engine\PhpParquetEngine;
8+
use Flow\Parquet\Exception\RuntimeException;
9+
use PHPUnit\Framework\TestCase;
10+
11+
final class PhpParquetEngineTest extends TestCase
12+
{
13+
public function test_close_write_throws_when_writer_not_open() : void
14+
{
15+
$engine = new PhpParquetEngine();
16+
17+
$this->expectException(RuntimeException::class);
18+
$this->expectExceptionMessage('Writer is not open');
19+
20+
$engine->closeWrite();
21+
}
22+
23+
public function test_write_batch_throws_when_writer_not_open() : void
24+
{
25+
$engine = new PhpParquetEngine();
26+
27+
$this->expectException(RuntimeException::class);
28+
$this->expectExceptionMessage('Writer is not open');
29+
30+
$engine->writeBatch([['col' => 'value']]);
31+
}
32+
33+
public function test_write_row_throws_when_writer_not_open() : void
34+
{
35+
$engine = new PhpParquetEngine();
36+
37+
$this->expectException(RuntimeException::class);
38+
$this->expectExceptionMessage('Writer is not open');
39+
40+
$engine->writeRow(['col' => 'value']);
41+
}
42+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Flow\Parquet\Tests\Unit;
6+
7+
use function Flow\Filesystem\DSL\path_real;
8+
use Flow\Filesystem\Stream\NativeLocalSourceStream;
9+
use Flow\Parquet\Engine\{ArrowParquetEngine, PhpParquetEngine};
10+
use Flow\Parquet\Exception\RuntimeException;
11+
use Flow\Parquet\Reader;
12+
13+
use PHPUnit\Framework\TestCase;
14+
15+
final class ReaderTest extends TestCase
16+
{
17+
public function test_arrow_factory_creates_reader_with_arrow_engine() : void
18+
{
19+
if (!\extension_loaded('arrow')) {
20+
$this->expectException(RuntimeException::class);
21+
Reader::arrow();
22+
23+
return;
24+
}
25+
26+
$reader = Reader::arrow();
27+
28+
$reflection = new \ReflectionClass($reader);
29+
$engine = $reflection->getProperty('engine')->getValue($reader);
30+
31+
self::assertInstanceOf(ArrowParquetEngine::class, $engine);
32+
}
33+
34+
public function test_php_factory_creates_reader_with_php_engine() : void
35+
{
36+
$reader = Reader::php();
37+
38+
$reflection = new \ReflectionClass($reader);
39+
$engine = $reflection->getProperty('engine')->getValue($reader);
40+
41+
self::assertInstanceOf(PhpParquetEngine::class, $engine);
42+
}
43+
44+
public function test_read_returns_parquet_file() : void
45+
{
46+
$reader = Reader::php();
47+
48+
$parquetFile = $reader->read(__DIR__ . '/../Integration/IO/Fixtures/primitives.parquet');
49+
50+
self::assertGreaterThan(0, $parquetFile->metadata()->rowsNumber());
51+
}
52+
53+
public function test_read_stream_returns_parquet_file() : void
54+
{
55+
$reader = Reader::php();
56+
$stream = NativeLocalSourceStream::open(path_real(__DIR__ . '/../Integration/IO/Fixtures/primitives.parquet'));
57+
58+
$parquetFile = $reader->readStream($stream);
59+
60+
self::assertGreaterThan(0, $parquetFile->metadata()->rowsNumber());
61+
}
62+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Flow\Parquet\Tests\Unit;
6+
7+
use Flow\Parquet\Engine\PhpParquetEngine;
8+
use Flow\Parquet\Exception\RuntimeException;
9+
use Flow\Parquet\Writer;
10+
use PHPUnit\Framework\TestCase;
11+
12+
final class WriterTest extends TestCase
13+
{
14+
public function test_arrow_factory_throws_when_extension_not_loaded() : void
15+
{
16+
if (\extension_loaded('arrow')) {
17+
self::markTestSkipped('This test requires the arrow extension to NOT be loaded');
18+
}
19+
20+
$this->expectException(RuntimeException::class);
21+
22+
Writer::arrow();
23+
}
24+
25+
public function test_php_factory_creates_writer_with_php_engine() : void
26+
{
27+
$writer = Writer::php();
28+
29+
$reflection = new \ReflectionClass($writer);
30+
$engine = $reflection->getProperty('engine')->getValue($writer);
31+
32+
self::assertInstanceOf(PhpParquetEngine::class, $engine);
33+
}
34+
}

web/landing/tests/Flow/Website/Tests/Functional/EndToEndTestCase.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,19 +124,19 @@ protected static function getKernelClass() : string
124124
*/
125125
protected static function navigateWithRetry(string $url, int $maxRetries = 3) : Client
126126
{
127+
$client = static::createE2EClient();
127128
$lastException = null;
128129

129130
for ($attempt = 1; $attempt <= $maxRetries; $attempt++) {
130131
try {
131-
$client = static::createE2EClient();
132132
$client->request('GET', $url);
133133

134134
return $client;
135135
} catch (WebDriverException $e) {
136136
$lastException = $e;
137137

138-
if ($attempt === $maxRetries) {
139-
throw $e;
138+
if ($attempt < $maxRetries) {
139+
$client->restart();
140140
}
141141
}
142142
}

0 commit comments

Comments
 (0)