5.7 KiB
Release Checklist
Use this checklist before pushing release tags or publishing DBX agent jars.
1. Confirm Scope
- Review the recent commits:
git log --oneline -10
- Confirm the working tree is clean before tagging:
git status --short
- Check that each intended agent change touches the right module directory,
common,test-support, docs, or workflows. - Avoid mixing unrelated driver updates, behavior changes, and release-only edits in the same commit.
2. Local Verification
On this workspace, use the local JDKs under /private/tmp:
env JAVA_HOME=/private/tmp/dbx-jdk/jdk-21.0.11+10/Contents/Home \
./gradlew \
-Dorg.gradle.java.installations.paths=/private/tmp/dbx-jdk/jdk-21.0.11+10/Contents/Home,/private/tmp/dbx-jdk8/jdk8/Contents/Home \
test shadowJar --continue
Also run the lightweight validation gates:
python3 -m unittest discover -s scripts -p '*_test.py'
python3 scripts/validate_agents.py
python3 scripts/validate_agent_jars.py
git diff --check
Expected result:
- Python script tests pass.
Agent validation passed.Agent jar validation passedaftershadowJarhas produced jars.git diff --checkprints nothing.- Gradle finishes with
BUILD SUCCESSFUL.
3. Agent Contract Checks
For changed agent modules:
executeQuerydelegates toJdbcExecutor.execute.- No module-local SQL prefix classifier is present.
- No module-local result row cap is present.
Statement.execute(...)is used for arbitrary user SQL.- Metadata methods return stable ordering for schemas, tables, columns, indexes, foreign keys, and triggers.
- User-controlled schema and table names are passed through prepared statements or quoted with
JdbcIdentifiers. connectstores one connection,disconnectcloses and clears it, andtestConnectioncloses its temporary connection.- A behavior test exists:
- Use
JdbcExecutionBehaviorTestandJdbcMetadataBehaviorTestfor agents with a local/embedded test database. - Use
JdbcFakeExecutionBehaviorTestfor agents that require unavailable external drivers. - Use targeted
JdbcMetadataSqlFaketests for metadata SQL that must interpolate quoted identifiers.
- Use
4. Registry And Module Checks
Run:
python3 scripts/validate_agents.py
This checks:
versions.jsonkeys match included agent modules insettings.gradle.- Root Gradle conventions define agent archive names.
- Agent manifests define
Agent-Label. - Agent manifests define
Main-Class. - Agent
Main-Classsource exists and the built jar contains the matching.class. - Forbidden legacy execution patterns are absent.
- Disallowed JVM source/build DSL residue is absent outside Gradle output directories.
When adding or removing an agent, update these files together:
settings.gradleversions.jsonREADME.md- Agent module
build.gradlefor driver dependencies and manifest attributes - Root
build.gradleonly when the module needs non-standard shared build behavior
5. Driver Packaging
For bundled drivers:
- Verify the dependency is redistributable.
- Prefer Maven dependencies over checked-in jars.
For external drivers:
- Use
implementation fileTree(dir: 'libs', include: ['*.jar']). - Set the manifest attribute:
attributes(
'Agent-External-Driver': 'true'
)
- Confirm release registry generation emits
external_driver_required: true.
Current external-driver agents include BigQuery and SunDB.
6. JRE Selection
Most agents are built for the default JRE key 21, backed by JDK 21 in the release workflow.
Special case:
oracle-10guses JRE key8.
If another agent needs a different runtime:
- Update the release workflow JRE detection logic.
- Document why in the module or release notes.
- Verify DBX can download the matching runtime artifact.
7. CI Expectations
The CI workflow runs on main and pull requests:
python3 -m unittest discover -s scripts -p '*_test.py'
python3 scripts/validate_agents.py
./gradlew test shadowJar --continue
python3 scripts/validate_agent_jars.py
Do not tag a release while CI is failing on main.
8. Release Tag Flow
Release workflow runs on tags matching agents-v*.
Before tagging:
git status --short
git log --oneline -5
git tag --list 'agents-v*' --sort=-creatordate | head
Choose a new tag that does not already exist locally or on GitHub. For example:
RELEASE_TAG=agents-v0.3.0
git tag --list "$RELEASE_TAG"
git ls-remote --tags origin "$RELEASE_TAG"
Both commands should print nothing before you create the tag.
Create and push the tag:
git tag "$RELEASE_TAG"
git push origin main
git push origin "$RELEASE_TAG"
The release workflow will:
- Bump changed module versions in
versions.json. - Build all agent shadow jars.
- Build/download JRE artifacts.
- Generate
agent-registry.json. - Create a GitHub release with jars, JRE archives, and registry.
9. Post-Release Verification
After the GitHub release finishes:
- Download or inspect
agent-registry.json. - Confirm every expected agent appears under
drivers. - Confirm labels preserve spaces, for example
Google BigQuery. - Confirm
oracle-10guses JRE key8. - Confirm other agents use JRE key
21. - Confirm
external_driver_requiredis correct. - Confirm every jar URL, sha256, and size is present.
- Spot-check at least one agent jar manifest:
unzip -p dbx-agent-h2.jar META-INF/MANIFEST.MF
10. Known Follow-Ups
- Gradle currently reports deprecated features that will be incompatible with Gradle 10. Use
--warning-mode allin a separate cleanup task. - Commercial or external-driver agents still need manual smoke tests with real driver jars and databases.
- Add real containerized smoke tests only one database family at a time.