SUPP-24: Dual-publish to e-BS Nexus + GitHub Packages #27

Merged
mprihoda merged 21 commits from SUPP-24 into main 2026-05-01 12:53:44 +00:00
mprihoda commented 2026-04-30 07:47:15 +00:00 (Migrated from github.com)

Summary

  • Adds GitHub Packages as a second publish target alongside e-BS Nexus, so non-e-BS consumers can resolve iw-support without internal-network access.
  • Replaces the publish.sh shell-script flow with a tag-driven GitHub Actions workflow (.github/workflows/publish.yml) that gates on ./mill __.test, publishes snapshots to GitHub Packages on every main push, and publishes tagged releases to BOTH registries.
  • Restructures build.mill with an explicit publishable / non-publishable trait split (BaseModuleCommon parent of BaseModule / BaseModuleNoPublish; matching BaseScalaJSModuleNoPublish and NoPublishCrossModule) so internal scenario modules are excluded from __.publishArtifacts by construction.
  • Drops the //| repositories: Nexus directive from build.mill (verified: mill-iw-support resolves from public Maven Central chain on a clean cache).
  • Rewrites PUBLISHING.md for the dual-publish flow and refreshes README.md with both consumer paths (Mill + sbt snippets, per-destination resolver blocks, GitHub PAT credentials guidance).

Phase history

  • Phase 1 (build refactor + CI workflow) — merged via #25.
  • Phase 2 (documentation rewrite + publish.sh deletion) — merged into the SUPP-24 feature branch via #26.

This PR brings both phases from the feature branch into main.

Stage D — post-merge maintainer runbook (NOT part of this PR)

The release execution is intentionally deferred and must be performed manually after this PR merges:

  1. Configure two GitHub Actions secrets (EBS_NEXUS_USERNAME, EBS_NEXUS_PASSWORD) at the repository level. Required before the first v* tag push — without them the Nexus publish step will fail. The snapshot path on main works without them (uses GITHUB_TOKEN only).
  2. On merged main, run ./mill resolve __.publishArtifacts and ./mill __.publishLocal as sanity checks.
  3. Bump CommonVersion.publishVersion at build.mill:40 from "0.1.14-SNAPSHOT" to "0.1.14" in a small focused commit on main. Push.
  4. Observe the snapshot-path workflow run as a free pre-tag CI check.
  5. git tag v0.1.14 && git push --tags. Watch the tag-triggered run: __.test gate, GH Packages step, then Nexus step (gated on github.ref_type == 'tag'). Confirm artifacts appear at both registries for the representative artifact set (iw-support-core, iw-support-tapir, iw-support-mongo, iw-support-sqldb, iw-support-server-http, iw-support-all).
  6. From an existing e-BS project (no resolver-config change), resolve iw-support-core::0.1.14 from Nexus. From a clean repo with a GitHub PAT (read:packages) in coursier credentials, resolve the same coordinates from GitHub Packages.

Testing

Phase 1 verification (all green):

  • ./mill __.compile — 3643/3643 success.
  • ./mill __.test — 1560/1560 success.
  • ./mill resolve __.publishArtifactsscenarios.{jvm,js}, formsScenarios.{jvm,js}, filesUIScenarios.{jvm,js}, scenariosUI correctly excluded.
  • ./mill __.publishLocal — POMs land at ~/.ivy2/local/works.iterative.support/iw-support-*/0.1.14-SNAPSHOT/; iw-support-core_3.pom org/license/VCS/developer fields unchanged.
  • Clean-cache ./mill resolve __.compile after //| directive removal — success.

Phase 2 verification:

  • ./mill __.compile smoke check after doc edits — success (3643 targets).
  • PUBLISHING.md cross-checked against .github/workflows/publish.yml: Nexus step gated if: github.ref_type == 'tag', GH Packages step ungated; documented behaviour matches the workflow file.
  • README.md Mill mvn"..." (:: cross-version) and sbt %% snippets manually validated; works.iterative.support / iw-support-core org-and-artifact names spelled consistently.
  • publish.sh deletion confirmed; pre-push hook re-ran ./mill __.test clean.

Code review for Phase 2 was skipped — the available code-review skills (code-review-style, code-review-scala3, code-review-security, etc.) all explicitly target Scala per their DO NOT USE clauses and don't apply to Markdown. Spec compliance was instead validated by reading PUBLISHING.md and README.md end-to-end against phase-02-context.md "Component Specifications".

Reviewer artifacts

  • Review packet: project-management/issues/SUPP-24/review-packet.md — entry points, diagrams, scenarios, test summary.
  • Implementation log: project-management/issues/SUPP-24/implementation-log.md — per-phase decisions and verification results.
  • Release notes (Czech): project-management/issues/SUPP-24/release-notes.md.

Release notes (Czech, condensed)

Knihovna iw-support se nově publikuje dvojím způsobem — do interního registru e-BS Nexus a souběžně do GitHub Packages. Pro projekty v e-BS prostředí se nemění vůbec nic. Pro projekty mimo e-BS prostředí je nově k dispozici druhá cesta s GitHub PAT (read:packages). Tagovaná vydání míří do obou registrů; snapshoty pouze do GitHub Packages, takže e-BS Nexus obsahuje výhradně schválené verze. PUBLISHING.md a README.md byly přepracovány; publish.sh byl odstraněn (sankcionovanou cestou je nyní GitHub Actions). Aktuální verze: 0.1.14. Plné znění v project-management/issues/SUPP-24/release-notes.md.

🤖 Generated with Claude Code

