This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/sis-site.git
commit aa1471870262b42411ecbda168b897808ad1a726 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Fri Oct 6 14:57:47 2023 +0200 Update the "test release candidate" section of release management page. --- content/release-management.md | 277 +++++++++++++++++------------------------- 1 file changed, 110 insertions(+), 167 deletions(-) diff --git a/content/release-management.md b/content/release-management.md index 6ac4fab4..6674ae5c 100644 --- a/content/release-management.md +++ b/content/release-management.md @@ -161,7 +161,7 @@ Then, the signed public key shall be appended to the `KEYS` file on the [SIS sou then copied to the [SIS distribution directory][dist]. -## Gradle configuration +## Gradle configuration {#gradle-config} Edit the `~/.gradle/gradle.properties` file, making sure that the following properties are present: @@ -173,7 +173,7 @@ asfNexusPassword=<password for uploading to Maven Central> {{< / highlight >}} -## Maven configuration +## Maven configuration {#maven-config} Edit the `~/.m2/setting.xml` file, making sure that the following fragments are present. Note that the [password can be enctypted](https://maven.apache.org/guides/mini/guide-encryption.html). @@ -191,7 +191,7 @@ Note that the [password can be enctypted](https://maven.apache.org/guides/mini/g {{< / highlight >}} -# Configure {#configure} +# Specific release configuration {#release-config} For all instructions in this page, `$OLD_VERSION` and `$NEW_VERSION` stand for the version number of the previous and the new release respectively, and `$RELEASE_CANDIDATE` stands for @@ -209,7 +209,7 @@ Make sure that the code signing key is the defauly key declared in `~/.gnupg/gpg during the Maven deployment phase. -# Review project status before branching {#prepare-source} +# Review project status before branching {#prereview} Replace the `$OLD_VERSION` number by `$NEW_VERSION` in the values of following properties on the development branch: @@ -455,10 +455,11 @@ git commit --message "Update javadoc for SIS $NEW_VERSION." ## Publish Maven artifacts {#publish-artifacts} -This section publish artifacts to the staging repository. +This section publishes artifacts to the staging repository. +If there is any issue with the deployment, the staging repository can easily be dropped and recreated. -### Stage the parent POM +### Stage the parent POM {#publish-parent} Execute the following: @@ -467,11 +468,18 @@ cd $SIS_RC_DIR/parent mvn clean install deploy --activate-profiles apache-release {{< / highlight >}} -Connect to the [Nexus repository][repository], select the staging repository, -navigate to the `parent` sub-directory, and delete all `parent-*-source-release.zip` files. +Connect to the [Nexus repository][repository]. +The artifacts can be found under _Build Promotion_ → _Staging repositories_, +and searching for `org.apache.sis` in the _Repository_ column. +Delete all `org/apache/sis/parent/$NEW_VERSION/parent-$NEW_VERSION-source-release.zip.*` files on the Nexus repository. +They should not be there - source release will be deployed on another repository later. +Then close this staging repository by clicking the checkbox for the open staging repositories +(`org.apache.sis-<id>`) and press _Close_ in the menu bar. +In the description field, specify _"Apache SIS parent POM"_. +Keep the window open, we will need it again later. -### Stage the project arfifacts +### Stage the project arfifacts {#publish-main} Build the project and publish in the Maven local repository. The `org.apache.sis.releaseVersion` property will cause Javadoc to be generated for earch artifact @@ -483,18 +491,37 @@ git status # Make sure that everything is clean. gradle clean gradle test --system-prop org.apache.sis.test.extensive=true gradle assemble +mv --interactive optional/build/bundle/apache-sis-$NEW_VERSION.zip $DIST_DIR/apache-sis-$NEW_VERSION-bin.zip + rm endorsed/build/docs/* # For forcing a rerun. +rm optional/build/docs/* +cd optional/build/libs/ +ln ../../../endorsed/build/libs/*.jar . +ln $PATH_TO_FX/*.jar . +cd - gradle assemble --system-prop org.apache.sis.releaseVersion=$NEW_VERSION +find -name "org.apache.sis.*-javadoc.jar" -exec zip -d '{}' errors.log \; gradle publishToMavenLocal --system-prop org.apache.sis.releaseVersion=$NEW_VERSION +# Check that the Javadoc archives do not have a size close to zero. ll ~/.m2/repository/org/apache/sis/core/sis-referencing/$NEW_VERSION +ll ~/.m2/repository/org/apache/sis/application/sis-javafx/$NEW_VERSION find ~/.m2/repository/org/apache/sis -name "sis-*-$NEW_VERSION-*.asc" -exec gpg --verify '{}' \; gradle publish --system-prop org.apache.sis.releaseVersion=$NEW_VERSION {{< / highlight >}} +In the [Nexus repository][repository], click on "Refresh". +A new `org.apache.sis` item should appear in the _Repository_ column of _Build Promotion_ → _Staging repositories_. +Navigate through the artifact tree and make sure that all Javadoc, source and jar files have `.asc` (GPG signature) and `.sha1` files. +Select any `*-javadoc.jar` file and click on the <cite>Archive Browser</cite> tab on the right side. +Select any `*.html` file which is known to use some of the custom taglets defined in the `sis-build-helper` module. +Click on that file and verify that the custom elements are rendered properly. +Then close this staging repository. +In the description field, specify _"Apache SIS main artifacts"_. + -### Stage the non-free resources {#maven-nonfree} +### Stage the non-free resources {#publish-nonfree} Go to the directory that contains a checkout of `https://svn.apache.org/repos/asf/sis/data/non-free/sis-epsg`. Those modules will not be part of the distribution (except on Maven), but we nevertheless need to ensure that they work. @@ -504,82 +531,94 @@ Replace occurrences of `<version>$OLD_VERSION</version>` by `<version>$NEW_VERSI cd ../non-free svn update mvn clean install -mvn javadoc:javadoc # Test that javadoc can be generated. +mvn javadoc:javadoc # Test that Javadoc can be generated. svn commit --message "Set version number and dependencies to $NEW_VERSION." +mvn deploy --activate-profiles apache-release {{< / highlight >}} -## Integration test {#integration-tests} +Verify the staged artifacts in the [Nexus repository][repository]. +In the `sis-epsg-$NEW_VERSION.jar` file, verify that `META-INF/LICENSE` contains the EPSG terms of use. +Delete all `org/apache/sis/non-free/$NEW_VERSION/non-free-$NEW_VERSION-source-release.zip.*` files. +Delete all `org/apache/sis/non-free/sis-epsg/$NEW_VERSION/sis-epsg-$NEW_VERSION-source.jar.*` files. +Then close this staging repository. +In the description field, specify _"Apache SIS non-free resources"_. -Execute all examples documented in the [command-line interface page](./command-line.html). +Click on the `org.apache.sis-<id>` link in order to get the URL to the temporary Maven repository created by Nexus. +We will announce later (in the _Put the release candidate up for a vote_ section) on the `dev@` mailing list +the availability of this temporary repository for testing purpose. -{{< highlight bash >}} -JAVA_OPTS=-enableassertions -{{< / highlight >}} +## Stage the source, binary and Javadoc artifacts {#stage} -Open the root `pom.xml` file of integration tests. -Set version numbers to `$NEW_VERSION` without `-SNAPSHOT` suffix. -Verify the configuration and version of Maven plugins. -Then test and commit (note that execution may be slow). +The official Apache releases are the files in the `$DIST_DIR` directory. +By contrast, above Maven artifacts are only conveniences. +We have already staged the Javadoc and binaries. +Now stage the sources and cleanup: {{< highlight bash >}} -cd ../releases/tests -svn update -cd maven -mvn clean test -svn commit --message "Set version number and dependencies to $NEW_VERSION." +git archive --prefix apache-sis-$NEW_VERSION-src/ --output $DIST_DIR/apache-sis-$NEW_VERSION-src.zip $NEW_VERSION-RC +cd $DIST_DIR +zip -d apache-sis-$NEW_VERSION-bin.zip apache-sis-$NEW_VERSION/lib/org.apache.sis.openoffice.jar {{< / highlight >}} -# Deploy Maven artifacts {#maven-deploy} +Sign the source, Javadoc and binary artifacts: -If above verifications succeeded, performs the following _temporary_ changes -(to be discarded after the deployment to Maven repository): +{{< highlight bash >}} +gpg --armor --detach-sign --default-key $SIGNING_KEY apache-sis-$NEW_VERSION-src.zip +sha512sum apache-sis-$NEW_VERSION-src.zip > apache-sis-$NEW_VERSION-src.zip.sha512 -* Remove temporarily the `sis-openoffice` module from `application/pom.xml`. -* Remove the `test-jar` goal from `maven-jar-plugin` in the root `pom.xml`. -* Remove all SIS dependencies declared with `<type>test-jar</type>` in all `pom.xml` files. - This hack will force us to skip test compilations. +gpg --armor --detach-sign --default-key $SIGNING_KEY apache-sis-$NEW_VERSION-doc.zip +sha512sum apache-sis-$NEW_VERSION-doc.zip > apache-sis-$NEW_VERSION-doc.zip.sha512 + +gpg --armor --detach-sign --default-key $SIGNING_KEY apache-sis-$NEW_VERSION-bin.zip +sha512sum apache-sis-$NEW_VERSION-bin.zip > apache-sis-$NEW_VERSION-bin.zip.sha512 +{{< / highlight >}} -Then deploy SIS (without test JAR files). -Deploy also the non-free resources in the same staging repository. -If there is any issue with this deployment, the staging repository can easily be dropped and recreated. +Verify checksums and signatures: {{< highlight bash >}} -cd $SIS_RC_DIR -mvn clean deploy --activate-profiles apache-release --define maven.test.skip=true -cd ../non-free -mvn clean deploy --activate-profiles apache-release --define maven.test.skip=true +find . -name "*.sha512" -exec sha512sum --check '{}' \; +find . -name "*.asc" -exec gpg --verify '{}' \; {{< / highlight >}} -## Verify and close the Nexus release artifacts {#nexus-close} -Verify the staged artifacts in the [Nexus repository][repository]. -The artifacts can be found under _Build Promotion_ → _Staging repositories_, and searching for `org.apache.sis` in the _Repository_ column. -Navigate through the artifact tree and make sure that all javadoc, source and jar files have `.asc` (GPG signature) and `.sha1` files. -Select any `*-javadoc.jar` file and click on the <cite>Archive Browser</cite> tab on the right side. -Select any `*.html` file which is known to use some of the custom taglets defined in the `sis-build-helper` module. -Click on that file and verify that the custom elements are rendered properly. -In the `sis-epsg-$NEW_VERSION.jar` file, verify that `META-INF/LICENSE` contains the EPSG terms of use. +# Integration test {#integration-tests} -Additional cleaning: +Create a temporary directory where Apache {{% SIS %}} will write the EPSG dataset. +Force the Java version to the one supported by Apache SIS (adjust `JDK11_HOME` as needed). +Specify the URL to the nexus repository, where `####` is the identifier of the "non-free" repository. -* Delete all `org/apache/sis/parent/$NEW_VERSION/parent-$NEW_VERSION-source-release.zip.*` files on the Nexus repository. - They should not be there - source release will be deployed on another repository later. -* Delete all `org/apache/sis/non-free/$NEW_VERSION/non-free-$NEW_VERSION-source-release.zip.*` files. -* Delete all `org/apache/sis/non-free/sis-epsg/$NEW_VERSION/sis-epsg-$NEW_VERSION-source.jar.*` files. +{{< highlight bash >}} +export SIS_DATA=/tmp/apache-sis-data +mkdir $SIS_DATA +export JAVA_HOME=$JDK11_HOME +export JAVA_OPTS="-enableassertions -Dorg.apache.sis.epsg.downloadURL" +export JAVA_OPTS=$JAVA_OPTS=https://repository.apache.org/content/repositories/orgapachesis-#### +export JAVA_OPTS=$JAVA_OPTS/org/apache/sis/non-free/sis-epsg/$NEW_VERSION/sis-epsg-$NEW_VERSION.jar +{{< / highlight >}} -Close the Nexus staging repository: -* Click the checkboxes for the open staging repositories (`org.apache.sis-<id>`) and press _Close_ in the menu bar. -* In the description field, enter "`SIS $NEW_VERSION-RC$RELEASE_CANDIDATE`" - (replace `$NEW_VERSION` and `$RELEASE_CANDIDATE` by appropriate values. - This will not be done automatically since this field box is not our bash shell!). -* Click on the `org.apache.sis-<id>` link in order to get the URL to the temporary Maven repository created by Nexus. +## Test the binary {#test-binary} -We will announce later (in the <cite>Put the release candidate up for a vote</cite> section) on the `dev@` mailing list -the availability of this temporary repository for testing purpose. +Unzip the binaries and execute the examples documented in the [command-line interface page](./command-line.html). -## Test the Nexus release artifacts {#nexus-text} +{{< highlight bash >}} +cd /tmp +unzip $DIST_DIR/apache-sis-$NEW_VERSION-bin.zip +cd apache-sis-$NEW_VERSION +wget https://sis.apache.org/examples/coordinates/AmericanCities.csv +wget https://sis.apache.org/examples/coordinates/CanadianCities.csv +./bin/sis crs EPSG:6676 +./bin/sis identifier https://sis.apache.org/examples/crs/MissingIdentifier.wkt +./bin/sis identifier https://sis.apache.org/examples/crs/WrongAxisOrder.wkt +./bin/sis identifier https://sis.apache.org/examples/crs/EquivalentDefinition.wkt +./bin/sis transform --sourceCRS EPSG:4267 --targetCRS EPSG:4326 AmericanCities.csv +./bin/sis transform --sourceCRS EPSG:4267 --targetCRS EPSG:4326 CanadianCities.csv +./bin/sisfx +{{< / highlight >}} + + +## Test the Maven artifacts {#test-maven} Go to the test Maven project. Open the root `pom.xml` file and set the `<version>` number to the SIS release to be tested. @@ -588,25 +627,12 @@ of the temporary Maven repository created by Nexus. Usually, only the 3 last digits need to be updated. {{< highlight bash >}} -cd ../releases/tests/maven +cd $SIS_RC_DIR/../releases/tests/maven # Edit <url> in pom.xml before to continue. mvn compile svn commit -m "Test project for SIS $NEW_VERSION-RC$RELEASE_CANDIDATE" {{< / highlight >}} -Create a temporary directory where Apache {{% SIS %}} will write the EPSG dataset. -Force the Java version to the one supported by Apache SIS (adjust `JDK11_HOME` as needed). -Specify the URL to the nexus repository (will be needed in a future step. Replace `####` as needed). - -{{< highlight bash >}} -mkdir target/SpatialMetadata -export SIS_DATA=`pwd`/target/SpatialMetadata -export JAVA_HOME=$JDK11_HOME -export JAVA_OPTS=-Dorg.apache.sis.epsg.downloadURL -export JAVA_OPTS=$JAVA_OPTS=https://repository.apache.org/content/repositories/orgapachesis-#### -export JAVA_OPTS=$JAVA_OPTS/org/apache/sis/non-free/sis-epsg/$NEW_VERSION/sis-epsg-$NEW_VERSION.jar -{{< / highlight >}} - Clear the local Maven repository in order to force downloads from the Nexus repository, then test. This will also verify the checksums. @@ -622,94 +648,18 @@ du --summarize --human-readable $SIS_DATA/Databases/SpatialMetadata mvn clean {{< / highlight >}} -# Stage the source, binary and javadoc artifacts {#stage} - -Move the files generated by Maven to the distribution directory: - -{{< highlight bash >}} -mv $SIS_RC_DIR/target/sis-$NEW_VERSION-* . -mv $SIS_RC_DIR/target/site/apache-sis-$NEW_VERSION-* . -mv $SIS_RC_DIR/application/sis-javafx/target/distribution/apache-sis-$NEW_VERSION.zip . -{{< / highlight >}} - -Rename the files to something more conform to the convention seen in other Apache projects: - -{{< highlight bash >}} -mv apache-sis-$NEW_VERSION.zip apache-sis-$NEW_VERSION-bin.zip -mv sis-$NEW_VERSION-source-release.zip apache-sis-$NEW_VERSION-src.zip -mv sis-$NEW_VERSION-source-release.zip.asc apache-sis-$NEW_VERSION-src.zip.asc -{{< / highlight >}} - -## Sign, test and commit {#sign} - -Sign the source, javadoc and binary artifacts: - -{{< highlight bash >}} -sha512sum apache-sis-$NEW_VERSION-src.zip > apache-sis-$NEW_VERSION-src.zip.sha512 - -gpg --armor --detach-sign --default-key $SIGNING_KEY apache-sis-$NEW_VERSION-doc.zip -sha512sum apache-sis-$NEW_VERSION-doc.zip > apache-sis-$NEW_VERSION-doc.zip.sha512 - -gpg --armor --detach-sign --default-key $SIGNING_KEY apache-sis-$NEW_VERSION-bin.zip -sha512sum apache-sis-$NEW_VERSION-bin.zip > apache-sis-$NEW_VERSION-bin.zip.sha512 -{{< / highlight >}} - -Verify checksums and signatures: - -{{< highlight bash >}} -find . -name "*.sha512" -exec sha512sum --check '{}' \; -find . -name "*.asc" -exec gpg --verify '{}' \; -{{< / highlight >}} - -## Update online Javadoc {#apidocs} - -Copy the Javadoc to the web site staging directory. -Updated Javadoc will be committed locally but not pushed yet. -{{< highlight bash >}} -cd ../../site/javadoc -rm -r * -git reset -- README.md -git checkout -- README.md -unzip $DIST_DIR/apache-sis-$NEW_VERSION-doc.zip -mv apidocs/* . -rmdir apidocs -git add -A -git commit --message "Update javadoc for SIS $NEW_VERSION." -firefox index.html -{{< / highlight >}} +## Test the downloads {#test-downloads} -Test the JavaFX and console applications (see [command-line interface page](./command-line.html) -for details about expected output of `sis` command): +Stage the release candidate: {{< highlight bash >}} -cd -mkdir tmp; cd tmp -unzip $DIST_DIR/apache-sis-$NEW_VERSION-bin.zip -wget https://sis.apache.org/examples/coordinates/AmericanCities.csv -wget https://sis.apache.org/examples/coordinates/CanadianCities.csv -./apache-sis-$NEW_VERSION/bin/sis crs EPSG:6676 -./apache-sis-$NEW_VERSION/bin/sis identifier https://sis.apache.org/examples/crs/MissingIdentifier.wkt -./apache-sis-$NEW_VERSION/bin/sis identifier https://sis.apache.org/examples/crs/WrongAxisOrder.wkt -./apache-sis-$NEW_VERSION/bin/sis identifier https://sis.apache.org/examples/crs/EquivalentDefinition.wkt -./apache-sis-$NEW_VERSION/bin/sis transform --sourceCRS EPSG:4267 --targetCRS EPSG:4326 AmericanCities.csv -./apache-sis-$NEW_VERSION/bin/sis transform --sourceCRS EPSG:4267 --targetCRS EPSG:4326 CanadianCities.csv -./apache-sis-$NEW_VERSION/bin/sisfx -cd .. -rm -r tmp cd $DIST_DIR -{{< / highlight >}} - -Commit: - -{{< highlight bash >}} svn add apache-sis-$NEW_VERSION-* cd ../.. svn commit --message "SIS $NEW_VERSION release candidate $RELEASE_CANDIDATE" {{< / highlight >}} -## Test the release {#test} - Execute the following commands in any temporary directory for testing the sources: {{< highlight bash >}} @@ -719,7 +669,7 @@ wget https://dist.apache.org/repos/dist/dev/sis/$NEW_VERSION/RC$RELEASE_CANDIDAT gpg --verify apache-sis-$NEW_VERSION-src.zip.asc unzip apache-sis-$NEW_VERSION-src.zip cd sis-$NEW_VERSION -mvn install +gradle assemble {{< / highlight >}} Execute the following commands in any temporary directory for testing the binary: @@ -736,17 +686,6 @@ bin/sis about --verbose bin/sis crs https://github.com/apache/sis/raw/main/core/sis-referencing/src/test/resources/org/apache/sis/referencing/crs/ProjectedCRS.xml --format WKT {{< / highlight >}} -# Prepare OpenOffice add-in {#openoffice} - -The OpenOffice add-in source code can be distributed under Apache 2 license only. -But the binary may contain non-free resources, notably the EPSG geodetic dataset. -For now, the release manager should apply the following local modifications before -to build the add-in: - -* Move to the `application/sis-openoffice` directory. -* Replace the `src/main/unopkg/license.txt` file by EPSG terms of use. - A copy is found in the `non-free` group of SIS modules. -* Run `mvn package --activate-profiles non-free`. # Prepare Web site {#prepare-website} @@ -782,13 +721,12 @@ find . -name "*.xml" -type f -exec sed -i 's/[[:space:]]*$//' '{}' \; git add --all git commit --message "Staging repository for the $NEW_VERSION release." git push -``` - {{< / highlight >}} The new web site will be published in the [staging area](https://sis.staged.apache.org/). It will not yet be published on `https://sis.apache.org`. + # Put the release candidate up for a vote {#vote} * Create a VOTE email thread on `dev@` to record votes as replies. @@ -824,6 +762,7 @@ Drop the Nexus staging repository: Make the required updates that caused the vote to be canceled during the release cycle. + # Finalize the release {#finalize} The artificats in the repository are not yet mirrored and available for Maven to download. @@ -854,6 +793,7 @@ find . -name "*.asc" -exec gpg --verify '{}' \; The output shall report only good signatures. + ## Update other web sites (JIRA, GitHub, Wiki): * Update the [JIRA][JIRA]: @@ -863,6 +803,7 @@ The output shall report only good signatures. * Create a new [GitHub release](https://github.com/apache/sis/releases). * Update the [Roadmap](https://cwiki.apache.org/confluence/display/SIS/Roadmap) wiki page. + ## Announce the release {#announce} * WAIT 24 hours after committing releases for mirrors to replicate. @@ -880,6 +821,7 @@ svn delete https://dist.apache.org/repos/dist/release/sis/$OLD_VERSION \ --message "Archive SIS-$OLD_VERSION after release of SIS-$NEW_VERSION." {{< / highlight >}} + # Update main branch for the next development cycle {#next-release} On the `main` branch: @@ -892,6 +834,7 @@ Then on the development branch: * Edit the version number in the `application/sis-javafx/src/main/artifact/README` file. + ## Delete old artifacts on Maven snapshot repository {#nexus-clean} Login in the [Nexus repository][repository].