For a quick development experience and fast testing setup, the app needed with this action is configured using the app manifest and can be used in experiments with the Slack CLI.
This app showcases all three techniques of sending data into Slack and follows patterns found in the integration tests.
- Technique 1 Slack Workflow Builder: Use a Slack webhook trigger to start a workflow in Slack Workflow Builder.
- Technique 2 Slack API method: Call a Slack API method using a token and data provided through the GitHub workflow.
- Technique 3 Incoming webhook: Post a message to a Slack channel using an incoming webhook.
Configurations for the Slack app and workflow, and the GitHub Actions workflow are found in the following files:
- Slack app setup:
.github/resources/.slack/manifest.json
- GitHub Actions steps:
.github/workflows/develop.yml
Either the techniques or app setup and workflow steps can be adjusted during testing and development. For experimenting with new changes, we recommend using the steps for development while the steps for CI is useful when using this app in an actual GitHub Actions workflow.
Start by gathering credentials of an application equipped for action:
$ slack install
$ slack trigger create # SLACK_WEBHOOK_TRIGGER
$ slack deploy # SLACK_BOT_TOKEN and SLACK_INCOMING_WEBHOOK
Gather the webhook trigger from the output of the trigger create
command
and collect the bot token and incoming webhook from app settings.
Where these are stored will depend on the configurations to run and will follow in the next sections.
Also be sure to add the new bot to a channel, and while keeping track of that channel ID for posting messages or errors happen.
Both setups share the same starting test suite to make sure the similar examples
as in the README.md
are correct, but changes while testing are encouraged!
The app uses the values stored in .slack
and can also be adjusted for changing
scopes or workflows.
Run the workflow as a complete CI check for the changes upstream.
Requirements:
- The credentials collected above
- Access to secrets for the repo
The saved test.yml
include common workflows from the README.md
and other
code checks including linting and tests.
Add gathered credentials and secrets to save to the repository being tested. Required values include:
SLACK_BOT_TOKEN
: xoxb-01010101-exampleSLACK_CHANNEL_ID
: C0123456789SLACK_INCOMING_WEBHOOK
: https://hooks.slack.com/services/T0123456789/B0123456789/abcdefghijklmnopqrstuvwxyzSLACK_WEBHOOK_TRIGGER
: https://hooks.slack.com/triggers/T0123456789/00000000000/abcdefghijklmnopqrstuvwxyz
Run the workflow to post messages without pushing changes upstream.
Requirements:
- The credentials collected above
- An installation of
nektos/act
- A running instance of Docker
The saved develop.yml
workflows use the same webhook
and method
examples
but skip tests that happen during upstream checks:
$ cp .env.example .env # Create credentials
$ vim .env # Update credentials
$ cat .env # Reveal credentials
export SLACK_BOT_TOKEN=xoxb-01010101-example
export SLACK_CHANNEL_ID=C0123456789
export SLACK_INCOMING_WEBHOOK=https://hooks.slack.com/services/T0123456789/B0123456789/abcdefghijklmnopqrstuvwxyz
export SLACK_WEBHOOK_TRIGGER=https://hooks.slack.com/triggers/T0123456789/00000000000/abcdefghijklmnopqrstuvwxyz
Environment variables and credentials should be set in the created .env
file
for use in workflows and actions.
Once credentials are configured and workflows updated, the following command
runs the workflow using act
and the above settings:
$ npm run dev # Test techniques
...
[Local run/run] 🏁 Job succeeded
The develop.yml
file contains the workflow used for testing. Updates to these
steps can be made to test various functionalities and edge cases.
The same applies to test workflows in the test.yml
file! However, some hope of
keeping examples in the README.md
similar to the tests could be neat.
To use ${{ secrets.* }}
in the workflow, add more environment variable values
to the .env
file or update the secrets saved to the repository.
Different event payloads can be mocked in development with changes to the values
of the .github/resources/.actions/event.json
file.
Reference: https://docs.github.com/en/webhooks/webhook-events-and-payloads