From 99d70d3fc9ea9dd233ec198a5ee488223f5e77e0 Mon Sep 17 00:00:00 2001 From: James Maes Date: Thu, 5 Nov 2026 12:30:47 -0600 Subject: [PATCH 1/7] ci: use shared ci-workflows Maven workflow Replace the platform-ci release caller and .ci.yaml with one caller of KofTwentyTwo/ci-workflows maven.yaml (qqq-orb port): verify on every push, publish from develop and release/* with a version bump commit. Co-Authored-By: Claude Opus 5.5 --- .ci.yaml | 55 ------------------------------ .gitea/workflows/ci.yaml | 7 ++++ .gitea/workflows/qrun-release.yaml | 24 ------------- 3 files changed, 7 insertions(+), 79 deletions(-) delete mode 100644 .ci.yaml create mode 100644 .gitea/workflows/ci.yaml delete mode 100644 .gitea/workflows/qrun-release.yaml diff --git a/.ci.yaml b/.ci.yaml deleted file mode 100644 index 1776bb8..0000000 --- a/.ci.yaml +++ /dev/null @@ -1,55 +0,0 @@ -schema: 1 - -scoped_delegation: true - -verification: - push: - branches: [main, master, dev, rc, "release/**", "hotfix/**", "qualification/**"] - -components: - library: - directory: . - platforms: [linux-amd64] - toolchains: - java: "21" - build: - tool: maven - # Shared verification uses the release version property so unchanged tested outputs can be reused. - commands: - - ["--batch-mode", "--update-snapshots", "-T4", "--no-transfer-progress", "verify"] - - ["--batch-mode", "--no-transfer-progress", "org.codehaus.mojo:flatten-maven-plugin:1.7.3:flatten", "-Dflatten.mode=resolveCiFriendliesOnly", "-DupdatePomFile=true"] - reports: - junit: "**/target/surefire-reports/*.xml" - artifacts: - packages: - format: maven - # Retain the generated consumer POM alongside the tested JAR; both are required for publication. - paths: [".flattened-pom.xml", "target/*.jar"] - -release: - channels: - snapshot: - trigger: - push_branches: [develop] - versioning: maven-snapshot - effective_version: - rule: develop-next-minor - central_completion: true - version_write_back: {} - # Release candidates: a push to release/X.Y derives X.Y.0-RC.n with the existing rc-from-branch rule (the first RC of a branch that declares - # X.Y.Z-SNAPSHOT is RC.1); maven-release refuses a SNAPSHOT effective version. Published to the same destination as the snapshot, with the same - # Central completion and source write-back policy. - release-candidate: - trigger: - push_branches: ["release/*"] - versioning: maven-release - effective_version: - rule: rc-from-branch - central_completion: true - version_write_back: {} - publications: - qbit-sftp-packages: - component: library - artifact: packages - destination: qrun-maven - channels: [snapshot, release-candidate] diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..df1b6fd --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -0,0 +1,7 @@ +name: ci +on: + push: +jobs: + maven: + uses: self:KofTwentyTwo/ci-workflows/.gitea/workflows/maven.yaml@main + secrets: inherit diff --git a/.gitea/workflows/qrun-release.yaml b/.gitea/workflows/qrun-release.yaml deleted file mode 100644 index 39860ec..0000000 --- a/.gitea/workflows/qrun-release.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Standard QRun release caller (v2, thin contract): every push and manual dispatch delegates to the protected qrun-release-v1 channel. Do not edit per repository. -name: qrun-release -on: - push: {} - workflow_dispatch: {} -permissions: - contents: read - actions: read -jobs: - release: - # Develop and release candidates use the repository-owned shared pipeline configuration. - if: ${{ github.ref != 'refs/heads/develop' && !startsWith(github.ref, 'refs/heads/release/') }} - uses: self:KofTwentyTwo/platform-ci/.gitea/workflows/java-maven.yaml@qrun-release-v1 - with: - runner: linux-small - postpublish: - if: ${{ needs.release.outputs.capture == 'true' }} - needs: release - permissions: - contents: write - actions: write - uses: self:KofTwentyTwo/platform-ci/.gitea/workflows/qrun-source-version.yaml@qrun-release-v1 - with: - runner: linux-small -- 2.54.0 From 5fe1334cd254e133d4d60092eabbddeee4cbfc3d Mon Sep 17 00:00:00 2001 From: James Maes Date: Thu, 5 Nov 2026 12:48:56 -0600 Subject: [PATCH 2/7] ci: name caller build.yaml; drop publisher-bound RC flow Co-Authored-By: Claude Opus 5.5 --- .gitea/workflows/{ci.yaml => build.yaml} | 2 +- .gitea/workflows/release-rc.yaml | 72 ------------------------ 2 files changed, 1 insertion(+), 73 deletions(-) rename .gitea/workflows/{ci.yaml => build.yaml} (91%) delete mode 100644 .gitea/workflows/release-rc.yaml diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/build.yaml similarity index 91% rename from .gitea/workflows/ci.yaml rename to .gitea/workflows/build.yaml index df1b6fd..ed42608 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/build.yaml @@ -1,4 +1,4 @@ -name: ci +name: build on: push: jobs: diff --git a/.gitea/workflows/release-rc.yaml b/.gitea/workflows/release-rc.yaml deleted file mode 100644 index 12ec9fc..0000000 --- a/.gitea/workflows/release-rc.yaml +++ /dev/null @@ -1,72 +0,0 @@ -name: Release candidate -'on': - workflow_dispatch: - inputs: - dry_run: - description: Plan a cut without changing release state - type: boolean - default: false - finalize: - description: Retry finalization of an existing cut; do not cut another RC - type: boolean - default: false - recover: - description: Recover the same published RC after a deployment timeout; never - reupload - type: boolean - default: false - circle_build: - description: Original release run id (recovery only) - type: string - default: '' - merge_sha: - description: Existing cut merge_sha (finalize retry only) - type: string - default: '' - bump_sha: - description: Existing cut bump_sha (finalize retry only) - type: string - default: '' - branch: - description: Existing cut branch (finalize retry only) - type: string - default: '' - version: - description: Existing cut version (finalize retry only) - type: string - default: '' - pull_request: - types: - - closed - branches: - - develop -permissions: - contents: read -jobs: - release-rc: - # The old qbit-rc-published repository_dispatch is replaced by the already-proven workflow_dispatch - # completion: the publisher's own ActionsWRITE job dispatches this workflow with finalize=true plus - # merge_sha/bump_sha/branch/version (same inputs as the manual finalize retry). - permissions: - contents: write - actions: read - pull-requests: write - if: github.event_name == 'workflow_dispatch' - || (github.event_name == 'pull_request' && github.event.pull_request.merged - == true && github.event.pull_request.base.ref == 'develop' && contains(github.event.pull_request.labels.*.name, - 'release:rc')) - uses: self:KofTwentyTwo/platform-ci/.gitea/workflows/qbit-release-rc.yaml@qrun-release-v1 - with: - dry_run: ${{ github.event_name == 'workflow_dispatch' && inputs.dry_run || false - }} - finalize: ${{ github.event_name == 'workflow_dispatch' && inputs.finalize }} - recover: ${{ github.event_name == 'workflow_dispatch' && inputs.recover || false - }} - circle_build: ${{ github.event_name == 'workflow_dispatch' && inputs.circle_build - || '' }} - merge_sha: ${{ inputs.merge_sha || '' }} - bump_sha: ${{ inputs.bump_sha || '' }} - branch: ${{ inputs.branch || '' }} - version: ${{ inputs.version || '' }} - secrets: - QRUN_TAG_SIGNING_KEY: ${{ secrets.QRUN_TAG_SIGNING_KEY }} -- 2.54.0 From 0809155f2686c875d723aad5ad75a7991fc3f7cc Mon Sep 17 00:00:00 2001 From: James Maes Date: Thu, 5 Nov 2026 15:59:12 -0600 Subject: [PATCH 3/7] ci: trigger shared workflow run Co-Authored-By: Claude Opus 5.5 -- 2.54.0 From af162ed066e87fc9c54471431e1578308a6a3cb1 Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 6 Nov 2026 17:19:57 -0600 Subject: [PATCH 4/7] build: pin QQQ BOM to 4.1.0-RC.22, drop Central snapshot profile, update status Co-Authored-By: Claude Sonnet 5.5 --- README.md | 2 +- pom.xml | 42 ++++++++---------------------------------- 2 files changed, 9 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 0a40d9a..37ccb3a 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ new QSftpImportMetaData() ## Project Status -Stable and production-ready. +Release candidate. Builds against QQQ `4.1.0-RC.22`; release candidates (`0.5.0-RC.N`) are published to the Gitea Maven registry at `https://git.kof22.com/api/packages/QRun-IO/maven`. ### Roadmap diff --git a/pom.xml b/pom.xml index 56e2b3d..1199f38 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ 0.5.0-SNAPSHOT + 4.1.0-RC.22 @@ -70,6 +71,13 @@ + + com.kingsrook.qqq + qqq-bom-pom + ${qqq.version} + pom + import + org.junit junit-bom @@ -102,39 +110,5 @@ - - - - - - qqq-snapshot - - 4.1.0-SNAPSHOT - - - - - com.kingsrook.qqq - qqq-bom-pom - ${qqq.snapshot.version} - pom - import - - - - - - sonatype-snapshots - https://central.sonatype.com/repository/maven-snapshots/ - - false - - - true - - - - - -- 2.54.0 From 5e8dfdf60e47bbd2e80e94ff9fa5a9d6c6e895f6 Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 6 Nov 2026 17:36:18 -0600 Subject: [PATCH 5/7] build: align JUnit BOM with QQQ line (6.0.2) Co-Authored-By: Claude Sonnet 5.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1199f38..dd5069d 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ org.junit junit-bom - 5.10.0 + 6.0.2 pom import -- 2.54.0 From aa085b5a5ca1fd8f72ffc2139d56f8763089fd4d Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 6 Nov 2026 17:41:39 -0600 Subject: [PATCH 6/7] test: give reportStorage table filesystem backend details (required by QQQ 4.1.0-RC.22 validator) Co-Authored-By: Claude Sonnet 5.5 --- .../qbits/sftpdataintegration/BaseTest.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/kingsrook/qbits/sftpdataintegration/BaseTest.java b/src/test/java/com/kingsrook/qbits/sftpdataintegration/BaseTest.java index cf05200..5cb1958 100644 --- a/src/test/java/com/kingsrook/qbits/sftpdataintegration/BaseTest.java +++ b/src/test/java/com/kingsrook/qbits/sftpdataintegration/BaseTest.java @@ -43,7 +43,10 @@ import com.kingsrook.qqq.backend.core.model.session.QSession; import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryBackendModule; import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryRecordStore; import com.kingsrook.qqq.backend.core.processes.tracing.LoggingProcessTracer; +import com.kingsrook.qqq.backend.module.filesystem.base.model.metadata.Cardinality; +import com.kingsrook.qqq.backend.module.filesystem.base.model.metadata.RecordFormat; import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.FilesystemBackendMetaData; +import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.FilesystemTableBackendDetails; import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.BeforeEach; @@ -110,7 +113,17 @@ public class BaseTest ///////////////////////////////////// new SavedBulkLoadProfileMetaDataProvider().defineAll(qInstance, MEMORY_BACKEND_NAME, null); qInstance.addPossibleValueSource(TablesPossibleValueSourceMetaDataProvider.defineTablesPossibleValueSource(qInstance)); - new SavedReportsMetaDataProvider().defineAll(qInstance, MEMORY_BACKEND_NAME, DESTINATION_FILESYSTEM_BACKEND_NAME, null); + new SavedReportsMetaDataProvider().defineAll(qInstance, MEMORY_BACKEND_NAME, DESTINATION_FILESYSTEM_BACKEND_NAME, table -> + { + FilesystemTableBackendDetails details = new FilesystemTableBackendDetails(); + details.withCardinality(Cardinality.ONE); + details.withRecordFormat(RecordFormat.JSON); + details.withBasePath("reports"); + details.withGlob("*"); + details.withContentsFieldName("contents"); + details.withFileNameFieldName("reference"); + table.setBackendDetails(details); + }); //////////////////////// // configure the qbit // -- 2.54.0 From 7f306422a6de309d0b1f4421d253814089687c1e Mon Sep 17 00:00:00 2001 From: James Maes Date: Fri, 6 Nov 2026 17:43:31 -0600 Subject: [PATCH 7/7] test: apply reportStorage backend details only to reportStorage table Co-Authored-By: Claude Sonnet 5.5 --- .../com/kingsrook/qbits/sftpdataintegration/BaseTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/kingsrook/qbits/sftpdataintegration/BaseTest.java b/src/test/java/com/kingsrook/qbits/sftpdataintegration/BaseTest.java index 5cb1958..c9369a7 100644 --- a/src/test/java/com/kingsrook/qbits/sftpdataintegration/BaseTest.java +++ b/src/test/java/com/kingsrook/qbits/sftpdataintegration/BaseTest.java @@ -44,7 +44,6 @@ import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.Mem import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryRecordStore; import com.kingsrook.qqq.backend.core.processes.tracing.LoggingProcessTracer; import com.kingsrook.qqq.backend.module.filesystem.base.model.metadata.Cardinality; -import com.kingsrook.qqq.backend.module.filesystem.base.model.metadata.RecordFormat; import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.FilesystemBackendMetaData; import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.FilesystemTableBackendDetails; import org.apache.commons.io.FileUtils; @@ -115,9 +114,13 @@ public class BaseTest qInstance.addPossibleValueSource(TablesPossibleValueSourceMetaDataProvider.defineTablesPossibleValueSource(qInstance)); new SavedReportsMetaDataProvider().defineAll(qInstance, MEMORY_BACKEND_NAME, DESTINATION_FILESYSTEM_BACKEND_NAME, table -> { + if(!SavedReportsMetaDataProvider.REPORT_STORAGE_TABLE_NAME.equals(table.getName())) + { + return; + } + FilesystemTableBackendDetails details = new FilesystemTableBackendDetails(); details.withCardinality(Cardinality.ONE); - details.withRecordFormat(RecordFormat.JSON); details.withBasePath("reports"); details.withGlob("*"); details.withContentsFieldName("contents"); -- 2.54.0