Skip to content

slack deploy updates manifest before running deploy hook, no rollback on hook failure #301

Open

Description

@jbradbyrd

Description

I'm trying to set up a CI deployment pipeline for a new Python Bolt-based Slack bot. I switched the bot to local manifest mode so that I can keep the dev-only local app's manifest and production deployed app's manifest in sync with the manifest.json in my repo. I am running slack deploy from a GitHub action when changes are pushed to main with a custom deploy hook that performs AWS SSM commands to update the bot instance to the latest version of the code in main.

I noticed is that when running slack deploy, the manifest is updated to Slack's servers before the custom deploy hook runs. If the deploy hook fails, there's no rollback; the manifest remains updated while the actual deployment may not have completed. This creates a potential situation where the deployed code and the manifest become out of sync.

Version

3.10.0

OS Info

Ubuntu 24.04.3 LTS (GitHub Actions runner)

Steps to reproduce:

  1. Configure a custom deploy hook in .slack/hooks.json that exits with a non-zero status
  2. Run slack deploy
  3. Observe that the manifest is updated on Slack's servers
  4. The deploy hook fails
  5. The manifest remains updated despite the overall deploy failing

Expected result:

  • The manifest update should be rolled back if the deploy hook fails, OR
  • The deploy hook should run before the manifest is updated, so failures don't leave a partially-deployed state, OR
  • Some other option that achieves atomic deployment between manifest and code.

Actual result:

The manifest is permanently updated even when the deploy hook fails, leaving the Slack app configuration out of sync with the actual deployed application.

Requirements

  • I've read and understood the Contributing guidelines and have done my best effort to follow them.
  • I've read and agree to the Code of Conduct.
  • I've searched for any related issues and avoided creating a duplicate issue.

Activity

  1. added
    untriagedAn issues and pull request that needs to be looked at by a maintainer
    on Jan 12, 2026
  2. added
    enhancementM-T: A feature request for new functionality
    discussionM-T: An issue where more input is needed to reach a decision
    needs infoAn issue that is claimed to be a bug and hasn't been reproduced, or otherwise needs more info
    and removed
    untriagedAn issues and pull request that needs to be looked at by a maintainer
    on Jan 12, 2026
  3. WilliamBergamin commented on Jan 12, 2026

    @WilliamBergamin
    Contributor

    Hi @jbradbyrd thanks for bringing this up 💯

    Its awesome to read about the CLI in you continuous deployment process 🚀 @mwbrooks and @zimeg can confirm this but I think this is the first time this comes up

    This seems to be a chicken and egg situation

    • If the manifest is updated first and then the custom deploy hook fails then the app gets into a broken state
    • If the app is deployed first and the manifest is updated afterward, there is still a risk that the manifest update fails and gets the app into a broken state

    @mwbrooks & @zimeg, not sure if introducing a rollback feature is the easiest solution 🤔 we could try to use apps.manifest.validate to help us out

    1. Use apps.manifest.validate to validate that the manifest is valid
    2. Run the custom deploy hook
    3. If it passes then we update the manifest with apps.manifest.update
  4. jbradbyrd commented on Jan 13, 2026

    @jbradbyrd
    Author

    Yes, I think your proposed solution would work from my perspective. Thank you for looking into this!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussionM-T: An issue where more input is needed to reach a decisionenhancementM-T: A feature request for new functionalityneeds infoAn issue that is claimed to be a bug and hasn't been reproduced, or otherwise needs more info

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions