From a493ce9c7aa1d8ed0acec20d637d57b77dcd3ed5 Mon Sep 17 00:00:00 2001 From: Lisa Fischer Date: Tue, 6 Oct 2026 14:22:44 +0200 Subject: [PATCH 1/4] feat(illumina-sample-sheet): use BCL Convert 4.4.10 for NovaSeq X cloud analysis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://mlllab.atlassian.net/browse/AE-5676 🤖 Generated with Claude Code --- src/IlluminaSampleSheet/V2/BclConvertSoftwareVersion.php | 1 + .../V2/Sections/BclConvertSettingsSection.php | 2 +- src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php | 2 +- .../IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php | 2 +- .../V2/IlluminaSampleSheetVersion2Test.php | 4 ++-- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/IlluminaSampleSheet/V2/BclConvertSoftwareVersion.php b/src/IlluminaSampleSheet/V2/BclConvertSoftwareVersion.php index ed48dba3..fa3c51a1 100644 --- a/src/IlluminaSampleSheet/V2/BclConvertSoftwareVersion.php +++ b/src/IlluminaSampleSheet/V2/BclConvertSoftwareVersion.php @@ -6,6 +6,7 @@ class BclConvertSoftwareVersion { public const V4_1_23 = '4.1.23'; public const V4_4_6 = '4.4.6'; + public const V4_4_10 = '4.4.10'; public string $value; diff --git a/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php b/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php index c22345e2..8ecdba8f 100644 --- a/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php +++ b/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php @@ -29,7 +29,7 @@ public function performAnalysisOn(AnalysisLocation $analysisLocation): void private function performAnalysisOnCloud(): void { - $this->keyValues['SoftwareVersion'] = BclConvertSoftwareVersion::V4_1_23; + $this->keyValues['SoftwareVersion'] = BclConvertSoftwareVersion::V4_4_10; } private function performAnalysisOnLocalMachine(): void diff --git a/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php b/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php index 69e7017e..d53b119b 100644 --- a/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php +++ b/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php @@ -9,7 +9,7 @@ final class CloudSettingsSection extends SimpleKeyValueSection /** @var string */ public const GENERATED_VERSION = '2.6.0.202308300002'; public const CLOUD_WORKFLOW = 'ica_workflow_1'; - public const BCL_CONVERT_PIPELINE = 'urn:ilmn:ica:pipeline:d5c7e407-d439-48c8-bce5-b7aec225f6a7#BclConvert_v4_1_23_patch1'; + public const BCL_CONVERT_PIPELINE = 'urn:ilmn:ica:pipeline:4bdae602-abe4-4230-b0c6-f886af563b26#BclConvert_v4_4_10'; public function __construct() { diff --git a/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php b/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php index d8468fb3..5da5735d 100644 --- a/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php +++ b/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php @@ -14,7 +14,7 @@ public function testToStringOnCloud(): void $bclConvertSettingsSection->performAnalysisOn(AnalysisLocation::CLOUD()); $expected = <<<'CSV' FastqCompressionFormat,gzip -SoftwareVersion,4.1.23 +SoftwareVersion,4.4.10 CSV; self::assertSame($expected, $bclConvertSettingsSection->convertSectionToString()); diff --git a/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php b/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php index fc6c9f29..69e74dca 100644 --- a/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php +++ b/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php @@ -126,7 +126,7 @@ public function testNovaSeqXCloudSampleSheetToStringReturnsExpectedResult(): voi [BCLConvert_Settings] FastqCompressionFormat,gzip - SoftwareVersion,4.1.23 + SoftwareVersion,4.4.10 [BCLConvert_Data] Lane,Sample_ID,Index,Index2,OverrideCycles,AdapterRead1,AdapterRead2,BarcodeMismatchesIndex1,BarcodeMismatchesIndex2 @@ -140,7 +140,7 @@ public function testNovaSeqXCloudSampleSheetToStringReturnsExpectedResult(): voi [Cloud_Settings] GeneratedVersion,2.6.0.202308300002 Cloud_Workflow,ica_workflow_1 - BCLConvert_Pipeline,urn:ilmn:ica:pipeline:d5c7e407-d439-48c8-bce5-b7aec225f6a7#BclConvert_v4_1_23_patch1 + BCLConvert_Pipeline,urn:ilmn:ica:pipeline:4bdae602-abe4-4230-b0c6-f886af563b26#BclConvert_v4_4_10 [Cloud_Data] Sample_ID,ProjectName,LibraryName From 1373ed7da9786e7fac4b4ee72652f8a62f4d9dc9 Mon Sep 17 00:00:00 2001 From: Lisa Fischer Date: Fri, 9 Oct 2026 14:18:56 +0200 Subject: [PATCH 2/4] ci: ignore advisories blocking PHP 7.4 and 8.0 dev installs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New advisories on league/flysystem 1.x and zbateson/mail-mime-parser leave no installable orchestra/testbench for PHP < 8.1. Both are dev-only, pulled in through orchestra/testbench. 🤖 Generated with Claude Code --- composer.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index cb14a86b..00a1e517 100644 --- a/composer.json +++ b/composer.json @@ -74,7 +74,9 @@ "policy": { "advisories": { "ignore": [ - "laravel/framework" + "laravel/framework", + "league/flysystem", + "zbateson/mail-mime-parser" ] } }, From 95d8b77cad1b03357ba4ee8736bc82a545f052aa Mon Sep 17 00:00:00 2001 From: Lisa Fischer Date: Mon, 12 Oct 2026 08:45:43 +0200 Subject: [PATCH 3/4] feat(illumina-sample-sheet): make BCL Convert 4.4.10 opt-in for cloud analysis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Defaults stay on 4.1.23, so releasing this changes no existing sample sheet. Callers switch by passing the software version and the matching pipeline URN. 🤖 Generated with Claude Code --- .../V2/Sections/BclConvertSettingsSection.php | 8 ++++++-- .../V2/Sections/CloudSettingsSection.php | 7 ++++--- .../V2/BclConvertSettingsSectionTest.php | 13 +++++++++++++ .../V2/IlluminaSampleSheetVersion2Test.php | 5 +++-- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php b/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php index 8ecdba8f..c1043226 100644 --- a/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php +++ b/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php @@ -10,8 +10,12 @@ final class BclConvertSettingsSection extends SimpleKeyValueSection { use RequiresAnalysisLocationToBeSet; - public function __construct() + private string $cloudSoftwareVersion; + + public function __construct(string $cloudSoftwareVersion = BclConvertSoftwareVersion::V4_1_23) { + $this->cloudSoftwareVersion = $cloudSoftwareVersion; + $fields = new Collection([ 'FastqCompressionFormat' => FastQCompressionFormat::GZIP, ]); @@ -29,7 +33,7 @@ public function performAnalysisOn(AnalysisLocation $analysisLocation): void private function performAnalysisOnCloud(): void { - $this->keyValues['SoftwareVersion'] = BclConvertSoftwareVersion::V4_4_10; + $this->keyValues['SoftwareVersion'] = $this->cloudSoftwareVersion; } private function performAnalysisOnLocalMachine(): void diff --git a/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php b/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php index d53b119b..27765ea8 100644 --- a/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php +++ b/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php @@ -9,14 +9,15 @@ final class CloudSettingsSection extends SimpleKeyValueSection /** @var string */ public const GENERATED_VERSION = '2.6.0.202308300002'; public const CLOUD_WORKFLOW = 'ica_workflow_1'; - public const BCL_CONVERT_PIPELINE = 'urn:ilmn:ica:pipeline:4bdae602-abe4-4230-b0c6-f886af563b26#BclConvert_v4_4_10'; + public const BCL_CONVERT_PIPELINE = 'urn:ilmn:ica:pipeline:d5c7e407-d439-48c8-bce5-b7aec225f6a7#BclConvert_v4_1_23_patch1'; + public const BCL_CONVERT_PIPELINE_V4_4_10 = 'urn:ilmn:ica:pipeline:4bdae602-abe4-4230-b0c6-f886af563b26#BclConvert_v4_4_10'; - public function __construct() + public function __construct(string $bclConvertPipeline = self::BCL_CONVERT_PIPELINE) { parent::__construct(new Collection([ 'GeneratedVersion' => self::GENERATED_VERSION, 'Cloud_Workflow' => self::CLOUD_WORKFLOW, - 'BCLConvert_Pipeline' => self::BCL_CONVERT_PIPELINE, + 'BCLConvert_Pipeline' => $bclConvertPipeline, ])); } diff --git a/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php b/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php index 5da5735d..71739721 100644 --- a/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php +++ b/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php @@ -2,6 +2,7 @@ namespace MLL\Utils\Tests\IlluminaSampleSheet\V2; +use MLL\Utils\IlluminaSampleSheet\V2\BclConvertSoftwareVersion; use MLL\Utils\IlluminaSampleSheet\V2\Sections\AnalysisLocation; use MLL\Utils\IlluminaSampleSheet\V2\Sections\BclConvertSettingsSection; use PHPUnit\Framework\TestCase; @@ -14,6 +15,18 @@ public function testToStringOnCloud(): void $bclConvertSettingsSection->performAnalysisOn(AnalysisLocation::CLOUD()); $expected = <<<'CSV' FastqCompressionFormat,gzip +SoftwareVersion,4.1.23 + +CSV; + self::assertSame($expected, $bclConvertSettingsSection->convertSectionToString()); + } + + public function testToStringOnCloudWithSoftwareVersion(): void + { + $bclConvertSettingsSection = new BclConvertSettingsSection(BclConvertSoftwareVersion::V4_4_10); + $bclConvertSettingsSection->performAnalysisOn(AnalysisLocation::CLOUD()); + $expected = <<<'CSV' +FastqCompressionFormat,gzip SoftwareVersion,4.4.10 CSV; diff --git a/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php b/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php index 69e74dca..7e1e29d5 100644 --- a/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php +++ b/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php @@ -6,6 +6,7 @@ use MLL\Utils\Flowcells\NovaSeqX1_5B; use MLL\Utils\IlluminaSampleSheet\V2\BclConvert\BclSample; use MLL\Utils\IlluminaSampleSheet\V2\BclConvert\OverrideCycles; +use MLL\Utils\IlluminaSampleSheet\V2\BclConvertSoftwareVersion; use MLL\Utils\IlluminaSampleSheet\V2\IlluminaSampleSheetVersion2; use MLL\Utils\IlluminaSampleSheet\V2\IndexOrientation; use MLL\Utils\IlluminaSampleSheet\V2\InstrumentPlatform; @@ -91,7 +92,7 @@ public function testNovaSeqXCloudSampleSheetToStringReturnsExpectedResult(): voi null ); - $bclConvertSettingsSection = new BclConvertSettingsSection(); + $bclConvertSettingsSection = new BclConvertSettingsSection(BclConvertSoftwareVersion::V4_4_10); $bclConvertDataSection = new BclConvertDataSection($bclSampleList); @@ -102,7 +103,7 @@ public function testNovaSeqXCloudSampleSheetToStringReturnsExpectedResult(): voi $readsSection, $bclConvertSettingsSection, $bclConvertDataSection, - new CloudSettingsSection(), + new CloudSettingsSection(CloudSettingsSection::BCL_CONVERT_PIPELINE_V4_4_10), new CloudDataSection(new Collection([ new CloudDataItem($bclSample0->sampleID, 'test', 'foo'), new CloudDataItem($bclSample1->sampleID, 'test', 'foo'), From 336f22362d516894f38ef3b112c6c8226d33814f Mon Sep 17 00:00:00 2001 From: Lisa Fischer Date: Mon, 12 Oct 2026 15:17:47 +0200 Subject: [PATCH 4/4] feat(illumina-sample-sheet): require BCL Convert version and pipeline from the caller MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The library no longer decides which BCL Convert version a sample sheet uses. BclConvertSettingsSection requires the software version and CloudSettingsSection requires the BCL Convert pipeline URN. BclConvertSoftwareVersion and CloudSettingsSection::BCL_CONVERT_PIPELINE are removed. Released as a minor version: nemo-api is the only consumer and adapts with the bump. 🤖 Generated with Claude Code --- .../V2/BclConvertSoftwareVersion.php | 22 ---------------- .../V2/Sections/BclConvertSettingsSection.php | 25 ++++--------------- .../V2/Sections/CloudSettingsSection.php | 4 +-- .../V2/BclConvertSettingsSectionTest.php | 17 ++----------- .../V2/IlluminaSampleSheetVersion2Test.php | 5 ++-- 5 files changed, 10 insertions(+), 63 deletions(-) delete mode 100644 src/IlluminaSampleSheet/V2/BclConvertSoftwareVersion.php diff --git a/src/IlluminaSampleSheet/V2/BclConvertSoftwareVersion.php b/src/IlluminaSampleSheet/V2/BclConvertSoftwareVersion.php deleted file mode 100644 index fa3c51a1..00000000 --- a/src/IlluminaSampleSheet/V2/BclConvertSoftwareVersion.php +++ /dev/null @@ -1,22 +0,0 @@ -value = $value; - } - - public static function V4_1_23(): self - { - return new self(self::V4_1_23); - } -} diff --git a/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php b/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php index c1043226..5e2d67c0 100644 --- a/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php +++ b/src/IlluminaSampleSheet/V2/Sections/BclConvertSettingsSection.php @@ -3,21 +3,17 @@ namespace MLL\Utils\IlluminaSampleSheet\V2\Sections; use Illuminate\Support\Collection; -use MLL\Utils\IlluminaSampleSheet\V2\BclConvertSoftwareVersion; use MLL\Utils\IlluminaSampleSheet\V2\Enums\FastQCompressionFormat; final class BclConvertSettingsSection extends SimpleKeyValueSection { use RequiresAnalysisLocationToBeSet; - private string $cloudSoftwareVersion; - - public function __construct(string $cloudSoftwareVersion = BclConvertSoftwareVersion::V4_1_23) + public function __construct(string $softwareVersion) { - $this->cloudSoftwareVersion = $cloudSoftwareVersion; - $fields = new Collection([ 'FastqCompressionFormat' => FastQCompressionFormat::GZIP, + 'SoftwareVersion' => $softwareVersion, ]); parent::__construct($fields); @@ -26,20 +22,9 @@ public function __construct(string $cloudSoftwareVersion = BclConvertSoftwareVer public function performAnalysisOn(AnalysisLocation $analysisLocation): void { $this->analysisLocation = $analysisLocation; - $analysisLocation->value === AnalysisLocation::LOCAL_MACHINE - ? $this->performAnalysisOnLocalMachine() - : $this->performAnalysisOnCloud(); - } - - private function performAnalysisOnCloud(): void - { - $this->keyValues['SoftwareVersion'] = $this->cloudSoftwareVersion; - } - - private function performAnalysisOnLocalMachine(): void - { - $this->keyValues['SoftwareVersion'] = BclConvertSoftwareVersion::V4_4_6; - $this->keyValues['GenerateFastqcMetrics'] = 'true'; + if ($analysisLocation->value === AnalysisLocation::LOCAL_MACHINE) { + $this->keyValues['GenerateFastqcMetrics'] = 'true'; + } } public function sectionName(): string diff --git a/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php b/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php index 27765ea8..252174a6 100644 --- a/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php +++ b/src/IlluminaSampleSheet/V2/Sections/CloudSettingsSection.php @@ -9,10 +9,8 @@ final class CloudSettingsSection extends SimpleKeyValueSection /** @var string */ public const GENERATED_VERSION = '2.6.0.202308300002'; public const CLOUD_WORKFLOW = 'ica_workflow_1'; - public const BCL_CONVERT_PIPELINE = 'urn:ilmn:ica:pipeline:d5c7e407-d439-48c8-bce5-b7aec225f6a7#BclConvert_v4_1_23_patch1'; - public const BCL_CONVERT_PIPELINE_V4_4_10 = 'urn:ilmn:ica:pipeline:4bdae602-abe4-4230-b0c6-f886af563b26#BclConvert_v4_4_10'; - public function __construct(string $bclConvertPipeline = self::BCL_CONVERT_PIPELINE) + public function __construct(string $bclConvertPipeline) { parent::__construct(new Collection([ 'GeneratedVersion' => self::GENERATED_VERSION, diff --git a/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php b/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php index 71739721..66e1f665 100644 --- a/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php +++ b/tests/IlluminaSampleSheet/V2/BclConvertSettingsSectionTest.php @@ -2,7 +2,6 @@ namespace MLL\Utils\Tests\IlluminaSampleSheet\V2; -use MLL\Utils\IlluminaSampleSheet\V2\BclConvertSoftwareVersion; use MLL\Utils\IlluminaSampleSheet\V2\Sections\AnalysisLocation; use MLL\Utils\IlluminaSampleSheet\V2\Sections\BclConvertSettingsSection; use PHPUnit\Framework\TestCase; @@ -11,19 +10,7 @@ final class BclConvertSettingsSectionTest extends TestCase { public function testToStringOnCloud(): void { - $bclConvertSettingsSection = new BclConvertSettingsSection(); - $bclConvertSettingsSection->performAnalysisOn(AnalysisLocation::CLOUD()); - $expected = <<<'CSV' -FastqCompressionFormat,gzip -SoftwareVersion,4.1.23 - -CSV; - self::assertSame($expected, $bclConvertSettingsSection->convertSectionToString()); - } - - public function testToStringOnCloudWithSoftwareVersion(): void - { - $bclConvertSettingsSection = new BclConvertSettingsSection(BclConvertSoftwareVersion::V4_4_10); + $bclConvertSettingsSection = new BclConvertSettingsSection('4.4.10'); $bclConvertSettingsSection->performAnalysisOn(AnalysisLocation::CLOUD()); $expected = <<<'CSV' FastqCompressionFormat,gzip @@ -35,7 +22,7 @@ public function testToStringOnCloudWithSoftwareVersion(): void public function testToStringLocal(): void { - $bclConvertSettingsSection = new BclConvertSettingsSection(); + $bclConvertSettingsSection = new BclConvertSettingsSection('4.4.6'); $bclConvertSettingsSection->performAnalysisOn(AnalysisLocation::LOCAL_MACHINE()); $expected = <<<'CSV' diff --git a/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php b/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php index 7e1e29d5..1bf058c8 100644 --- a/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php +++ b/tests/IlluminaSampleSheet/V2/IlluminaSampleSheetVersion2Test.php @@ -6,7 +6,6 @@ use MLL\Utils\Flowcells\NovaSeqX1_5B; use MLL\Utils\IlluminaSampleSheet\V2\BclConvert\BclSample; use MLL\Utils\IlluminaSampleSheet\V2\BclConvert\OverrideCycles; -use MLL\Utils\IlluminaSampleSheet\V2\BclConvertSoftwareVersion; use MLL\Utils\IlluminaSampleSheet\V2\IlluminaSampleSheetVersion2; use MLL\Utils\IlluminaSampleSheet\V2\IndexOrientation; use MLL\Utils\IlluminaSampleSheet\V2\InstrumentPlatform; @@ -92,7 +91,7 @@ public function testNovaSeqXCloudSampleSheetToStringReturnsExpectedResult(): voi null ); - $bclConvertSettingsSection = new BclConvertSettingsSection(BclConvertSoftwareVersion::V4_4_10); + $bclConvertSettingsSection = new BclConvertSettingsSection('4.4.10'); $bclConvertDataSection = new BclConvertDataSection($bclSampleList); @@ -103,7 +102,7 @@ public function testNovaSeqXCloudSampleSheetToStringReturnsExpectedResult(): voi $readsSection, $bclConvertSettingsSection, $bclConvertDataSection, - new CloudSettingsSection(CloudSettingsSection::BCL_CONVERT_PIPELINE_V4_4_10), + new CloudSettingsSection('urn:ilmn:ica:pipeline:4bdae602-abe4-4230-b0c6-f886af563b26#BclConvert_v4_4_10'), new CloudDataSection(new Collection([ new CloudDataItem($bclSample0->sampleID, 'test', 'foo'), new CloudDataItem($bclSample1->sampleID, 'test', 'foo'),