Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
dc0de74
Fixing the pipeline
boniface Oct 23, 2025
dd42b17
Fixing the pipeline
boniface Oct 23, 2025
a5dee10
Initial public release
boniface Oct 23, 2025
2b7a33e
Initial public release
boniface Oct 23, 2025
17af49c
feat: HTTP module abstraction to connect to external APIs
boniface Oct 23, 2025
1951229
feat: HTTP module abstraction to connect to external APIs
boniface Oct 23, 2025
7374b5f
feat: Updated libraries and refactored the build file to use gradle p…
boniface Oct 23, 2025
d143344
feat: Added Documentation for build files
boniface Oct 23, 2025
9c9fe22
feat: Fixed Deprecated build in ApacheHttpClient
boniface Oct 23, 2025
e5e653b
feat: HttpSignatures and Signature COmponents
boniface Oct 23, 2025
727a37e
feat: Client Keys and Genrators
boniface Oct 23, 2025
48d6171
fix: Fied the PMD fail checks
boniface Oct 23, 2025
e357abb
fix: resolving Chekstyle tests
boniface Oct 23, 2025
5ed25fc
fix: resolving Chekstyle tests
boniface Oct 23, 2025
fd94a48
fix: Fixed all checks
boniface Oct 23, 2025
76e6305
Update diagrams in readme and architecture
boniface Oct 23, 2025
48a94e2
Resolve comments
boniface Oct 23, 2025
58ee045
Resolve pr comments
boniface Oct 23, 2025
3d31810
fix: Added Key to speed up Security Checks
boniface Oct 23, 2025
76ee647
Potential fix for code scanning alert no. 3: Missing catch of NumberF…
boniface Oct 23, 2025
3a9c852
fix: updated Security checks for env
boniface Oct 23, 2025
252e934
fix: updated Security checks for ci
boniface Oct 23, 2025
b505213
fix: refactored the CI pipeline for optimisation
boniface Oct 23, 2025
afe76c2
fix: fixe corrupted DB
boniface Oct 23, 2025
1b17010
fix: fixe corrupted DB
boniface Oct 23, 2025
93d6c33
fix: Broken pipeline
boniface Oct 23, 2025
99b6ee3
fix: Broken pipeline
boniface Oct 23, 2025
3656d27
fix: Broken pipeline
boniface Oct 23, 2025
0986b1e
fix: Broken pipeline
boniface Oct 23, 2025
ccda11c
fix: remove OWASP dependency check from CI pipeline
boniface Oct 23, 2025
6bdd66b
fix: disable security-convention plugin to remove OWASP dependency check
boniface Oct 23, 2025
99c9a6a
fix: remove duplicate ci-optimized.yml workflow with dependency check
boniface Oct 23, 2025
fef6f9e
Work for Phase 7
boniface Oct 23, 2025
dcb2e00
Fix App budges and replace record class instead of regular class
boniface Oct 23, 2025
18a2933
Fix PMD ruleset
boniface Oct 23, 2025
e35a104
Add Release Information and Prepare Maven Release
boniface Oct 23, 2025
73bdfa5
Merge branch 'main' into feature/maven-publish
boniface Oct 23, 2025
347d4e1
Updated the documentation
boniface Oct 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 21 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,26 @@ jobs:
javadocJar sourcesJar \
--no-daemon --stacktrace

# Sign and publish (no need to build again!)
# Import GPG key for signing
- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v6
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}

# Sign and publish to Maven Central (Central Portal)
- name: Publish to Maven Central
env:
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_PRIVATE_KEY }}
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_PASSPHRASE }}
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
ORG_GRADLE_PROJECT_centralPortalUsername: ${{ secrets.CENTRAL_PORTAL_USERNAME }}
ORG_GRADLE_PROJECT_centralPortalPassword: ${{ secrets.CENTRAL_PORTAL_PASSWORD }}
ORG_GRADLE_PROJECT_signing.keyId: ${{ secrets.SIGNING_KEY_ID }}
ORG_GRADLE_PROJECT_signing.password: ${{ secrets.GPG_PASSPHRASE }}
ORG_GRADLE_PROJECT_signing.secretKeyRingFile: ${{ github.workspace }}/.gnupg/secring.gpg
run: |
# Export secret key for Gradle signing
gpg --export-secret-keys > ${{ github.workspace }}/.gnupg/secring.gpg

