Compare commits

..
Author SHA1 Message Date
james.maesandCodex 8535437fdd ci: centralize release branch verification and workflows (#19)
Co-authored-by: Codex <noreply@openai.com>
2026-10-21 13:37:03 -05:00
CircleCI 75443a7465 Bump version to 1.4.1 [skip ci] 2025-09-29 13:28:49 +00:00
9 changed files with 383 additions and 180 deletions

No files matched your search

+10 -53
View File
@@ -1,57 +1,14 @@
version: 2.1
setup: true
orbs:
qqq-orb: kingsrook/qqq-orb@0.5.0
qqq-orb: kingsrook/qqq-orb@0.7.16
workflows:
test_only:
setup:
jobs:
- qqq-orb/mvn_test_only:
context: [ qqq-maven-registry-credentials ]
filters:
branches:
ignore: /(develop|main|release/.*|hotfix/.*|integration.*)/
tags:
only: []
publish_snapshot:
jobs:
- qqq-orb/mvn_publish:
context: [ qqq-maven-registry-credentials ]
branch_type: snapshot
filters:
branches:
only:
- develop
publish_release_candidate:
jobs:
- qqq-orb/mvn_publish:
context: [ qqq-maven-registry-credentials ]
branch_type: release_candidate
filters:
branches:
only:
- /release\/.*/
publish_release:
jobs:
- qqq-orb/mvn_publish:
context: [ qqq-maven-registry-credentials ]
branch_type: release
filters:
branches:
ignore: /.*/
tags:
only: [ /v.*/ ]
publish_hotfix_release:
jobs:
- qqq-orb/mvn_publish:
context: [ qqq-maven-registry-credentials ]
branch_type: hotfix
filters:
branches:
only:
- /hotfix\/.*/
- qqq-orb/generate_pipeline:
orb_version: 0.7.16
filters:
branches:
ignore: automation/qbit-rc-pending
tags:
only: /v.*/
-31
View File
@@ -1,31 +0,0 @@
# GitHub Release Configuration
# Auto-generates release notes from PR labels
changelog:
exclude:
labels:
- ignore-for-release
- duplicate
- invalid
authors:
- dependabot
- dependabot[bot]
categories:
- title: Breaking Changes
labels:
- breaking-change
- breaking
- title: New Features
labels:
- enhancement
- feature
- title: Bug Fixes
labels:
- bug
- fix
- title: Dependencies
labels:
- dependencies
- title: Other Changes
labels:
- "*"
+23
View File
@@ -0,0 +1,23 @@
name: CodeQL
'on':
push:
branches:
- main
- develop
- release/**
- hotfix/**
pull_request: {}
schedule:
- cron: 41 16 * * 0
workflow_dispatch: {}
permissions:
contents: read
actions: read
security-events: write
packages: read
concurrency:
group: codeql-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
analyze:
uses: QRun-IO/qqq-orb/.github/workflows/qbit-codeql.yml@c288a8864fe9054f68410e1d78f5863aea4c4d22
+74
View File
@@ -0,0 +1,74 @@
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 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
repository_dispatch:
types:
- qbit-rc-published
permissions:
contents: write
actions: read
checks: read
jobs:
release-rc:
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@cc30f599e63c8e41629c99d23395bac1adb8bc44
with:
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.16
default_branch: main
java_version: '21'
browsers: true
api_checks: false
docs_only: false
release_on_main: false
release_tag_policy: v-prefix
test_branch_policy: feature-no-hotfix
publish:
snapshot: true
release_candidate: true
release: true
hotfix: true
asciidoc: false
+3 -5
View File
@@ -7,13 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [1.5.0] - 2025-12-28
### Added
- TBD
### Changed
- Migrated to Java 21 LTS (from Java 17)
- Updated qqq-bom-pom dependency to 0.35.0 (from 0.27.9)
- Updated JUnit BOM to 5.12.1 (for JUnit Jupiter 6.0.1 support)
- Updated qqq-orb to 0.5.0 (from 0.3.7)
- TBD
## [1.0.0]
+2 -21
View File
@@ -1,22 +1,3 @@
QQQ - Low-code Application Framework for Engineers
Copyright (C) 2021-2025 QRun-IO, LLC
https://www.qrun.io | https://github.com/QRun-IO
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
--------------------------------------------------------------------------------
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
@@ -652,8 +633,8 @@ the "copyright" line and a pointer to where the full notice is found.
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
+251 -66
View File
@@ -1,94 +1,279 @@
# qbit-bom
# QBit Build Parent POM
Maven Bill of Materials for QBit dependencies.
[![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)](https://github.com/Kingsrook/qbit-bom)
[![License](https://img.shields.io/badge/license-GNU%20Affero%20GPL%20v3-green.svg)](https://www.gnu.org/licenses/agpl-3.0.en.html)
[![Java](https://img.shields.io/badge/java-17+-blue.svg)](https://adoptium.net/)
**For:** QQQ developers managing multiple QBit dependencies
**Status:** Stable
> **Parent POM for QRunIO QBit Projects - Central Build Configuration**
## Why This Exists
This repository contains the **parent POM** that provides centralized build configuration, dependency management, and CI/CD settings for all QRunIO QBit projects.
QBits have interdependencies and version requirements. Managing compatible versions across qbit-user-role-permissions, qbit-workflows, qbit-webhooks, and others becomes tedious. Version mismatches cause runtime errors.
## 🚀 Overview
This BOM (Bill of Materials) declares compatible versions for all QBits. Import it once and omit version numbers from individual QBit dependencies.
QBit Build Parent POM is a **Maven parent POM** that standardizes the build process, dependency versions, and publishing configuration across all QBit projects in the QQQ ecosystem. It ensures consistency and reduces duplication across QBit repositories.
## Features
### What This Repository Contains
- **Version Management** - Single source of truth for QBit versions
- **Compatibility Guarantee** - All declared versions tested together
- **Simplified POMs** - No version numbers on individual dependencies
- **Transitive Alignment** - Consistent versions for shared dependencies
- **Build Configuration**: Standardized Maven plugin versions and configurations
- **Dependency Management**: Centralized BOM imports (QQQ, JUnit, etc.)
- **Publishing Settings**: Maven Central publishing configuration
- **Release Profile**: GPG signing and artifact publishing setup
- **Java Configuration**: Standardized Java 17+ settings
## Quick Start
### What This Repository Does NOT Contain
### Import the BOM
- **QBit Source Code**: Individual QBit implementations
- **QQQ Core Framework**: The main QQQ framework code
- **Application Logic**: Business logic or application-specific code
- **Runtime Dependencies**: Libraries used at runtime
Add to your `pom.xml` in the `<dependencyManagement>` section:
## 🏗️ Architecture
### Technology Stack
- **Java**: Java 17+ with UTF-8 encoding
- **Maven**: Build system with plugin management
- **GPG**: Artifact signing for Maven Central
- **Sonatype Central**: Publishing to Maven Central
### Core Dependencies Managed
- **QQQ BOM**: `com.kingsrook.qqq:qqq-bom-pom:0.27.9`
- **JUnit BOM**: `org.junit:junit-bom:5.10.0`
- **Maven Plugins**: Compiler, Source, Javadoc, GPG, Central Publishing
## 📁 Project Structure
```
qbit-bom/
├── pom.xml # Parent POM configuration
├── README.md # This documentation
├── CHANGELOG.md # Version history
├── LICENSE # GNU Affero GPL v3
├── CODE_OF_CONDUCT.md # Community guidelines
├── CONTRIBUTING.md # Contribution guidelines
├── SECURITY.md # Security policy
└── CODE_STYLE.md # Coding standards
```
## 🎯 Parent POM Functionality
### What This Parent POM Provides
- **Plugin Management**: Standardized Maven plugin versions
- **Dependency Management**: Centralized BOM imports
- **Build Profiles**: Release profile for Maven Central publishing
- **Java Configuration**: Consistent Java 17+ settings
- **Publishing Setup**: GPG signing and artifact publishing
- **Encoding Standards**: UTF-8 for source and reporting
### What This Parent POM Does NOT Do
- **Provide Runtime Dependencies**: Only manages build-time dependencies
- **Include Source Code**: No Java source files
- **Define Business Logic**: No application-specific code
- **Handle Deployment**: Only handles artifact publishing
## 🚀 Getting Started
### Prerequisites
- **Java 17+** (required for QQQ features)
- **Maven 3.8+** (for build system)
- **GPG Key** (for signing artifacts in release profile)
### Using This Parent POM
Add this parent POM to your QBit project's `pom.xml`:
```xml
<dependencyManagement>
<parent>
<groupId>com.kingsrook</groupId>
<artifactId>qbit-build-parent</artifactId>
<version>1.0.0</version>
<relativePath/>
</parent>
```
### Example QBit Project Structure
```xml
<project>
<parent>
<groupId>com.kingsrook</groupId>
<artifactId>qbit-build-parent</artifactId>
<version>1.0.0</version>
<relativePath/>
</parent>
<groupId>com.kingsrook.qbits</groupId>
<artifactId>qbit-your-component</artifactId>
<version>${revision}</version>
<properties>
<revision>0.1.0-SNAPSHOT</revision>
</properties>
<dependencies>
<dependency>
<groupId>io.qrun</groupId>
<artifactId>qbit-bom</artifactId>
<version>1.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Your QBit dependencies here -->
</dependencies>
</dependencyManagement>
</project>
```
### Add QBits Without Versions
## 📖 Detailed Documentation
```xml
<dependencies>
<dependency>
<groupId>io.qrun</groupId>
<artifactId>qbit-user-role-permissions</artifactId>
<!-- version managed by BOM -->
</dependency>
<dependency>
<groupId>io.qrun</groupId>
<artifactId>qbit-workflows</artifactId>
</dependency>
<dependency>
<groupId>io.qrun</groupId>
<artifactId>qbit-webhooks</artifactId>
</dependency>
</dependencies>
For comprehensive development information, see:
- **[QQQ Wiki](https://github.com/Kingsrook/qqq.wiki)** - Complete QQQ framework documentation
- **[QBit Development](https://github.com/Kingsrook/qqq.wiki/QBit-Development)** - QBit development guide
## 🔧 Configuration
### Build Configuration
This parent POM provides:
- **Java 17+**: Source and target Java version
- **UTF-8 Encoding**: Source and reporting encoding
- **Plugin Management**: Standardized plugin versions
- **Release Profile**: Maven Central publishing setup
### Publishing Configuration
The release profile includes:
- **Source JAR**: Automatic source artifact generation
- **Javadoc JAR**: Documentation artifact generation
- **GPG Signing**: Artifact signing for Maven Central
- **Central Publishing**: Direct publishing to Maven Central
## 🧪 Testing
### Running Tests
```bash
# Run all tests
mvn test
# Run tests with coverage
mvn test jacoco:report
# Run specific test class
mvn test -Dtest=YourTestClass
```
## Included QBits
### Test Configuration
| QBit | Current Version |
|------|-----------------|
| qbit-user-role-permissions | 0.3.0 |
| qbit-workflows | 0.2.0 |
| qbit-webhooks | 0.2.0 |
| qbit-sftp-data-integration | 0.2.0 |
| qbit-standard-process-trace | 0.1.0 |
| qbit-customizable-table-views | 0.2.0 |
- **JUnit 5**: Managed via JUnit BOM
- **AssertJ**: Available for fluent assertions
- **H2 Database**: Available for testing
## Compatibility
## 📦 Building for Production
| BOM Version | QQQ Core Version | Java |
|-------------|------------------|------|
| 1.5.x | 0.35.0+ | 21 |
| 1.4.x | 0.27.0 - 0.34.x | 17 |
| 0.3.x | 0.25.0 - 0.26.x | 17 |
| 0.2.x | 0.22.0 - 0.24.x | 17 |
| 0.1.x | 0.20.0 - 0.21.x | 17 |
### Development Build
## Project Status
```bash
mvn clean install
```
Stable. Updated with each QBit release.
### Release Build
## Contributing
```bash
mvn clean deploy -Prelease
```
1. Fork the repository
2. Update versions in `pom.xml`
3. Submit a pull request
The release profile:
- Generates source and javadoc JARs
- Signs artifacts with GPG
- Publishes to Maven Central
## License
## 🔐 Security Considerations
Proprietary - QRun.IO
### Artifact Signing
- **GPG Signing**: All release artifacts are signed
- **Maven Central**: Signed artifacts published to Maven Central
- **Key Management**: GPG key configuration required
### Best Practices
- **Dependency Management**: Use BOMs for version consistency
- **Plugin Versions**: Keep plugin versions up to date
- **Security Updates**: Regularly update dependency versions
## 🤝 Contributing
**Important**: This repository is a component of the QQQ framework. All contributions, issues, and discussions should go through the main QQQ repository.
### Development Workflow
1. **Fork the main QQQ repository**: https://github.com/Kingsrook/qqq
2. **Create a feature branch**: `git checkout -b feature/amazing-feature`
3. **Make your changes** (including parent POM changes if applicable)
4. **Run tests**: `mvn test`
5. **Commit your changes**: `git commit -m 'Add amazing feature'`
6. **Push to the branch**: `git push origin feature/amazing-feature`
7. **Open a Pull Request** to the main QQQ repository
### Code Standards
- **Maven**: Follow Maven best practices
- **Documentation**: Update relevant documentation
- **Versioning**: Follow semantic versioning
## 📄 License
This project is licensed under the GNU Affero General Public License v3.0 - see the [LICENSE](LICENSE) file for details.
```
QBit Build Parent POM
Copyright (C) 2021-2024 Kingsrook, LLC
651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
contact@kingsrook.com | https://github.com/Kingsrook/
```
**Note**: This is a component of the QQQ framework. For the complete license and more information, see the main QQQ repository: https://github.com/Kingsrook/qqq
## 🆘 Support & Community
### ⚠️ Important: Use Main QQQ Repository
**All support, issues, discussions, and community interactions should go through the main QQQ repository:**
- **Main Repository**: https://github.com/Kingsrook/qqq
- **Issues**: https://github.com/Kingsrook/qqq/issues
- **Discussions**: https://github.com/Kingsrook/qqq/discussions
- **Wiki**: https://github.com/Kingsrook/qqq.wiki
### Why This Repository Exists
This repository is maintained separately from the main QQQ repository to:
- **Enable independent parent POM development** and versioning
- **Allow QBit-specific CI/CD** and deployment pipelines
- **Provide clear separation** between build configuration and core framework concerns
- **Support different release cycles** for parent POM vs. core framework
### Getting Help
- **Documentation**: Check the [QQQ Wiki](https://github.com/Kingsrook/qqq.wiki)
- **Issues**: Report bugs and feature requests on [Main QQQ Issues](https://github.com/Kingsrook/qqq/issues)
- **Discussions**: Join community discussions on [Main QQQ Discussions](https://github.com/Kingsrook/qqq/discussions)
- **Questions**: Ask questions in the main QQQ repository
### Contact Information
- **Company**: Kingsrook, LLC
- **Email**: contact@kingsrook.com
- **Website**: https://kingsrook.com
- **Main GitHub**: https://github.com/Kingsrook/qqq
## 🙏 Acknowledgments
- **QQQ Framework Team**: For the underlying low-code platform
- **Maven Community**: For the robust build system
- **Open Source Community**: For the tools and libraries that make this possible
---
**Built with ❤️ by the Kingsrook Team**
**This is a parent POM component of the QQQ framework. For complete information, support, and community, visit: https://github.com/Kingsrook/qqq**
+4 -4
View File
@@ -37,12 +37,12 @@
</developers>
<properties>
<java.version>21</java.version>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- use revision property in children -->
<revision>1.5.0-SNAPSHOT</revision>
<revision>1.4.1</revision>
</properties>
<!-- Common dependency BOMs -->
@@ -52,7 +52,7 @@
<dependency>
<groupId>com.kingsrook.qqq</groupId>
<artifactId>qqq-bom-pom</artifactId>
<version>0.35.0</version>
<version>0.27.9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
@@ -60,7 +60,7 @@
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.12.1</version>
<version>5.10.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>