Release Process
Semantic Versioning
KissRequests follows Semantic Versioning:
- MAJOR: Breaking public API changes.
- MINOR: New features, backward-compatible.
- PATCH: Bug fixes, backward-compatible.
Tag-Based Release
Releases are triggered by pushing a tag matching v*:
git tag v0.1.0
git push origin v0.1.0
Pre-Release Checklist
Before creating a release tag:
- All tests pass:
mvn -B verify - CHANGELOG.md updated with the release version and date
- Documentation updated for all public behavior changes
- Version in pom.xml is the release version (
0.1.0for the first release) - Commit the release-ready state
- Tag the commit:
git tag v0.1.0 - Push the tag:
git push origin v0.1.0
Release Workflow
The GitHub Actions release workflow (.github/workflows/release-maven-central.yml) is triggered by the tag.
Steps:
- Checkout the repository.
- Set up Java 17.
- Run
mvn -B verify(tests must pass). - Import the GPG key.
- Run
mvn -B deploy -P release(builds, signs, publishes).
Post-Release
After a successful release:
- Verify the artifact on Maven Central (may take time).
- Update the version in pom.xml to the next development
-SNAPSHOT:<version>NEXT-SNAPSHOT</version> - Commit the snapshot version bump.
Changelog
CHANGELOG.md follows Keep a Changelog:
## [0.1.0] - 2026-04-29
### Added
- Initial release.
- Text requests (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS).
- File upload, download, stream, multipart.
- toCurl() debugging.
- Rich error handling.
- Retry, timeout, concurrency configuration.
First Release
The first release (v0.1.0) is published. Future releases still require:
- Maven Central account and namespace verification.
- GPG key setup.
- GitHub secrets configuration.
- See Maven Central Publishing for details.
Local Consumer Test Before Publishing
Before publishing to Maven Central, install the release artifact into the local Maven repository:
mvn -B clean install
Then create a separate temporary Maven project and depend on the local artifact:
<dependency>
<groupId>io.github.arthurhoch</groupId>
<artifactId>kiss-requests</artifactId>
<version>0.1.0</version>
</dependency>
Minimal consumer example:
import io.github.arthurhoch.kissrequests.Http;
import io.github.arthurhoch.kissrequests.HttpMethod;
import io.github.arthurhoch.kissrequests.HttpResult;
import java.util.Map;
class Example {
public static void main(String[] args) {
Http http = Http.create();
HttpResult result = http.request(
HttpMethod.GET,
"https://api.example.com/status",
Map.of("Accept", "text/plain"),
null
).execute();
System.out.println(result.statusCode());
System.out.println(result.body());
}
}
This tests the same coordinates that consumers will use after Central publication, but resolves them from the local Maven repository.