Ready to use Slack bot for lazy developers: start Jenkins jobs, watch Jira tickets, watch pull requests...

Slack Bot

This Slack bot improves the workflow of development teams. Especially with focus on Jenkins, Github, Gitlab and Jira, as the integration is working out of the box. But also custom commands, macros, crons and other project specific commands can be implemented in a simple and flexible way.

Actions Status PkgGoDev Go Report Card Release codecov License: MIT Docker Mentioned in Awesome Go

Installation

1st) Create+prepare the Slack App:

Recommended way: Use Manifest file as App template

  1. Create a Slack App
  2. Select "From an app manifest"
  3. Select your Workspace
  4. Paste this Yaml code:
Click to expand!
_metadata:
  major_version: 1
  minor_version: 1
display_information:
  name: slack_bot
features:
  app_home:
    messages_tab_enabled: true
    messages_tab_read_only_enabled: false
  bot_user:
    display_name: bot
    always_online: true
oauth_config:
  scopes:
    bot:
      - app_mentions:read
      - channels:read
      - chat:write
      - im:history
      - im:write
      - mpim:history
      - reactions:read
      - reactions:write
      - users:read
      - files:write
settings:
  event_subscriptions:
    bot_events:
      - app_mention
      - message.im
  interactivity:
    is_enabled: true
  org_deploy_enabled: false
  socket_mode_enabled: true
  1. Create the App!
  2. Go to "Basic Information"
  3. -> in "App-Level Tokens", "Generate a Token" with the scope "connections:write"
  4. You will see a App-Level Token (beginning with xapp-). Sse it in the config.yaml as slack.socket_token.
  5. Go to "OAuth & Permissions":
  6. -> "Install to Workspace"
  7. -> you should see a "Bot User OAuth Access Token" (beginning with "xoxb-"). Use it as slack.token in the config.yaml
  8. start the bot!

Alternative: Manual steps when not using the App Manifest

Expand steps! - Create a [Slack App](https://api.slack.com/apps?new_app=1) - Select from scratch and choose a name and workspace. - Go to "Socket Mode" menu and activate it. - - use any token name, like "Slack-Bot Socket Mode token" - - You will see a App-Level Token (beginning with xapp-). Sse it in the config.yaml as slack.socket_token. - Enable "Interactivity & Shortcuts" - Enable "Event Subscriptions": - - if you see a "Send events to my app using the new format" checkbox, check it (only for old migrated apps) - - in "Subscribe to bot events", add "app_mention" and "message.im" events - Go to "OAuth & Permissions": - - use the "Bot User OAuth Access Token" (beginning with "xoxb-") as slack.token in the config.yaml - - in "Scopes" we need this permissions: "app_mentions:read", "channels:read", "chat:write", "im:history", "im:write", "users:read", "reactions:read", "reactions:write" - Go to "Install your App" and "Install your app to your workspace" - Back to "Install app" tab, the "Bot User OAuth Access Token" is visible (starts with "xoxb-"). You need this one in the config.yaml in slack->token.

2nd) Run the bot

Option 1: run via go

  1. install go
  2. create a config.yaml (at least a slack token is required) or take a look in config-example.yaml
  3. go run github.com/innogames/slack-bot/v2/cmd/bot

Option 2: via Docker

  1. install Docker incl. docker-compose
  2. clone this repo or at least fetch the docker-compose.yaml
  3. create a config.yaml (at least a slack token is required) or take a look in config-example.yaml
  4. add your Slack user id or user name in the "allowed_users:" section of the config.yaml
  5. docker-compose up

Option 3: Advanced:when planning working on the bot core

  1. install go (at least 1.16)
  2. clone/fork this repo
  3. create a config.yaml (at least a slack token is required) or take a look in config-example.yaml
  4. run go run cmd/bot/main.go or make run to run the go application

Usage

As slack user, you just have to send a private message to the bot user/app containing the command to execute. Additionally you can execute bot commands in channels by prefix your command with @bot_name, e.g. @slack-bot start job DailyDeployment

Note: You have to invite the bot into the channel to be able to handle commands.

Bot Commands

Help

The help command just prints a list of all available commands of this bot. With help *command* you'll get a short description and some examples for a single command.

Screenshot

Jenkins (optional)

The bot is able to start and monitor jenkins job on a simple but powerful way.

By default the commands are not available and not visible in the "help", till the "jenkins.host" is defined in the config file.

Start Jenkins jobs

The start job command starts a Jenkins job and shows the current progress. Attention: only whitelisted jobs in the config are startable!

