Files
weewx/DEV_NOTES.txt
2023-05-06 06:27:53 -04:00

433 lines
14 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. modify pyproject.toml
2. make version
3. Make sure all changes have been logged
1. docs/changes.md
2. docs/upgrading.htm
3. make deb-changelog
4. make redhat-changelog
5. make suse-changelog
4. Build the documentation (may emit bogus warnings about dead links)
1. make build-docs
5. Create the packages
1. make pypi-packages
2. make debian-package
3. make redhat-packages
4. make suse-packages
6. Sanity check on production machine
1. unpack the tarball, install, run
7. Commit and tag:
1. git commit -m "Version 1.3.1"
1. git tag -a v1.3.1 -m "v1.3.1"
8. Upload wheel to pypi.org
1. make upload-pypi
9. Upload to weewx.com
1. make upload-src
2. make upload-debian
3. make upload-redhat
4. make upload-suse
6. make upload-docs
10. Update the deb repository
1. make pull-apt-repo
2. make update-apt-repo
3. make push-apt-repo
11. Update the redhat repository
1. make pull-yum-repo
2. make update-yum-repo
3. make push-yum-repo
12. Update the suse repository
1. make pull-suse-repo
2. make update-suse-repo
3. make push-suse-repo
13. Reshuffle files on the server
1. make release
2. make release-apt-repo
3. make release-yum-repo
4. make release-suse-repo
14. Announce the release to the weewx user's group.
pre-requisites ----------------------------------------------------------------
Building anything other than the src tarball requires mkdocs.
Signing packages requires gpg and local copy of authorized private+public keys.
The debian repo management requires aptly.
The redhat repo management requires createrepo.
The suse repo management requires createrepo.
Install mkdocs without touching your system python:
pip3 install --user mkdocs
pip3 install --user mkdocs-material
To build debian package install the following (use 'apt-get install'):
git
rsync
gpg
debhelper
To build redhat package install the following (use 'yum install'):
git
rsync
rpm-build
rpm-sign
To build suse package install the following (use 'zypper install'):
git
rsync
rpm-build
To build pypi package install the following (see the pypi section):
poetry
howto -------------------------------------------------------------------------
how to update the version number:
Change the version number in pyproject.toml
make version # this propagates the version number everywhere
git commit -a -m "bump to version x.y.z"
how to build wheel and source tarball:
make pypi-packages
how to build debian package:
make deb-changelog
emacs pkg/debian/changelog # add package-specific changes, if any
git commit -m "update deb changelog" pkg/debian/changelog
make debian-package
how to build redhat package:
make redhat-changelog
emacs pkg/changelog.el # add package-specific changes, if any
git commit -m "update redhat changelog" pkg/changelog.el
make redhat-package
how to build redhat package:
make suse-changelog
emacs pkg/changelog.suse # add any package-specific changes, if any
git commit -m "update suse changelog" pkg/changelog.suse
make suse-package
to build redhat packages with custom rpm revision:
make redhat-changelog RPMREVISION=2
make redhat-packages RPMREVISION=2
make pull-yum-repo
make update-yum-repo RPMREVISION=2
make push-yum-repo
ssh weewx.com rsync -arv /var/www/html/yum-test/ /var/www/html/yum
suse also uses RPMREVISION, but debian uses DEBREVISION. this is useful when
there is a change to asset(s) in the packaging, but not part of weewx itself.
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
%_gpg_name YOUR_NAME_HERE
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 "YOUR_NAME_HERE" > username.gpg.key
Install using pip
make pypi-packages
pip install dist/weewx-x.y.z-py3-none-any.whl
weectl station create
debian install/remove:
apt-get install weewx # install with apt
apt-get remove weewx # remove with apt
apt-get purge weewx # purge removes /etc/weewx and debconf settings
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
suse install/remove:
zypper install weewx-x.y.z-r.rpm [--nogpgcheck] # install with zypper
zypper remove weewx # remove with zypper
rpm -i weewx-x.y.z-r.rpm # install with rpm directly
rpm -e weewx # remove with rpm
howto: build the documents --------------------------------------------------
Prerequisites:
- Python 3.7 or greater, with pip installed
- Install mkdocs:
python3 -m pip install mkdocs
- Install the theme "material" for mkdocs:
python3 -m pip install mkdocs-material
Steps:
- make build-docs
howto: build and publish wheels to pypi.org -----------------------------------
Prerequisites:
- Python 3.7 or greater, with pip installed
- Install mkdocs:
python3 -m pip install mkdocs
- Install the theme "material" for mkdocs:
python3 -m pip install mkdocs-material
- Install poetry:
curl -sSL https://install.python-poetry.org | python3 -
- Get an API token from pypi.org
See https://pypi.org/manage/account/token/
- Tell poetry to use it:
poetry config pypi-token.pypi pypi-substitute-your-pypi-key
Steps:
- Build the docs (may emit bogus warnings about dead links):
make build-docs
- Build the wheel
make pypi-packages
- Publish to pypi.org
make upload-pypi
howto: deb repository ---------------------------------------------------------
aptly has two different mechanisms for doing a 'publish': switch or update.
we use snapshots, and publish using 'publish switch', rather than publishing
using a simple 'publish update'.
there are two apt repositories: python2 and python3
to do apt 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
create local debian repo using aptly:
aptly repo create -distribution=squeeze -component=main -architectures=all python2-weewx
aptly repo create -distribution=buster -component=main -architectures=all python3-weewx
put a bunch of deb files into an empty apt repo:
for f in `ls distdir`; do aptly repo add python2-weewx distdir/$f; done
create a snapshot:
aptly snapshot create python-weewx-x.y.z-n from repo python2-weewx
aptly snapshot create python3-weewx-x.y.z-n from repo python3-weewx
publish using snapshot:
aptly publish -architectures=all snapshot python-weewx-x.y.z-n python2
aptly publish -architectures=all snapshot python3-weewx-x.y.z-n python3
update using 'publish switch':
aptly repo add python2-weewx dist/python-weewx_x.y.z-n_all.deb
aptly snapshot create python-weewx-x.y.z-n from repo python2-weewx
aptly publish switch squeeze python2 python-weewx-x.y.z-n
aptly repo add python3-weewx dist/python3-weewx_x.y.z-n_all.deb
aptly snapshot create python3-weewx-x.y.z-n from repo python3-weewx
aptly publish switch buster python3 python3-weewx-x.y.z-n
update using 'publish update':
aptly publish repo -architectures=all python2-weewx squeeze
aptly repo add python2-weewx dist/squeeze/python-weewx_x.y.z-n_all.deb
aptly publish update squeeze python2
aptly publish repo -architectures=all python3-weewx buster
aptly repo add python3-weewx dist/buster/python3-weewx_x.y.z-n_all.deb
aptly publish update buster python3
clone the published apt repo to local space:
mkdir -p ~/.aptly
rsync -arv USER@weewx.com:/var/www/html/aptly-test/ ~/.aptly
synchronize local aptly changes with the published apt repo:
rsync -arv ~/.aptly/ USER@weewx.com:/var/www/html/aptly-test
switch from testing to production (this is done at weewx.com):
rsync -arv /var/www/html/aptly-test/ /var/www/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
echo "deb [arch=all] http://weewx.com/apt/ buster main" | sudo tee /etc/apt/sources.list.d/python3-weewx.list
howto: yum repository ---------------------------------------------------------
create yum repo:
mkdir -p ~/.yum/weewx/{el7,el8}/RPMS
update local yum repo with latest rpm:
cp *.el7.rpm ~/.yum/weewx/el7/RPMS
createrepo -o ~/.yum/weewx/el7 ~/.yum/weewx/el7
cp *.el8.rpm ~/yum/weewx/el8/RPMS
createrepo -o ~/.yum/weewx/el8 ~/.yum/weewx/el8
clone the published yum repo to local space:
mkdir -p ~/.yum
rsync -arv USER@weewx.com:/var/www/html/yum-test/ ~/.yum
synchronize local yum changes with published yum repo:
rsync -arv ~/.yum/ USER@weewx.com:/var/www/html/yum-test
switch from testing to production (this is done at weewx.com):
rsync -arv /var/www/html/yum-test/ /var/www/html/yum
notes -------------------------------------------------------------------------
there are multiple changelogs:
docs/changes.md - definitive changelog for the application
pkg/debian/changelog - changes to the debian packaging
pkg/changelog.el - changes to the redhat packaging
pkg/changelog.suse - changes to the suse packaging
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.
both debian and redhat deprecate the use of '/usr/bin/env python' as the
shebang - they want a very tight binding to the operating system python as the
shebang. in fact, since late 2019 redhat build tools see any shebang other
than a tight coupling to the operating system's python as an error and refuse
to accept it. however, the bsd platforms prefer this as the shebang, and the
other approach fails on bsd. macos uses something else.
weewx supports python 2.7 and any python 3.5+ so it should not be tightly
coupled to any specific python installation.
so use the source code should use the '/usr/bin/env python' shebang. on
platforms that refuse to accept this, replace the package builder will replace
this with whatever that platform will accept. the /etc/default/weewx plus
shell stubs in /usr/bin/wee* is used in platform installations to provide
python flexibility so that users do not have to install weewx multiple times
to experiment with different versions of python. users who run weewx directly
from a git clone get all of the 'env python' goodness of being able to specify
whatever python interpreter they want.
unit tests --------------------------------------------------------------------
prerequisites:
python 3.7
python-usb
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
Using pip:
- new install to user space
make pypi-packages
pip install dist/weewx-x.y.z-py3-none-any.whl --user
weectl station create
- upgrade user data
modify ~/weewx-data/weewx.conf
weectl station upgrade
- new install using pip to /opt/weewx
make pypi-packages
sudo pip install dist/weewx-x.y.z-py3-none-any.whl
sudo weectl station create /opt/weewx/weewx.conf
- 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
weectl extension install https://github.com/matthewwall/weewx-cmon/archive/master.zip
weectl extension install ~/weewx-data/examples/pmon
weectl extension uninstall cmon
weectl extension uninstall pmon
- reconfigure
weectl station reconfigure
weectl station reconfigure --driver=weewx.drivers.vantage --no-prompt