{"id":17643473,"url":"https://github.com/mathew-fleisch/bashbot","last_synced_at":"2026-04-02T16:19:53.249Z","repository":{"id":37955587,"uuid":"213514679","full_name":"mathew-fleisch/bashbot","owner":"mathew-fleisch","description":"A slack-bot written in golang for infrastructure/devops teams","archived":false,"fork":false,"pushed_at":"2026-03-27T17:12:42.000Z","size":8701,"stargazers_count":45,"open_issues_count":22,"forks_count":14,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-03-27T17:45:22.393Z","etag":null,"topics":["slack","slack-bot"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mathew-fleisch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-10-08T00:42:38.000Z","updated_at":"2025-12-20T04:45:28.000Z","dependencies_parsed_at":"2023-02-12T13:17:32.724Z","dependency_job_id":"09099332-322d-420f-ba8d-15397b6c12eb","html_url":"https://github.com/mathew-fleisch/bashbot","commit_stats":null,"previous_names":["eaze/bashbot"],"tags_count":121,"template":false,"template_full_name":null,"purl":"pkg:github/mathew-fleisch/bashbot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathew-fleisch%2Fbashbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathew-fleisch%2Fbashbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathew-fleisch%2Fbashbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathew-fleisch%2Fbashbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mathew-fleisch","download_url":"https://codeload.github.com/mathew-fleisch/bashbot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mathew-fleisch%2Fbashbot/sbom","scorecard":{"id":303487,"data":{"date":"2025-08-11","repo":{"name":"github.com/mathew-fleisch/bashbot","commit":"f61dff9d6a25790c03687cacd6d43ecb4b704774"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/25 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":5,"reason":"7 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/pr.yaml:37","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pr.yaml:38","Warn: no topLevel permission defined: .github/workflows/example-bashbot-github-action-gate.yaml:1","Warn: no topLevel permission defined: .github/workflows/example-bashbot-github-action.yaml:1","Warn: no topLevel permission defined: .github/workflows/example-notify-slack.yaml:1","Warn: no topLevel permission defined: .github/workflows/pr.yaml:1","Warn: no topLevel permission defined: .github/workflows/release.yaml:1","Warn: no topLevel permission defined: .github/workflows/update-asdf-versions.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yaml:16"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact bashbot-v2.0.6 not signed: https://api.github.com/repos/mathew-fleisch/bashbot/releases/170714833","Warn: release artifact bashbot-v2.0.5 not signed: https://api.github.com/repos/mathew-fleisch/bashbot/releases/91334427","Warn: release artifact bashbot-v2.0.4 not signed: https://api.github.com/repos/mathew-fleisch/bashbot/releases/89817551","Warn: release artifact bashbot-v2.0.3 not signed: https://api.github.com/repos/mathew-fleisch/bashbot/releases/89178674","Warn: release artifact bashbot-v2.0.2 not signed: https://api.github.com/repos/mathew-fleisch/bashbot/releases/88518169","Warn: release artifact bashbot-v2.0.6 does not have provenance: https://api.github.com/repos/mathew-fleisch/bashbot/releases/170714833","Warn: release artifact bashbot-v2.0.5 does not have provenance: https://api.github.com/repos/mathew-fleisch/bashbot/releases/91334427","Warn: release artifact bashbot-v2.0.4 does not have provenance: https://api.github.com/repos/mathew-fleisch/bashbot/releases/89817551","Warn: release artifact bashbot-v2.0.3 does not have provenance: https://api.github.com/repos/mathew-fleisch/bashbot/releases/89178674","Warn: release artifact bashbot-v2.0.2 does not have provenance: https://api.github.com/repos/mathew-fleisch/bashbot/releases/88518169"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-bashbot-github-action-gate.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/example-bashbot-github-action-gate.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/example-bashbot-github-action-gate.yaml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/example-bashbot-github-action-gate.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/example-bashbot-github-action.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/example-bashbot-github-action.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/example-notify-slack.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/example-notify-slack.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr.yaml:117: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr.yaml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr.yaml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr.yaml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr.yaml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr.yaml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr.yaml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr.yaml:73: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr.yaml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/pr.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:103: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:109: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:117: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/release.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update-asdf-versions.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/mathew-fleisch/bashbot/update-asdf-versions.yaml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:11: pin your Docker image by updating alpine:latest to alpine:latest@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Warn: downloadThenRun not pinned by hash: examples/trigger-github-action/github-action.sh:19","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  16 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 6 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T21:22:15.080Z","repository_id":37955587,"created_at":"2025-08-17T21:22:15.080Z","updated_at":"2025-08-17T21:22:15.080Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31309834,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["slack","slack-bot"],"created_at":"2024-10-23T09:04:54.862Z","updated_at":"2026-04-02T16:19:53.233Z","avatar_url":"https://github.com/mathew-fleisch.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bashbot\n\n[![Release](https://github.com/mathew-fleisch/bashbot/actions/workflows/release.yaml/badge.svg)](https://github.com/mathew-fleisch/bashbot/actions/workflows/release.yaml) |\n[Docker Hub](https://hub.docker.com/r/mathewfleisch/bashbot/tags?page=1\u0026ordering=last_updated) | [ghcr](https://github.com/mathew-fleisch/bashbot/pkgs/container/bashbot)\n\nBashBot is a slack bot written in golang for infrastructure/devops teams. A socket connection to slack provides bashbot with a stream of text from each channel it is invited to, and uses regular expressions to determine when to trigger bash commands. A [configuration file](sample-config.yaml) defines a list of commands that can be run in public and/or private channels. Restricting certain commands to private channels gives granular control, over which users can execute them. Bashbot allows infrastructure/devops teams to extend the tools and scripts they already use to manage their environments, into slack, that also acts as an execution log, and leverages slack's access controls.\n\nSee the [examples](examples) directory for more information about deploying, configuring and customizing Bashbot for your team. The most basic example of a bashbot command will just echo a string back to the user when triggered.\n\n```yaml\nname: Ping/Pong\ndescription: Return pong on pings\nenvvars: []\ndependencies: []\nhelp: \"!bashbot ping\"\ntrigger: ping\nlocation: ./\ncommand:\n  - echo \"pong\"\nparameters: []\nlog: true\nephemeral: false\nresponse: text\npermissions:\n  - all\n```\n\n\u003cimg src=\"https://i.imgur.com/QyA6ECb.gif\"\u003e\n\nIn this example, a user triggers a Jenkins job using Bashbot and another instance of Bashbot is deployed in a Jenkins job as a gating mechanism. The configuration for the secondary Bashbot could get info about the Jenkins job/host and provides controls to manually decide if the job should pass or fail, at a certain stage in the build.This method of deploying Bashbot gives basic Jenkins controls (trigger, pass, fail) to users in an organization, without giving them access to Jenkins itself. Bashbot commands can be restricted to private channels to limit access within slack.\n\n\u003cimg src=\"https://i.imgur.com/P6IL10y.gif\" /\u003e\n\n---\n\n## Slack tokens\n\nBashbot uses the Slack API's \"[Socket Mode](https://api.slack.com/apis/connections/socket)\" to connect to the slack servers over a socket connection and uses ***no webhooks/ingress*** to trigger commands. Bashbot \"subscribes\" to message and emoji events and determins if a command should be executed and what command should be executed by parsing the data in each event. To run Bashbot, you must have a \"[Bot User OAuth Token](https://api.slack.com/authentication/token-types#bot)\" and an \"[App-Level Token](https://api.slack.com/authentication/token-types#app)\".\n\n- Click \"Create New App\" from the [Slack Apps](https://api.slack.com/apps) page and follow the \"From Scratch\" prompts to give your instance of bashbot a unique name and a workspace for it to be installed in\n- The \"Basic Information\" page gives controls to set a profile picture toward the bottom (make sure to save any changes)\n- Enable \"Socket Mode\" from the \"Socket Mode\" page and add the default scopes `conversations.write` and note the \"[App-Level Token](https://api.slack.com/authentication/token-types#app)\" that is generated to save in the .env file as `SLACK_APP_TOKEN`\n- Enable events from the \"Event Subscriptions\" page and add the following bot event subscriptions and save changes\n  - `app_mention`\n  - `message.channels`\n  - `message.groups`\n  - `reaction_added`\n  - `reaction_removed`\n- From the \"OAuth \u0026 Permissions\" page, after setting the following \"scopes\" or permissions, install Bashbot in your workspace (this will require administrator approval of your slack workspace) and note the \"[Bot User OAuth Token](https://api.slack.com/authentication/token-types#bot)\" to save in the .env file as `SLACK_BOT_TOKEN`\n  - `app_mentions:read`\n  - `channels:history`\n  - `channels:read`\n  - `chat:write`\n  - `files:write`\n  - `groups:history`\n  - `groups:read`\n  - `incoming-webhook`\n  - `reactions:read`\n  - `reactions:write`\n  - `users:read`\n\n---\n\n## Installation, setup and configuration\n\n[Example deployments and commands](examples)\n\nBashbot can be run as a go binary or as a container and requires a slack-bot-token, slack-app-token and a config.yaml. The go binary takes flags to set the slack-bot-token, slack-app-token and path to the config.yaml file and the container uses environment variables to trigger a go binary by [entrypoint.sh](entrypoint.sh). The [Examples](examples) directory of this repository, has many deployment examples, commands used in automated tests, and can illustrate how bashbot can be used to trigger automation, or as automation itself, by leveraging secrets from the host running bashbot. For instance, one command might use an api token to curl a third-party api, and return the response back to the slack user, once triggered ([aqi example](examples/aqi)). If deployed in a kubernetes cluster, with a service-account to access the kube-api, bashbot can allow slack users to execute (hopefully curated) kubectl/helm commands, for an SRE/Ops focused deployment (get/describe/delete pods/deployments/secrets etc).\n\n***Steps To Prove It's Working***\n\n- Invite the BashBot into a channel by typing `@BashBot`\n- Slackbot should respond with the message: `OK! I’ve invited @BashBot to this channel.`\n- Now type `!bashbot help`\n- If all is configured correctly, you should see BashBot respond immediately with `Processing command...` and momentarily post a full list of commands that are defined in config.yaml\n\n---\n\n## Automation\n\nIncluded in this repository, one github action is executed on commits to pull requests, and another is executed on merges to the main branch:\n\n1. On [pull requests to the main branch](.github/workflows/pr.yaml) [![pr](https://github.com/mathew-fleisch/bashbot/actions/workflows/pr.yaml/badge.svg)](https://github.com/mathew-fleisch/bashbot/actions/workflows/pr.yaml), four jobs are run on every commit:\n    - linting and unit tests are run under the `unit_tests` job\n    - a container is built and scanned by the [anchore](https://anchore.com/) container scanning tool\n    - the golang code is analyzed by [codeql](https://codeql.github.com/) SAST tool\n    - a container is built and deployed in a kind cluster, to run automated tests, to maintain/verify basic functionality (see [Makefile](Makefile) target `make help` for more information)\n2. The [![release](https://github.com/mathew-fleisch/bashbot/actions/workflows/release.yaml/badge.svg)](https://github.com/mathew-fleisch/bashbot/actions/workflows/release.yaml) action will:\n    - cross compile go-binaries for linux/amd64, linux/arm64, darwin/amd64, and darwin/arm64\n    - package and release a helm chart with the chart-releaser action\n    - add the go-binaries as release artifacts\n    - use the buildx docker plugin to build and push a container for amd64/arm64 to docker hub and ghcr.\n    - use asdf to install the new version of bashbot\n    - notify the bashbot test slack workspace\n3. The [![update-asdf-versions](https://github.com/mathew-fleisch/bashbot/actions/workflows/update-asdf-versions.yaml/badge.svg)](https://github.com/mathew-fleisch/bashbot/actions/workflows/update-asdf-versions.yaml) action will check for new versions of dependencies installed with the [asdf version manager](https://asdf-vm.com/), found in the [.tool-versions](.tool-versions) file.\n\n### Makefile\n\nrun `make help` for a full list of targets.\n\nNote: [yq](https://github.com/mikefarah/yq) is a dependency of running many makefile targets and can be installed with the binary: `wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -q -O /usr/local/bin/yq \u0026\u0026 chmod +x /usr/local/bin/yq`\n\n```text\n+---------------------------------------------------------------+\n|   ____            _     ____        _                         |\n|  |  _ \\          | |   |  _ \\      | |                        |\n|  | |_) | __ _ ___| |__ | |_) | ___ | |_                       |\n|  |  _ \u003c / _' / __| '_ \\|  _ \u003c / _ \\| __|                      |\n|  | |_) | (_| \\__ \\ | | | |_) | (_) | |_                       |\n|  |____/ \\__,_|___/_| |_|____/ \\___/ \\__|                      |\n|                                                               |\n|  makefile targets                                             |\n+---------------------------------------------------------------+\nv2.0.5\n\nUsage:\n  make \u003ctarget\u003e\n\nGo stuff\n  go-build            build a go-binary for this host system-arch\n  go-clean            delete any existing binaries at ./bin/*\n  go-setup            install go-dependencies\n  go-cross-compile    build go-binaries for linux/darwin amd64/arm64\n  go-run              run the bashbot source code with go\n  go-version          run the bashbot source code with the version argument\n\nDocker stuff\n  docker-build        build and tag $(REGISTRY_NAME):$(REGISTRY_TAG)\n  docker-run          run an existing build of $(REGISTRY_NAME):$(REGISTRY_TAG)\n  docker-run-bash     run an exsting build of $(REGISTRY_NAME):$(REGISTRY_TAG) but override the entrypoint with /bin/bash\n\nKubernetes stuff\n  test-kind           run KinD tests\n  test-run            run tests designed for bashbot running in kubernetes\n  kind-setup          setup a KinD cluster to test bashbot's helm chart\n  kind-cleanup        delete any KinD cluster set up for bashbot\n  version             get the current helm chart version\n  bump-patch     Bump-patch the semantic version of the helm chart using semver tool\n  bump-minor     Bump-minor the semantic version of the helm chart using semver tool\n  bump-major     Bump-major the semantic version of the helm chart using semver tool\n  helm-install        install bashbot via helm into an existing KinD cluster to /usr/local/bin/bashbot\n  helm-uninstall      uninstall bashbot via helm/kubectl from an existing cluster\n  pod-get             with an existing pod bashbot pod running, use kubectl to get the pod name\n  pod-logs            with an existing pod bashbot pod running, use kubectl to display the logs of the pod\n  pod-logs-json       with an existing pod bashbot pod running, use kubectl to display the json logs of the pod and pipe to jq\n  pod-delete          with an existing pod bashbot pod running, use kubectl to delete it\n  pod-exec            with an existing pod bashbot pod running, use kubectl to exec into it \n  pod-exec-test       with an existing pod bashbot pod running, use kubectl to exec into it and run the test-suite\n\nLinters and Tests\n  test-lint-actions   lint github actions with action-validator\n  test-lint           lint go source with golangci-lint\n  test-docker         use dockle to test the dockerfile for best practices\n  test-go             run go coverage tests\n\nOther stuff\n  help                this\n  install-latest      install the latest version of the bashbot binary to /usr/local/bin/bashbot with wget\n  update-asdf-deps    trigger github action to update asdf dependencies listed in .tool-versions (requires GIT_TOKEN)\n```\n\nAny of these environment variables can be overridden by exporting a new value before running any makefile target.\n\n```makefile\nGOOS?=$(shell go env GOOS)\nGOARCH?=$(shell go env GOARCH)\nVERSION?=$(shell make version)\nLATEST_VERSION?=$(shell curl -s https://api.github.com/repos/mathew-fleisch/bashbot/releases/latest | grep tag_name | cut -d '\"' -f 4)\nBINARY?=bin/bashbot\nSRC_LOCATION?=main.go\n# Public builds:  REGISTRY_NAME=mathewfleisch/bashbot or REGISTRY_NAME=ghcr.io/mathew-fleisch/bashbot\nREGISTRY_NAME?=bashbot\n# For latest tag: REGISTRY_TAG=latest\"\nREGISTRY_TAG?=local\nNRUSER?=bb\nBASHBOT_LOG_LEVEL?=info\nBASHBOT_LOG_TYPE?=text\nTESTING_CHANNEL?=C034FNXS3FA\nADMIN_CHANNEL?=GPFMM5MD2\nNAMESPACE?=bashbot\nBOTNAME?=bashbot\nHELM_CONFIG_YAML?=$(PWD)/config.yaml\nHELM_TOOL_VERSIONS?=$(PWD)/.tool-versions\nHELM_ENV?=${PWD}/.env\n```\n\n\n\u003c!-- CI Test: Verifying modernization of Go 1.22 and GitHub Actions --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmathew-fleisch%2Fbashbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmathew-fleisch%2Fbashbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmathew-fleisch%2Fbashbot/lists"}