diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b88ea7..c644e1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.5.0] - 2026-02-18 + ### Added -- **Seqera Platform Deep Links**: Automatically adds a "View in Seqera Platform" button to all Slack notifications when running through Seqera Platform ([#36](https://github.com/seqeralabs/nf-slack/issues/36)) +- **Seqera Platform Deep Links**: Automatically adds a "View in Seqera Platform" button to all Slack notifications when running through Seqera Platform. Reads `watchUrl` from TowerClient, auto-detected and configurable via `slack.seqeraPlatform.enabled`. Start message updated asynchronously once URL is available ([#43](https://github.com/seqeralabs/nf-slack/pull/43)) +- **Progress Updates**: Real-time progress during pipeline execution via in-place start message updates using `chat.update`. Event-driven with rate limiting. Configure via `slack.onProgress { enabled = true; interval = '5m' }`. Tracks submitted, completed, cached, and failed tasks ([#44](https://github.com/seqeralabs/nf-slack/pull/44)) +- **Emoji Reactions**: Automatic emoji reactions on start message for workflow status (🚀 start, ✅ success, ❌ error). Configure via `slack.reactions { enabled = true }`. Requires bot token, fire-and-forget ([#41](https://github.com/seqeralabs/nf-slack/pull/41)) +- **Connection Validation**: Validates Slack credentials on startup using `auth.test` and `conversations.info`. Enabled by default via `slack.validateOnStartup = true`. Warns on failure, never blocks pipeline execution ([#40](https://github.com/seqeralabs/nf-slack/pull/40)) + +### Fixed + +- **Cancelled Workflow Notifications**: Cancelled workflows (via Seqera Platform) now correctly send error notifications instead of success. Checks `session.workflowMetadata.success` in `onFlowComplete()` ([#50](https://github.com/seqeralabs/nf-slack/pull/50)) +- **`includeFields` Config Bug**: Config-level `onStart/onComplete/onError.includeFields` was silently ignored by default message builders. Added `includeFields` property to config classes and `shouldIncludeField()` helper ([#48](https://github.com/seqeralabs/nf-slack/pull/48)) +- **Spurious Reaction Warning**: Fixed "Failed to remove reaction" warning when `onStart.enabled = false` by tracking `startReactionAdded` flag. Downgraded `no_reaction` from WARN to DEBUG ([#48](https://github.com/seqeralabs/nf-slack/pull/48)) + +### Changed + +- **Documentation Simplification**: Consolidated from 11 pages to 6 (~2300 to ~1300 lines). Standardized examples to bot tokens. Removed 7 obsolete configs and 8 unreferenced screenshots. Fixed broken links ([#48](https://github.com/seqeralabs/nf-slack/pull/48)) ## [0.4.0] - 2026-02-11 @@ -220,19 +235,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **CI/CD**: Updated Claude Code review workflow for improved PR automation ([#20](https://github.com/seqeralabs/nf-slack/pull/20), [#19](https://github.com/seqeralabs/nf-slack/pull/19)) -## [Unreleased] - -### Planned - -- Asynchronous message sending with ExecutorService -- Retry logic with exponential backoff (429, 5xx errors) -- Rate limiting (1 message/second with burst capacity) -- Webhook URL validation (HTTPS enforcement, format checking) - --- ## Version History +- **[0.5.0]** - Seqera Platform deep links, progress updates, emoji reactions, connection validation, bug fixes - **[0.4.0]** - File upload support, config-based uploads, remote file support - **[0.3.1]** - Documentation updates for bot support and threading features - **[0.3.0]** - Slack Bot integration, message threading, and organization migration @@ -241,6 +248,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **[0.1.1]** - Release automation and documentation improvements - **[0.1.0]** - Initial release with automatic notifications, custom messages, and progressive configuration examples +[0.5.0]: https://github.com/seqeralabs/nf-slack/releases/tag/v0.5.0 [0.4.0]: https://github.com/seqeralabs/nf-slack/releases/tag/v0.4.0 [0.3.1]: https://github.com/seqeralabs/nf-slack/releases/tag/v0.3.1 [0.3.0]: https://github.com/seqeralabs/nf-slack/releases/tag/v0.3.0 diff --git a/README.md b/README.md index a7255e6..b0d14ae 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Add to your `nextflow.config`: ```groovy plugins { - id 'nf-slack@0.4.0' + id 'nf-slack@0.5.0' } slack { diff --git a/build.gradle b/build.gradle index cca0ce4..332eeca 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'io.nextflow.nextflow-plugin' version '1.0.0-beta.12' } -version = '0.4.1' +version = '0.5.0' nextflowPlugin { nextflowVersion = '24.10.0' diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index d7c7d7c..caa37d4 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -41,7 +41,7 @@ Thank you for your interest in contributing to nf-slack! This document provides 5. **Test with Nextflow** ```bash - nextflow run hello -plugins nf-slack@0.4.0 // Make sure to have the correct version! + nextflow run hello -plugins nf-slack@0.5.0 // Make sure to have the correct version! ``` ## Development Workflow diff --git a/docs/examples/gallery.md b/docs/examples/gallery.md index 2917ed3..0bae9d5 100644 --- a/docs/examples/gallery.md +++ b/docs/examples/gallery.md @@ -2,15 +2,16 @@ Complete, runnable examples that demonstrate nf-slack features. Each example can be run directly from the `example/` directory. + !!! tip "Running Examples" -All config examples can be run with: -`bash + All config examples can be run with: + ```bash nextflow run main.nf -c configs/.config - ` -Script examples run directly: -`bash + ``` + Script examples run directly: + ```bash nextflow run scripts/.nf -c configs/01-minimal.config - ` + ``` --- diff --git a/docs/getting-started/setup.md b/docs/getting-started/setup.md index 4744d2e..1057d57 100644 --- a/docs/getting-started/setup.md +++ b/docs/getting-started/setup.md @@ -25,6 +25,8 @@ nf-slack supports two authentication methods. **Bot User is recommended** — it 2. Under **"Bot Token Scopes"**, add: - `chat:write` — Send messages - `chat:write.public` — Post to channels without joining *(optional)* + - `reactions:write` — Add emoji reactions *(optional — required for [emoji reactions](../usage/guide.md#emoji-reactions))* + - `files:write` — Upload files *(optional — required for [file uploads](../usage/guide.md#file-uploads))* **Install and copy token:** @@ -98,7 +100,7 @@ Add nf-slack to your `nextflow.config`: ```groovy plugins { - id 'nf-slack@0.4.0' + id 'nf-slack@0.5.0' } ``` diff --git a/docs/index.md b/docs/index.md index d7a06cc..5ba3af9 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,7 +17,7 @@ Slack notifications for your Nextflow workflows. Get notified when pipelines sta ```groovy plugins { - id 'nf-slack@0.4.0' + id 'nf-slack@0.5.0' } slack { @@ -31,8 +31,9 @@ slack { **2. Run your pipeline** — that's it! You'll get Slack notifications automatically. + !!! tip "Need help setting up Slack?" -See the **[Setup Guide](getting-started/setup.md)** for step-by-step instructions on creating a Slack app and choosing between Bot and Webhook modes. + See the **[Setup Guide](getting-started/setup.md)** for step-by-step instructions on creating a Slack app and choosing between Bot and Webhook modes. ## What Can You Do? diff --git a/docs/reference/api.md b/docs/reference/api.md index 47f10ed..82406d2 100644 --- a/docs/reference/api.md +++ b/docs/reference/api.md @@ -128,7 +128,9 @@ Configuration for workflow completion notifications. | `showFooter` | Boolean | `true` | Show timestamp footer in message | | `files` | `List` | `[]` | File paths to upload after completion notification (Bot only) | -> [!NOTE] > `includeResourceUsage` is **only available** in the `onComplete` scope. + +!!! note + `includeResourceUsage` is **only available** in the `onComplete` scope. #### Message Available Fields diff --git a/docs/usage/guide.md b/docs/usage/guide.md index c4a85c6..cc52ca2 100644 --- a/docs/usage/guide.md +++ b/docs/usage/guide.md @@ -149,8 +149,9 @@ slack { ## Threading + !!! note "Bot User only" -Threading requires a Bot User. Webhooks do not support this feature. + Threading requires a Bot User. Webhooks do not support this feature. Group all notifications from a single pipeline run into one Slack thread: @@ -168,8 +169,9 @@ The start notification becomes the parent message. Complete, error, and any cust ## Emoji Reactions + !!! note "Bot User only" -Emoji reactions require a Bot User. Webhooks do not support this feature. + Emoji reactions require a Bot User. Webhooks do not support this feature. Add emoji reactions to the start notification to show pipeline status at a glance: @@ -190,8 +192,9 @@ slack { ## Progress Updates + !!! note "Bot User only" -Progress updates require a Bot User with threading enabled. + Progress updates require a Bot User with threading enabled. Get periodic progress updates during long-running pipelines: @@ -213,8 +216,9 @@ Progress messages are posted as replies in the pipeline's thread. ## File Uploads + !!! note "Bot User only" -File uploads require a Bot User. + File uploads require a Bot User. Attach files (logs, reports, plots) to completion or error notifications: diff --git a/example/configs/01-minimal.config b/example/configs/01-minimal.config index 995bee8..0829d15 100644 --- a/example/configs/01-minimal.config +++ b/example/configs/01-minimal.config @@ -1,5 +1,5 @@ plugins { - id 'nf-slack@0.4.1' + id 'nf-slack@0.5.0' } slack { diff --git a/example/configs/02-notification-control.config b/example/configs/02-notification-control.config index 66d04dc..e0fb0fb 100644 --- a/example/configs/02-notification-control.config +++ b/example/configs/02-notification-control.config @@ -1,5 +1,5 @@ plugins { - id 'nf-slack@0.4.1' + id 'nf-slack@0.5.0' } slack { diff --git a/example/configs/03-message-text.config b/example/configs/03-message-text.config index c47e18c..3f09b7e 100644 --- a/example/configs/03-message-text.config +++ b/example/configs/03-message-text.config @@ -1,5 +1,5 @@ plugins { - id 'nf-slack@0.4.1' + id 'nf-slack@0.5.0' } slack { diff --git a/example/configs/04-custom-fields.config b/example/configs/04-custom-fields.config index e40628f..a0561e6 100644 --- a/example/configs/04-custom-fields.config +++ b/example/configs/04-custom-fields.config @@ -1,5 +1,5 @@ plugins { - id 'nf-slack@0.4.1' + id 'nf-slack@0.5.0' } slack { diff --git a/example/configs/05-selective-fields.config b/example/configs/05-selective-fields.config index bb8ad74..ca26283 100644 --- a/example/configs/05-selective-fields.config +++ b/example/configs/05-selective-fields.config @@ -1,5 +1,5 @@ plugins { - id 'nf-slack@0.4.1' + id 'nf-slack@0.5.0' } slack { diff --git a/example/configs/06-threaded-messages.config b/example/configs/06-threaded-messages.config index 587d0d0..ab9f6df 100644 --- a/example/configs/06-threaded-messages.config +++ b/example/configs/06-threaded-messages.config @@ -1,5 +1,5 @@ plugins { - id 'nf-slack@0.4.0' + id 'nf-slack@0.5.0' } slack { diff --git a/example/configs/07-file-upload.config b/example/configs/07-file-upload.config index da4f18c..01d5f41 100644 --- a/example/configs/07-file-upload.config +++ b/example/configs/07-file-upload.config @@ -1,5 +1,5 @@ plugins { - id 'nf-slack@0.4.1' + id 'nf-slack@0.5.0' } slack { diff --git a/example/nextflow.config b/example/nextflow.config index bfe42de..2818f94 100644 --- a/example/nextflow.config +++ b/example/nextflow.config @@ -3,7 +3,7 @@ */ plugins { - id 'nf-slack@0.4.0' + id 'nf-slack@0.5.0' } // Slack configuration