{"id":39195139,"url":"https://github.com/insign/jot","last_synced_at":"2026-01-17T22:47:22.117Z","repository":{"id":321864194,"uuid":"1087098582","full_name":"insign/jot","owner":"insign","description":"Google Jules over Telegram","archived":false,"fork":false,"pushed_at":"2026-01-12T10:43:07.000Z","size":573,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-12T18:56:56.869Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/insign.png","metadata":{"files":{"readme":".github/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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-10-31T11:28:02.000Z","updated_at":"2026-01-12T10:41:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/insign/jot","commit_stats":null,"previous_names":["insign/jot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/insign/jot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insign%2Fjot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insign%2Fjot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insign%2Fjot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insign%2Fjot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/insign","download_url":"https://codeload.github.com/insign/jot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insign%2Fjot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28521166,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T22:11:28.393Z","status":"ssl_error","status_checked_at":"2026-01-17T22:11:27.841Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2026-01-17T22:47:22.063Z","updated_at":"2026-01-17T22:47:22.110Z","avatar_url":"https://github.com/insign.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitHub Actions Workflows\n\nThis directory contains all GitHub Actions workflows for continuous integration, deployment, and automation.\n\n## 📋 Workflows Overview\n\n### 🔄 CI Pipeline (`ci.yml`)\n\n**Trigger**: Push to main/develop/claude branches, Pull Requests\n\n**Jobs**:\n1. **Lint \u0026 Type Check** - TypeScript compilation and code formatting\n2. **Run Tests** - Execute test suite with Vitest\n3. **Build Check** - Verify Wrangler can build the worker\n4. **Security Audit** - Check for vulnerabilities with npm audit\n5. **All Checks Passed** - Confirmation that all checks succeeded\n\n**Purpose**: Ensures code quality and catches issues early in the development process.\n\n---\n\n### 🚀 Deployment (`deploy.yml`)\n\n**Trigger**: Push to main (production) or develop (preview)\n\n**Environments**:\n- **Production** (`main` branch)\n  - Deploys to: `jules-over-telegram.cloudatlas.workers.dev`\n  - Sets Telegram webhook automatically\n  - Runs health check\n  - Custom domain: `jot.helio.me`\n\n- **Preview** (`develop` branch)\n  - Deploys to preview URL (`*-jules-over-telegram.cloudatlas.workers.dev`)\n  - Uses preview KV namespace\n  - Uses preview bot token\n  - Native preview URL (no separate worker needed)\n\n**Required Secrets**:\n- `CLOUDFLARE_API_TOKEN` - API token for Cloudflare Workers\n- `CLOUDFLARE_ACCOUNT_ID` - Your Cloudflare account ID\n- `BOT_TOKEN` - Production Telegram bot token\n- `BOT_TOKEN_PREVIEW` - Preview Telegram bot token\n\n**Purpose**: Automated deployment to Cloudflare Workers with environment-specific configuration.\n\n---\n\n### 🤖 Dependabot Auto-Merge (`dependabot-auto-merge.yml`)\n\n**Trigger**: Pull requests from Dependabot\n\n**Behavior**:\n- **Auto-merge**: Patch and minor version updates\n- **Manual review**: Major version updates (adds warning comment)\n\n**Purpose**: Keeps dependencies up-to-date with minimal manual intervention.\n\n---\n\n### 🏷️ Release Management (`release.yml`)\n\n**Trigger**: Push tags matching `v*.*.*` (e.g., `v1.0.0`)\n\n**Actions**:\n1. Runs tests\n2. Generates changelog from commits\n3. Creates GitHub release\n4. Marks as pre-release if version contains alpha/beta/rc\n\n**How to Create a Release**:\n```bash\n# Tag the commit\ngit tag v1.0.0\n\n# Push the tag\ngit push origin v1.0.0\n```\n\n**Purpose**: Automated release creation with changelog generation.\n\n---\n\n### ✅ PR Lint (`pr-lint.yml`)\n\n**Trigger**: Pull request opened, edited, or synchronized\n\n**Checks**:\n1. **Title Format** - Must follow [Conventional Commits](https://www.conventionalcommits.org/)\n   - Types: feat, fix, docs, style, refactor, test, chore, ci, build, perf, revert\n   - Example: `feat: Add support for image uploads`\n\n2. **PR Size** - Warns if PR has \u003e1000 line changes\n\n3. **Description** - Ensures PR has a meaningful description (min 50 chars)\n\n4. **Auto-labeling** - Labels PR based on files changed:\n   - `bot` - Changes in src/bot/\n   - `jules-api` - Changes in src/jules/\n   - `storage` - Changes in src/kv/\n   - `tests` - Changes in test/\n   - `ci/cd` - Changes in .github/\n   - `documentation` - Changes to .md files\n   - `dependencies` - Changes to package.json\n   - `cloudflare` - Changes to wrangler.toml\n\n5. **Statistics** - Comments with PR stats (files changed, additions, deletions, file types)\n\n**Purpose**: Ensures PR quality and consistency.\n\n---\n\n### 🔒 CodeQL Security Analysis (`codeql.yml`)\n\n**Trigger**:\n- Push to main/develop\n- Pull requests\n- Weekly schedule (Monday 00:00 UTC)\n\n**Analysis**:\n- Security vulnerabilities\n- Code quality issues\n- Uses extended security queries\n\n**Purpose**: Automated security scanning to detect vulnerabilities.\n\n---\n\n### 📊 Performance Monitoring (`performance.yml`)\n\n**Trigger**: Pull requests, manual dispatch\n\n**Checks**:\n1. **Bundle Size**\n   - Measures worker bundle size\n   - Warns if exceeds 1MB (Cloudflare Workers Free tier limit)\n   - Comments on PR with size report\n\n2. **Test Performance**\n   - Runs tests with detailed timing\n   - Reports performance metrics\n\n**Purpose**: Monitors bundle size and test performance to prevent regressions.\n\n---\n\n## 📦 Dependabot Configuration (`dependabot.yml`)\n\n**Schedule**: Weekly on Monday at 09:00 UTC\n\n**Managed Dependencies**:\n- npm packages\n- GitHub Actions versions\n\n**Behavior**:\n- Groups minor and patch updates together\n- Ignores wrangler major updates (locked to 3.99.0)\n- Auto-assigns to @insign\n- Labels: `dependencies`, `automated`\n\n---\n\n## 🔐 Required Secrets\n\nTo use these workflows, configure the following secrets in your GitHub repository:\n\n### Cloudflare\n```\nCLOUDFLARE_API_TOKEN=\u003cyour-cloudflare-api-token\u003e\nCLOUDFLARE_ACCOUNT_ID=\u003cyour-cloudflare-account-id\u003e\n```\n\n### Telegram Bot Tokens\n```\nBOT_TOKEN=\u003cproduction-bot-token\u003e\nBOT_TOKEN_PREVIEW=\u003cpreview-bot-token\u003e\n```\n\n### Worker URLs\n```\n# Production (main branch)\n# https://jules-over-telegram.cloudatlas.workers.dev\n# Custom domain: https://jot.helio.me (configure in Cloudflare DNS)\n\n# Preview (develop branch)\n# https://[random-id]-jules-over-telegram.cloudatlas.workers.dev\n# Auto-generated by Cloudflare Workers\n```\n\n### Optional\n```\nCODECOV_TOKEN=\u003ccodecov-token\u003e  # For code coverage reporting\n```\n\n---\n\n## 🎯 Workflow Best Practices\n\n### For Contributors\n\n1. **PR Title**: Use conventional commits format\n   - ✅ `feat: Add image upload support`\n   - ❌ `Added some stuff`\n\n2. **PR Description**: Be descriptive (min 50 characters)\n   - Explain what and why\n   - Reference related issues\n\n3. **PR Size**: Keep PRs focused and small (\u003c1000 lines when possible)\n\n4. **Tests**: Add tests for new features\n\n5. **Type Safety**: Ensure TypeScript compiles without errors\n\n### For Maintainers\n\n1. **Merging PRs**: Wait for all checks to pass\n\n2. **Creating Releases**:\n   ```bash\n   git tag v1.0.0\n   git push origin v1.0.0\n   ```\n\n3. **Emergency Fixes**: Use workflow_dispatch for manual deployments\n\n4. **Monitoring**: Check GitHub Actions dashboard regularly\n\n---\n\n## 🐛 Troubleshooting\n\n### Workflow Failed?\n\n1. **Check logs**: Click on the failed job to see details\n2. **Common issues**:\n   - Missing secrets\n   - Type errors\n   - Test failures\n   - Bundle size too large\n\n### Deployment Failed?\n\n1. **Verify secrets**: Ensure all Cloudflare secrets are set\n2. **Check worker quota**: Free tier has limits\n3. **Review error logs**: Cloudflare dashboard shows runtime errors\n\n### CodeQL Alerts?\n\n1. **Review alert**: Check the Security tab\n2. **Assess severity**: High/Critical should be fixed immediately\n3. **Create PR**: Fix the issue and link to the alert\n\n---\n\n## 📚 Additional Resources\n\n- [GitHub Actions Documentation](https://docs.github.com/en/actions)\n- [Cloudflare Workers Actions](https://github.com/cloudflare/wrangler-action)\n- [Conventional Commits](https://www.conventionalcommits.org/)\n- [Semantic Versioning](https://semver.org/)\n\n---\n\n## 🤝 Contributing to Workflows\n\nIf you want to improve these workflows:\n\n1. Test changes in a fork first\n2. Document any new secrets required\n3. Update this README with changes\n4. Submit a PR with `ci:` prefix in title\n\n---\n\n*Last updated: 2025-11-03*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsign%2Fjot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finsign%2Fjot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsign%2Fjot/lists"}