# Release Checklist

This checklist tracks what should be true before publishing outside the local
Ivy repository.

## Current Scope

For now the project is prepared for local Ivy publication only.

## Required Before External Publication

- Add Maven publication (`maven-publish`) if publishing to Maven repositories.
- Add signing for Maven Central or any repository that requires signed
  artifacts.
- Add complete POM metadata: project name, description, URL, license,
  developers, and SCM coordinates.
- Keep Java 21 as the public baseline and document it for consumers.
- Decide whether `variants` artifact APIs are published as experimental or
  split into a later module.
- Add Gradle plugin marker artifact generation if `plugins { id(...) version(...) }`
  must work.
- Add a published-consumption smoke test that resolves artifacts from a
  temporary local repository.

## Local Ivy Release Steps

1. Ensure the Mercurial working tree is clean.
2. Run:

   ```bash
   ./gradlew clean check javadoc jar sourcesJar javadocJar --rerun-tasks
   ```

3. Optionally run:

   ```bash
   ./gradlew check --configuration-cache
   ```

4. Publish locally:

   ```bash
   ./gradlew publish
   ```

5. Optionally smoke-publish into `/tmp` first:

   ```bash
   ./gradlew -Duser.home=/tmp/gradle-common-ivy-smoke \
             :common:publishIvyPublicationToIvyRepository \
             :variants:publishIvyPublicationToIvyRepository \
             --rerun-tasks
   ```

6. Verify `${user.home}/ivy-repo/org.implab.gradle` contains `common` and
   `variants` for the expected version.

## API Status

- `common` is intended to be a shared utility library.
- `variants` core and source APIs are pre-1.0 and should be treated as
  evolving.
- `variantArtifacts` is experimental and may change more aggressively.
