Files
weewx/DEV_NOTES.txt
2019-01-14 20:10:48 -05:00

365 lines
12 KiB
Plaintext

checklist for doing a release:
1. Check weewx.conf for local changes. In particular, check to make sure:
1. WEEWX_ROOT points to /home/weewx
2. debug=0 in weewx.conf
2. Make sure the version is correct
1. weewx.__init__.py
2. make version
3. Make sure all changes have been logged
1. docs/changes.txt
2. make deb-changelog
3. make rpm-changelog
4. docs/upgrading.htm
4. Create the packages
1. make src-package
2. make deb-package
3. make rpm-package (redhat)
4. make rpm-package (suse)
5. Sanity check on production machine: unpack the tarball, install, run
6. Tag it
1. git tag -a v1.3.1 -m "Version 1.3.1 release"
7. Upload to weewx.com
1. make upload-src
2. make upload-deb
3. make upload-rpm RPMOS=.rhel
4. make upload-rpm RPMOS=.suse
5. make upload-readme
6. make upload-docs
8. Update the deb repository
1. make pull-apt-repo
2. make update-apt-repo
3. make push-apt-repo
4. ssh weewx.com rsync -arv /var/www/html/aptly-test/ /var/www/html/aptly
9. Announce the release to the weewx user's group.
release process by command: ---------------------------------------------------
# on any host, do a fresh checkout, set the version and update changelogs
git clone https://github.com/weewx/weewx.git
vi bin/weewx/__init__.py
make version
make deb-changelog
make rpm-changelog
vi docs/changes.txt # as needed
vi docs/upgrading.htm # as needed
git commit -a -m "release x.y.z"
git push
# generate the readme then upload it to development_versions
make readme.txt upload-readme
# build src, upload to development_versions
rm -rf build dist
make src-package upload-src
# on debian host, build deb package, upload to development_versions
rm -rf build dist
make deb-package upload-deb
# on redhat host, build the redhat rpm package, upload to development_versions
rm -rf build dist
make rpm-package upload-rpm
# on suse host, build the suse rpm package, upload to development_versions
rm -rf build dist
make rpm-package upload-rpm
# tag the release
git tag -a vX.Y.Z -m "tag release X.Y.Z"
# upload the docs
git clone https://github.com/weewx/website.git
make upload-docs
# move the new files into position
make release
# update the apt repository (requires aptly and local clone of the apt repo)
make update-apt-repo
make push-apt-repo
howto -------------------------------------------------------------------------
create README.txt:
make readme.txt
how to update the version number:
perl -pi -e 's/__version__=".*"/__version__="x.y.z"/' bin/weewx/__init__.py
make version # this propagates the version number everywhere
git commit -a -m "bump to version x.y.z"
how to build source package:
make src-package
how to build debian package:
make deb-changelog
emacs pkg/debian/changelog # add any package-specific changes, if any
git commit -m "update deb changelog" pkg/debian/changelog
make deb-package
how to build redhat package:
make rpm-changelog
emacs pkg/changelog.rpm # add any package-specific changes, if any
git commit -m "update rpm changelog" pkg/changelog.rpm
make rpm-package
to display debconf variables:
sudo debconf-show weewx
to manually purge debconf variables:
echo PURGE | sudo debconf-communicate weewx
to sign rpm packages you need .rpmmacros in your home directory:
~/.rpmmacros
%_signature gpg
%_gpg_name Matthew Wall
to generate gpg key used for signing packages:
gpg --gen-key
gpg --list-keys
to export the text version of a public key:
gpg --export -a "Matthew Wall" > mwall.gpg.key
source install:
setup.py install
setup.py install home=/opt/weewx-x.y.z
debian install/remove:
dpkg -i weewx_x.y.z-r.deb # install
(apt-get install weewx) # finish install if dependencies failed
dpkg -r weewx # remove
dpkg -P weewx # purge
redhat install/remove:
yum install weewx-x.y.z-r.rpm [--nogpgcheck] # install with yum
yum remove weewx # remove with yum
rpm -i weewx-x.y.z-r.rpm # install with rpm directly
rpm -e weewx # remove with rpm
create debian repo using aptly:
aptly repo create -distribution=squeeze -component=main weewx
aptly repo add weewx dist/weewx_3.0.0-1_all.deb
aptly snapshot create weewx-3.0.0 from repo weewx
aptly -architectures="all" publish snapshot weewx-3.0.0
update debian repo using aptly:
aptly repo add weewx dist/weewx_3.0.1-1_all.deb
aptly snapshot create weewx-3.0.1 from repo weewx
aptly -architectures="all" publish switch squeeze weewx-3.0.1
clone the published apt repo at godaddy to local space:
mkdir -p ~/.aptly
rsync -arv --rsync-path /home/content/t/o/m/tomkeffer/bin/rsync -e ssh USER@weewx.com:/home/content/t/o/m/tomkeffer/html/aptly/ ~/.aptly
synchronize local aptly changes with the published apt repo at godaddy:
rsync -arv --rsync-path /home/content/t/o/m/tomkeffer/bin/rsync -e ssh ~/.aptly/ USER@weewx.com:/home/content/t/o/m/tomkeffer/html/aptly
for clients to use an apt repo at weewx.com:
curl -s http://weewx.com/keys.html | sudo apt-key add -
echo "deb [arch=all] http://weewx.com/apt/ squeeze main" | sudo tee /etc/apt/sources.list.d/weewx.list
notes -------------------------------------------------------------------------
there are multiple changelogs:
docs/changes.txt - definitive changelog for the application
pkg/debian/changelog - changes to the debian packaging
pkg/changelog.rpm - changes to the redhat packaging
README.txt - copy of changes.txt uploaded to download area
when signing, gpg info must match the name and email in the latest package
changelog entry.
the debian changelog *must* have a version number that matches the app version.
the redhat package will build if the version numbers do not match. use the
rpm-changelog and deb-changelog targets to ensure that changelog versions match
the application version for a release.
there are many ways to build a debian package. first tried dpkg (uses DEBIAN
dir and is fairly low-level) but that does not create changes and source diffs.
then dried dpkg-buildpackage (uses debian dir and is higher level) but misses
the config and templates. ended up using dpkg-buildpackage with some manual
(scripted) file manipulation.
to do debian builds you must first install:
python-imaging
python-configobj
debhelper
to do repo updates you must first install aptly:
https://www.aptly.info/download/
for example, on debian:
echo "deb http://repo.aptly.info/ squeeze main" | sudo tee /etc/apt/sources.list.d/aptly.list
wget -qO - https://www.aptly.info/pubkey.txt | sudo apt-key add -
sudo apt-get update
sudo apt-get install aptly
unit tests --------------------------------------------------------------------
prerequisites:
python 2.7
python-usb
python-mock 0.6
pyephem
to set up mysql server with user and permissions for testing:
make test-setup
to run all unit tests:
make test
(note: do not run this as root)
to clean up after running tests:
make test-clean
guidelines:
unit tests should put transient files in /var/tmp/weewx_test
testing -----------------------------------------------------------------------
what to test when creating debian and redhat packages:
install, upgrade, remove, purge
install, modify files, remove
install, modify files, upgrade
any linux:
- new install using setup.py to /home/weewx
setup.py install
- upgrade using setup.py to /home/weewx
setup.py install
modify /home/weewx/weewx.conf
setup.py install
- new install using setup.py to /opt/weewx
setup.py install home=/opt/weewx
- upgrade using setup.py to /opt/weewx
setup.py install home=/opt/weewx
modify /opt/weewx/weewx.conf
setup.py install home=/opt/weewx
on centos and suse:
- new install using rpm
rpm -i weewx_x.y.z.rpm
- upgrade using rpm
rpm -i weewx_r.s.t.rpm
rpm -U weewx_x.y.z.rpm
- upgrade using rpm with extensions installed
rpm -i weewx_r.s.t.rpm
wee_extension --install cmon
rpm -U weewx_x.y.z.rpm
debian:
- new install usinb dpkg
dpkg -i weewx_x.y.z.deb
- upgrade using dpkg take maintainer's version of weewx.conf
dpkg -i weewx_r.s.t.deb
modify /etc/weewx/weewx.conf
dpkg -i weewx_x.y.z.deb
- upgrade using dpkg use old version of weewx.conf
dpkg -i weewx_r.s.t.deb
modify /etc/weewx/weewx.conf
dpkg -i weewx_x.y.z.deb
- reconfigure using dpkg
dpkg-reconfigure weewx
all platforms:
- installation and removal of extensions
wee_extension --install cmon
wee_extension --install pmon
wee_extension --remove cmon
- reconfigure using wee_config
wee_config --reconfigure
wee_config --reconfigure --driver=weewx.drivers.vantage
- list drivers
wee_config --list-drivers
code summary ------------------------------------------------------------------
the makefile target 'code-summary' will display a summary of the codebase. it
uses the tool cloc (github.com/AlDanial/cloc).
here is the summary as of 14jan2019:
308 text files.
294 unique files.
142 files ignored.
github.com/AlDanial/cloc v 1.81 T=2.12 s (78.6 files/s, 39192.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Python 101 7816 15299 29005
HTML 17 3044 43 20501
CSS 9 171 146 1824
Pascal 11 59 11 1091
Perl 2 45 83 755
Bourne Shell 9 115 188 664
JavaScript 8 382 277 611
make 2 54 47 310
Bourne Again Shell 2 34 185 203
Markdown 3 34 0 149
XML 3 8 7 84
-------------------------------------------------------------------------------
SUM: 167 11762 16286 55197
-------------------------------------------------------------------------------
the bin directory:
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Python 88 7513 14822 27888
HTML 2 56 0 1316
Markdown 1 9 0 61
-------------------------------------------------------------------------------
SUM: 91 7578 14822 29265
-------------------------------------------------------------------------------
the test directories:
-------------------------------------------------------------------------------
weecfg/test
Python 1 117 176 370
weecfg/test
Python 4 107 62 464
weeutil/test
Python 2 146 88 606
weewx/test
Python 9 311 237 1048
-------------------------------------------------------------------------------
SUM: 16 681 563 2488
-------------------------------------------------------------------------------
the driver directory:
-------------------------------------------------------------------------------
Python 15 2808 5530 13796
-------------------------------------------------------------------------------
bin less drivers and tests directories:
-------------------------------------------------------------------------------
Python 57 4024 8729 11604
-------------------------------------------------------------------------------