I have been toying with the idea of volunteering to be Release Manager. I am not ready to do so yet as I have run into numerous problems.
The docs are decent but they are definitely written to an audience that knows a lot of things that I do not and it feels like a lot of knowledge is just assumed. Keep in mind I am a MacOS/Windows user with no Python experience. My main fear is running into a problem during the process where the script needs to be fixed and not being able to do it. I do not have Mike/Paul on speed dial to help me any more. It would probably be helpful if someone saved a start to finish log of all of the commands they ran and from what directory when they were RM. The release.py script implies you can/should run the process from people.apache.org. I have no idea what that is, how I would access it, or what the experience would be like once I was there. I imagine you SSH into the box and I would assume you would do everything in your home folder if you did this, but the docs use /opt/svnrm as the example and it seems weird you would use a folder like this on a shared system. At the moment, I am not considering this option. Since I do not have a Linux machine available, I am trying to use Docker to build a Debian image to run the process. I am running everything as root. I could change it to a user account if it would fix my problems. I should note up front that I do not have a GPG key so I would need to create a new one and "do something" before I begin. The key I used to use when signing releases was lost about 4 computers ago. I do note that HACKING mentions if you use people.a.o you do not do the signing from there. So I guess you use scp or something to pull the files down to sign them locally and then push your signatures back up to people.a.o after? Problem 1: Rolling the tarballs The process creates the tarballs but fails near the end. It looks GPG related? /opt/svnrm# python trunk/tools/dist/release.py build-env 1.14.0 INFO:root:Creating release environment INFO:root:Fetching autoconf-2.69 INFO:root:Building autoconf INFO:root:Fetching libtool-2.4.6 INFO:root:Building libtool ar: `u' modifier ignored since `D' is the default (see `U') ar: `u' modifier ignored since `D' is the default (see `U') INFO:root:Fetching swig-3.0.12 INFO:root:Building swig root@40beb55e988a:/opt/svnrm# python trunk/tools/dist/release.py roll 1.14.2 1899108 INFO:root:Rolling release 1.14.2 from branch branches/1.14.x@1899108 WARNING:root:Copyright year in NOTICE is not the current year WARNING:root:Copyright year in subversion/libsvn_subr/version.c is not the current year WARNING:root:CHANGES has unmerged revisions: r1886201 r1886461 r1898187 INFO:root:Preparing working copy source INFO:root:Building Windows tarballs ../svnadmin/svnadmin.c:2935: warning: Although being used in a format string position, the msgid is not a valid C format string. Reason: The string ends in the middle of a directive. ../libsvn_fs_fs/verify.c:696: warning: Although being used in a format string position, the msgid is not a valid C format string. Reason: The string ends in the middle of a directive. INFO:root:Building Unix tarballs INFO:root:Moving artifacts and calculating checksums Traceback (most recent call last): File "trunk/tools/dist/release.py", line 1916, in <module> main() File "trunk/tools/dist/release.py", line 1912, in main args.func(args) File "trunk/tools/dist/release.py", line 983, in roll_tarballs download_file(KEYS, filepath, None) File "trunk/tools/dist/release.py", line 289, in download_file response = urlopen(url) File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen return opener.open(url, data, timeout) File "/usr/lib/python2.7/urllib2.py", line 435, in open response = meth(req, response) File "/usr/lib/python2.7/urllib2.py", line 548, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python2.7/urllib2.py", line 473, in error return self._call_chain(*args) File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 556, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 404: Not Found Problem 2: Test failure One of the lock_tests consistently fails. I have confirmed I get this failure using the 1.14.1 tarball so I assume it is related to running the tests inside Docker. If this ends up being the only problem, I could probably just safely ignore it and let the others that sign the release verify the tests all work for them. At least one test FAILED, checking /opt/svnrm/subversion-1.14.1/tests.log FAIL: locks-test 14: lock/unlock when 'write-lock' couldn't be obtained Summary of test results: 2518 tests PASSED 163 tests SKIPPED 80 tests XFAILED (17 WORK-IN-PROGRESS) 1 test FAILED Python version: 2.7.16. The log just contains: START: locks-test PASS: locks-test 1: test that locks can expire PASS: locks-test 2: lock only PASS: locks-test 3: lookup lock by path PASS: locks-test 4: attach lock PASS: locks-test 5: get locks PASS: locks-test 6: basic locking PASS: locks-test 7: test that locking requires proper credentials PASS: locks-test 8: test that locking is enforced in final commit step PASS: locks-test 9: dir propchange can be committed with locked child PASS: locks-test 10: breaking, stealing, refreshing a lock PASS: locks-test 11: check out-of-dateness before locking PASS: locks-test 12: lock multiple paths PASS: locks-test 13: lock callback error svn_tests: E200006: Expected error but got SVN_NO_ERROR FAIL: locks-test 14: lock/unlock when 'write-lock' couldn't be obtained PASS: locks-test 15: lock parent and it's child END: locks-test ELAPSED: locks-test 0:00:03.292816 Problem 3: Python bindings tests fail I have tried this using Debian Buster and Python 2 and Debian Bullseye and Python 3. The Perl and Ruby bindings are working OK. I am still having some trouble with JavaHL but feel like I will figure that one out. I have not tried the ctypes bindings yet. This fails using the 1.14.1 tarball as well as when I make a trial run using release.py # make check-swig-py if [ "LD_LIBRARY_PATH" = "DYLD_LIBRARY_PATH" ]; then for d in /opt/svnrm/subversion-1.14.1/subversion/bindings/swig/python/libsvn_swig_py /opt/svnrm/subversion-1.14.1/subversion/bindings/swig/python/../../../libsvn_*; do if [ -n "$DYLD_LIBRARY_PATH" ]; then LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$d/.libs"; else LD_LIBRARY_PATH="$d/.libs"; fi; done; export LD_LIBRARY_PATH; fi; \ cd /opt/svnrm/subversion-1.14.1/subversion/bindings/swig/python; \ /usr/bin/python /opt/svnrm/subversion-1.14.1/subversion/bindings/swig/python/tests/run_all.py Traceback (most recent call last): File "/opt/svnrm/subversion-1.14.1/subversion/bindings/swig/python/tests/run_all.py", line 23, in <module> import mergeinfo, core, client, delta, checksum, pool, fs, ra, wc, repository, \ File "/opt/svnrm/subversion-1.14.1/subversion/bindings/swig/python/tests/mergeinfo.py", line 22, in <module> from svn import core, repos, fs File "/opt/svnrm/subversion-1.14.1/subversion/bindings/swig/python/svn/core.py", line 26, in <module> from libsvn.core import * File "/opt/svnrm/subversion-1.14.1/subversion/bindings/swig/python/libsvn/core.py", line 144 def apr_initialize() -> "apr_status_t": ^ SyntaxError: invalid syntax make: *** [Makefile:944: check-swig-py] Error 1 Problem 4: Emails I have no idea how to send the emails from my Apache address Problem 5: Unknowns Since I have not been able to dry run the entire process I am still unsure what else I will run into and how I would solve those problems. At this point, I do not know if I should or will volunteer, but if I can get to a point where I feel like I understand the process and it is all working for me then I might be willing to give it a try. Mark PS - Example Dockerfile I am currently using to build the clean room. Once I got things working, I was going to automate a bit more of the construction of the environment. FROM debian:buster RUN apt update && apt install -y \ python python-yaml python-dev py3c-dev\ build-essential \ subversion \ zip unzip \ apache2 apache2-dev\ pax gettext m4\ libserf-dev\ zlib1g-dev\ libssl-dev\ liblz4-dev\ libutf8proc-dev\ libperl-dev\ ruby ruby-dev\ openjdk-11-jdk-headless junit\ && apt clean