Files
slack-sieve/README.md
T
ilia 5a62cb8139
CI / skip-ci-check (pull_request) Successful in 37s
CI / secret-scan (pull_request) Successful in 29s
CI / python-ci (pull_request) Successful in 1m11s
Use non-homelab private example IP in docs
2026-08-05 12:31:57 -04:00

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).