mirror of
https://github.com/weewx/weewx.git
synced 2026-04-18 08:36:54 -04:00
421 lines
13 KiB
Plaintext
421 lines
13 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 redhat-changelog
|
|
4. make suse-changelog
|
|
5. docs/upgrading.htm
|
|
4. Create the packages
|
|
1. make src-package
|
|
2. make debian-packages
|
|
3. make redhat-packages
|
|
4. make suse-packages
|
|
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-debian
|
|
3. make upload-redhat
|
|
4. make upload-suse
|
|
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. Update the redhat repository
|
|
1. make pull-yum-repo
|
|
2. make update-yum-repo
|
|
3. make push-yum-repo
|
|
4. ssh weewx.com rsync -arv /var/www/html/yum-test/ /var/www/html/yum
|
|
10. Update the suse repository
|
|
1. make pull-suse-repo
|
|
2. make update-suse-repo
|
|
3. make push-suse-repo
|
|
4. ssh weewx.com rsync -arv /var/www/html/suse-test/ /var/www/html/suse
|
|
11. 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 redhat-changelog
|
|
make suse-changelog
|
|
vi docs/changes.txt # as needed
|
|
vi docs/upgrading.htm # as needed
|
|
git commit -a -m "release x.y.z"
|
|
git push
|
|
|
|
# build src, upload to development_versions
|
|
rm -rf build dist
|
|
make src-package upload-src
|
|
|
|
# on debian host, build debian packages, upload to development_versions
|
|
rm -rf build dist
|
|
make debian-packages upload-debian
|
|
|
|
# on redhat host, build the redhat packages, upload to development_versions
|
|
rm -rf build dist
|
|
make redhat-packages upload-redhat
|
|
|
|
# on suse host, build the suse packages, upload to development_versions
|
|
rm -rf build dist
|
|
make suse-packages upload-suse
|
|
|
|
# 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
|
|
make pull-apt-repo
|
|
make update-apt-repo (requires local installation of aptly)
|
|
make push-apt-repo
|
|
|
|
# update the yum repository
|
|
make pull-yum-repo
|
|
make update-yum-repo (requires local installation of createrepo)
|
|
make push-yum-repo
|
|
|
|
# update the suse repository
|
|
make pull-suse-repo
|
|
make update-suse-repo (requires local installation of createrepo)
|
|
make push-suse-repo
|
|
|
|
|
|
pre-requisites ----------------------------------------------------------------
|
|
|
|
to build debian package install the following (use 'apt-get install'):
|
|
git
|
|
rsync
|
|
gpg
|
|
debhelper
|
|
python3-distutils
|
|
|
|
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
|
|
|
|
|
|
howto -------------------------------------------------------------------------
|
|
|
|
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 packages:
|
|
make deb-changelog
|
|
emacs pkg/debian/changelog # add any package-specific changes, if any
|
|
git commit -m "update deb changelog" pkg/debian/changelog
|
|
make debian-packages
|
|
|
|
how to build redhat packages:
|
|
make redhat-changelog
|
|
emacs pkg/changelog.el # add any package-specific changes, if any
|
|
git commit -m "update redhat changelog" pkg/changelog.el
|
|
make redhat-packages
|
|
|
|
how to build redhat packages:
|
|
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-packages
|
|
|
|
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
|
|
|
|
source install:
|
|
python ./setup.py install
|
|
python ./setup.py install home=/opt/weewx-x.y.z (this does not work!)
|
|
|
|
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: 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.txt - 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 rehat 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 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
|