# Publish to Maven Central via Central Portal
./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository \
--no-daemon --stacktrace

Expand Down Expand Up @@ -86,8 +98,11 @@ jobs:

### Changes
See [CHANGELOG.md](CHANGELOG.md) for details.

---
**Note:** This is a pre-1.0.0 release. The API may change between releases.
draft: false
prerelease: false
prerelease: ${{ startsWith(steps.extract_version.outputs.VERSION, '0.') }}
files: |
build/libs/*.jar
build/publications/maven/pom-default.xml
Expand Down
71 changes: 41 additions & 30 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]

### Added
- Complete Open Payments API implementation with Java 25
- GNAP (Grant Negotiation and Authorization Protocol) support
- HTTP Message Signatures with Ed25519
- Token lifecycle management (rotation and revocation)
- HTTP interceptors for logging, authentication, and error handling
- Async-first API with CompletableFuture
- Immutable data models using Java records
- Comprehensive JavaDoc documentation
- 465 unit tests with 100% pass rate
- PMD and Checkstyle quality checks
- Automatic code formatting with Spotless
- Complete resource service implementations:
- WalletAddressService for wallet address discovery
- IncomingPaymentService for receiving payments
- OutgoingPaymentService for sending payments
- QuoteService for exchange rate quotes
- Comprehensive usage examples and documentation
- 📦 **Maven Central Publishing Setup**
- Automated CI/CD publishing via GitHub Actions
- Central Portal integration
- Comprehensive release guide (RELEASE_GUIDE.md)
- GPG artifact signing configuration
- Automated GitHub Release creation
- JavaDoc deployment to GitHub Pages
- Publication verification in CI/CD pipeline

### Changed
- Converted payment and auth domain models to Java records for improved immutability
- IncomingPayment, OutgoingPayment, Quote (payment models)
- AccessToken, Grant, AccessRight (auth models)
- Preserved builder patterns for backward compatibility
- Added Optional-returning getters for nullable fields
- Maintained custom equals/hashCode/toString implementations
- 🔢 **Versioning Strategy**
- Changed from `1.0.0-SNAPSHOT` to `0.1.0` (pre-1.0 development)
- Adopted semantic versioning with 0.x.y for initial development
- Configured for release-only versions (no SNAPSHOT support)

- 🔧 **Publishing Configuration**
- Fixed Maven Central Portal URL to `https://central.sonatype.com`
- Updated to token-based authentication (Central Portal tokens)
- Removed legacy OSSRH references and configurations
- Removed duplicate version declarations in build files
- Simplified publishing workflow

- 📝 **Documentation**
- Added publishing docs into single comprehensive RELEASE_GUIDE.md
- Updated CI_CD_SETUP.md to reflect Central Portal approach
- Updated GITHUB_ACTIONS_SETUP.md with correct secret names

- ⚙️ **CI/CD Workflow**
- Updated release.yml for Central Portal authentication
- Added GPG key import step using crazy-max/ghaction-import-gpg
- Updated secret names: `CENTRAL_PORTAL_*` instead of `SONATYPE_*`
- Added automatic pre-release flag for 0.x versions
- Enhanced artifact verification steps

### Removed
- Phase-specific TODO comments from completed implementation
- Replaced with proper documentation for future enhancements
- 🗑️ **Cleanup**
- Removed all SNAPSHOT version references from codebase
- Removed OSSRH (legacy Sonatype) documentation and references
- Removed duplicate/redundant publishing documentation files
- Removed old sunset `s01.oss.sonatype.org` endpoint references

## [0.1.0] - Initial Development

Expand Down Expand Up @@ -163,7 +174,6 @@ Not applicable for initial release.

1. Integration tests for Phases 5+ are still pending implementation
2. Performance benchmarks not yet established
3. Maven Central publication pending first stable release

## Future Plans

Expand All @@ -173,17 +183,18 @@ Not applicable for initial release.
- Additional authentication schemes
- Enhanced error recovery

### Version 1.0.0
- Production-ready release
### Version 1.0.0 (Stable Release)
- Production-ready release with API stability commitment
- Full Open Payments API coverage
- Performance benchmarks
- Maven Central publication
- Performance benchmarks and optimization
- Comprehensive integration testing
- Production deployment guide
- First stable release on Maven Central

## Contributors

- Boniface Kabaso - Initial implementation
- Espoir Diteekemena - Initial implementation and Documentation

## References

Expand Down
2 changes: 1 addition & 1 deletion PROJECT_STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ All completed phases meet the following quality standards:
- **HTTP**: Apache HttpClient 5 (abstracted, multiple implementations)
- **JSON**: Jackson with Jdk8Module (for Optional support) and JSR310 (for Java Time)
- **Crypto**: Ed25519 (Java standard library KeyPairGenerator)
- **Testing**: JUnit 5, Mockito, AssertJ
- **Testing**: JUnit 6, Mockito, AssertJ
- **Quality**: PMD, Checkstyle, SpotBugs, Spotless

---
Expand Down
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Open Payments Java SDK

[![CI](https://github.com/boniface/open-payments-java/actions/workflows/ci.yml/badge.svg)](https://github.com/bonifacekabaso/open-payments-java/actions/workflows/ci.yml)
[![Security & Quality](https://img.shields.io/github/actions/workflow/status/boniface/open-payments-java/ci.yml?label=Security%20%26%20Quality&query=jobs.security-and-quality.conclusion)](https://github.com/bonifacekabaso/open-payments-java/actions/workflows/ci.yml)
[![CI](https://github.com/boniface/open-payments-java/actions/workflows/ci.yml/badge.svg)](https://github.com/boniface/open-payments-java/actions/workflows/ci.yml)
[![Security & Quality](https://img.shields.io/github/actions/workflow/status/boniface/open-payments-java/ci.yml?label=Security%20%26%20Quality&query=jobs.security-and-quality.conclusion)](https://github.com/boniface/open-payments-java/actions/workflows/ci.yml)
[![JaCoCo](https://img.shields.io/badge/JaCoCo-Coverage-green.svg)](https://github.com/boniface/open-payments-java/actions/workflows/ci.yml)
[![Java](https://img.shields.io/badge/Java-25-orange.svg)](https://openjdk.java.net/)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
Expand Down Expand Up @@ -41,7 +41,7 @@ graph TD
Auth ~~~ Note
Resource ~~~ Note

Note["Operated by Account Service Entity (ASE)<br/> (Bank, Wallet Provider, Payment Processor)"]
Note["Operated by Account Service Entity (ASE) (Bank, Wallet Provider, Payment Processor)"]
end

App -->|HTTP Request via SDK| SDK
Expand Down Expand Up @@ -80,7 +80,7 @@ graph TD

```kotlin
dependencies {
implementation("zm.hashcode:open-payments-java:1.0-SNAPSHOT")
implementation("zm.hashcode:open-payments-java:0.1.0")
}
```

Expand All @@ -90,10 +90,12 @@ dependencies {
<dependency>
<groupId>zm.hashcode</groupId>
<artifactId>open-payments-java</artifactId>
<version>1.0-SNAPSHOT</version>
<version>0.1.0</version>
</dependency>
```

> **Note:** Versions 0.x.y are pre-1.0.0 releases. The API may change between releases until 1.0.0 is reached.

### Basic Usage

```java
Expand Down Expand Up @@ -213,10 +215,10 @@ cd open-payments-java

- Complete unit test implementations
- Performance optimization
- Maven Central publication
- Maven Central publication (see [MAVEN_CENTRAL_PUBLISHING.md](MAVEN_CENTRAL_PUBLISHING.md))
- Version 1.0 release

**Version**: 0.1.0-SNAPSHOT | **Target Release**: 1.0.0 | **Java**: 25+
**Version**: 1.0.0-SNAPSHOT | **Target Release**: 1.0.0 | **Java**: 25+

See [PROJECT_STATUS.md](PROJECT_STATUS.md) for detailed roadmap.

Expand Down
Loading
Loading