-
Notifications
You must be signed in to change notification settings - Fork 259
Internals: Release Checklist
We have two main branches on GitHub:
-
development-- all pull requests are merged into this branch -
master-- most recent stable release
(Note: These branch names are under discussion. See #1130.)
The development branch will always be ahead of the master branch, so any merges are done by fast-fowarding.
Near release time we have a release branch, with name of the form release-X.Y-branch, which is occasionally rebased onto development.
The convention for version numbers of Macaulay2 is this:
- 1.YY.MM: a major release, such as occurs every 6 months (May 15 and November 15), stable, made into binary distributions
- 1.YY.MM.1: a minor update, with changes people might want, stable, suitable minor updates to binary distributions on certain architectures
-
1.MM.YY-n-gxxxxxxxxxx: a development version, with no binary distributions. The version number is obtained using
git describe --tags --dirty.
-
Things to do when incrementing the version number to X.Y.Z, say :
- increment the version number in the file
VERSION - add an entry to
distributions/deb/changelog(TODO: Is this still useful?) - commit the two files and push upstream
- increment the version number in the file
-
Things to do when developing a binary release for version X.Y (or version X.Y.Z)
-
make a git branch of the form
release-X.Y-branchand switch to itgit checkout -b release-X.Y-branch -
push it upstream:
git push -u origin release-X.Y-branch -
open a draft pull request
-
update the symbols in
prism.js, which adds syntax highlighting to the html documentation:make -C Macaulay2/editors update-syntax-highlighting -
M2-emacs and other syntax highlighting files should be updated
-
run
npm installinM2/Macaulay2/packages/Styleto make sure that our vendored copy of KaTeX is up to date. -
update the file
M2/Macaulay2/packages/Macaulay2Doc/changes.m2to take the release into account-
find out how the file
Macaulay2/m2/exports.m2has changed since the previous release (usinggit diff), and make appropriate entries to document the new symbols and the deleted symbols. -
find out how the file
Macaulay2/packages/=distributed-packageshas changed since the previous release, and make appropriate entries to document the new packages. SeeMacaulay2/packages/Macaulay2Doc/READMEfor helper code. -
find out which packages have been featured in articles published by the Journal of Software for Algebra and Geometry at https://msp.org/jsag/ since the previous release, and add certification blocks to those packages, using the template in the file
Macaulay2/packages/CertificationTemplate. The git commit number in the certification should point to a version of the package that is identical with the version provided by the journal. (If necessary, add commits and merge them in to provide one.) Also, make appropriate entries to document the newly published and certified packages.
-
-
periodically rebase the branch onto the
developmentbranch. Continue accepting pull requests into thedevelopmentbranch.
-
-
When the release is ready, do:
-
on the branch
release-X.Y-branch, do:git tag release-X.Y git push origin release-X.Y -
mark the pull request as ready and merge it into
development -
push the release tag to the
masterbranch:git push origin release-X.Y:master -
on the web site, update the documentation and version number
-
add the new version number to the
versions.jsonfile on the website. This is a file that should exist on the webserver in the same directory as the variousMacaulay2-X.Ysubdirectories containing the documentation. It should contain a JSON object whose elements are key-value pairs corresponding to all of the Macaulay2 versions that have documentation available on the website in decreasing order. The keys contain how each version will appear in the dropdown version selection menu, and the values contain the corresponding version numbers, e.g.,{"latest release (1.22)": "1.22", "1.21": "1.21", "1.20": "1.20"}`
This is used by
version-select.jsin theStylepackage to create the dropdown menu.
-
There are some things about a new distribution of Macaulay2 that should be checked manually. Install the distribution on your system as the ultimate user will and then try:
-
emacs M2 interaction: Press f12 and verify that Macaulay2 starts.
-
emacs M2 mode: Visit the file
/tmp/foo.m2and verify that the buffer is in Macaulay2 mode. -
emacs Macaulay2 info documentation: Start the emacs Info documentation reader with C-h i and verify that menu items are present in the node
(dir)Topfor the various Macaulay2 packages in a section entitled "Macaulay2 and its packages". -
readline: Start M2 in a terminal window and then type the following characters: resoTAB. The partial word should be completed to
resolution. Then press C-a. # Verify that the cursor is now at the beginning of the line. -
uncategorized packages should get a keyword:
select(separate_" " version#"packages", p -> (readPackage p)#Keywords === {"Uncategorized"})
-
check existing keywords for sensibility and near duplicates
stack sort unique flatten apply(separate_" " version#"packages", p -> (readPackage p)#Keywords)
-
DebuggingModeshould be turned off in packages:select(separate_" " version#"packages", p -> (readPackage p)#DebuggingMode)
-
See whether the documentation looks okay. Do this both without and with installing a fresh copy of
FirstPackageand restarting. Make sure the example output is there.i1 : loadPackage "FirstPackage" o1 = FirstPackage o1 : Package i2 : help firstFunction o2 = firstFunction ************* Description =========== Here we show an example. +--------------------+ |i1 : firstFunction 1| | | |o1 = Hello World! | +--------------------+ |i2 : firstFunction 0| | | |o2 = D'oh! | +--------------------+ Ways to use firstFunction : =========================== * "firstFunction(ZZ)" -- a silly first function o2 : DIV
-
see whether C-c works in emacs and in a terminal, both for M2 and its subjobs:
i1 : while true do 1 C-c C-cstdio:1:15:(3): error: interrupted i12 : run "sleep 10" C-c C-c <-- interrupted immediately --> o12 = 2 <-- right answer i2 : run "sleep 10" C-c C-c <-- too much delay --> o2 = 0 <-- wrong answer i3 : uninstallPackage "Schubert2"; installPackage "Schubert2" ... <-- wait for it to start running examples: --making example results for Riemann-Roch on a curve in file /Users/dan/Library/Application Support/Macaulay2/local/share/doc/Macaulay2/Schubert2/example-output/___Riemann-__Roch_spon_spa_spcurve.out ulimit -t 700; ulimit -s 8192; cd /var/folders/40/dy88l5qd361391m_3v2m51bm0000gn/T/M2-69452-0/9-rundir/; /Users/dan/src/M2/github/Macaulay2-M2-clone/M2/BUILD/dan/builds.tmp/mac64.production/M2 --silent --print-width 77 --stop --int --no-readline -q -e 'loadPackage("Schubert2", Reload => true, FileName => "/Users/dan/src/M2/github/Macaulay2-M2-clone/M2/Macaulay2/packages/Schubert2.m2")' <"/var/folders/40/dy88l5qd361391m_3v2m51bm0000gn/T/M2-69452-0/4___Riemann-__Roch_spon_spa_spcurve.m2" >>"/Users/dan/Library/Application Support/Macaulay2/local/share/doc/Macaulay2/Schubert2/example-output/___Riemann-__Roch_spon_spa_spcurve.errors" 2>&1 C-c C-c <-- then interrupt it: <-- expect it to stop immediately with something like this: /Users/dan/Library/Application Support/Macaulay2/local/share/doc/Macaulay2/Schubert2/example-output/___Riemann-__Roch_spon_spa_spcurve.errors:0:1: (output file) error: Macaulay2 exited with return code 2 /var/folders/40/dy88l5qd361391m_3v2m51bm0000gn/T/M2-69452-0/4___Riemann-__Roch_spon_spa_spcurve.m2:0:1: (input file) stdio:4:1:(3): error: subprocess interrupted
-
see whether the
--intcommand line option works to suppressSIGINThandling:<-- see whether you can interrupt M2 while it's waiting for input: $ M2 --stop --int i1 : C-c C-c $ echo $? 130 <-- right answer <-- see whether you can interrupt M2 while it's running: $ M2 --stop --int -e 'print hi ; while true do 1' <-- wait for "hi" to be printed C-c C-c <-- interrupted immediately --> $ echo $? 130 <-- right answer
-
see
0-final-check-interactive-input-behaviourif changes have been made to top level user interaction -
see whether you can interrupt the printing out the following commands, e.g., in emacs with C-c> C-c:
<< 1..50000 1..50000 -
run a benchmark and compare to previous versions to make sure optimization is on:
benchmark "scan(0..10000,i->i^3)" loadPackage "Benchmark" runBenchmarks
-
fix bugs
-
add test files
-
run
ldd M2orotool -L M2in...your-build-tree.../StagingArea/x86_64-MacOS-10.5/bin/to see that we don't depend on any of our own sharable libraries (yet), or on any libraries installed in nonstandard locations, such as in/sw/lib -
do the same in
...your-build-tree.../StagingArea/x86_64-MacOS-10.5/libexec/Macaulay2/x86_64-MacOS-10.5/for all the programs we compile and distribute -
check that readline and history and name completion work in an xterm
-
look at html documentation
-
look at info documentation
-
run M2 without
-qoption and then tryviewHelpto see if the list of installed packages is up to date -
check for bad links:
cd ~/Library/Application\ Support/Macaulay2 or cd ~/.Macaulay2 and find . -name \*.html |xargs html-check-links -
try
viewHelp res, etc. -
update
Macaulay2/man/M2.1.in -
check that alarm works or devise an automated test:
i11 : alarm 4 ; for i from 0 do j = i stdio:10:31:(3): error: alarm occurred i13 : j o13 = 1858410
-
check that
installPackageworks for the user (now, with no symbolic links) and that it creates a documentation database and finds and uses it, e.g.:i1 : installPackage "Classic" and then: i1 : notify=true o1 = true i2 : loadPackage ("Classic",Reload=>true) --opened database: /Users/dan/src/M2/trunk/BUILD/dan/builds.tmp/mac64.production/StagingArea/x86_64-MacOS-10.6/lib/Macaulay2/x86_64-MacOS-10.6/Classic/cache/rawdocumentation-dcba-8.db --beginDocumentation: using documentation database, skipping the rest of /Users/dan/Library/Application Support/Macaulay2/local/share/Macaulay2/Classic.m2 --package "Classic" loaded --loaded /Users/dan/Library/Application Support/Macaulay2/local/share/Macaulay2/Classic.m2 o2 = Classic
-
check that
installPackage "Macaulay2Doc"works -
try
edit(dim,Module), in emacs under X and in emacs in an xterm -
verify that
applicationDirectory()yields~/Library/Application Support/Macaulay2/under Mac OS X and~/.Macaulay2under other OSes. Then verify that if that directory is removed, M2 can still start up (without the-qcommand line option). -
verify that
~/.Macaulay2/READMEor~/Library/Application Support/Macaulay2/README, if it is deleted, is restored by running M2 without the-qoption -
run M-x
Info-validateon the info file -
make sure the links in the html documentation work
-
run
make -k checkand check the output -
make sure the macos x readme file is up to date
-
test SCSCP:
- Start a server in one M2 process
i1 : loadPackage "SCSCP"; i2 : startServer(); [SCSCP][Server] Listening on :26133
- Test the server from another M2 process by computing 1+2 and getting 3 in response:
i1 : loadPackage "SCSCP"; i2 : s = newConnection "localhost" o2 = SCSCP Connection to Macaulay2 (0.1) on localhost:26133 i3 : s <== openMath 1+2 o3 = 3
- Try to stop the server by typing a Ctrl-C on the first process
[SCSCP][Server] Listening on :26133 [SCSCP][Server] Incoming connection. Forking. C-c C-c currentString:1:16:(3):[15]: error: before eval: --backtrace update--
- Start a server in one M2 process
-
Occasionally test all the packages that cache their example output. This can be done on a machine where you have installed all the prerequisite external programs for those packages (see
../../M2/INSTALL, "Rerunning the package examples"), with a fresh build tree, by adding the command line option RerunExamples=true to themakecommand. If you forgot to do that the first time around, you can first clean the packages withmake clean-packagesin theM2/Macaulay2/packagesdirectory of the build tree.
Homepage | Projects | Packages | Documentation | Events | Google Group