|
1 | | -# AI workflows, driven by Goose AI |
| 1 | +# AI Workflows Platform |
2 | 2 |
|
3 | | -For Goose AI to be able to access Jira tickets you need an MCP Server. |
4 | | -In this workflows we are using [MCP server for Atlassian tools](https://github.com/sooperset/mcp-atlassian). |
| 3 | +An AI automation platform that leverages multiple AI agent frameworks for Red Hat engineering workflows. This repository uses **Goose AI**, **BeeAI**, and **ADK Workflows** to provide automation for RHEL/CentOS package management, issue triage, and development workflows. |
5 | 4 |
|
6 | | -## Configure |
| 5 | +## 🏗️ Architecture Overview |
7 | 6 |
|
8 | | -Secrets such as tokens are managed in the form of environment files. The templates for those files can be found in the `./templates` directory. To configure the deployment, run `make config` first to copy the files to the `.secrets` directory where you can manually edit the files to add your tokens and more. This step also sets up a .env file in the toplevel directory. |
| 7 | +This platform consists of several integrated components: |
9 | 8 |
|
| 9 | +### AI Agents |
| 10 | +- **[Goose AI](./goose/)** - Driven by human language instructions that call out to tools backed by MCP servers and the shell |
| 11 | +- **[BeeAI Framework](./beeai/)** - Driven by python scripts that call out to tools backed by MCP servers |
| 12 | +- **[ADK Workflows](./adk-workflows/)** - Also driven by python |
10 | 13 |
|
11 | | -- `GOOGLE_API_KEY`: take it from Google Cloud -> API & Services -> Credentials -> API Keys -> show key) |
12 | | -- `JIRA_PERSONAL_TOKEN`: create PATs in your Jira/Confluence profile settings - usually under "Personal Access Tokens" |
13 | | -- `GITLAB_TOKEN` with read permissions (read_user, read_repository, read_api). Forking and writing to a repository requires the `write_api` and `write_repository` scope. Please be aware that granting any write access to an agent creates a risk of data loss and should only be done in a test environment. However, you can avoid writing to the repository by using [dry run](beeai/README.md#dry-run-mode) mode. |
14 | | -- `TESTING_FARM_API_TOKEN`: required and can be generated from https://testing-farm.io/tokens/. |
| 14 | +### MCP (Model Context Protocol) Servers |
| 15 | +- **Atlassian MCP Server** - Jira/Confluence integration for issue management |
| 16 | +- **Testing Farm MCP Server** - Integration with Testing Farm for running packaging tests |
15 | 17 |
|
16 | | -If you need to change the llm provider and model, they are stored in the Goose config file: `goose-container/goose-config.yaml` (`GOOSE_PROVIDER`, `GOOSE_MODEL`) |
| 18 | +### Package Analysis Tools |
| 19 | +- **[Package Dependency Analyzer](./scripts/find-package-dependents.py)** - Script for finding reverse dependencies |
17 | 20 |
|
18 | | -## Build |
| 21 | +### Automation Recipes |
| 22 | +- **[Goose Recipes](./goose-recipes/)** - Predefined workflows for common tasks |
| 23 | +- **Issue Triage** - Automated analysis and routing of RHEL issues |
| 24 | +- **Package Rebase** - Automated package version updates |
| 25 | +- **Backport Management** - Automated patch application workflows |
| 26 | +- **Reverse Dependency Testing** - Automated testing of select reverse dependencies based on context |
19 | 27 |
|
20 | | -- `make build` This builds the goose image using an officially released goose binaries |
21 | | -- `make debug-build` This builds the goose image using a rebuild of goose from git. `*.patch` in `goose-container/` are applied to the git tree before building. |
22 | | -## Run Goose - interactively - with the MCP Atlassian server |
| 28 | +## 🚀 Quick Start |
23 | 29 |
|
24 | | -To run goose interactively, don't be tempted to run `podman compose up` or similar, because input from your terminal might not be directed to the Goose container. Instead use: |
| 30 | +### Prerequisites |
| 31 | +- Podman |
| 32 | +- Make |
| 33 | +- API tokens (see Configuration section) |
25 | 34 |
|
26 | | -1. `make run-goose` (Requires enabling the [Generative Language API](https://console.developers.google.com/apis/api/generativelanguage.googleapis.com/) or another LLM provider and configuring the environment variables as described in the [configuration docs](https://block.github.io/goose/docs/guides/config-file#global-settings).) |
27 | | -2. Type *List all In Progress issues at https://issues.redhat.com/projects/LD* and wait for the output. |
28 | | -3. `make clean` |
| 35 | +### Initial Setup |
| 36 | +1. **Configure environment:** |
| 37 | + ```bash |
| 38 | + ❯ make config |
| 39 | + ``` |
| 40 | + This copies template files to `.secrets/` for manual configuration. |
29 | 41 |
|
30 | | -You can further manually run test and run the Goose recipes which are mounted into the container at `/home/goose/recipes`. |
| 42 | +2. **Set up API tokens:** |
| 43 | + - `GOOGLE_API_KEY` - From Google Cloud Console |
| 44 | + - `JIRA_PERSONAL_TOKEN` - From Jira profile settings |
| 45 | + - `GITLAB_TOKEN` - With appropriate read/write permissions |
| 46 | + - `TESTING_FARM_API_TOKEN` - From https://testing-farm.io/tokens/ |
31 | 47 |
|
32 | | -## Run local Goose recipes |
| 48 | +3. **Build the platform:** |
| 49 | + ```bash |
| 50 | + ❯ make build |
| 51 | + ``` |
33 | 52 |
|
34 | | -The recipes are defined in `goose-recipes/`. If you want to run `goose-recipes/<recipe>.yaml`, run the following: |
| 53 | +### Running Different Components |
35 | 54 |
|
36 | | -1. `make <recipe>` |
37 | | -2. `make clean` |
| 55 | +#### Interactive Goose AI Session |
| 56 | +```bash |
| 57 | +❯ make run-goose |
| 58 | +``` |
| 59 | + |
| 60 | +#### BeeAI Automated Workflows |
| 61 | +See beeai/README.md |
| 62 | + |
| 63 | +#### ADK Package Automation |
| 64 | +See adk-workflows/README.md |
| 65 | + |
| 66 | +#### Goose Recipe Execution |
| 67 | +```bash |
| 68 | +# Run specific automation recipes |
| 69 | +❯ make triage-issue |
| 70 | +❯ make backport-fix |
| 71 | +❯ make rebase-package |
| 72 | +❯ make test-reverse-dependencies PACKAGE=systemd CHANGE='Fix bug in hostnamed that caused avahi to crash' |
| 73 | +``` |
| 74 | + |
| 75 | +## 📋 Available Workflows |
| 76 | + |
| 77 | +### Package Management |
| 78 | +- **Issue Triage** - Automatically analyze JIRA issues and determine resolution path |
| 79 | +- **Package Rebase** - Update packages to newer upstream versions |
| 80 | +- **Backport Fixes** - Apply specific patches to packages |
| 81 | +- **Dependency Analysis** - Package dependency mapping |
| 82 | + |
| 83 | +### Development Automation |
| 84 | +- **Repository Management** - Automated Git operations and merge requests |
| 85 | +- **Testing Integration** - Automated testing via Testing Farm |
| 86 | +- **Documentation Generation** - Automated documentation updates |
| 87 | + |
| 88 | +### Monitoring & Observability |
| 89 | +- **Phoenix Web Interface** - beeai agent tracing at http://localhost:6006/ |
| 90 | +- **Redis Commander** - beeai queue monitoring at http://localhost:8081/ |
38 | 91 |
|
39 | | -## Development |
| 92 | +## 🔧 Configuration |
40 | 93 |
|
41 | | -This project uses [pre-commit](https://pre-commit.com/) hooks. To set up: |
| 94 | +### LLM Provider Configuration |
| 95 | +Edit `goose-container/goose-config.yaml` to configure: |
| 96 | +- `GOOSE_PROVIDER` - Your preferred LLM provider |
| 97 | +- `GOOSE_MODEL` - Specific model to use |
42 | 98 |
|
| 99 | +### Dry Run Mode |
| 100 | +Enable safe testing without actual changes: |
43 | 101 | ```bash |
44 | | -pip install pre-commit |
45 | | -pre-commit install |
| 102 | +❯ export DRY_RUN=true |
46 | 103 | ``` |
47 | 104 |
|
48 | | -## Container Images |
| 105 | +## 📁 Repository Structure |
| 106 | + |
| 107 | +``` |
| 108 | +ai-workflows/ |
| 109 | +├── goose/ # Goose AI agent framework |
| 110 | +├── beeai/ # BeeAI framework with specialized agents |
| 111 | +├── adk-workflows/ # Google ADK automation workflows |
| 112 | +├── goose-recipes/ # Predefined automation workflows |
| 113 | +├── scripts/ # Utility scripts and tools |
| 114 | +├── templates/ # Configuration templates |
| 115 | +├── goose-container/ # Container configuration for Goose |
| 116 | +└── compose.yaml # Docker Compose orchestration |
| 117 | +``` |
| 118 | + |
| 119 | +## 🤖 Agent Capabilities |
| 120 | + |
| 121 | +### BeeAI Agents |
| 122 | +- **Triage Agent** - Analyzes JIRA issues and routes to appropriate resolution |
| 123 | +- **Rebase Agent** - Automatically updates packages to newer versions |
| 124 | +- **Backport Agent** - Applies targeted fixes and patches |
| 125 | + |
| 126 | +### Goose AI Integration |
| 127 | +- Check JIRA tickets for rebase requests |
| 128 | +- Get details of JIRA issues |
| 129 | +- Analyze JIRA ticket to decide what automation (if any) is appropriate |
| 130 | +- Backport fix from upstream |
| 131 | +- Test package in testing farm |
| 132 | +- Test reverse dependencies of package in testing farm |
| 133 | + |
| 134 | +## 🚢 Production Deployment |
| 135 | + |
| 136 | +### Container Images |
| 137 | +Available at [jotnar organization on quay.io](https://quay.io/organization/jotnar) |
| 138 | + |
| 139 | +### OpenShift Deployment |
| 140 | +- **Namespace**: `jotnar-prod` on Cyborg OpenShift cluster |
| 141 | +- **Access**: Members of `jotnar` LDAP group have admin access |
| 142 | +- **Monitoring**: Integrated observability and logging |
| 143 | + |
| 144 | +## 📖 Documentation |
| 145 | + |
| 146 | +- [BeeAI Framework Details](./beeai/README.md) |
| 147 | +- [ADK Workflows Guide](./adk-workflows/README.md) |
| 148 | +- [Goose AI Documentation](./goose/README.md) |
| 149 | +- [Package Analysis Tools](./scripts/README.md) |
49 | 150 |
|
50 | | -Container images are available at the [jotnar](https://quay.io/organization/jotnar) organization on quay.io. |
| 151 | +## 🤝 Contributing |
51 | 152 |
|
52 | | -## Production |
| 153 | +See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines. |
53 | 154 |
|
54 | | -This project is deployed in the `jotnar-prod` namespace on the Cyborg Openshift cluster. Members of `jotnar` LDAP group have admin access to it. |
| 155 | +**Merging Policy**: Prefer rebase-merging over merge commits unless preserving branch history is necessary. |
0 commit comments