mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-18 17:57:11 +03:00
doc: update version number notes, move to contrib guide
[ci skip]
This commit is contained in:
parent
1ff2516a84
commit
11ce2aff59
@ -1196,6 +1196,81 @@ Finally, for quick, fine-grained performance measurements when troubleshooting o
|
||||
|
||||
|
||||
|
||||
## Version numbers
|
||||
|
||||
Some old version numbering goals:
|
||||
|
||||
1. automation, robustness, simplicity, platform independence
|
||||
|
||||
2. cabal versions must be all-numeric
|
||||
|
||||
3. release versions can be concise (without extra .0's)
|
||||
|
||||
4. releases should have a corresponding VCS tag
|
||||
|
||||
5. development builds should have a precise version appearing in --version
|
||||
|
||||
6. development builds should generate cabal packages with non-confusing versions
|
||||
|
||||
7. there should be a way to mark builds/releases as alpha or beta
|
||||
|
||||
8. avoid unnecessary compiling and linking
|
||||
|
||||
9. minimise VCS noise and syncing issues (commits, unrecorded changes)
|
||||
|
||||
Current policy:
|
||||
|
||||
- We (should) follow <http://haskell.org/haskellwiki/Package_versioning_policy>
|
||||
|
||||
- The "full release version" is ma.jor.minor, where minor is 0 for a
|
||||
normal release or 1..n for bugfix releases. Each component is a
|
||||
natural number (can be >= 10). Eg: 1.13 major release, 1.13.1
|
||||
bugfix release.
|
||||
|
||||
- The "release version", which we prefer to use when possible, is
|
||||
just ma.jor when minor is 0. Ie elide the dot zero.
|
||||
|
||||
- The build version is ma.jor.minor+patches, where patches is the number
|
||||
of patches applied in the current repo since the last release tag.
|
||||
|
||||
- `hledger --version` shows the release version or build version as
|
||||
appropriate.
|
||||
|
||||
- Release tags in the VCS are like PKG-VERSION. Eg hledger-1.13,
|
||||
- hledger-ui-1.13.1.
|
||||
|
||||
hledger version numbers appear in:
|
||||
|
||||
- the project's .version file. This is the source of truth.
|
||||
`make setversion` propagates this version number to:
|
||||
|
||||
- each package's package.yaml file. Here the package version, a CPP
|
||||
VERSION macro, and bounds on other hledger packages (like >=
|
||||
hledger-lib-VERSION && < hledger-lib-NEXTMAJORVERSION) are
|
||||
declared. `make gencabal` or `stack build [--dry-run]`
|
||||
propagates these to packages' .cabal files.
|
||||
|
||||
- hledger/Hledger/Cli/Version.hs assigns VERSION to a global
|
||||
constant accessible by other hledger code.
|
||||
|
||||
- the doc/lib.m4 file, where it is assigned to the _version_ m4 macro.
|
||||
Shake propagates this to all documentation generated with m4
|
||||
(*.m4.md files).
|
||||
|
||||
- site/js/site.js, which defines hyperlinks corresponding to all
|
||||
- released versions.
|
||||
|
||||
- git tags for package releases, as mentioned above
|
||||
|
||||
- the --version output (and sometimes --help output) of all hledger*
|
||||
executables
|
||||
|
||||
- hackage tarball filenames
|
||||
|
||||
- hackage uris
|
||||
|
||||
|
||||
|
||||
## Sample journals
|
||||
|
||||
Synthetic data files like `examples/100x100x10.journal` are useful for benchmarks and testing.
|
||||
|
94
Makefile
94
Makefile
@ -692,67 +692,13 @@ haddock: \
|
||||
|
||||
###############################################################################
|
||||
$(call def-help-subheading,RELEASING:)
|
||||
#$(call def-help-subheading,see also developer guide -> how to -> do a release)
|
||||
|
||||
# TODO update this:
|
||||
|
||||
# # Version numbering. See also .version and Version.hs.
|
||||
# #
|
||||
# # hledger's version number appears in:
|
||||
# # hledger --version
|
||||
# # hledger's cabal file
|
||||
# # darcs tags
|
||||
# # hackage tarball filenames
|
||||
# # hackage pages
|
||||
# #
|
||||
# # Some old version numbering goals:
|
||||
# # 1 automation, robustness, simplicity, platform independence
|
||||
# # 2 cabal versions must be all-numeric
|
||||
# # 3 release versions can be concise (without extra .0's)
|
||||
# # 4 releases should have a corresponding darcs tag
|
||||
# # 5 development builds should have a precise version appearing in --version
|
||||
# # 6 development builds should generate cabal packages with non-confusing versions
|
||||
# # 7 there should be a way to mark builds/releases as alpha or beta
|
||||
# # 8 it should be easy to darcs get the .0 release even after bugfix releases
|
||||
# # 9 avoid unnecessary compiling and linking
|
||||
# # 10 minimise rcs noise and syncing issues (commits, unrecorded changes)
|
||||
# #
|
||||
# # Current policy:
|
||||
# #
|
||||
# # - We follow http://haskell.org/haskellwiki/Package_versioning_policy
|
||||
# #
|
||||
# # - The full release version is ma.jor.minor, where minor is 0 for a
|
||||
# # normal release or 1..n for bugfix releases.
|
||||
# #
|
||||
# # - The elided release version is ma.jor when minor is 0. We use it for
|
||||
# # hackage releases when possible, trusting it doesn't cause trouble..
|
||||
# #
|
||||
# # - The build version is ma.jor.minor+patches, where patches is the number
|
||||
# # of patches applied in the current repo since the last release tag.
|
||||
# #
|
||||
# # - The release tag in the repo is the full release version.
|
||||
# #
|
||||
# # - hledger --version shows the release version or build version as
|
||||
# # appropriate.
|
||||
# #
|
||||
# # - The .version file must be updated manually before a release.
|
||||
# #
|
||||
# # - "make" updates the version in most other places, and defines PATCHES.
|
||||
# # Note "cabal build" should also do this but doesn't yet.
|
||||
# #
|
||||
# # - "make release" additionally records the main version number-affected
|
||||
# # files, and tags the repo with the release tag.
|
||||
|
||||
# TODO revive these:
|
||||
|
||||
# old examples:
|
||||
# a normal release: echo 0.7 >.version; make release
|
||||
# a bugfix release: echo 0.7.1 >.version; make release
|
||||
#release: releasetest bumpversion tagrelease $(call def-help,release, prepare a release and tag the repo )
|
||||
|
||||
#publish: hackageupload pushdocs $(call def-help,upload, publish latest hackage packages and docs )
|
||||
|
||||
#releaseandpublish: release upload $(call def-help,releaseandupload, prepare a release and publish )
|
||||
# old/desired release process:
|
||||
# a normal release: echo 0.7 >.version; make release
|
||||
# a bugfix release: echo 0.7.1 >.version; make release
|
||||
#release: releasetest bumpversion tagrelease $(call def-help,release, prepare and test a release and tag the repo )
|
||||
#publish: hackageupload pushtags $(call def-help,upload, publish latest hackage packages and push tags to github )
|
||||
#releaseandpublish: release upload $(call def-help,releaseandpublish, release and upload and publish updated docs )
|
||||
|
||||
ISCLEAN=git diff-index --quiet HEAD --
|
||||
|
||||
@ -771,6 +717,16 @@ setdate: $(call def-help,setdate, set date in manuals to current month and year
|
||||
updatedate: setdate $(call def-help,updatedate, set date in manuals to current month and year and commit )
|
||||
git commit -m "bump manual date to $(MONTHYEAR)" doc/lib.m4
|
||||
|
||||
# Updating version numbers. See CONTRIBUTING.md Version numbers
|
||||
|
||||
# updateversion: setdate setversion $(call def-help,updateversion, update manual date and update version strings & (lower) bounds from $(VERSIONFILE) and commit )
|
||||
# @read -p "please review changes then press enter to commit $(VERSIONFILE) $(VERSIONSENSITIVEFILES)"
|
||||
# git commit -m "bump version strings & bounds to $(VERSION)" $(VERSIONFILE) $(VERSIONSENSITIVEFILES)
|
||||
|
||||
# XXX start with early targets isclean-$(VERSIONSENSITIVEFILES) (fails due to glob) and isdirty-$(VERSIONFILE) ?
|
||||
setversion: $(VERSIONSENSITIVEFILES) #$(call def-help,setversion, update version strings & bounds from $(VERSIONFILE) (might need -B) )
|
||||
@echo "if this is a new major version, please manually update upper bounds in */package.yaml before generating cabal files"
|
||||
|
||||
# update a package yaml file's version, -DVERSION, and hledger lower bounds (upper bounds must be changed manually)
|
||||
%/package.yaml: $(VERSIONFILE)
|
||||
perl -pe "s/(^version *: *).*/\$${1}'$(VERSION)'/" -i $@ # version: 'A'
|
||||
@ -784,28 +740,10 @@ doc/lib.m4: $(VERSIONFILE)
|
||||
perl -pe "s/^(m4_define\({{_version_}}, *{{)((\d+\.)*\d+)(}}\)m4_dnl *)$$/\$${1}$(VERSION)\$${4}/" -i $@
|
||||
@echo "please manually check/update _docversionlinks_ in doc/lib.m4"
|
||||
|
||||
# XXX obsolete ?
|
||||
# update version string in manual
|
||||
#site/manual-start.md: $(VERSIONFILE)
|
||||
# perl -p -e "s/(this version documents hledger and hledger-web) +[0-9.]+/\1 $(VERSION)/" -i $@
|
||||
|
||||
# XXX start with early targets isclean-$(VERSIONSENSITIVEFILES) (fails due to glob) and isdirty-$(VERSIONFILE) ?
|
||||
setversion: $(VERSIONSENSITIVEFILES) #$(call def-help,setversion, update version strings & bounds from $(VERSIONFILE) (might need -B) )
|
||||
@echo "if this is a new major version, please manually update upper bounds in */package.yaml before generating cabal files"
|
||||
|
||||
# TODO: combine updateversion/updatecabal
|
||||
# minor version bump: make setdate setversion gencabal
|
||||
# major version bump: make setdate setversion, fix upper bounds in package.yamls, make gencabal
|
||||
|
||||
# updateversion: setdate setversion $(call def-help,updateversion, update manual date and update version strings & (lower) bounds from $(VERSIONFILE) and commit )
|
||||
# @read -p "please review changes then press enter to commit $(VERSIONFILE) $(VERSIONSENSITIVEFILES)"
|
||||
# git commit -m "bump version strings & bounds to $(VERSION)" $(VERSIONFILE) $(VERSIONSENSITIVEFILES)
|
||||
|
||||
# (re)generate a cabal file from its package.yaml definition
|
||||
# XXX to avoid warnings, this hpack should be the same version as stack's built-in hpack
|
||||
#%.cabal: $$(dir $$@)package.yaml
|
||||
# hpack --silent $(dir $*)
|
||||
#
|
||||
gencabal: $(call def-help,gencabal, regenerate cabal files from package.yaml files with stack )
|
||||
$(STACK) build --dry-run --silent
|
||||
# --stack-yaml stack-ghc8.2.yaml
|
||||
|
Loading…
Reference in New Issue
Block a user