Compare commits

...
Author SHA1 Message Date
james.maesandCodex c2501cfc17 ci: centralize rc release completion in qqq orb
Co-Authored-By: Codex <noreply@openai.com>
2026-10-21 02:21:15 -05:00
james.maesandCodex 49f87072eb ci: publish GA artifacts only from stable tags (#13)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 01:09:12 -05:00
james.maesandCodex 703e16d849 ci: adopt shared orb 0.7.11 (#12)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 00:59:05 -05:00
james.maes c78ab8c6b7 Merge pull request #11 from QRun-IO/feature/central-ci
ci: adopt shared QQQ orb standard
2026-10-20 19:21:31 -05:00
james.maesandCodex a9adc28792 ci: adopt verified central QQQ orb 0.7.3
Co-Authored-By: Codex <noreply@openai.com>
2026-10-20 19:08:24 -05:00
james.maes d7720c0826 Merge pull request #8 from QRun-IO/ci/release-rc-secrets-inherit
ci(release-rc): pass secrets so the shared workflow can sign the RC tag
2026-10-16 08:20:20 -05:00
james.maesandClaude Opus 5.5 fe0c05520a Merge develop into ci/release-rc-secrets-inherit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 08:13:35 -05:00
james.maes 89e6f86e00 Merge pull request #10 from QRun-IO/feature/qqq-4-1-0-rc18
build: move to released QQQ 4.1.0-RC.18
2026-10-16 07:59:54 -05:00
james.maesandClaude Opus 5.5 524fc69f6e build: move to released QQQ 4.1.0-RC.18
The 0.40.0-SNAPSHOT qqq-bom-pom no longer resolves, which kept develop red.
Pin qqq-bom-pom to 4.1.0-RC.18 and adapt the table-based provider IT:
QInstance.setAuthentication is now withInstanceDefaultAuthentication, and
QQQ writes Instants as UTC wall-clock values, so the test table uses plain
TIMESTAMP columns (TIMESTAMP WITH TIME ZONE shifted expiry by the local
offset and broke the expired-session tests).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 07:40:57 -05:00
james.maesandClaude Opus 5.5 70e21edb8d ci(release-rc): pass secrets to the shared workflow so it can sign the RC tag
QRun-IO/.github#2 adds a tag-and-release job that signs vX with the
QRUN_TAG_SIGNING_KEY secret after Maven Central confirms the artifact.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:22:44 -05:00
5 changed files with 95 additions and 80 deletions

No files matched your search

+11 -61
View File
@@ -1,64 +1,14 @@
version: 2.1
setup: true
orbs:
qqq-orb: kingsrook/qqq-orb@0.6.0
commands:
configure-package-install:
steps:
- run:
name: Keep package installation unattended
command: |
# These build machines are discarded after the job; without this,
# needrestart blocks apt in "Install Java" until the 10m no-output timeout.
sudo install -d /etc/needrestart/conf.d
printf '%s\n' '$nrconf{restart} = "l";' | sudo tee /etc/needrestart/conf.d/99-qqq-ci.conf >/dev/null
qqq-orb: kingsrook/qqq-orb@0.7.11
workflows:
test_only:
jobs:
- qqq-orb/mvn_test_only:
pre-steps:
- configure-package-install
context: [qqq-maven-registry-credentials]
filters:
branches:
ignore: /(develop|main|release\/.*|integration.*)/
tags:
only: []
publish_snapshot:
jobs:
- qqq-orb/mvn_publish:
pre-steps:
- configure-package-install
context: [qqq-maven-registry-credentials]
branch_type: snapshot
filters:
branches:
only: [develop]
publish_release_candidate:
jobs:
- qqq-orb/mvn_publish:
pre-steps:
- configure-package-install
context: [qqq-maven-registry-credentials]
branch_type: release_candidate
filters:
branches:
only: [/release\/.*/]
publish_release:
jobs:
- qqq-orb/mvn_publish:
pre-steps:
- configure-package-install
context: [qqq-maven-registry-credentials]
branch_type: release
filters:
branches:
only: [main]
tags:
only: [/^v\d+\.\d+\.\d+$/]
setup:
jobs:
- qqq-orb/generate_pipeline:
orb_version: 0.7.11
filters:
branches:
ignore: automation/qbit-rc-pending
tags:
only: /^v\d+\.\d+\.\d+$/
+62 -13
View File
@@ -1,25 +1,74 @@
# Cut the next release candidate (QRun-IO/qqq docs/QRUN-QBIT-REPO-STANDARD.md, C6):
# run this workflow by hand, or merge a develop PR labelled `release:rc`. It merges develop into
# the release line and the release/* push runs CircleCI publish_release_candidate.
name: Release candidate
on:
'on':
workflow_dispatch:
inputs:
dry_run:
description: Print the plan without merging or creating branches
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 Circle publisher build number (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]
types:
- closed
branches:
- develop
repository_dispatch:
types:
- qbit-rc-published
permissions:
contents: write
actions: read
checks: read
jobs:
release-rc:
if: github.event_name == 'workflow_dispatch' || (github.event.pull_request.merged == true && contains(github.event.pull_request.labels.*.name, 'release:rc'))
uses: QRun-IO/.github/.github/workflows/qbit-release-rc.yml@main
if: github.event_name == 'workflow_dispatch' || github.event_name == 'repository_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: QRun-IO/qqq-orb/.github/workflows/qbit-release-rc.yml@7d73ac90b6b5a6acb61b4d3fa56625c5b6dcc652
with:
dry_run: ${{ github.event_name == 'workflow_dispatch' && inputs.dry_run }}
dry_run: ${{ github.event_name == 'workflow_dispatch' && inputs.dry_run || false
}}
finalize: ${{ github.event_name == 'repository_dispatch' || (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: ${{ github.event_name == 'repository_dispatch' && github.event.client_payload.merge_sha
|| inputs.merge_sha || '' }}
bump_sha: ${{ github.event_name == 'repository_dispatch' && github.event.client_payload.bump_sha
|| inputs.bump_sha || '' }}
branch: ${{ github.event_name == 'repository_dispatch' && github.event.client_payload.branch
|| inputs.branch || '' }}
version: ${{ github.event_name == 'repository_dispatch' && github.event.client_payload.version
|| inputs.version || '' }}
secrets: inherit
+16
View File
@@ -0,0 +1,16 @@
profile: qbit
orb_version: 0.7.11
default_branch: develop
java_version: '21'
browsers: true
api_checks: false
docs_only: false
release_on_main: false
release_tag_policy: stable
test_branch_policy: non-release
publish:
snapshot: true
release_candidate: true
release: true
asciidoc: false
release_completion: true
+1 -1
View File
@@ -78,7 +78,7 @@
<dependency>
<groupId>com.kingsrook.qqq</groupId>
<artifactId>qqq-bom-pom</artifactId>
<version>0.40.0-SNAPSHOT</version>
<version>4.1.0-RC.18</version>
<type>pom</type>
<scope>import</scope>
</dependency>
@@ -79,7 +79,7 @@ class TableBasedSessionStoreProviderIT
/////////////////////////////////////////////////////////////////////////
// Add authentication (required for QInstance validation) //
/////////////////////////////////////////////////////////////////////////
qInstance.setAuthentication(new QAuthenticationMetaData()
qInstance.withInstanceDefaultAuthentication(new QAuthenticationMetaData()
.withName("mock")
.withType(QAuthenticationType.FULLY_ANONYMOUS));
@@ -102,7 +102,7 @@ class TableBasedSessionStoreProviderIT
/////////////////////////////////////////////////////////////////////////
// Create the database table //
// Note: RDBMS module uses camelCase names directly with backticks //
// Use TIMESTAMP WITH TIME ZONE to preserve Instant timezone info //
// Use plain TIMESTAMP: QQQ stores Instants as UTC //
/////////////////////////////////////////////////////////////////////////
try(Connection conn = ConnectionManager.getConnection(backend))
{
@@ -113,9 +113,9 @@ class TableBasedSessionStoreProviderIT
`sessionUuid` VARCHAR(36) NOT NULL UNIQUE,
`userId` VARCHAR(255),
`sessionData` TEXT,
`expiresAt` TIMESTAMP WITH TIME ZONE NOT NULL,
`createDate` TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
`modifyDate` TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
`expiresAt` TIMESTAMP NOT NULL,
`createDate` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`modifyDate` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""");
}