In additions each job can have a configurable trigger which make it possible to create custom commands to start jobs. (it's a regexp which takes parameter names into account). E.g. "start daily deployment" could be the trigger for one jenkins job. Sending this text to the bot would start he job.

After starting a job the bot will show the estimated build time and some action buttons. There you can open the logs or abort the build directly.

The bot is also able to parse parameters and lookup branch names using a fuzzy branch search.

Examples:

  • trigger job DeployBeta
  • start job BackendTests TEST-123 (search for a full branch name, containing TEST-123. e.g. feature/TEST-123-added-feature-456)

Screenshot

Screenshot

Jenkins build notifications

The bot has also the possibility to create one time notifications for jenkins builds. This might be useful for long running jobs where the devs is waiting for the result.

Example:

  • inform me about build NightlyTests (watches the most recent running build)
  • inform me about build MyJobName #423 (specify a build number)
  • inform job MyJobName (alternative syntax)

Jenkins job notifications

Receive slack messages for all process builds for the given job:

Example:

  • watch JenkinsSelfCheck notifies about any build of Job JenkinsSelfCheck
  • unwatch JenkinsSelfCheck

Jenkins status

Small command to disable/enable job execution on Jenkins side.

Example:

  • disable job NightlyTests (disable job on jenkins)
  • enable job NightlyTests

Jenkins retry

When a build failed you are able to retry any build by:

Example:

  • retry build NightlyTests (retries the last build of a job)
  • retry build NightlyTests #100 (retries given build)

Nodes

jenkins nodes lists all available Jenkins nodes. The online/offline status and number of executors are visible. Screenshot

Pull Requests

If you just paste a link to a Github/Gitlab/Bitbucket/Stash Pull request, the bot will track the state of the ticket!

  • When a developer was added as reviewer, it will add a "eyes" reaction to show other devs that someone is already taking a look
  • When the reviewer approved the ticket, a checkmark is added
  • After merging the pull request, it will add a "merge" reaction

You're also able to set custom "approved" reactions. E.g to see directly who or which component/department approved a pull request you can use the name of the reaction or the Unicode character directory

Expand example!
pullrequest:
  reactions:
    merged: custom_merge_arrow
    review: 👀
  custom_approve_reaction:
    nerdydev: "approved_backend"
    iamamobiledev: "approved_mobile"
    iamamobiledev2: "approved_mobile"

Screenshot

Extra Features: For Bitbucket the bot is able to extract the current build status (e.g. from Jenkins/Bamboo etc) and show failed and running builds (fire reaction) as a reaction (circle arrow reaction). When the build is stable, the build reactions disappear.
Screenshot

Command Queue

The queue command (with the alias then) is able to queue the given command, until the currently running command finished.

Example following scenario: you have a build job (which might take some minutes) and a deploy job which relies of the build artifacts. Now you can do:

  • trigger job Build feature1234 to start the Build job with given branch
  • queue trigger job DeployBranch feature1234
  • queue reply Deployment is done!

Other example:

  • delay 1h
  • then send message #backend coffee time?

To see all running background commands (like Jenkins jobs or PR watcher) use this command:

  • list queue

Jira (optional)

The bot is able to query information from Jira, either from a single ticket, or a whole list of tickets.

By default the commands are not available and not visible in the "help", till the "jira.host" is defined in the config file.

Examples

  • jira TEST-1234
  • jira 1242 (opens the ticket, using the configured default jira project)
  • jql type=bug and status=open (use default project by default)
  • jira "Second city" (text search of tickets in default project)

Jira ticket

Jira list

It's also possible to get a notification when there is a state change in a certain Jira ticket.

Example

  • watch ticket PROJ-12234

Interactions

It's possible to create buttons which are performing any bot action when pressing the button. Slack interactions

Jira list

Examples:

  • add button "Start Deployment" "trigger job LiveDeployment"

Note

  • only whitelisted users can click the button
  • each button is only active once

Custom variables

Configure user specific variables to customize bot behaviour. E.g. each developer has his own server environment.

Example: Having this global config:

commands:
  - name: Deploy
    trigger: "deploy (?P<branch>.*)"
    commands:
      - deploy {{.branch}} to {{ customVariable "defaultServer" }}

Each developer can now call ONCE this commands like: set variable defaultSerer foobarX.local to register the custom "defaultServer".

When now calling deploy mater, it will deploy the master branch to foobarX.local server.

Another example Here an advanced version which uses Go templates. In the end the command will generate one subcommand, like: reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket> which will post the link to the Slack channel.

  - name: demo
    trigger: "demo (?P<ticketId>\\w+-\\d+)"
    commands:
      - |
        {{ $ticket := jiraTicket .ticketId }}
        {{ if $ticket }}
          reply <!here> demo for <{{ jiraTicketUrl $ticket.Key }}|{{ $ticket.Key }}: {{ $ticket.Fields.Summary }}>
        {{ else }}
          reply Ticket {{ .ticketId }} not found :white_frowning_face:
        {{ end }}
    description: Informs the current channel about a demo of a Jira ticket. It directly posts a link to the ticket
    examples:
      - demo XYZ-1232

User can define his default environment once by using set variable serverEnvironment aws-02.

Then the deploy feature-123 will deploy the branch to the defined aws-02 environment. Each user can define his own variables.

Quiz command

If you need a small break and want to play a little quiz game you can do so by calling this command. No more than 50 questions are allowed. The questions are from different categories and difficult levels and are either multiple choice or true/false questions.

Commands

  • quiz 10 to start a quiz with 10 questions
  • answer 1 to answer a question with the first answer

Quiz game

Weather command (optional)

It's possible to setup OpenWeatherMap to get information about the current weather at your location.

Screenshot

Example config:

open_weather:
  apikey: "612325WD623562376678"
  location: "Hamburg, DE"
  units: "metric"

Custom command

Every user is able to define own command aliases. This is a handy feature to avoid typing the same command every day.

Example usage

  • list commands to just list the defined commands for the current user
  • add command 'myCommand' 'trigger job RestoreWorld 7 -> then just call myCommand later
  • add command 'build master' 'trigger job Deploy master ; then trigger job DeployClient master'
  • delete command 'build master'
  • -> then you can execute myCommand to trigger this jenkins job Screenshot

Commands

Defined "Commands" (former called "Macros") are very magical and can be defined in the yaml configuration files.

They have a trigger (a regular expression) and have a list of sub commands which will be executed. They take parameter groups from regexp into account - so they can be very flexible!

One simple example to start two Jenkins jobs with a given branch name at the same time:

commands:
 - name: build clients
   trigger: "build clients (?P<branch>.*)"
   commands:
    - "reply I'll build {{ .branch }} for you"
    - "trigger job BuildFrontendClient {{ .branch }}"
    - "trigger job BuildMobileClient {{ .branch }}"
    - "then reply done! :checkmark:"

Screenshot

Note: In the commands you can use the full set of template features of go -> loops/conditions are possible!

Template functions

Beside the usual template features of go a bunch of bot specific commands are available in the template scope.

A list of all available functions (with arguments and return types) can be generated by using the list template functions command. Screenshot

Note: This template functions can be used in different commands/features:

Retry

With retry or repeat your last executed command will be re-executed. -> Useful when a failed Jenkins job got fixed.

Delay

A small command which might be useful in combination with command command or as hook for jenkins jobs.

Example command: delay 10m trigger job DeployWorldwide

As reply you'll get a command to stop the queued job (like stop timer 123456). As everyone can send the command, the command can be used to announce a deployment and in doubt, the execution can still be stopped by everyone.

Reply / send message

reply and send message are also small commands which are useful in combination with command or jenkins hooks.

Examples:

  • send message to #backend The job failed :panic:
  • delay 10m send message to @peter_pan I should notify you to...

Random

Simple command if you are not able to decide between different options

Examples

  • random Pizza Pasta -> produce either "Pizza" or "Pasta"
  • random Peter Paul Tom Jan -> who has to take about organizing food today?

Installation

  1. Make sure Go version 1.12+ is installed
  2. clone the project
  3. create config file called config.yaml (you can take a look at config.example.yaml)

Run without docker

This command will start the bot, using the config.yaml file by default. Use the -config argument to use the config file(s) from another location.

go run cmd/bot/main.go

Run via docker-compose

Attention: Create a config.yaml file first

docker-compose up

Configuration

The configuration is managed via simple .yaml files which are storing the credentials for the external services and the custom commands etc.

The easiest way is to just have one config.yaml file with all needed options included the config.yaml is loaded by default. It's also possible to split up the configuration into multiple files.

Example structure with mutiple config files:

  • secret.yaml containing the credentials for the external services (slack, jenkins) - can be managed by puppet/ansible etc.
  • jenkins.yaml configuration of jenkins job and their parameters etc
  • project-X.yaml custom commands for a specific team
  • project-Y.yaml

To load the multiple config files, use go run cmd/bot/main.go -config /path/to/config/*.yaml which merged all configs together.

Slack

To run this bot, you need a "bot token" for your slack application. See the installation section how to create a proper app with the needed tokens.

Jenkins config

To be able to start or monitor jenkins jobs, you have to setup the host and the credentials first. The user needs read access to the jobs and the right to trigger jobs for your whitelisted jobs.

jenkins:
     host: https://jenkins.example.de
     username: jenkinsuser
     password: secret

Jenkins jobs

To be able to start a job, the job and it's parameters have to be defined in the config.

A job without any parameter looks very simple:

jenkins:
  jobs:
    CleanupJob:

Then you can use trigger job CleanupJob or start job CleanupJob to start the job. It will also notify you when the job succeeded or failed (incl. error log).

Next a job with two parameters:

jenkins:
  jobs:
    RunTests:
      parameters:
      - name: BRANCH
        default: master
        type: branch
      - name: GROUP
        default: all

This job can handle two parameters:

  • BRANCH: VCS branch name, "master" as default
  • GROUP: optional parameter, using "all" as default

If you setup the VSC in the config, you don't have to pass the full branch name but can use the fuzzy search.

Example:

  • start job RunTests would start "all" groups on master branch
  • start job JIRA-1224 unit would try to find a matching branch for the ticket number. (Error message if there is no unique search result!)

Now a more complex example with more magic:

jenkins:
     jobs:
       DeployBranch:
         trigger: "deploy (?P<BRANCH>[\\w\\-_\\.\\/]*) to (?P<ENVIRONMENT>prod|test|dev)"
         parameters:
         - name: BRANCH
           default: master
           type: branch
         - name: ENVIRONMENT
         onsuccess:
          - reply Tadaa: Take a look on http://{{ .ENVIRONMENT }}.example.com

Step by step: The trigger is a regular expression to start the job which may contain named groups. The regexp groups will be matched to the job parameters automatically.

Then you can use deploy bugfix-1234 to test to start the jenkins job.

Note: You can always start this job also via start job DeployBranch master. The trigger is just an alternative.

The onsuccess is a hook which will be executed when a job ist started via this bot. In addition onsuccess and onerror is also available...e.g. to send custom error messages.

Cron

It's possible to define periodical commands via crons, using the robfig/cron library.

Example config

crons:
  - schedule: "0 8 * * *"
    commands:
      - trigger job BuildClients
      - then deploy master to staging
    channel: "#backend"

VCS / Stash / Bitbucket

To be able to resolve branch names in jenkins trigger, a VCS system can be configured (at the moment it's just Stash/Bitbucket).

vcs:
  type: bitbucket
  host: https://bitbucket.example.com
  username: readonlyuser
  password: secret
  project: MyProjectKey
  repository: repo_name

If no config is provided, there is no automated branch lookup and the "branch" parameters are passed 1:1 to the jenkins job.

Development

File structure

  • bot/ contains the code classes of the bot: connection to slack, user management, command matching...
  • cmd/bot/ entry points aka main.go for the bot and the CLI test tool
  • command/ real command implementing the bot.Command interface
  • client/ communication interfaces for Slack, Jenkins, Jira etc...

Create a new (native) command

If you need a new command, which is not implementable with a "command" command, you have to write to write go code.

  • create a new file within the "commands/" directory or one submodule of it
  • create a new struct which fulfills the bot.Command interface. The service.SlackClient might be needed as dependency
  • GetMatcher() needs to provide the information which command text is matching our command
  • register the command in command/commands.go
  • restart the bot application
  • it's recommended to fulfill the bot.HelpProvider (your command will show up in `help)
  • it's also recommended to create a integration test for your command

CLI tool

There is a handy CLI application which emulates the Slack application...just chat with your local console without any Slack connection! CLI tool

make run-cli

Auto live reload

make air to use the "air auto reload tool".

Testing

There are a bunch of tests which can be executed via:

make test

Test coverage is generated to build/coverage.html

make test-coverage
Comments
  • Slack-bot uses deprecated API

    Slack-bot uses deprecated API

    Hi,

    Thanks for creating this project ! I would very much would like to start testing it out but at the moment it will fail due to deprecated api with the error:: INFO[0000] Loaded config from ./config.yaml INFO[0000] Connecting to slack... ERRO[0000] error while fetching public channels: method_deprecated exit status 1

    See Slack's note on moving to the new Conversations API:

    Today we are announcing the deprecation of the methods that preceded the Conversations API (channels., groups., im., & mpim.). On November 25th, 2020 February 24th, 2021 these methods will retire and cease functioning.

    If users expect your app to work in channels of any kind, you'll want to verify you're using the Conversations API for all channel types.

    The final date for existing apps is now February 24th, 2021. We'll stop allowing newly created Slack apps to use these deprecated APIs beginning June 10th, 2020. All channels., groups., im., & mpim. methods will return deprecation warnings beginning June 10th, 2020.

    See: https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api

    Are you planning on supporting the new API so slack apps created recently could use your bot ?

    Thanks !

  • weather command not working

    weather command not working

    weather command not enabled by default

    when running the bot after initial install the weather command isn't listed as a command (yes I got an API key and uncommented the lines in config.yaml)

    Expected behavior

    when running "help" command it should list "weather" as a valid command

    I get the following: Invalid command: weather

  • [contribution] aws client

    [contribution] aws client

    Hi innogames team. I really appreciated your slack-bot project. Recently I added a feature which interacts with aws cloud front. This PR might not proper your team's convention because I cannot find any directions how to contribute.

    If you think this PR is not proper or not fit on your convention, please let me know to close it.

    Thanks for useful and flexible project:)

  • build(deps): bump github.com/alicebob/miniredis/v2 from 2.17.0 to 2.18.0

    build(deps): bump github.com/alicebob/miniredis/v2 from 2.17.0 to 2.18.0

    Bumps github.com/alicebob/miniredis/v2 from 2.17.0 to 2.18.0.

    Release notes

    Sourced from github.com/alicebob/miniredis/v2's releases.

    catching up with 6.2

    v2.18.0

    this adds some commands introduced in redis 6.2. Thanks to everyone for helping!

    Changelog

    Sourced from github.com/alicebob/miniredis/v2's changelog.

    v2.18.0

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump github.com/aws/aws-sdk-go from 1.42.25 to 1.42.27

    build(deps): bump github.com/aws/aws-sdk-go from 1.42.25 to 1.42.27

    Bumps github.com/aws/aws-sdk-go from 1.42.25 to 1.42.27.

    Release notes

    Sourced from github.com/aws/aws-sdk-go's releases.

    Release v1.42.27 (2022-01-04)

    Service Client Updates

    • service/rekognition: Updates service API and documentation
      • This release introduces a new field IndexFacesModelVersion, which is the version of the face detect and storage model that was used when indexing the face vector.
    • service/s3: Updates service documentation and examples
      • Minor doc-based updates based on feedback bugs received.
    • service/s3control: Updates service documentation
      • Documentation updates for the renaming of Glacier to Glacier Flexible Retrieval.

    SDK Enhancements

    • aws/session: Add options for customizing the construction of credential providers. Currently only supported for stscreds.WebIdentityRoleProvider.

    Release v1.42.26 (2022-01-03)

    Service Client Updates

    • service/detective: Updates service API, documentation, and paginators
    • service/greengrassv2: Updates service API and documentation
    • service/mediaconvert: Updates service API and documentation
      • AWS Elemental MediaConvert SDK has added strength levels to the Sharpness Filter and now permits OGG files to be specified as sidecar audio inputs.
    • service/rds: Updates service API, documentation, waiters, paginators, and examples
      • Multiple doc-only updates for Relational Database Service (RDS)
    • service/sagemaker: Updates service API and documentation
      • The release allows users to pass pipeline definitions as Amazon S3 locations and control the pipeline execution concurrency using ParallelismConfiguration. It also adds support of EMR jobs as pipeline steps.
    Changelog

    Sourced from github.com/aws/aws-sdk-go's changelog.

    Release v1.42.27 (2022-01-04)

    Service Client Updates

    • service/rekognition: Updates service API and documentation
      • This release introduces a new field IndexFacesModelVersion, which is the version of the face detect and storage model that was used when indexing the face vector.
    • service/s3: Updates service documentation and examples
      • Minor doc-based updates based on feedback bugs received.
    • service/s3control: Updates service documentation
      • Documentation updates for the renaming of Glacier to Glacier Flexible Retrieval.

    SDK Enhancements

    • aws/session: Add options for customizing the construction of credential providers. Currently only supported for stscreds.WebIdentityRoleProvider.

    Release v1.42.26 (2022-01-03)

    Service Client Updates

    • service/detective: Updates service API, documentation, and paginators
    • service/greengrassv2: Updates service API and documentation
    • service/mediaconvert: Updates service API and documentation
      • AWS Elemental MediaConvert SDK has added strength levels to the Sharpness Filter and now permits OGG files to be specified as sidecar audio inputs.
    • service/rds: Updates service API, documentation, waiters, paginators, and examples
      • Multiple doc-only updates for Relational Database Service (RDS)
    • service/sagemaker: Updates service API and documentation
      • The release allows users to pass pipeline definitions as Amazon S3 locations and control the pipeline execution concurrency using ParallelismConfiguration. It also adds support of EMR jobs as pipeline steps.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump golang from 1.16.6-alpine to 1.16.7-alpine

    build(deps): bump golang from 1.16.6-alpine to 1.16.7-alpine

    Bumps golang from 1.16.6-alpine to 1.16.7-alpine.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • State storage: Redis backend

    State storage: Redis backend

    My team has started using this as the base for our slack bot and I must say the project has been a pleasure to work with. Thank you!

    I have a few ideas / feature requests that we'd benefit from (and hopefully others too!) in practice. I'll try to make an effort in the coming weeks to send up a PR for each.

    For this issue though,

    Currently the project only supports storing JSON state in a local file. For those that have deployment models that require 12 factor properties this isn't ideal.

    What would this require?

    I think we should convert https://github.com/innogames/slack-bot/blob/master/bot/storage/store.go into a generic storage interface, then have a Scribble implementation as well as a Redis implementation. Depending on the configuration, we can choose one at runtime.

    Let me know what you think.

  • build(deps): bump wangyoucao577/go-release-action from 1.30 to 1.32

    build(deps): bump wangyoucao577/go-release-action from 1.30 to 1.32

    Bumps wangyoucao577/go-release-action from 1.30 to 1.32.

    Release notes

    Sourced from wangyoucao577/go-release-action's releases.

    v1.32

    What's Changed

    New Contributors

    Full Changelog: https://github.com/wangyoucao577/go-release-action/compare/v1.31...v1.32

    v1.31

    What's Changed

    Full Changelog: https://github.com/wangyoucao577/go-release-action/compare/v1.30...v1.31

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump docker/build-push-action from 3.0.0 to 3.1.0

    build(deps): bump docker/build-push-action from 3.0.0 to 3.1.0

    Bumps docker/build-push-action from 3.0.0 to 3.1.0.

    Release notes

    Sourced from docker/build-push-action's releases.

    v3.1.0

    • no-cache-filters input by @​crazy-max (#653)
    • Bump @​actions/github from 5.0.1 to 5.0.3 (#619)
    • Bump @​actions/core from 1.6.0 to 1.9.0 (#620 #637)
    • Bump csv-parse from 5.0.4 to 5.3.0 (#623 #650)

    Full Changelog: https://github.com/docker/build-push-action/compare/v3.0.0...v3.1.0

    Commits
    • 1cb9d22 Merge pull request #653 from crazy-max/no-cache-filters
    • 5ffbca1 no-cache-filters input
    • a8d76c0 Merge pull request #650 from docker/dependabot/npm_and_yarn/csv-parse-5.3.0
    • 12b1e41 Update generated content
    • 2a60bef Bump csv-parse from 5.1.0 to 5.3.0
    • 5268745 Merge pull request #637 from docker/dependabot/npm_and_yarn/actions/core-1.9.0
    • a2a2734 Update generated content
    • 05d9e52 Bump @​actions/core from 1.8.2 to 1.9.0
    • 42863b1 Merge pull request #623 from docker/dependabot/npm_and_yarn/csv-parse-5.1.0
    • c372f73 Update generated content
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump github.com/xanzy/go-gitlab from 0.68.2 to 0.69.0

    build(deps): bump github.com/xanzy/go-gitlab from 0.68.2 to 0.69.0

    Bumps github.com/xanzy/go-gitlab from 0.68.2 to 0.69.0.

    Commits
    • 4a79f74 Merge pull request #1504 from timofurrer/project-issue-board
    • 781f8b4 Update Project Issue Board API to match upstream API
    • 40de111 Merge pull request #1500 from LewisTheobald/patch-1
    • 6f600cf Added omitempty onto the url tags
    • bd9e20e Added the omitempty tags
    • dabf2d1 Including the tag_message field for annotated tag releases
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump wangyoucao577/go-release-action from 1.29 to 1.30

    build(deps): bump wangyoucao577/go-release-action from 1.29 to 1.30

    Bumps wangyoucao577/go-release-action from 1.29 to 1.30.

    Release notes

    Sourced from wangyoucao577/go-release-action's releases.

    v1.30

    What's Changed

    Full Changelog: https://github.com/wangyoucao577/go-release-action/compare/v1.29...v1.30

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump github.com/xanzy/go-gitlab from 0.74.0 to 0.76.0

    build(deps): bump github.com/xanzy/go-gitlab from 0.74.0 to 0.76.0

    Bumps github.com/xanzy/go-gitlab from 0.74.0 to 0.76.0.

    Commits
    • ffa70b0 Merge pull request #1573 from timofurrer/feature/metadata
    • 4c641df Implement Metadata API
    • d21dc36 Merge pull request #1575 from mycrEEpy/email-confirmed-at
    • 710f287 Merge pull request #1576 from r8ygun/master
    • fce9772 Merge pull request #1506 from timofurrer/feature/avatars
    • 02292ff Fully support project and group avatars
    • 677a0fa Add ID parameter to FeatureFlagStrategyOptions
    • a258c40 add ConfirmedAt to Email
    • 3ef2120 Merge pull request #1570 from FelixKampfer/add_field_to_projects_struct
    • 4172c04 Merge pull request #1572 from timofurrer/feature/settings-can-create-group
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump wangyoucao577/go-release-action from 1.30 to 1.33

    build(deps): bump wangyoucao577/go-release-action from 1.30 to 1.33

    Bumps wangyoucao577/go-release-action from 1.30 to 1.33.

    Release notes

    Sourced from wangyoucao577/go-release-action's releases.

    v1.33

    What's Changed

    New Contributors

    Full Changelog: https://github.com/wangyoucao577/go-release-action/compare/v1.32...v1.33

    v1.32

    What's Changed

    New Contributors

    Full Changelog: https://github.com/wangyoucao577/go-release-action/compare/v1.31...v1.32

    v1.31

    What's Changed

    Full Changelog: https://github.com/wangyoucao577/go-release-action/compare/v1.30...v1.31

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump github.com/stretchr/testify from 1.8.0 to 1.8.1

    build(deps): bump github.com/stretchr/testify from 1.8.0 to 1.8.1

    Bumps github.com/stretchr/testify from 1.8.0 to 1.8.1.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • build(deps): bump docker/setup-buildx-action from 2.0.0 to 2.2.1

    build(deps): bump docker/setup-buildx-action from 2.0.0 to 2.2.1

    Bumps docker/setup-buildx-action from 2.0.0 to 2.2.1.

    Release notes

    Sourced from docker/setup-buildx-action's releases.

    v2.2.1

    What's Changed

    Full Changelog: https://github.com/docker/setup-buildx-action/compare/v2.2.0...v2.2.1

    v2.2.0

    What's Changed

    Full Changelog: https://github.com/docker/setup-buildx-action/compare/v2.1.0...v2.2.0

    v2.1.0

    What's Changed

    Full Changelog: https://github.com/docker/setup-buildx-action/compare/v2.0.0...v2.1.0

    Commits
    • 8c0edbc Merge pull request #175 from crazy-max/input-list-quotes
    • 1fb9cbd escape surrounding quotes for platforms input
    • 693fdd6 Merge pull request #174 from crazy-max/input-quote
    • fe4c1ac preserve quotes surrounding fields in input list
    • c74574e Merge pull request #172 from docker/dependabot/npm_and_yarn/csv-parse-5.3.1
    • 2d0cf98 update generated content
    • 5f1d4ea Bump csv-parse from 5.3.0 to 5.3.1
    • 59b5ed6 Merge pull request #165 from crazy-max/append
    • bd61d52 update generated content
    • f6efb5f platforms input
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Add emojis for the severity levels of Pull Requests

    Add emojis for the severity levels of Pull Requests

    Is your feature request related to a problem? Please describe. Distinguishing urgent Pull Requests from trivial ones is currently not easily possible.

    Describe the solution you'd like It would be awesome if the bot could add emojis (we already have Jira-style emojis in the InnoGames Slack workspace) to published PR messages in order to see how urgently a PR needs to be reviewed. For that we could fetch the severity level from a Jira ticket associated with the PR. I am not sure if that is feasible or easily possible.

    Describe alternatives you've considered If the connection to Jira isn't (easily) possible we could listen to keywords in the title of the PR maybe, if it's urgent..? But then again, adding an emoji manually in that case seems like the same effort.

  • Cron: add a

    Cron: add a "@startup"

    we use https://github.com/robfig/cron to define and run crons. It supports a custom Parser which can be used to implement special "descriptors", like the existing @daily etc

    Idea add a parser which handles a "@startup" -> this cron then gets executed when the cron starts.

Go client library for Atlassian Jira
Go client library for Atlassian Jira

go-jira Go client library for Atlassian Jira. Features Authentication (HTTP Basic, OAuth, Session Cookie) Create and retrieve issues Create and retrie

Nov 24, 2022
Easy creation of review tasks for the Jira with a Discord notifications.

easy-jira-task-review Easy creation of review tasks for the Jira with a Discord notifications. Any ideas and help are welcome Installation Install go

Aug 3, 2022
Mrrobot - A simple greetings bot for Slack that uses events api and hosted on AWS Lambda

Mr. Robot a greeter bot for your slack community build_docker

Aug 21, 2022
RawLink makes backlinks queried from ahref ready for *Google Search Console*

Raw Link This simple program makes backlinks queried from ahref ready for Google Search Console. See footnote 1 for more information. It can be used t

Feb 8, 2022
Startpage - Lambda for reading rss feeds and generating a minimal start page for a static site

startpage generate a startpage of links for a static site hosted via AWS What It

Sep 6, 2022
Go library for accessing trending repositories and developers at Github.
Go library for accessing trending repositories and developers at Github.

go-trending A package to retrieve trending repositories and developers from Github written in golang. This package were inspired by rochefort/git-tren

Oct 10, 2022
The Fabric Token SDK is a set of API and services that lets developers create token-based distributed application on Hyperledger Fabric.

The Fabric Token SDK is a set of API and services that let developers create token-based distributed application on Hyperledger Fabric.

Nov 23, 2022
An unofficial package in Golang to help developers implement ZATCA (Fatoora) QR code easily.

Zatca SDK GO An unofficial package in Golang to help developers to implement ZATCA (Fatoora) QR code easily which required for e-invoicing ✅ The hash

Oct 14, 2022
Package rhymen/go-whatsapp implements the WhatsApp Web API to provide a clean interface for developers

go-whatsapp Package rhymen/go-whatsapp implements the WhatsApp Web API to provide a clean interface for developers. Big thanks to all contributors of

Mar 19, 2022
Slack API in Go

nlopes/slack has moved! It is being actively maintained at slack-go/slack. This fork was created when the project was moved, and is provided for backw

Oct 2, 2022
The wazuh-integratord is a daemon that allows Wazuh to connect to external APIs and alerting tools such as Slack, VirusTotal and PagerDuty.

The wazuh-integratord is a daemon that allows Wazuh to connect to external APIs and alerting tools such as Slack, VirusTotal and PagerDuty.

Apr 22, 2022
Send messages from slack incoming webhook integrations to telegram
Send messages from slack incoming webhook integrations to telegram

slack-to-telegram Slack incoming webhook to telegram Send messages from slack incoming webhook integrations to telegram Tested on Gitlab Slack Notific

Jul 19, 2022
This bot require you to run the GETH client + use ethers framework.

Mad Liquidity Sniper This bot require you to run the GETH client + use ethers framework. All addresses and private keys contained have been changed fo

Oct 19, 2021
Watch update of my.edu.sharif.edu

edu_watcher Watch update of my.edu.sharif.edu Deparments If you need any other departments, just add the id and name of it to departments var. Envirem

Jan 31, 2022
Send IAM-signed requests to AppSync and API Gateway

golang-iam-requests Provides helpers to send IAM-signed requests to AWS AppSync and AWS API Gateway services Generates a v4 sign using IAM credentials

Apr 21, 2022
🤖🚀📦 A Discord Bot for accessing the cdnjs platform
🤖🚀📦 A Discord Bot for accessing the cdnjs platform

A bridge between https://cdnjs.com/api and Discord Big shoutout to Br1ght0ne for helping me with writing helpers.go/SplitIn

Aug 17, 2022
🤖 Chegg answers requested and sent by the Discord BOT to the targeted user.
🤖 Chegg answers requested and sent by the Discord BOT to the targeted user.

"I believe that open-source resources are a must for everyone around. Especially in the field of education. As Chegg costs some money monthly, unfortunately, not all of us are capable of to charge ourselves that cost, which ends up blocking all those valuable resources to us. That is why, I have developed this bot, which unblurs the blurred question answers and sends them to you. I will develop it to a next level in the upcoming days, whereas, it will send the images/text, answers in short, directly through the Discord server you are in, or just DM/PM."

Aug 20, 2021
Golang bindings for the Telegram Bot API

Golang bindings for the Telegram Bot API

Nov 28, 2022
A bot that tweets posts with the Go tag on Qiita
A bot that tweets posts with the Go tag on Qiita

GoTwitterBot A bot that tweets posts with the Go tag on Qiita go mod init main/main go get github.com/joho/godotenv go get github.com/ChimeraCoder/a

Oct 4, 2021