Skip to content

Commit 1826c72

Browse files
authored
Merge pull request #17 from lippytm/copilot/implement-full-stack-toolkit
2 parents e1d35fa + 8be2525 commit 1826c72

4 files changed

Lines changed: 455 additions & 0 deletions

File tree

.github/workflows/integrations.yml

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
name: Integration Checks
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
branches: [main]
7+
8+
jobs:
9+
integration-checks:
10+
runs-on: ubuntu-latest
11+
permissions:
12+
contents: read
13+
14+
steps:
15+
- name: Checkout code
16+
uses: actions/checkout@v4
17+
18+
- name: Check Secret Presence
19+
env:
20+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
21+
MANYCHAT_API_KEY: ${{ secrets.MANYCHAT_API_KEY }}
22+
BOTBUILDERS_API_KEY: ${{ secrets.BOTBUILDERS_API_KEY }}
23+
MOLTBOOK_API_KEY: ${{ secrets.MOLTBOOK_API_KEY }}
24+
MOLTBOT_API_KEY: ${{ secrets.MOLTBOT_API_KEY }}
25+
OPENCLAW_API_KEY: ${{ secrets.OPENCLAW_API_KEY }}
26+
GITHUB_PAT: ${{ secrets.GITHUB_PAT }}
27+
WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }}
28+
SERVICE_BASE_URL_OPENCLAW: ${{ secrets.SERVICE_BASE_URL_OPENCLAW }}
29+
run: |
30+
echo "=== Checking Secret Presence ==="
31+
echo "Note: Secret values are masked and never printed"
32+
echo ""
33+
34+
# Function to check if a secret is set
35+
check_secret() {
36+
local name=$1
37+
local value=$2
38+
if [ -n "$value" ]; then
39+
echo "✓ $name is set"
40+
else
41+
echo "✗ $name is NOT set"
42+
fi
43+
}
44+
45+
check_secret "OPENAI_API_KEY" "$OPENAI_API_KEY"
46+
check_secret "MANYCHAT_API_KEY" "$MANYCHAT_API_KEY"
47+
check_secret "BOTBUILDERS_API_KEY" "$BOTBUILDERS_API_KEY"
48+
check_secret "MOLTBOOK_API_KEY" "$MOLTBOOK_API_KEY"
49+
check_secret "MOLTBOT_API_KEY" "$MOLTBOT_API_KEY"
50+
check_secret "OPENCLAW_API_KEY" "$OPENCLAW_API_KEY"
51+
check_secret "GITHUB_PAT" "$GITHUB_PAT"
52+
check_secret "WEBHOOK_URL" "$WEBHOOK_URL"
53+
check_secret "SERVICE_BASE_URL_OPENCLAW" "$SERVICE_BASE_URL_OPENCLAW"
54+
55+
echo ""
56+
echo "=== Secret Presence Check Complete ==="
57+
58+
- name: OpenAI Connectivity Check
59+
env:
60+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
61+
run: |
62+
if [ -z "$OPENAI_API_KEY" ]; then
63+
echo "⊘ Skipping OpenAI check - API key not set"
64+
exit 0
65+
fi
66+
67+
echo "→ Running OpenAI connectivity check (dry-run)"
68+
echo " Would verify connection to: https://api.openai.com/v1/models"
69+
echo " Status: Dry-run mode - no actual API call made"
70+
echo "✓ OpenAI check complete"
71+
72+
- name: ManyChat Connectivity Check
73+
env:
74+
MANYCHAT_API_KEY: ${{ secrets.MANYCHAT_API_KEY }}
75+
run: |
76+
if [ -z "$MANYCHAT_API_KEY" ]; then
77+
echo "⊘ Skipping ManyChat check - API key not set"
78+
exit 0
79+
fi
80+
81+
echo "→ Running ManyChat connectivity check (dry-run)"
82+
echo " Would verify connection to: https://api.manychat.com"
83+
echo " Status: Dry-run mode - no actual API call made"
84+
echo "✓ ManyChat check complete"
85+
86+
- name: BotBuilders Connectivity Check
87+
env:
88+
BOTBUILDERS_API_KEY: ${{ secrets.BOTBUILDERS_API_KEY }}
89+
run: |
90+
if [ -z "$BOTBUILDERS_API_KEY" ]; then
91+
echo "⊘ Skipping BotBuilders check - API key not set"
92+
exit 0
93+
fi
94+
95+
echo "→ Running BotBuilders connectivity check (dry-run)"
96+
echo " Would verify connection to: https://api.botbuilders.com"
97+
echo " Status: Dry-run mode - no actual API call made"
98+
echo "✓ BotBuilders check complete"
99+
100+
- name: Moltbook Connectivity Check
101+
env:
102+
MOLTBOOK_API_KEY: ${{ secrets.MOLTBOOK_API_KEY }}
103+
run: |
104+
if [ -z "$MOLTBOOK_API_KEY" ]; then
105+
echo "⊘ Skipping Moltbook check - API key not set"
106+
exit 0
107+
fi
108+
109+
echo "→ Running Moltbook connectivity check (dry-run)"
110+
echo " Would verify connection to: https://api.moltbook.com"
111+
echo " Status: Dry-run mode - no actual API call made"
112+
echo "✓ Moltbook check complete"
113+
114+
- name: Moltbot Connectivity Check
115+
env:
116+
MOLTBOT_API_KEY: ${{ secrets.MOLTBOT_API_KEY }}
117+
run: |
118+
if [ -z "$MOLTBOT_API_KEY" ]; then
119+
echo "⊘ Skipping Moltbot check - API key not set"
120+
exit 0
121+
fi
122+
123+
echo "→ Running Moltbot connectivity check (dry-run)"
124+
echo " Would verify connection to: https://api.moltbot.com"
125+
echo " Status: Dry-run mode - no actual API call made"
126+
echo "✓ Moltbot check complete"
127+
128+
- name: OpenClaw Connectivity Check
129+
env:
130+
OPENCLAW_API_KEY: ${{ secrets.OPENCLAW_API_KEY }}
131+
SERVICE_BASE_URL_OPENCLAW: ${{ secrets.SERVICE_BASE_URL_OPENCLAW }}
132+
run: |
133+
if [ -z "$OPENCLAW_API_KEY" ]; then
134+
echo "⊘ Skipping OpenClaw check - API key not set"
135+
exit 0
136+
fi
137+
138+
echo "→ Running OpenClaw connectivity check (dry-run)"
139+
if [ -n "$SERVICE_BASE_URL_OPENCLAW" ]; then
140+
echo " Would verify connection to: configured custom endpoint"
141+
else
142+
echo " Would verify connection to: https://api.openclaw.com"
143+
fi
144+
echo " Status: Dry-run mode - no actual API call made"
145+
echo "✓ OpenClaw check complete"
146+
147+
- name: GitHub API Connectivity Check
148+
env:
149+
GITHUB_PAT: ${{ secrets.GITHUB_PAT }}
150+
run: |
151+
if [ -z "$GITHUB_PAT" ]; then
152+
echo "⊘ Skipping GitHub API check - PAT not set"
153+
echo " (Using GITHUB_TOKEN for repository operations only)"
154+
exit 0
155+
fi
156+
157+
echo "→ Running GitHub API connectivity check (dry-run)"
158+
echo " Would verify connection to: https://api.github.com"
159+
echo " Status: Dry-run mode - no actual API call made"
160+
echo "✓ GitHub API check complete"
161+
162+
- name: Webhook Connectivity Check
163+
env:
164+
WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }}
165+
run: |
166+
if [ -z "$WEBHOOK_URL" ]; then
167+
echo "⊘ Skipping Webhook check - URL not set"
168+
exit 0
169+
fi
170+
171+
echo "→ Running Webhook connectivity check (dry-run)"
172+
echo " Would verify connection to webhook endpoint"
173+
echo " Status: Dry-run mode - no actual API call made"
174+
echo "✓ Webhook check complete"
175+
176+
- name: Integration Summary
177+
run: |
178+
echo ""
179+
echo "╔═══════════════════════════════════════════════╗"
180+
echo "║ Integration Checks Complete ║"
181+
echo "╚═══════════════════════════════════════════════╝"
182+
echo ""
183+
echo "All configured integration checks have been executed in dry-run mode."
184+
echo "Review the logs above to see which services are configured."
185+
echo ""
186+
echo "To enable actual API calls, update this workflow to replace"
187+
echo "dry-run placeholder checks with real connectivity tests."

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ yarn-error.log*
1717
.env.local
1818
.env.*.local
1919

