Author: covener
Date: Thu Aug 6 14:15:25 2026
New Revision: 1936926
Log:
release process and script updates from apu164
Modified:
apr/site/trunk/release/README.md
apr/site/trunk/release/common-lib.sh
apr/site/trunk/release/r2-prep-vote.sh
apr/site/trunk/release/r3-push-release-tars.sh
apr/site/trunk/release/r4-stage-release.sh
apr/site/trunk/release/r5-commit-staged-release.sh
Modified: apr/site/trunk/release/README.md
==============================================================================
--- apr/site/trunk/release/README.md Thu Aug 6 14:15:10 2026 (r1936925)
+++ apr/site/trunk/release/README.md Thu Aug 6 14:15:25 2026 (r1936926)
@@ -4,9 +4,8 @@
1. Remind yourself of your GPG password
2. Make sure your key is in the KEYS file of the project and has some useful signatures.
-3. Check CVE status in https://svn.apache.org/repos/private/pmc/apr checkout and make sure there aren't
- ready CVE's from both APR and APU. Move the other projects' stuff into a subdir that doesn't begin with `CVE`
- so tools/readiness.sh will ignore it.
+3. Check CVE status in https://svn.apache.org/repos/private/pmc/apr checkout and make sure the ready items
+ are what you expect.
## 1) Release basics
@@ -35,23 +34,31 @@
8. If unsuccessful, cleanup https://dist.apache.org/repos/dist/dev/apr and repeat with a later rcX.
9. On successful vote:
1. Run `$APR_DEV_TOOLS/r3-push-release-tars.sh` from your APR checkout to fixup and move the artifacts from dev/ to release
- 2. Run `$APR_DEV_TOOLS/r4-stage-release.sh` to stage an update to the project checkout and website. Review the changes.
+ 2. Run `$APR_DEV_TOOLS/r4-stage-release.sh` to stage an update to the project checkout and website.
+
+ Review the changes, especially ./CHANGES and dist/apache.org-dist/release/apr/CHANGES-*
+
+ If something goes wrong and you need to re-run, `svn revert CHANGES NOTICE STATUS include/apu_version.h`
+
3. Wait for dlcdn links (immediate) and directory listings (up to 2 hours) to show the new files.
- https://dist.apache.org/repos/dist/release/apr/
- https://dlcdn.apache.org/apr/
4. Run `$APR_DEV_TOOLS/r5-commit-staged-release.sh` to update the website and dev tree (and remove n-1 release)
- 5. Run r6-announce.sh from this dir to generate announce emails (output will tell you what to do)
+ 5. Run `$APR_DEV_TOOLS/r6-announce.sh` to generate announce emails (output will tell you what to do)
## 2) If there were CVES
-0. Wait for either the dev@apr or [email protected] emails to be visible.
+1. Wait for either the dev@apr or [email protected] emails to be visible.
+1. Update
1. Process the CVEs on the cveprocess site
- Set the CVE to `READY`
- - Find the revision[s] used to backport the security fix and:
- - amend the commit messages to mention the CVE number (you can append the entire CHANGES entry)
- `svn propedit --revprop -r... svn:log`
- - add a timeline entry to the CVE
- > fixed by rXXX in 1.7.x
+ - Use $APR_SECURITY/tools/update_svn_logs_with_cve.py to add the CVE to the stable releases svn commit messages.
+ - add a timeline entry to the CVEs:
+ ```
+ $APR_SECURITY/tools/update_svn_logs_with_cve.py ~/data/apu164 --cveprocess /tmp/cve.sh
+ ```
+ And run the resulting /tmp/cve.sh from $APR_SECURITY/ answering the many prompts (watch the diff closely!)
+
- Use the 'OSS/ASF Emails' tab to send the emails to oss-security and to Apache lists.
- Find the CVE email to dev@apr on lists.apache.org and grab a permalink
- Fill in a 'reference' tag 'vendor-advisory' with the URL to your public post about
@@ -59,6 +66,7 @@
- Save the CVE entry.
- ASF Security will be notified and will submit to the CVE project and then set state to 'PUBLIC'.
2. Add the release to bugzilla: https://bz.apache.org/bugzilla/editversions.cgi?action=add&product=apr
+3. Add the Apache Reporter info https://reporter.apache.org/addrelease.html?apr
## 3) Cleanup
Modified: apr/site/trunk/release/common-lib.sh
==============================================================================
--- apr/site/trunk/release/common-lib.sh Thu Aug 6 14:15:10 2026 (r1936925)
+++ apr/site/trunk/release/common-lib.sh Thu Aug 6 14:15:25 2026 (r1936926)
@@ -118,6 +118,7 @@ detect_version() {
ANNOUNCEFILE=Announcement1.x
CHANGES=CHANGES-APR
is_apr=1
+ CHANGES_BANNER_PREFIX="Changes for APR"
elif test -f include/apu_version.h; then
# determine version from local files
v_major=`grep -E '#define\sAPU_MAJOR_VERSION' include/apu_version.h | awk '{print $3}'`
@@ -126,6 +127,7 @@ detect_version() {
ANNOUNCEFILE=Announcement-aprutil-1.x
CHANGES=CHANGES-APR-UTIL
is_apr=0
+ CHANGES_BANNER_PREFIX="Changes with APR-util"
else
fail "unable to determine version in local checkout"
fi
@@ -180,6 +182,7 @@ v_suffix="${v_suffix}"
is_apr="${is_apr}"
ANNOUNCEFILE="${ANNOUNCEFILE}"
CHANGES="${CHANGES}"
+CHANGES_BANNER_PREFIX="${CHANGES_BANNER_PREFIX}"
EOF
}
@@ -437,17 +440,26 @@ add_changes_entry() {
cp "${ABS_CHANGES}" "${ABS_CHANGES}.tmp" ;
cve_changes "${CVE_JSON}" > "${ABS_CHANGES}.entry.tmp"
awk -v fname="${ABS_CHANGES}.entry.tmp" \
- 'BEGIN{done = 0; active = 0} done == 0 && active == 0 && /^Changes for APR/{
- active = 1; print; next};
- /^( *\*|Changes for APR)/ && active == 1 && done == 0 {
- rec=$0; while(getline<fname) {
- if (! ($0 ~ /^ *$/)){print}
- }
- printf "\n"; print rec; active = 0; done = 1; next
- } //;' "${ABS_CHANGES}".tmp > "${ABS_CHANGES}"
+ 'BEGIN{done = 0; active = 0}
+ done == 0 && active == 0 && /^Changes (for|with) APR/{
+ active = 1; print; next
+ }
+ active == 1 && done == 0 && /^$/ {
+ print; done = 1; active = 0
+ while(getline<fname) {
+ if (! ($0 ~ /^ *$/)){print}
+ }
+ printf "\n"; next
+ }
+ //;' "${ABS_CHANGES}".tmp > "${ABS_CHANGES}"
rm -f "${ABS_CHANGES}".tmp "${ABS_CHANGES}.entry.tmp"
}
+add_next_changes_banner() {
+ # Add the corresponding version placeholder at the top of CHANGES.
+ perl -pi -e "s{(.*coding: utf-8.*)}{\$1\n${CHANGES_BANNER_PREFIX} ${NEXT_VERSION}\n}" CHANGES
+}
+
stage_checkout_release() {
# make sure we are up-to-date
svn up
@@ -463,8 +475,6 @@ stage_checkout_release() {
PROJHEADER=apu_version.h
fi
- # Add the corresponding version placeholder in CHANGES.
- perl -pi -e "s{(.*coding: utf-8.*)}{\$1\nChanges for ${PROJNAME} ${NEXT_VERSION}\n}" CHANGES
# Note the tag date in the STATUS file.
if test -f STATUS; then
date_string=`date '+%B %d, %Y'`
Modified: apr/site/trunk/release/r2-prep-vote.sh
==============================================================================
--- apr/site/trunk/release/r2-prep-vote.sh Thu Aug 6 14:15:10 2026 (r1936925)
+++ apr/site/trunk/release/r2-prep-vote.sh Thu Aug 6 14:15:25 2026 (r1936926)
@@ -77,7 +77,7 @@ cp "${TAR_PATH}"*.tar.* "${AO_DIST_DEV_P
cp "${TAR_PATH}"*.zip* "${AO_DIST_DEV_PATH}"/
svn add "${AO_DIST_DEV_PATH}"/${TAR_BASENAME}*.tar.* "${AO_DIST_DEV_PATH}"/${TAR_BASENAME}*.zip* >/dev/null
-cp "${DIST_DIR}/${TAR_BASENAME}"/CHANGES "${AO_DIST_DEV_PATH}"/${CHANGES}-${v_major}-${v_minor}
+cp "${DIST_DIR}/${TAR_BASENAME}"/CHANGES "${AO_DIST_DEV_PATH}"/${CHANGES}-${v_major}.${v_minor}
# maybe already added
svn add "${AO_DIST_DEV_PATH}"/${CHANGES}-${v_major}-${v_minor} >/dev/null 2>/dev/null || true
Modified: apr/site/trunk/release/r3-push-release-tars.sh
==============================================================================
--- apr/site/trunk/release/r3-push-release-tars.sh Thu Aug 6 14:15:10 2026 (r1936925)
+++ apr/site/trunk/release/r3-push-release-tars.sh Thu Aug 6 14:15:25 2026 (r1936926)
@@ -56,8 +56,9 @@ TAR_PATH="${DIST_DIR}/${TAR_BASENAME}"
#Ensure scratch space is in a state we are ready to work with
AO_DIST_PATH="dist/apache.org-dist"
-AO_DIST_DEV_PATH="${AO_DIST_PATH}/dev/${PROJECT}"
-AO_DIST_RELEASE_PATH="${AO_DIST_PATH}/release/${PROJECT}"
+# /apr/ even for apr-util
+AO_DIST_DEV_PATH="${AO_DIST_PATH}/dev/apr"
+AO_DIST_RELEASE_PATH="${AO_DIST_PATH}/release/apr"
# SVN repository is huge, carefully check out only what we need
rm -rf "${AO_DIST_PATH}"
Modified: apr/site/trunk/release/r4-stage-release.sh
==============================================================================
--- apr/site/trunk/release/r4-stage-release.sh Thu Aug 6 14:15:10 2026 (r1936925)
+++ apr/site/trunk/release/r4-stage-release.sh Thu Aug 6 14:15:25 2026 (r1936926)
@@ -72,7 +72,8 @@ svn ls "$SVN_BASE/$SVN_RELEASE" >/dev/nu
fail_not_dry "release does not exist in SVN: $SVN_RELEASE"
AO_DIST_PATH="dist/apache.org-dist"
-AO_DIST_RELEASE_PATH="${AO_DIST_PATH}/release/${PROJECT}"
+# /apr/ even for apr-util
+AO_DIST_RELEASE_PATH="${AO_DIST_PATH}/release/apr"
DIST_SITEPATH="${DIST_DIR}/site"
@@ -121,27 +122,26 @@ echo "adding src tree changes"
stage_checkout_release
-# XXX: r0-make-candidate.sh doesn't differentiate between APR and APU if both have ready CVES.
-
# checkout/update pmc and get dir dir names that have
# been recorded there for this release
get_version_CVE_DIRS "${DIST_DIR}/pmc"
if test -n "${CVE_DIRS}"; then
echo "adding CVEs: ${CVE_DIRS}"
for changes_file in CHANGES \
- "${AO_DIST_RELEASE_PATH}/${CHANGES}"; do
+ "${AO_DIST_RELEASE_PATH}/${CHANGES}-${v_major}.${v_minor}"; do
for CVE in $CVE_DIRS; do
add_changes_entry "$changes_file" "${DIST_DIR}/pmc/SECURITY/${CVE}/CVE.json"
done
done
fi
+add_next_changes_banner
echo
echo "PENDING REPOSITORY CHANGES"
echo "--------"
echo "SVN changes staged for ${SVN_DIST_URL}"
svn stat "${AO_DIST_RELEASE_PATH}"
-svn diff "${AO_DIST_RELEASE_PATH}/CHANGES*"
+svn diff "${AO_DIST_RELEASE_PATH}/CHANGES"*
echo "--------"
echo "svn changes staged in ${DIST_SITEPATH}"
(cd "${DIST_SITEPATH}" && svn stat)
Modified: apr/site/trunk/release/r5-commit-staged-release.sh
==============================================================================
--- apr/site/trunk/release/r5-commit-staged-release.sh Thu Aug 6 14:15:10 2026 (r1936925)
+++ apr/site/trunk/release/r5-commit-staged-release.sh Thu Aug 6 14:15:25 2026 (r1936926)
@@ -42,7 +42,8 @@ detect_checkout
detect_version $1
AO_DIST_PATH="dist/apache.org-dist"
-AO_DIST_RELEASE_PATH="${AO_DIST_PATH}/release/${PROJECT}"
+# /apr/ even for apr-util
+AO_DIST_RELEASE_PATH="${AO_DIST_PATH}/release/apr"
SVN_SITE_CONTENT_URL="${SVN_SITE_URL}/${PROJECT}/site/trunk/content/"
DIST_SITEPATH="${DIST_DIR}/site"
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.