No description
  • Go 91.9%
  • Dockerfile 8.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Gilles Fritz ccf4544b4a
All checks were successful
CI / test (push) Successful in 2m53s
CI / publish (push) Successful in 1m52s
Send publish reports to Argus from the release job (#10)
Closes #9

Monitoring plan, phase 5 rollout, same as the pilots argus/backend#45 and argus/frontend#35.

## Changes (`.forgejo/workflows/ci.yml`)
- New step "Collect publish details for Argus": `/tmp/dependencies.txt` = the direct requirements of `go.mod`. For the devel snapshot only, `ARGUS_ARTIFACT` = the plugin bundle `name|bytes|generic package page`; a numbered release already attaches the bundle as an asset, and publish-release reports that.
- Both publish-release calls (numbered release, devel snapshot) get `ARGUS_UPLOAD_TOKEN: ${{ secrets.ARGUS_UPLOAD_TOKEN }}` and `${ARGUS_ARTIFACT:+--artifact "$ARGUS_ARTIFACT"} --dependencies /tmp/dependencies.txt`. A failed upload only warns, the release itself is unaffected.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_014BSmBtGWeFBD9z4mYm9SjA
Reviewed-on: #10
2026-10-30 08:13:11 +00:00
.forgejo/workflows Send publish reports to Argus from the release job (#10) 2026-10-30 08:13:11 +00:00
server Add GPLv3 license 2026-09-23 00:09:10 +02:00
.gitignore Migrate onto Argus for test/coverage reporting 2026-10-16 13:16:37 +02:00
Dockerfile Update golang Docker tag to v1.27 (#2) 2026-09-30 06:53:18 +00:00
go.mod Update module github.com/mattermost/mattermost/server/public to v0.6.0 (#6) 2026-10-24 19:56:24 +00:00
go.sum Update module github.com/mattermost/mattermost/server/public to v0.6.0 (#6) 2026-10-24 19:56:24 +00:00
LICENSE Add GPLv3 license 2026-09-23 00:09:10 +02:00
plugin.json ci: publish releases with ci-base's publish-release 2026-10-24 10:07:13 +02:00
README.md ci: same snapshot/release flow as the other repos 2026-10-24 09:16:13 +02:00
renovate.json Renovate: run go mod tidy after Go updates (#8) 2026-10-24 20:08:20 +00:00

ivatar Avatar Sync

CI Coverage Tests License: GPL v3

A Mattermost plugin that syncs profile pictures from a self-hosted Libravatar-compatible avatar server (such as ivatar) on login.

No existing Mattermost plugin or core feature does this - mattermost/mattermost#885 has been open since 2015 with no implementation - so this was written from scratch.

How it works

On every successful login (password or SSO), the plugin:

  1. Computes the Gravatar/Libravatar identifier for the user's email (MD5 of the lowercased, trimmed address).
  2. Fetches <IvatarBaseURL>/<hash>?s=512&d=404 from the configured avatar server. A 404 means the user has no avatar registered there, and the plugin leaves their existing Mattermost picture untouched.
  3. If found, uploads the image via SetProfileImage, skipping the upload entirely if it's identical to what was set last time (tracked in the plugin's KV store), so a normal login doesn't re-upload on every request.

Installation

  1. Download ivatar-avatar-sync-<version>.tar.gz from the latest release (also in the repo's generic package registry, ivatar-avatar-sync, alongside the <version>-dev snapshot of main).
  2. In Mattermost: System Console → Plugin Management → Upload Plugin, select the downloaded .tar.gz, then enable it.
  3. Configure it under System Console → Plugins → ivatar Avatar Sync:
    • ivatar avatar base URL: the base /avatar/ endpoint of your Libravatar-compatible server, e.g. https://avatar.example.com/avatar/. Required - the plugin does nothing until this is set.
    • Enable avatar sync: on/off switch.

Development

go test ./...
go vet ./...

CI runs both on every push to main and on pull requests, same snapshot/release split as the other repos on this instance (.forgejo/workflows/ci.yml):

  • every push to main publishes the bundle as the mutable <version>-dev generic package (<version> from plugin.json) and refreshes the rolling devel draft release, whose notes preview the next release;
  • a numbered release is a manual run of the workflow with a version input: it publishes that version, tags v<version> and creates the release, bundle attached, notes generated from the PRs, issues and commits since the previous tag. Bump plugin.json's version by hand afterwards, to plan the next one.

Caveat

The plugin sets the profile picture directly via the server API (UserHasLoggedIn → SetProfileImage), bypassing Mattermost's built-in MFA check - it's a post-login notification hook, not part of the auth flow itself, so this doesn't weaken login security, but be aware it doesn't go through the same code path as a manual picture upload.

License

GPLv3 or later.