20+
# Service configuration with secrets (keep .example.json)
21+
config/services.json
22+
2023
# IDE
2124
.vscode/
2225
.idea/

README.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ The Grand United Fields of Theories
44

55
[![CI](https://github.com/lippytm/Transparency-Logic-Time-Machine-Bots-/actions/workflows/blank.yml/badge.svg)](https://github.com/lippytm/Transparency-Logic-Time-Machine-Bots-/actions/workflows/blank.yml)
66
[![Security Scan](https://github.com/lippytm/Transparency-Logic-Time-Machine-Bots-/actions/workflows/security.yml/badge.svg)](https://github.com/lippytm/Transparency-Logic-Time-Machine-Bots-/actions/workflows/security.yml)
7+
[![Integration Checks](https://github.com/lippytm/Transparency-Logic-Time-Machine-Bots-/actions/workflows/integrations.yml/badge.svg)](https://github.com/lippytm/Transparency-Logic-Time-Machine-Bots-/actions/workflows/integrations.yml)
78
[![Renovate](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com)
89

910
## Overview
@@ -229,6 +230,62 @@ Check Issues tab for the Renovate Dependency Dashboard
229230

230231
**Configuration File:** `renovate.json`
231232

233+
## Service Integrations
234+
235+
### Full Stack Toolkit
236+
237+
This project includes a standardized integration framework for cross-platform services.
238+
239+
**Supported Services:**
240+
241+
- **OpenAI** - AI/ML capabilities
242+
- **ManyChat** - Chatbot automation
243+
- **BotBuilders** - Bot development platform
244+
- **Moltbook** - Service integration
245+
- **Moltbot** - Service integration
246+
- **OpenClaw** - Service integration
247+
- **GitHub API** - Extended GitHub operations
248+
- **Webhooks** - Generic webhook notifications
249+
250+
**Configuration:**
251+
252+
1. Copy the example configuration:
253+
254+
```bash
255+
cp config/services.example.json config/services.json
256+
```
257+
258+
2. Set environment variables or GitHub secrets for the services you want to use:
259+
260+
```bash
261+
export OPENAI_API_KEY=your-key-here
262+
export MANYCHAT_API_KEY=your-key-here
263+
# ... etc
264+
```
265+
266+
3. **For GitHub Actions**: Add secrets in Repository Settings → Secrets and variables → Actions
267+
268+
**Available Secrets:**
269+
270+
- `OPENAI_API_KEY` - OpenAI API key
271+
- `MANYCHAT_API_KEY` - ManyChat API key
272+
- `BOTBUILDERS_API_KEY` - BotBuilders API key
273+
- `MOLTBOOK_API_KEY` - Moltbook API key
274+
- `MOLTBOT_API_KEY` - Moltbot API key
275+
- `OPENCLAW_API_KEY` - OpenClaw API key
276+
- `GITHUB_PAT` - GitHub Personal Access Token (for extended API access)
277+
- `WEBHOOK_URL` - Generic webhook endpoint URL
278+
- `SERVICE_BASE_URL_OPENCLAW` - Custom OpenClaw base URL (optional)
279+
- `SERVICE_BASE_URL_*` - Custom base URLs for other services (optional)
280+
281+
**Security:**
282+
283+
⚠️ **NEVER commit `config/services.json` with real secrets** - it's already in `.gitignore`
284+
285+
✓ Always use environment variables or GitHub secrets for credentials
286+
287+
✓ See `config/services.example.json` for detailed documentation and best practices
288+
232289
## CI/CD
233290

234291
### Workflows
@@ -246,6 +303,15 @@ Check Issues tab for the Renovate Dependency Dashboard
246303
- SBOM generation with Syft
247304
- Results uploaded to GitHub Security tab
248305

306+
**Integration Checks Workflow** (`.github/workflows/integrations.yml`):
307+
308+
- Manual trigger via `workflow_dispatch`
309+
- Automatic trigger on push to `main`
310+
- Detects presence of service API keys (never prints secret values)
311+
- Placeholder connectivity checks for: OpenAI, ManyChat, BotBuilders, Moltbook, Moltbot, OpenClaw, GitHub, Webhooks
312+
- Dry-run oriented (safe for all environments)
313+
- No external dependencies (pure bash/curl)
314+
249315
## Project Structure
250316

251317
```

0 commit comments

Comments
 (0)