## Summary - Adds GitHub Packages as a second publish target alongside e-BS Nexus, so non-e-BS consumers can resolve `iw-support` without internal-network access. - Replaces the `publish.sh` shell-script flow with a tag-driven GitHub Actions workflow (`.github/workflows/publish.yml`) that gates on `./mill __.test`, publishes snapshots to GitHub Packages on every `main` push, and publishes tagged releases to BOTH registries. - Restructures `build.mill` with an explicit publishable / non-publishable trait split (`BaseModuleCommon` parent of `BaseModule` / `BaseModuleNoPublish`; matching `BaseScalaJSModuleNoPublish` and `NoPublishCrossModule`) so internal scenario modules are excluded from `__.publishArtifacts` by construction. - Drops the `//| repositories:` Nexus directive from `build.mill` (verified: `mill-iw-support` resolves from public Maven Central chain on a clean cache). - Rewrites `PUBLISHING.md` for the dual-publish flow and refreshes `README.md` with both consumer paths (Mill + sbt snippets, per-destination resolver blocks, GitHub PAT credentials guidance). ## Phase history - **Phase 1** (build refactor + CI workflow) — merged via #25. - **Phase 2** (documentation rewrite + `publish.sh` deletion) — merged into the SUPP-24 feature branch via #26. This PR brings both phases from the feature branch into `main`. ## Stage D — post-merge maintainer runbook (NOT part of this PR) The release execution is intentionally deferred and must be performed manually after this PR merges: 1. Configure two GitHub Actions secrets (`EBS_NEXUS_USERNAME`, `EBS_NEXUS_PASSWORD`) at the repository level. **Required before the first `v*` tag push** — without them the Nexus publish step will fail. The snapshot path on `main` works without them (uses `GITHUB_TOKEN` only). 2. On merged `main`, run `./mill resolve __.publishArtifacts` and `./mill __.publishLocal` as sanity checks. 3. Bump `CommonVersion.publishVersion` at `build.mill:40` from `"0.1.14-SNAPSHOT"` to `"0.1.14"` in a small focused commit on `main`. Push. 4. Observe the snapshot-path workflow run as a free pre-tag CI check. 5. `git tag v0.1.14 && git push --tags`. Watch the tag-triggered run: `__.test` gate, GH Packages step, then Nexus step (gated on `github.ref_type == 'tag'`). Confirm artifacts appear at both registries for the representative artifact set (`iw-support-core`, `iw-support-tapir`, `iw-support-mongo`, `iw-support-sqldb`, `iw-support-server-http`, `iw-support-all`). 6. From an existing e-BS project (no resolver-config change), resolve `iw-support-core::0.1.14` from Nexus. From a clean repo with a GitHub PAT (`read:packages`) in coursier credentials, resolve the same coordinates from GitHub Packages. ## Testing Phase 1 verification (all green): - `./mill __.compile` — 3643/3643 success. - `./mill __.test` — 1560/1560 success. - `./mill resolve __.publishArtifacts` — `scenarios.{jvm,js}`, `formsScenarios.{jvm,js}`, `filesUIScenarios.{jvm,js}`, `scenariosUI` correctly excluded. - `./mill __.publishLocal` — POMs land at `~/.ivy2/local/works.iterative.support/iw-support-*/0.1.14-SNAPSHOT/`; `iw-support-core_3.pom` org/license/VCS/developer fields unchanged. - Clean-cache `./mill resolve __.compile` after `//|` directive removal — success. Phase 2 verification: - `./mill __.compile` smoke check after doc edits — success (3643 targets). - `PUBLISHING.md` cross-checked against `.github/workflows/publish.yml`: Nexus step gated `if: github.ref_type == 'tag'`, GH Packages step ungated; documented behaviour matches the workflow file. - `README.md` Mill `mvn"..."` (`::` cross-version) and sbt `%%` snippets manually validated; `works.iterative.support` / `iw-support-core` org-and-artifact names spelled consistently. - `publish.sh` deletion confirmed; pre-push hook re-ran `./mill __.test` clean. Code review for Phase 2 was skipped — the available code-review skills (`code-review-style`, `code-review-scala3`, `code-review-security`, etc.) all explicitly target Scala per their `DO NOT USE` clauses and don't apply to Markdown. Spec compliance was instead validated by reading `PUBLISHING.md` and `README.md` end-to-end against `phase-02-context.md` "Component Specifications". ## Reviewer artifacts - Review packet: `project-management/issues/SUPP-24/review-packet.md` — entry points, diagrams, scenarios, test summary. - Implementation log: `project-management/issues/SUPP-24/implementation-log.md` — per-phase decisions and verification results. - Release notes (Czech): `project-management/issues/SUPP-24/release-notes.md`. ## Release notes (Czech, condensed) Knihovna `iw-support` se nově publikuje dvojím způsobem — do interního registru e-BS Nexus a souběžně do GitHub Packages. Pro projekty v e-BS prostředí se nemění vůbec nic. Pro projekty mimo e-BS prostředí je nově k dispozici druhá cesta s GitHub PAT (`read:packages`). Tagovaná vydání míří do obou registrů; snapshoty pouze do GitHub Packages, takže e-BS Nexus obsahuje výhradně schválené verze. `PUBLISHING.md` a `README.md` byly přepracovány; `publish.sh` byl odstraněn (sankcionovanou cestou je nyní GitHub Actions). Aktuální verze: `0.1.14`. Plné znění v `project-management/issues/SUPP-24/release-notes.md`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No description provided.