Compare commits

..
9 changed files with 180 additions and 383 deletions

No files matched your search

+53 -10
View File
@@ -1,14 +1,57 @@
version: 2.1
setup: true
orbs:
qqq-orb: kingsrook/qqq-orb@0.7.16
qqq-orb: kingsrook/qqq-orb@0.5.0
workflows:
setup:
test_only:
jobs:
- qqq-orb/generate_pipeline:
orb_version: 0.7.16
filters:
branches:
ignore: automation/qbit-rc-pending
tags:
only: /v.*/
- 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\/.*/
+31
View File
@@ -0,0 +1,31 @@
# 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
@@ -1,23 +0,0 @@
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
@@ -1,74 +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 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
@@ -1,16 +0,0 @@
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
+5 -3
View File
@@ -7,11 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
- TBD
## [1.5.0] - 2025-12-28
### Changed
- TBD
- 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)
## [1.0.0]
+21 -2
View File
@@ -1,3 +1,22 @@
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
@@ -633,8 +652,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,
+66 -251
View File
@@ -1,279 +1,94 @@
# QBit Build Parent POM
# qbit-bom
[![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/)
Maven Bill of Materials for QBit dependencies.
> **Parent POM for QRunIO QBit Projects - Central Build Configuration**
**For:** QQQ developers managing multiple QBit dependencies
**Status:** Stable
This repository contains the **parent POM** that provides centralized build configuration, dependency management, and CI/CD settings for all QRunIO QBit projects.
## Why This Exists
## 🚀 Overview
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.
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.
This BOM (Bill of Materials) declares compatible versions for all QBits. Import it once and omit version numbers from individual QBit dependencies.
### What This Repository Contains
## Features
- **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
- **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
### What This Repository Does NOT Contain
## Quick Start
- **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
### Import the BOM
## 🏗️ 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`:
Add to your `pom.xml` in the `<dependencyManagement>` section:
```xml
<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>
<dependencyManagement>
<dependencies>
<!-- Your QBit dependencies here -->
<dependency>
<groupId>io.qrun</groupId>
<artifactId>qbit-bom</artifactId>
<version>1.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</project>
</dependencyManagement>
```
## 📖 Detailed Documentation
### Add QBits Without Versions
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
```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>
```
### Test Configuration
## Included QBits
- **JUnit 5**: Managed via JUnit BOM
- **AssertJ**: Available for fluent assertions
- **H2 Database**: Available for testing
| 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 |
## 📦 Building for Production
## Compatibility
### Development Build
| 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 |
```bash
mvn clean install
```
## Project Status
### Release Build
Stable. Updated with each QBit release.
```bash
mvn clean deploy -Prelease
```
## Contributing
The release profile:
- Generates source and javadoc JARs
- Signs artifacts with GPG
- Publishes to Maven Central
1. Fork the repository
2. Update versions in `pom.xml`
3. Submit a pull request
## 🔐 Security Considerations
## License
### 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**
Proprietary - QRun.IO
+4 -4
View File
@@ -37,12 +37,12 @@
</developers>
<properties>
<java.version>17</java.version>
<java.version>21</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.4.0-RC.2</revision>
<revision>1.5.0-SNAPSHOT</revision>
</properties>
<!-- Common dependency BOMs -->
@@ -52,7 +52,7 @@
<dependency>
<groupId>com.kingsrook.qqq</groupId>
<artifactId>qqq-bom-pom</artifactId>
<version>0.27.9</version>
<version>0.35.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
@@ -60,7 +60,7 @@
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.10.0</version>
<version>5.12.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>