diff --git a/.goxc.json b/.goxc.json index 2234672..bd8e441 100644 --- a/.goxc.json +++ b/.goxc.json @@ -7,7 +7,6 @@ "Os": "darwin freebsd linux windows", "ResourcesInclude": "README*,LICENSE*,CHANGELOG*,inbucket.bat,etc,themes", "PackageVersion": "1.1.0", - "PrereleaseInfo": "rc2", "ConfigVersion": "0.9", "BuildSettings": { "LdFlagsXVars": { diff --git a/.travis.yml b/.travis.yml index d8af05b..d750ab3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,5 +5,5 @@ before_script: - go vet ./... go: - - 1.5.3 - - 1.6 + - 1.6.3 + - 1.7 diff --git a/CHANGELOG.md b/CHANGELOG.md index 661c6e3..66c454c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ Change Log All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +[1.1.0] - 2016-09-03 +------------ + +### Added +- Homebrew inbucket.conf and formula (see README) + +### Fixed +- Log and continue when unable to delete oldest message during cap enforcement + [1.1.0-rc2] - 2016-03-06 ------------------------ @@ -40,8 +49,26 @@ This project adheres to [Semantic Versioning](http://semver.org/). specific message. [Unreleased]: https://github.com/jhillyerd/inbucket/compare/master...develop +[1.1.0]: https://github.com/jhillyerd/inbucket/compare/1.1.0-rc2...1.1.0 [1.1.0-rc2]: https://github.com/jhillyerd/inbucket/compare/1.1.0-rc1...1.1.0-rc2 [1.1.0-rc1]: https://github.com/jhillyerd/inbucket/compare/1.0...1.1.0-rc1 [1.0]: https://github.com/jhillyerd/inbucket/compare/1.0-rc1...1.0 -See http://keepachangelog.com/ for instructions on how to update this file. + +Release Checklist +----------------- + +1. Create release branch: `git flow release start 1.x.0` +2. Update CHANGELOG.md: + - Ensure *Unreleased* section is up to date + - Rename *Unreleased* section to release name and date. + - Add new GitHub `/compare` link +3. Update goxc version info: `goxc -wc -pv=1.x.0 -pr=snapshot` +4. Run: `goxc interpolate-source` to update VERSION var +5. Run tests +6. Test cross-compile: `goxc` +7. Commit changes and merge release: `git flow release finish 1.x.0` +8. Upload to bintray: `goxc bintray` +9. Update `binary_versions` option in `inbucket-site/_config.yml` + +See http://keepachangelog.com/ for additional instructions on how to update this file. diff --git a/README.md b/README.md index 708b388..32e3110 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,12 @@ Inbucket is currently production quality: it is being used for real work. Please see the [Change Log] and [Issues List] for more details. +Homebrew Tap +------------ + +Inbucket has an OS X [Homebrew] tap available as [jhillyerd/inbucket][Homebrew Tap], +see the `README.md` there for installation instructions. + Building from Source -------------------- @@ -47,5 +53,7 @@ version can be found at https://github.com/jhillyerd/inbucket [Change Log]: https://github.com/jhillyerd/inbucket/blob/master/CHANGELOG.md [From Source]: http://www.inbucket.org/installation/from-source.html [Google Go]: http://golang.org/ +[Homebrew]: http://brew.sh/ +[Homebrew Tap]: https://github.com/jhillyerd/homebrew-inbucket [Inbucket Website]: http://www.inbucket.org/ [Issues List]: https://github.com/jhillyerd/inbucket/issues?state=open diff --git a/etc/homebrew/inbucket.conf b/etc/homebrew/inbucket.conf new file mode 100644 index 0000000..6281583 --- /dev/null +++ b/etc/homebrew/inbucket.conf @@ -0,0 +1,115 @@ +# inbucket.conf +# homebrew inbucket configuration +# {{}} values will be replaced during installation + +############################################################################# +[DEFAULT] + +# Not used directly, but is typically referenced below in %()s format. +default.domain=inbucket.local +themes.dir={{HOMEBREW_PREFIX}}/share/inbucket/themes +datastore.dir={{HOMEBREW_PREFIX}}/var/inbucket/datastore + +############################################################################# +[logging] + +# Options from least to most verbose: ERROR, WARN, INFO, TRACE +level=INFO + +############################################################################# +[smtp] + +# IPv4 address to listen for SMTP connections on. +ip4.address=0.0.0.0 + +# IPv4 port to listen for SMTP connections on. +ip4.port=2500 + +# used in SMTP greeting +domain=%(default.domain)s + +# optional: mail sent to accounts at this domain will not be stored, +# for mixed use (content and load testing) +domain.nostore=bitbucket.local + +# Maximum number of RCPT TO: addresses we allow from clients, the SMTP +# RFC recommends this be at least 100. +max.recipients=100 + +# How long we allow a network connection to be idle before hanging up on the +# client, SMTP RFC recommends at least 5 minutes (300 seconds). +max.idle.seconds=300 + +# Maximum allowable size of message body in bytes (including attachments) +max.message.bytes=2048000 + +# Should we place messages into the datastore, or just throw them away +# (for load testing): true or false +store.messages=true + +############################################################################# +[pop3] + +# IPv4 address to listen for POP3 connections on. +ip4.address=0.0.0.0 + +# IPv4 port to listen for POP3 connections on. +ip4.port=1100 + +# used in POP3 greeting +domain=%(default.domain)s + +# How long we allow a network connection to be idle before hanging up on the +# client, POP3 RFC requires at least 10 minutes (600 seconds). +max.idle.seconds=600 + +############################################################################# +[web] + +# IPv4 address to serve HTTP web interface on +ip4.address=0.0.0.0 + +# IPv4 port to serve HTTP web interface on +ip4.port=9000 + +# Name of web theme to use +theme=bootstrap + +# Path to the selected themes template files +template.dir=%(themes.dir)s/%(theme)s/templates + +# Should we cache parsed templates (set to false during theme dev) +template.cache=true + +# Path to the selected themes public (static) files +public.dir=%(themes.dir)s/%(theme)s/public + +# Path to the greeting HTML displayed on front page, can be moved out of +# installation dir for customization +greeting.file=%(themes.dir)s/greeting.html + +# Key used to sign session cookie data so that it cannot be tampered with. +# If this is left unset, Inbucket will generate a random key at startup +# and previous sessions will be invalidated. +cookie.auth.key=secret-inbucket-session-cookie-key + +############################################################################# +[datastore] + +# Path to the datastore, mail will be written into subdirectories +path=%(datastore.dir)s + +# How many minutes after receipt should a message be stored until it's +# automatically purged. To retain messages until manually deleted, set this +# to 0 +retention.minutes=10080 + +# How many milliseconds to sleep after purging messages from a mailbox. +# This should help reduce disk I/O when there are a large number of messages +# to purge. +retention.sleep.millis=100 + +# Maximum number of messages we will store in a single mailbox. If this +# number is exceeded, the oldest message in the box will be deleted each +# time a new message is received for it. +mailbox.message.cap=100 diff --git a/inbucket.go b/inbucket.go index 30b53a4..5c0cd86 100644 --- a/inbucket.go +++ b/inbucket.go @@ -21,7 +21,7 @@ import ( var ( // VERSION contains the build version number, populated during linking by goxc - VERSION = "1.1.0-rc2" + VERSION = "1.1.0" // BUILDDATE contains the build date, populated during linking by goxc BUILDDATE = "undefined" diff --git a/smtpd/filestore.go b/smtpd/filestore.go index 6b6862b..81d9bfd 100644 --- a/smtpd/filestore.go +++ b/smtpd/filestore.go @@ -318,7 +318,7 @@ func (mb *FileMailbox) NewMessage() (Message, error) { for len(mb.messages) >= mb.store.messageCap { log.Infof("Mailbox %q over configured message cap", mb.name) if err := mb.messages[0].Delete(); err != nil { - return nil, err + log.Errorf("Error deleting message: %s", err) } } }