Releasing Tramai
This page is the maintainer runbook for cutting Tramai releases.
It complements the frozen scope in Release 0.1.0 Scope and Checklist.
Preconditions
Before cutting a release:
./gradlew testpasses./gradlew publishToMavenLocalpasses./gradlew -p examples/kotlin-springboot-example testpasses- the board and specs reflect the actual repository state
- the changelog is updated for the version being released
GitHub Workflows
The repository contains:
.github/workflows/ci.yml.github/workflows/publish.yml
publish.yml is triggered by:
workflow_dispatch- tags matching
v*
Required Secrets
Remote publishing requires these GitHub Actions secrets:
TRAMAI_PUBLISH_RELEASE_URLTRAMAI_PUBLISH_SNAPSHOT_URLTRAMAI_PUBLISH_USERNAMETRAMAI_PUBLISH_PASSWORDTRAMAI_SIGNING_KEYTRAMAI_SIGNING_PASSWORD
Without those secrets, the publish workflow falls back to publishToMavenLocal.
Local Release Validation
Useful commands:
./gradlew test
./gradlew publishToMavenLocal
./gradlew -p examples/kotlin-springboot-example test
These validate:
- the internal module graph
- local publication metadata
- consumer resolution from
mavenLocal() - the Spring example smoke path
Guarded Real-Provider Checks
Tramai now includes opt-in provider integration tests that are skipped by default unless you explicitly enable them.
Ollama
Required environment:
export TRAMAI_RUN_OLLAMA_INTEGRATION=true
export TRAMAI_OLLAMA_MODEL=<your-local-model>
# optional
export TRAMAI_OLLAMA_BASE_URL=http://localhost:11434
Run:
./gradlew :tramai-ollama:test --tests '*OllamaProviderIntegrationTest'
OpenAI Or OpenAI-Compatible
Required environment:
export TRAMAI_RUN_OPENAI_INTEGRATION=true
export TRAMAI_OPENAI_MODEL=<model-name>
export TRAMAI_OPENAI_API_KEY=<api-key>
# or
export TRAMAI_OPENAI_BEARER_TOKEN=<bearer-token>
# optional
export TRAMAI_OPENAI_BASE_URL=https://api.openai.com/v1
Run:
./gradlew :tramai-openai:test --tests '*OpenAiProviderIntegrationTest'
These checks are intentionally light-touch. They verify that Tramai can make a real provider call through the shipped provider modules without making the default test suite depend on external credentials or services.
Cutting A Release
- Freeze scope and confirm the checklist in
docs/reference/release-<version>.md. - Update
CHANGELOG.mdfrom snapshot wording to the release entry. - Commit the release-ready state.
- Create and push a tag such as
v0.1.0. - Verify the
Publishworkflow result. - Confirm the published coordinates and artifacts externally.
What This Runbook Does Not Replace
This runbook does not replace:
- repository secret management
- external repository onboarding steps
- Sonatype or Maven Central account setup
- post-release announcement or adoption work
Those remain operational tasks owned by the maintainer.
