No description
  • Go 73.3%
  • TypeScript 13.9%
  • Makefile 10.1%
  • JavaScript 2.7%
Find a file
Felipe M. a4ee9379eb
Some checks failed
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
ci / plugin-ci (push) Has been cancelled
Validate channel existence and Shelfmark reachability on config change
Add early validation in OnConfigurationChange to verify the configured
channel exists in Mattermost and the Shelfmark server is reachable,
giving admins immediate feedback instead of discovering issues at runtime.

- Add Ping() method to shelfmark.Client for lightweight reachability check
- Add validateConfiguration() on Plugin that checks channel + Shelfmark
- Add i18n messages for channel not found and Shelfmark unreachable
- Add unit tests for Ping and validateConfiguration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 17:55:08 +01:00
.github/workflows Initial plugin scaffold from the mattermost-plugin-starter-template 2026-03-16 10:41:22 +01:00
assets Replace starter template icon with Shelfmark logo 2026-03-18 10:47:29 +01:00
build Add webapp boilerplate from starter template and switch build to bun 2026-03-18 09:28:10 +01:00
public Add RHS panel with channel header toggle button 2026-03-18 11:35:30 +01:00
server Validate channel existence and Shelfmark reachability on config change 2026-03-18 17:55:08 +01:00
webapp Add Team ID restriction to limit plugin to a specific team 2026-03-18 13:13:40 +01:00
.editorconfig Initial plugin scaffold from the mattermost-plugin-starter-template 2026-03-16 10:41:22 +01:00
.gitattributes Initial plugin scaffold from the mattermost-plugin-starter-template 2026-03-16 10:41:22 +01:00
.gitignore Initial plugin scaffold from the mattermost-plugin-starter-template 2026-03-16 10:41:22 +01:00
.gitpod.yml Initial plugin scaffold from the mattermost-plugin-starter-template 2026-03-16 10:41:22 +01:00
.golangci.yml Add webapp boilerplate from starter template and switch build to bun 2026-03-18 09:28:10 +01:00
.nvmrc Initial plugin scaffold from the mattermost-plugin-starter-template 2026-03-16 10:41:22 +01:00
.woodpecker.yml Pin mattermost-plugin-release image to latest tag 2026-03-18 11:05:42 +01:00
CLAUDE.md Add CLAUDE.md and fix misspell false positive for Spanish word Comando 2026-03-18 08:42:42 +01:00
go.mod Fix concurrency bugs, error handling, and add comprehensive unit tests 2026-03-17 17:17:38 +01:00
go.sum Implement Shelfmark book request integration 2026-03-17 14:11:24 +01:00
LICENSE Initial plugin scaffold from the mattermost-plugin-starter-template 2026-03-16 10:41:22 +01:00
Makefile Add webapp boilerplate from starter template and switch build to bun 2026-03-18 09:28:10 +01:00
plugin.json Shorten plugin display name to Shelfmark 2026-03-18 17:31:37 +01:00
README.md Add i18n support for user-facing messages and rewrite README 2026-03-17 17:55:33 +01:00

Mattermost Plugin Shelfmark

Build Status

A Mattermost plugin that integrates with Shelfmark to let users search and request books directly from Mattermost using the /requestbook slash command. Requested books are automatically downloaded and posted to a designated channel.

Features

  • Book search -- Search by title, author, or ISBN via /requestbook <query>
  • Language filtering -- Specify a preferred language with --language <code> (e.g., --language es), with a configurable default
  • Automatic downloads -- Background processing handles the full lifecycle: search, queue, download, and post
  • Channel posting -- Books are posted with cover art to a configured channel, with the file attached as a reply
  • User notifications -- Requestors receive DM updates on download progress and completion
  • Localization -- User-facing messages available in English and Spanish, with locale-aware delivery
  • Customizable posts -- Post format is configurable via Go text/template syntax

Usage

/requestbook [--language <code>] <search query>

Examples:

/requestbook The Hitchhiker's Guide to the Galaxy
/requestbook --language es El Quijote
/requestbook 978-0-13-468599-1

The plugin will search Shelfmark for the best match, queue a download, and post the result to the configured channel once complete.

Configuration

Configure the plugin in System Console > Plugins > Mattermost Plugin Shelfmark.

Setting Description
Shelfmark Server URL Base URL of your Shelfmark instance (e.g., http://shelfmark:8084)
Shelfmark Username Username for Shelfmark authentication (leave empty if auth is disabled)
Shelfmark Password Password for Shelfmark authentication (leave empty if auth is disabled)
Channel ID Mattermost channel ID where book posts will be created
Default Language ISO language code used when --language is not specified (e.g., en, es, fr)
Post Template Go template for book post messages. Variables: {{.Title}}, {{.Authors}}, {{.AuthorsList}}

Development

Prerequisites

  • Go 1.25+
  • A running Mattermost server with plugin uploads enabled

Building

make                # lint, test, and build
make dist           # create distributable plugin bundle
make test           # run tests only
make coverage       # generate test coverage report

The build produces a plugin bundle at dist/com.fmartingr.shelfmark.tar.gz with support for Linux (amd64/arm64), macOS (amd64/arm64), and Windows (amd64).

Deploying

Enable plugin uploads in your Mattermost config:

{
    "PluginSettings": {
        "EnableUploads": true
    }
}

Then deploy with local mode:

make deploy

Or with credentials:

export MM_SERVICESETTINGS_SITEURL=http://localhost:8065
export MM_ADMIN_TOKEN=<your-token>
make deploy

Releasing

make patch       # patch release (e.g., 1.0.1)
make minor       # minor release (e.g., 1.1.0)
make major       # major release (e.g., 2.0.0)

Release candidate variants are also available: make patch-rc, make minor-rc, make major-rc.

The version is determined automatically from git tags. See the Makefile for details.