87 lines
2.9 KiB
Markdown
87 lines
2.9 KiB
Markdown
# slack-sieve
|
|
|
|
Sieve your [Slack workspace export](https://slack.com/help/articles/201658943-Export-your-workspace-data) before [Mattermost](https://mattermost.com) import — triage channels, cherry-pick messages, preview attachments.
|
|
|
|
```text
|
|
Slack export → hydrate → review UI → manifest.json → prepare-export → mmetl → mmctl
|
|
```
|
|
|
|
## Quick start
|
|
|
|
```bash
|
|
git clone git@git.levkin.ca:ilia/slack-sieve.git
|
|
cd slack-sieve
|
|
|
|
# Optional: download files into __uploads/ from export token URLs
|
|
export SLACK_EXPORT_DIR="$HOME/Downloads/your-slack-export"
|
|
export SLACK_HYDRATED_DIR="$HOME/Downloads/your-slack-export-enriched"
|
|
make hydrate
|
|
|
|
# Optional: pre-skip noise channels (edit presets/levkin-skips.json or add your own)
|
|
make preset-skips
|
|
|
|
# Review at http://127.0.0.1:8765
|
|
export SLACK_EXPORT_PATH="$HOME/Downloads/your-slack-export-enriched"
|
|
make review
|
|
```
|
|
|
|
Selections are saved to `manifest.json` (gitignored).
|
|
|
|
## Make targets
|
|
|
|
| Target | Description |
|
|
|--------|-------------|
|
|
| `make review` | Start the web UI on port 8765 |
|
|
| `make hydrate` | Copy export + download attachments via embedded `xoxe` URLs |
|
|
| `make preset-skips` | Mark preset channels as skip in `manifest.json` |
|
|
| `make prepare-export` | Write `prepared-export/` (filtered Slack shape for mmetl) |
|
|
|
|
## Environment
|
|
|
|
| Variable | Default |
|
|
|----------|---------|
|
|
| `SLACK_EXPORT_PATH` | `~/Downloads/Levkin Slack export enriched` |
|
|
| `SLACK_EXPORT_DIR` | Raw export for hydrate |
|
|
| `SLACK_HYDRATED_DIR` | Output folder for hydrate |
|
|
| `SLACK_IMPORT_PORT` | `8765` |
|
|
|
|
## UI shortcuts
|
|
|
|
- **J/K** — previous/next message
|
|
- **Space** — toggle cherry-pick
|
|
- **I / S** — import/skip message
|
|
- **Shift+I / Shift+S** — import/skip whole channel
|
|
- **N** — next undecided channel
|
|
|
|
## Presets
|
|
|
|
Edit `presets/levkin-skips.json` (or copy it) for workspace-specific channels to auto-skip.
|
|
|
|
## Mattermost import (after review)
|
|
|
|
1. Set optional `mattermost_channel` renames and `user_emails` in `manifest.json`.
|
|
2. `make prepare-export` — writes `prepared-export/` (pytest-covered).
|
|
3. Zip that folder; [mmetl](https://github.com/mattermost/mmetl) `transform slack --team <team> …`
|
|
4. [mmctl](https://docs.mattermost.com/administration-guide/manage/mmctl-command-line-tool.html) `import process --bypass-upload` on the Mattermost host
|
|
|
|
**Levkin:** import completed 2026-07-10 — see [docs/HANDOFF.md](docs/HANDOFF.md) for channel map and caveats.
|
|
|
|
Docs: [Migrate from Slack](https://docs.mattermost.com/administration-guide/onboard/migrate-from-slack.html)
|
|
|
|
## Requirements
|
|
|
|
- Python 3.10+ (stdlib only for server)
|
|
- Official Slack export folder or enriched copy with `channels.json`, `users.json`, channel dirs
|
|
|
|
## Handoff
|
|
|
|
Levkin migration status and channel map: **[docs/HANDOFF.md](docs/HANDOFF.md)**
|
|
|
|
## Remote
|
|
|
|
```text
|
|
git@git.levkin.ca:ilia/slack-sieve.git
|
|
```
|
|
|
|
SSH uses LAN `10.255.255.1` via `Host git.levkin.ca` in `~/.ssh/config` (see homelab ansible docs).
|