Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/reference/experiments.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ The following is a list of currently available experiments. We'll remove experim
* `bolt-install`: enables creating, installing, and running Bolt projects that manage their app manifest on app settings (remote manifest).
* `slack create` and `slack init` now set manifest source to "app settings" (remote) for Bolt JS & Bolt Python projects ([PR#96](https://github.com/slackapi/slack-cli/pull/96)).
* `slack run` supports creating and installing Bolt Framework apps that have the manifest source set to "app settings (remote)" ([PR#111](https://github.com/slackapi/slack-cli/pull/111)).
* `--experiment bolt-install` is now enabled by default ([PR#112](https://github.com/slackapi/slack-cli/pull/112)).
* `read-only-collaborators`: enables creating and modifying collaborator permissions via the `slack collaborator` commands.

## Experiments changelog

Below is a list of updates related to experiments.

* **June 2025**: Enabled the `bolt-install` experiment by default to support using `slack run` with apps that have a manifest source set to "app settings" (remote).
* **May 2025**: Added the experiment `bolt-install` to enable creating, installing, and running Bolt projects that manage their app manifest on app settings (remote manifest).
* **February 2025**: Added full Bolt framework support to the Slack CLI and removed the features from behind the experiment flag. See the changelog announcement [here](https://docs.slack.dev/changelog/2025/02/27/slack-cli-release).
* **August 2024**: Added the `bolt` experiment for the `slack create` command.
Expand Down
1 change: 1 addition & 0 deletions internal/experiment/experiment.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ var AllExperiments = []Experiment{
// EnabledExperiments is a list of experiments that are permanently enabled
var EnabledExperiments = []Experiment{
BoltFrameworks,
BoltInstall,
}

// Includes checks that a supplied experiment is included within AllExperiments
Expand Down
10 changes: 5 additions & 5 deletions internal/pkg/apps/install_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -885,11 +885,11 @@ func TestInstallLocalApp(t *testing.T) {
TeamName: &mockTeamDomain,
UserID: &mockUserID,
},
mockAPICreateError: slackerror.New(slackerror.ErrAppCreate),
mockAPIUpdateError: slackerror.New(slackerror.ErrAppAdd),
mockAPIInstallError: slackerror.New(slackerror.ErrAppInstall),
mockBoltExperiment: true,
mockManifestSource: config.ManifestSourceRemote,
mockAPICreateError: slackerror.New(slackerror.ErrAppCreate),
mockAPIUpdateError: slackerror.New(slackerror.ErrAppAdd),
mockBoltExperiment: true,
mockBoltInstallExperiment: false,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: When turning the experiment on by default, this test failed because we hadn't explicitly disabled the experiment. In the test's title, we mention that this test case is when bolt-install is disabled.

mockManifestSource: config.ManifestSourceRemote,
expectedApp: types.App{
AppID: "A004",
IsDev: true,
Expand Down
8 changes: 5 additions & 3 deletions internal/pkg/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -467,9 +467,11 @@ func InstallProjectDependencies(
// When the BoltInstall experiment is enabled, set non-ROSI projects to ManifestSourceRemote.
if clients.Config.WithExperimentOn(experiment.BoltInstall) {
// TODO: should check if Slack hosted project, but the SDKConfig has not been initialized yet.
isDenoProject := strings.Contains(strings.ToLower(clients.Runtime.Name()), "deno")
if !isDenoProject {
manifestSource = config.ManifestSourceRemote
if clients.Runtime != nil {
isDenoProject := strings.Contains(strings.ToLower(clients.Runtime.Name()), "deno")
if !isDenoProject {
manifestSource = config.ManifestSourceRemote
}
Comment on lines +470 to +474
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: When enabling the bolt-install experiment by default, a test failed due to a nil pointer reference. The default value for manifestSource is local and is set a few lines up. So when the clients.Runtime == nil, I think we can safely let he manifestSource = config.ManifestSourceLocal.

}
}

Expand Down
Loading