This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch issue/SLING-13289 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-committer-cli.git
commit c3f4005ec65376a1b96ce5ef915bb1b88d1f5d19 Author: Robert Munteanu <[email protected]> AuthorDate: Wed Aug 5 17:52:02 2026 +0200 SLING-13289 - Push Sling Committer CLI image to DockerHub - configure GitHub action to push to DockerHub - allow multi-arch builds - set image to apache/sling-committer-cli as it better reflects its purpose as compared to apache/sling-cli - updated documentation --- README.md | 30 +++++++++++++++--------------- pom.xml | 13 ++++++++++++- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 8f17c15..bad6120 100644 --- a/README.md +++ b/README.md @@ -89,27 +89,27 @@ password in `~/.m2/settings-security.xml`: ## Building -The Docker image (`apache/sling-cli:latest`) is produced by the `docker:build` goal of the +The Docker image (`apache/sling-committer-cli:latest`) is produced by the `docker:build` goal of the [fabric8 docker-maven-plugin](https://dmp.fabric8.io/). The image bundles the project jar via the generated `*-app.slingfeature` descriptor; the `slingfeature-maven-plugin` resolves the project's own bundle from the reactor, so the image always contains the jar built in the same invocation. A single command builds (and tests) the project and the image: - mvn clean package docker:build + mvn clean install -No prior `mvn install` is needed. The `docker:build` execution is also bound to the `package` -phase, so the CI build (`mvn package`) builds the image too. +The `docker:build` execution is bound to the `install` phase, so the CI build (`mvn install`) +builds the image too. Image pushes are skipped by default. To confirm the image contains the expected commands: - docker run --env-file=./docker-env apache/sling-cli release help + docker run --env-file=./docker-env apache/sling-committer-cli release help ## Launching After building, run the image with: - docker run --env-file=./docker-env apache/sling-cli + docker run --env-file=./docker-env apache/sling-committer-cli This invocation produces a list of available commands. @@ -124,7 +124,7 @@ The commands can be executed in 3 different modes: To select a non-default execution mode provide the mode as an argument to the command: - docker run -it --env-file=./docker-env apache/sling-cli release prepare-email --repository=$STAGING_REPOSITORY + docker run -it --env-file=./docker-env apache/sling-committer-cli release prepare-email --repository=$STAGING_REPOSITORY --execution-mode=INTERACTIVE Note that for running commands in the `INTERACTIVE` mode you need to run the Docker container in interactive mode with a pseudo-tty @@ -168,46 +168,46 @@ After `release:perform` has staged the artifacts, drive the rest with the CLI: 0. **Find the staging repository id** if you did not capture it. `release list` shows every staging repo with its `[open]`/`[closed]` state and description; a freshly staged one is `[open]`: - docker run --env-file=./docker-env apache/sling-cli release list + docker run --env-file=./docker-env apache/sling-committer-cli release list 1. **Close** the staging repository. The description is derived automatically from the staged POM's `<name>` + `<version>` (e.g. _Apache Sling Feature Model Launcher 1.3.6_) by browsing the repository content, so it works even though an open repository is not yet in the Lucene index: - docker run --env-file=./docker-env apache/sling-cli release close-staging --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO + docker run --env-file=./docker-env apache/sling-committer-cli release close-staging --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO 2. **Verify** the artifacts' signatures, hashes and CI status: - docker run --env-file=./docker-env apache/sling-cli release verify --repository=$STAGING_REPOSITORY_ID + docker run --env-file=./docker-env apache/sling-committer-cli release verify --repository=$STAGING_REPOSITORY_ID 3. **Generate the vote email**: - docker run --env-file=./docker-env apache/sling-cli release prepare-email --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO + docker run --env-file=./docker-env apache/sling-committer-cli release prepare-email --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO 4. After the 72h vote, **tally the votes** and generate the result email. PMC membership is detected automatically from your ASF id: if you are a PMC member the email says you will copy the release to the dist directory yourself; otherwise it asks a PMC member to perform the dist upload: - docker run --env-file=./docker-env apache/sling-cli release tally-votes --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO + docker run --env-file=./docker-env apache/sling-committer-cli release tally-votes --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO 5. **Finalize** the release (post successful vote). This runs, in order: promote to Maven Central, create the next Jira version, release the current Jira version, and update the Apache Reporter: - docker run --env-file=./docker-env apache/sling-cli release finalize --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO + docker run --env-file=./docker-env apache/sling-committer-cli release finalize --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO When the current user is detected as a PMC member, `finalize` additionally publishes to `dist.apache.org` (requires `subversion`, which is bundled in the image). The previous version to remove from `dist/release` is deduced automatically from the directory contents, so no extra flag is needed: - docker run --env-file=./docker-env apache/sling-cli release finalize --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO + docker run --env-file=./docker-env apache/sling-committer-cli release finalize --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO PMC membership is determined from your ASF id (via Whimsy). A non-PMC committer's `finalize` skips the dist upload and the `tally-votes` result email asks a PMC member to perform it. If the vote does not pass, **drop** the staging repository: - docker run --env-file=./docker-env apache/sling-cli release drop --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO + docker run --env-file=./docker-env apache/sling-committer-cli release drop --repository=$STAGING_REPOSITORY_ID --execution-mode=AUTO ### Command reference diff --git a/pom.xml b/pom.xml index 3e34745..247e655 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,11 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.outputTimestamp>2026-01-01T00:00:01Z</project.build.outputTimestamp> <sling.java.version>21</sling.java.version> + <docker.skip.push>true</docker.skip.push> + <docker.image.name>apache/sling-committer-cli</docker.image.name> + <docker.image.tag>latest</docker.image.tag> + <!-- pass a list of platforms to enable multi-arch builds: linux/amd64,linux/arm64 --> + <docker.platforms /> </properties> <dependencies> @@ -311,12 +316,17 @@ <configuration> <images> <image> - <name>apache/sling-cli</name> + <name>${docker.image.name}:${docker.image.tag}</name> <build> <contextDir>${project.basedir}</contextDir> <args> <FEATURE_FILE>target/artifacts/org/apache/sling/${project.artifactId}/${project.version}/${project.artifactId}-${project.version}-app.slingfeature</FEATURE_FILE> </args> + <buildx> + <platforms> + <platform>${docker.platforms}</platform> + </platforms> + </buildx> </build> </image> </images> @@ -326,6 +336,7 @@ <id>default</id> <goals> <goal>build</goal> + <goal>push</goal> </goals> </execution> </executions>
