aidevops 2.52.1 → 2.53.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/VERSION +1 -1
- package/aidevops.sh +15 -9
- package/package.json +4 -4
- package/scripts/npm-postinstall.js +6 -7
- package/setup.sh +1 -1
- package/templates/deploy-templates.sh +144 -0
- package/templates/home/.agent/README.md +33 -0
- package/templates/home/AGENTS.md +96 -0
- package/templates/home/git/.agent/README.md +48 -0
- package/templates/home/git/AGENTS.md +97 -0
- package/templates/standard-functions.sh +179 -0
- package/templates/wordpress-performance-workflow.md +217 -0
- package/.agent/AGENTS.md +0 -614
- package/.agent/accounts.md +0 -65
- package/.agent/aidevops/add-new-mcp-to-aidevops.md +0 -456
- package/.agent/aidevops/api-integrations.md +0 -335
- package/.agent/aidevops/architecture.md +0 -510
- package/.agent/aidevops/configs.md +0 -274
- package/.agent/aidevops/docs.md +0 -244
- package/.agent/aidevops/extension.md +0 -311
- package/.agent/aidevops/mcp-integrations.md +0 -340
- package/.agent/aidevops/mcp-troubleshooting.md +0 -162
- package/.agent/aidevops/memory-patterns.md +0 -172
- package/.agent/aidevops/providers.md +0 -217
- package/.agent/aidevops/recommendations.md +0 -321
- package/.agent/aidevops/requirements.md +0 -301
- package/.agent/aidevops/resources.md +0 -214
- package/.agent/aidevops/security-requirements.md +0 -174
- package/.agent/aidevops/security.md +0 -350
- package/.agent/aidevops/service-links.md +0 -400
- package/.agent/aidevops/services.md +0 -357
- package/.agent/aidevops/setup.md +0 -153
- package/.agent/aidevops/troubleshooting.md +0 -389
- package/.agent/aidevops.md +0 -124
- package/.agent/build-plus.md +0 -244
- package/.agent/content/guidelines.md +0 -109
- package/.agent/content.md +0 -87
- package/.agent/health.md +0 -59
- package/.agent/legal.md +0 -59
- package/.agent/loop-state/full-loop.local.md +0 -16
- package/.agent/loop-state/ralph-loop.local.md +0 -10
- package/.agent/marketing.md +0 -440
- package/.agent/memory/README.md +0 -260
- package/.agent/onboarding.md +0 -796
- package/.agent/plan-plus.md +0 -245
- package/.agent/research.md +0 -100
- package/.agent/sales.md +0 -333
- package/.agent/scripts/101domains-helper.sh +0 -701
- package/.agent/scripts/add-missing-returns.sh +0 -140
- package/.agent/scripts/agent-browser-helper.sh +0 -311
- package/.agent/scripts/agno-setup.sh +0 -712
- package/.agent/scripts/ahrefs-mcp-wrapper.js +0 -168
- package/.agent/scripts/aidevops-update-check.sh +0 -71
- package/.agent/scripts/ampcode-cli.sh +0 -522
- package/.agent/scripts/auto-version-bump.sh +0 -156
- package/.agent/scripts/autogen-helper.sh +0 -512
- package/.agent/scripts/beads-sync-helper.sh +0 -596
- package/.agent/scripts/closte-helper.sh +0 -5
- package/.agent/scripts/cloudron-helper.sh +0 -321
- package/.agent/scripts/codacy-cli-chunked.sh +0 -581
- package/.agent/scripts/codacy-cli.sh +0 -442
- package/.agent/scripts/code-audit-helper.sh +0 -5
- package/.agent/scripts/coderabbit-cli.sh +0 -417
- package/.agent/scripts/coderabbit-pro-analysis.sh +0 -238
- package/.agent/scripts/commands/code-simplifier.md +0 -86
- package/.agent/scripts/commands/full-loop.md +0 -246
- package/.agent/scripts/commands/postflight-loop.md +0 -103
- package/.agent/scripts/commands/recall.md +0 -182
- package/.agent/scripts/commands/remember.md +0 -132
- package/.agent/scripts/commands/save-todo.md +0 -175
- package/.agent/scripts/commands/session-review.md +0 -154
- package/.agent/scripts/comprehensive-quality-fix.sh +0 -106
- package/.agent/scripts/context-builder-helper.sh +0 -522
- package/.agent/scripts/coolify-cli-helper.sh +0 -674
- package/.agent/scripts/coolify-helper.sh +0 -380
- package/.agent/scripts/crawl4ai-examples.sh +0 -401
- package/.agent/scripts/crawl4ai-helper.sh +0 -1078
- package/.agent/scripts/crewai-helper.sh +0 -681
- package/.agent/scripts/dev-browser-helper.sh +0 -513
- package/.agent/scripts/dns-helper.sh +0 -396
- package/.agent/scripts/domain-research-helper.sh +0 -917
- package/.agent/scripts/dspy-helper.sh +0 -285
- package/.agent/scripts/dspyground-helper.sh +0 -291
- package/.agent/scripts/eeat-score-helper.sh +0 -1242
- package/.agent/scripts/efficient-return-fix.sh +0 -92
- package/.agent/scripts/extract-opencode-prompts.sh +0 -128
- package/.agent/scripts/find-missing-returns.sh +0 -113
- package/.agent/scripts/fix-auth-headers.sh +0 -104
- package/.agent/scripts/fix-common-strings.sh +0 -254
- package/.agent/scripts/fix-content-type.sh +0 -100
- package/.agent/scripts/fix-error-messages.sh +0 -130
- package/.agent/scripts/fix-misplaced-returns.sh +0 -74
- package/.agent/scripts/fix-remaining-literals.sh +0 -152
- package/.agent/scripts/fix-return-statements.sh +0 -41
- package/.agent/scripts/fix-s131-default-cases.sh +0 -249
- package/.agent/scripts/fix-sc2155-simple.sh +0 -102
- package/.agent/scripts/fix-shellcheck-critical.sh +0 -187
- package/.agent/scripts/fix-string-literals.sh +0 -273
- package/.agent/scripts/full-loop-helper.sh +0 -773
- package/.agent/scripts/generate-opencode-agents.sh +0 -497
- package/.agent/scripts/generate-opencode-commands.sh +0 -1629
- package/.agent/scripts/generate-skills.sh +0 -366
- package/.agent/scripts/git-platforms-helper.sh +0 -640
- package/.agent/scripts/gitea-cli-helper.sh +0 -743
- package/.agent/scripts/github-cli-helper.sh +0 -702
- package/.agent/scripts/gitlab-cli-helper.sh +0 -682
- package/.agent/scripts/gsc-add-user-helper.sh +0 -325
- package/.agent/scripts/gsc-sitemap-helper.sh +0 -678
- package/.agent/scripts/hetzner-helper.sh +0 -485
- package/.agent/scripts/hostinger-helper.sh +0 -229
- package/.agent/scripts/keyword-research-helper.sh +0 -1815
- package/.agent/scripts/langflow-helper.sh +0 -544
- package/.agent/scripts/linkedin-automation.py +0 -241
- package/.agent/scripts/linter-manager.sh +0 -599
- package/.agent/scripts/linters-local.sh +0 -434
- package/.agent/scripts/list-keys-helper.sh +0 -488
- package/.agent/scripts/local-browser-automation.py +0 -339
- package/.agent/scripts/localhost-helper.sh +0 -744
- package/.agent/scripts/loop-common.sh +0 -806
- package/.agent/scripts/mainwp-helper.sh +0 -728
- package/.agent/scripts/markdown-formatter.sh +0 -338
- package/.agent/scripts/markdown-lint-fix.sh +0 -311
- package/.agent/scripts/mass-fix-returns.sh +0 -58
- package/.agent/scripts/mcp-diagnose.sh +0 -167
- package/.agent/scripts/mcp-inspector-helper.sh +0 -449
- package/.agent/scripts/memory-helper.sh +0 -650
- package/.agent/scripts/monitor-code-review.sh +0 -255
- package/.agent/scripts/onboarding-helper.sh +0 -706
- package/.agent/scripts/opencode-github-setup-helper.sh +0 -797
- package/.agent/scripts/opencode-test-helper.sh +0 -213
- package/.agent/scripts/pagespeed-helper.sh +0 -464
- package/.agent/scripts/pandoc-helper.sh +0 -362
- package/.agent/scripts/postflight-check.sh +0 -555
- package/.agent/scripts/pre-commit-hook.sh +0 -259
- package/.agent/scripts/pre-edit-check.sh +0 -169
- package/.agent/scripts/qlty-cli.sh +0 -356
- package/.agent/scripts/quality-cli-manager.sh +0 -525
- package/.agent/scripts/quality-feedback-helper.sh +0 -462
- package/.agent/scripts/quality-fix.sh +0 -263
- package/.agent/scripts/quality-loop-helper.sh +0 -1108
- package/.agent/scripts/ralph-loop-helper.sh +0 -836
- package/.agent/scripts/ralph-upstream-check.sh +0 -341
- package/.agent/scripts/secretlint-helper.sh +0 -847
- package/.agent/scripts/servers-helper.sh +0 -241
- package/.agent/scripts/ses-helper.sh +0 -619
- package/.agent/scripts/session-review-helper.sh +0 -404
- package/.agent/scripts/setup-linters-wizard.sh +0 -379
- package/.agent/scripts/setup-local-api-keys.sh +0 -330
- package/.agent/scripts/setup-mcp-integrations.sh +0 -472
- package/.agent/scripts/shared-constants.sh +0 -246
- package/.agent/scripts/site-crawler-helper.sh +0 -1487
- package/.agent/scripts/snyk-helper.sh +0 -940
- package/.agent/scripts/sonarcloud-autofix.sh +0 -193
- package/.agent/scripts/sonarcloud-cli.sh +0 -191
- package/.agent/scripts/sonarscanner-cli.sh +0 -455
- package/.agent/scripts/spaceship-helper.sh +0 -747
- package/.agent/scripts/stagehand-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-setup.sh +0 -441
- package/.agent/scripts/stagehand-setup.sh +0 -439
- package/.agent/scripts/system-cleanup.sh +0 -340
- package/.agent/scripts/terminal-title-helper.sh +0 -388
- package/.agent/scripts/terminal-title-setup.sh +0 -549
- package/.agent/scripts/test-stagehand-both-integration.sh +0 -317
- package/.agent/scripts/test-stagehand-integration.sh +0 -309
- package/.agent/scripts/test-stagehand-python-integration.sh +0 -341
- package/.agent/scripts/todo-ready.sh +0 -263
- package/.agent/scripts/tool-version-check.sh +0 -362
- package/.agent/scripts/toon-helper.sh +0 -469
- package/.agent/scripts/twilio-helper.sh +0 -917
- package/.agent/scripts/updown-helper.sh +0 -279
- package/.agent/scripts/validate-mcp-integrations.sh +0 -250
- package/.agent/scripts/validate-version-consistency.sh +0 -131
- package/.agent/scripts/vaultwarden-helper.sh +0 -597
- package/.agent/scripts/vercel-cli-helper.sh +0 -816
- package/.agent/scripts/verify-mirrors.sh +0 -169
- package/.agent/scripts/version-manager.sh +0 -831
- package/.agent/scripts/webhosting-helper.sh +0 -471
- package/.agent/scripts/webhosting-verify.sh +0 -238
- package/.agent/scripts/wordpress-mcp-helper.sh +0 -508
- package/.agent/scripts/worktree-helper.sh +0 -595
- package/.agent/scripts/worktree-sessions.sh +0 -577
- package/.agent/seo/dataforseo.md +0 -215
- package/.agent/seo/domain-research.md +0 -532
- package/.agent/seo/eeat-score.md +0 -659
- package/.agent/seo/google-search-console.md +0 -366
- package/.agent/seo/gsc-sitemaps.md +0 -282
- package/.agent/seo/keyword-research.md +0 -521
- package/.agent/seo/serper.md +0 -278
- package/.agent/seo/site-crawler.md +0 -387
- package/.agent/seo.md +0 -236
- package/.agent/services/accounting/quickfile.md +0 -159
- package/.agent/services/communications/telfon.md +0 -470
- package/.agent/services/communications/twilio.md +0 -569
- package/.agent/services/crm/fluentcrm.md +0 -449
- package/.agent/services/email/ses.md +0 -399
- package/.agent/services/hosting/101domains.md +0 -378
- package/.agent/services/hosting/closte.md +0 -177
- package/.agent/services/hosting/cloudflare.md +0 -251
- package/.agent/services/hosting/cloudron.md +0 -478
- package/.agent/services/hosting/dns-providers.md +0 -335
- package/.agent/services/hosting/domain-purchasing.md +0 -344
- package/.agent/services/hosting/hetzner.md +0 -327
- package/.agent/services/hosting/hostinger.md +0 -287
- package/.agent/services/hosting/localhost.md +0 -419
- package/.agent/services/hosting/spaceship.md +0 -353
- package/.agent/services/hosting/webhosting.md +0 -330
- package/.agent/social-media.md +0 -69
- package/.agent/templates/plans-template.md +0 -114
- package/.agent/templates/prd-template.md +0 -129
- package/.agent/templates/tasks-template.md +0 -108
- package/.agent/templates/todo-template.md +0 -89
- package/.agent/tools/ai-assistants/agno.md +0 -471
- package/.agent/tools/ai-assistants/capsolver.md +0 -326
- package/.agent/tools/ai-assistants/configuration.md +0 -221
- package/.agent/tools/ai-assistants/overview.md +0 -209
- package/.agent/tools/ai-assistants/status.md +0 -171
- package/.agent/tools/ai-assistants/windsurf.md +0 -193
- package/.agent/tools/ai-orchestration/autogen.md +0 -406
- package/.agent/tools/ai-orchestration/crewai.md +0 -445
- package/.agent/tools/ai-orchestration/langflow.md +0 -405
- package/.agent/tools/ai-orchestration/openprose.md +0 -487
- package/.agent/tools/ai-orchestration/overview.md +0 -362
- package/.agent/tools/ai-orchestration/packaging.md +0 -647
- package/.agent/tools/browser/agent-browser.md +0 -464
- package/.agent/tools/browser/browser-automation.md +0 -400
- package/.agent/tools/browser/chrome-devtools.md +0 -282
- package/.agent/tools/browser/crawl4ai-integration.md +0 -422
- package/.agent/tools/browser/crawl4ai-resources.md +0 -277
- package/.agent/tools/browser/crawl4ai-usage.md +0 -416
- package/.agent/tools/browser/crawl4ai.md +0 -585
- package/.agent/tools/browser/dev-browser.md +0 -341
- package/.agent/tools/browser/pagespeed.md +0 -260
- package/.agent/tools/browser/playwright.md +0 -266
- package/.agent/tools/browser/playwriter.md +0 -310
- package/.agent/tools/browser/stagehand-examples.md +0 -456
- package/.agent/tools/browser/stagehand-python.md +0 -483
- package/.agent/tools/browser/stagehand.md +0 -421
- package/.agent/tools/build-agent/agent-review.md +0 -224
- package/.agent/tools/build-agent/build-agent.md +0 -784
- package/.agent/tools/build-mcp/aidevops-plugin.md +0 -476
- package/.agent/tools/build-mcp/api-wrapper.md +0 -445
- package/.agent/tools/build-mcp/build-mcp.md +0 -240
- package/.agent/tools/build-mcp/deployment.md +0 -401
- package/.agent/tools/build-mcp/server-patterns.md +0 -632
- package/.agent/tools/build-mcp/transports.md +0 -366
- package/.agent/tools/code-review/auditing.md +0 -383
- package/.agent/tools/code-review/automation.md +0 -219
- package/.agent/tools/code-review/best-practices.md +0 -203
- package/.agent/tools/code-review/codacy.md +0 -151
- package/.agent/tools/code-review/code-simplifier.md +0 -174
- package/.agent/tools/code-review/code-standards.md +0 -309
- package/.agent/tools/code-review/coderabbit.md +0 -101
- package/.agent/tools/code-review/management.md +0 -155
- package/.agent/tools/code-review/qlty.md +0 -248
- package/.agent/tools/code-review/secretlint.md +0 -565
- package/.agent/tools/code-review/setup.md +0 -250
- package/.agent/tools/code-review/snyk.md +0 -563
- package/.agent/tools/code-review/tools.md +0 -230
- package/.agent/tools/content/summarize.md +0 -353
- package/.agent/tools/context/augment-context-engine.md +0 -468
- package/.agent/tools/context/context-builder-agent.md +0 -76
- package/.agent/tools/context/context-builder.md +0 -375
- package/.agent/tools/context/context7.md +0 -371
- package/.agent/tools/context/dspy.md +0 -302
- package/.agent/tools/context/dspyground.md +0 -374
- package/.agent/tools/context/llm-tldr.md +0 -219
- package/.agent/tools/context/osgrep.md +0 -488
- package/.agent/tools/context/prompt-optimization.md +0 -338
- package/.agent/tools/context/toon.md +0 -292
- package/.agent/tools/conversion/pandoc.md +0 -304
- package/.agent/tools/credentials/api-key-management.md +0 -154
- package/.agent/tools/credentials/api-key-setup.md +0 -224
- package/.agent/tools/credentials/environment-variables.md +0 -180
- package/.agent/tools/credentials/vaultwarden.md +0 -382
- package/.agent/tools/data-extraction/outscraper.md +0 -974
- package/.agent/tools/deployment/coolify-cli.md +0 -388
- package/.agent/tools/deployment/coolify-setup.md +0 -353
- package/.agent/tools/deployment/coolify.md +0 -345
- package/.agent/tools/deployment/vercel.md +0 -390
- package/.agent/tools/git/authentication.md +0 -132
- package/.agent/tools/git/gitea-cli.md +0 -193
- package/.agent/tools/git/github-actions.md +0 -207
- package/.agent/tools/git/github-cli.md +0 -223
- package/.agent/tools/git/gitlab-cli.md +0 -190
- package/.agent/tools/git/opencode-github-security.md +0 -350
- package/.agent/tools/git/opencode-github.md +0 -328
- package/.agent/tools/git/opencode-gitlab.md +0 -252
- package/.agent/tools/git/security.md +0 -196
- package/.agent/tools/git.md +0 -207
- package/.agent/tools/opencode/oh-my-opencode.md +0 -375
- package/.agent/tools/opencode/opencode-anthropic-auth.md +0 -446
- package/.agent/tools/opencode/opencode.md +0 -651
- package/.agent/tools/social-media/bird.md +0 -437
- package/.agent/tools/task-management/beads.md +0 -336
- package/.agent/tools/terminal/terminal-title.md +0 -251
- package/.agent/tools/ui/shadcn.md +0 -196
- package/.agent/tools/ui/ui-skills.md +0 -115
- package/.agent/tools/wordpress/localwp.md +0 -311
- package/.agent/tools/wordpress/mainwp.md +0 -391
- package/.agent/tools/wordpress/scf.md +0 -527
- package/.agent/tools/wordpress/wp-admin.md +0 -729
- package/.agent/tools/wordpress/wp-dev.md +0 -940
- package/.agent/tools/wordpress/wp-preferred.md +0 -398
- package/.agent/tools/wordpress.md +0 -95
- package/.agent/workflows/branch/bugfix.md +0 -63
- package/.agent/workflows/branch/chore.md +0 -95
- package/.agent/workflows/branch/experiment.md +0 -115
- package/.agent/workflows/branch/feature.md +0 -59
- package/.agent/workflows/branch/hotfix.md +0 -98
- package/.agent/workflows/branch/refactor.md +0 -92
- package/.agent/workflows/branch/release.md +0 -96
- package/.agent/workflows/branch.md +0 -347
- package/.agent/workflows/bug-fixing.md +0 -267
- package/.agent/workflows/changelog.md +0 -129
- package/.agent/workflows/code-audit-remote.md +0 -279
- package/.agent/workflows/conversation-starter.md +0 -69
- package/.agent/workflows/error-feedback.md +0 -578
- package/.agent/workflows/feature-development.md +0 -355
- package/.agent/workflows/git-workflow.md +0 -702
- package/.agent/workflows/multi-repo-workspace.md +0 -268
- package/.agent/workflows/plans.md +0 -709
- package/.agent/workflows/postflight.md +0 -604
- package/.agent/workflows/pr.md +0 -571
- package/.agent/workflows/preflight.md +0 -278
- package/.agent/workflows/ralph-loop.md +0 -773
- package/.agent/workflows/release.md +0 -498
- package/.agent/workflows/session-manager.md +0 -254
- package/.agent/workflows/session-review.md +0 -311
- package/.agent/workflows/sql-migrations.md +0 -631
- package/.agent/workflows/version-bump.md +0 -283
- package/.agent/workflows/wiki-update.md +0 -333
- package/.agent/workflows/worktree.md +0 -477
|
@@ -1,743 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# shellcheck disable=SC2034,SC2155,SC2317,SC2329,SC2016,SC2181,SC1091,SC2154,SC2015,SC2086,SC2129,SC2030,SC2031,SC2119,SC2120,SC2001,SC2162,SC2088,SC2089,SC2090,SC2029,SC2006,SC2153
|
|
3
|
-
|
|
4
|
-
# Gitea CLI Helper Script
|
|
5
|
-
# Comprehensive Gitea management using tea (Gitea CLI) and API
|
|
6
|
-
# Managed by AI DevOps Framework
|
|
7
|
-
|
|
8
|
-
# Set strict mode
|
|
9
|
-
set -euo pipefail
|
|
10
|
-
|
|
11
|
-
# ------------------------------------------------------------------------------
|
|
12
|
-
# CONFIGURATION & CONSTANTS
|
|
13
|
-
# ------------------------------------------------------------------------------
|
|
14
|
-
|
|
15
|
-
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" || exit
|
|
16
|
-
readonly SCRIPT_DIR="$script_dir"
|
|
17
|
-
|
|
18
|
-
repo_root="$(dirname "$SCRIPT_DIR")"
|
|
19
|
-
readonly REPO_ROOT="$repo_root"
|
|
20
|
-
readonly CONFIG_FILE="$REPO_ROOT/configs/gitea-cli-config.json"
|
|
21
|
-
|
|
22
|
-
# Colors
|
|
23
|
-
readonly BLUE='\033[0;34m'
|
|
24
|
-
readonly GREEN='\033[0;32m'
|
|
25
|
-
readonly YELLOW='\033[1;33m'
|
|
26
|
-
readonly RED='\033[0;31m'
|
|
27
|
-
readonly NC='\033[0m'
|
|
28
|
-
|
|
29
|
-
# Common constants
|
|
30
|
-
readonly ERROR_UNKNOWN_COMMAND="Unknown command:"
|
|
31
|
-
# Error Messages
|
|
32
|
-
readonly ERROR_CONFIG_MISSING="Configuration file not found at $CONFIG_FILE"
|
|
33
|
-
readonly ERROR_TEA_NOT_INSTALLED="Gitea CLI (tea) is required but not installed"
|
|
34
|
-
readonly ERROR_NOT_LOGGED_IN="Gitea CLI is not authenticated. Run 'tea login'"
|
|
35
|
-
readonly ERROR_ACCOUNT_MISSING="Account configuration not found"
|
|
36
|
-
readonly ERROR_ARGS_MISSING="Missing required arguments"
|
|
37
|
-
readonly ERROR_API_FAILED="Gitea API request failed"
|
|
38
|
-
readonly ERROR_REPO_NAME_REQUIRED="Repository name is required"
|
|
39
|
-
readonly ERROR_ISSUE_TITLE_REQUIRED="Issue title is required"
|
|
40
|
-
readonly ERROR_ISSUE_NUMBER_REQUIRED="Issue number is required"
|
|
41
|
-
readonly ERROR_PR_NUMBER_REQUIRED="Pull request number is required"
|
|
42
|
-
readonly ERROR_BRANCH_NAME_REQUIRED="Branch name is required"
|
|
43
|
-
readonly ERROR_REPO_NOT_FOUND="Repository not found"
|
|
44
|
-
readonly ERROR_OWNER_NOT_CONFIGURED="Owner not configured for account"
|
|
45
|
-
readonly ERROR_FAILED_TO_READ_CONFIG="Failed to read configuration"
|
|
46
|
-
|
|
47
|
-
# Success Messages
|
|
48
|
-
readonly SUCCESS_REPO_CREATED="Repository created successfully"
|
|
49
|
-
readonly SUCCESS_ISSUE_CREATED="Issue created successfully"
|
|
50
|
-
readonly SUCCESS_PR_CREATED="Pull request created successfully"
|
|
51
|
-
readonly SUCCESS_BRANCH_CREATED="Branch created successfully"
|
|
52
|
-
readonly SUCCESS_ISSUE_CLOSED="Issue closed successfully"
|
|
53
|
-
readonly SUCCESS_PR_MERGED="Pull request merged successfully"
|
|
54
|
-
|
|
55
|
-
# Common constants
|
|
56
|
-
readonly CONTENT_TYPE_JSON="$CONTENT_TYPE_JSON"
|
|
57
|
-
readonly AUTH_HEADER_TOKEN="Authorization: token"
|
|
58
|
-
|
|
59
|
-
# ------------------------------------------------------------------------------
|
|
60
|
-
# UTILITY FUNCTIONS
|
|
61
|
-
# ------------------------------------------------------------------------------
|
|
62
|
-
|
|
63
|
-
print_info() {
|
|
64
|
-
local msg="$1"
|
|
65
|
-
echo -e "${BLUE}[INFO]${NC} $msg"
|
|
66
|
-
return 0
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
print_success() {
|
|
70
|
-
local msg="$1"
|
|
71
|
-
echo -e "${GREEN}[SUCCESS]${NC} $msg"
|
|
72
|
-
return 0
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
print_warning() {
|
|
76
|
-
local msg="$1"
|
|
77
|
-
echo -e "${YELLOW}[WARNING]${NC} $msg"
|
|
78
|
-
return 0
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
print_error() {
|
|
82
|
-
local msg="$1"
|
|
83
|
-
echo -e "${RED}[ERROR]${NC} $msg" >&2
|
|
84
|
-
return 0
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
# ------------------------------------------------------------------------------
|
|
88
|
-
# DEPENDENCY CHECKING
|
|
89
|
-
# ------------------------------------------------------------------------------
|
|
90
|
-
|
|
91
|
-
check_dependencies() {
|
|
92
|
-
if ! command -v tea &> /dev/null; then
|
|
93
|
-
print_error "$ERROR_TEA_NOT_INSTALLED"
|
|
94
|
-
print_info "Install Gitea CLI (tea):"
|
|
95
|
-
print_info " Go: go install code.gitea.io/tea/cmd/tea@latest"
|
|
96
|
-
print_info " Binary: https://dl.gitea.io/tea/"
|
|
97
|
-
print_info " Homebrew: brew install tea (if available)"
|
|
98
|
-
exit 1
|
|
99
|
-
fi
|
|
100
|
-
|
|
101
|
-
# Check if logged in (tea doesn't have auth status command, so we'll check config)
|
|
102
|
-
if ! tea repos list --limit 1 &>/dev/null; then
|
|
103
|
-
print_error "$ERROR_NOT_LOGGED_IN"
|
|
104
|
-
print_info "Authenticate with: tea login add"
|
|
105
|
-
print_info "Or set TEA_TOKEN environment variable"
|
|
106
|
-
exit 1
|
|
107
|
-
fi
|
|
108
|
-
|
|
109
|
-
if ! command -v jq &> /dev/null; then
|
|
110
|
-
print_error "jq is required but not installed"
|
|
111
|
-
print_info "Install: brew install jq (macOS) or sudo apt install jq (Ubuntu)"
|
|
112
|
-
exit 1
|
|
113
|
-
fi
|
|
114
|
-
return 0
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
# ------------------------------------------------------------------------------
|
|
118
|
-
# CONFIGURATION LOADING
|
|
119
|
-
# ------------------------------------------------------------------------------
|
|
120
|
-
|
|
121
|
-
load_config() {
|
|
122
|
-
if [[ ! -f "$CONFIG_FILE" ]]; then
|
|
123
|
-
print_error "$ERROR_CONFIG_MISSING"
|
|
124
|
-
print_info "Create configuration: cp configs/gitea-cli-config.json.txt $CONFIG_FILE"
|
|
125
|
-
return 1
|
|
126
|
-
fi
|
|
127
|
-
return 0
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
get_account_config() {
|
|
131
|
-
local account_name="$1"
|
|
132
|
-
|
|
133
|
-
if [[ -z "$account_name" ]]; then
|
|
134
|
-
print_error "$ERROR_ARGS_MISSING"
|
|
135
|
-
return 1
|
|
136
|
-
fi
|
|
137
|
-
|
|
138
|
-
local config
|
|
139
|
-
if ! config=$(jq -r ".accounts.\"$account_name\"" "$CONFIG_FILE" 2>/dev/null); then
|
|
140
|
-
print_error "$ERROR_FAILED_TO_READ_CONFIG"
|
|
141
|
-
return 1
|
|
142
|
-
fi
|
|
143
|
-
|
|
144
|
-
if [[ "$config" == "null" ]]; then
|
|
145
|
-
print_error "$ERROR_ACCOUNT_MISSING: $account_name"
|
|
146
|
-
return 1
|
|
147
|
-
fi
|
|
148
|
-
|
|
149
|
-
echo "$config"
|
|
150
|
-
return 0
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
get_repo_full_name() {
|
|
154
|
-
local account_name="$1"
|
|
155
|
-
local repo_name="$2"
|
|
156
|
-
local config
|
|
157
|
-
config=$(get_account_config "$account_name") || exit 1
|
|
158
|
-
|
|
159
|
-
local owner
|
|
160
|
-
owner=$(echo "$config" | jq -r '.owner // "EMPTY"')
|
|
161
|
-
if [[ "$owner" == "EMPTY" || -z "$owner" ]]; then
|
|
162
|
-
print_error "$ERROR_OWNER_NOT_CONFIGURED: $account_name"
|
|
163
|
-
return 1
|
|
164
|
-
fi
|
|
165
|
-
|
|
166
|
-
echo "$owner/$repo_name"
|
|
167
|
-
return 0
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
get_repo_info() {
|
|
171
|
-
local account_name="$1"
|
|
172
|
-
local repo_name="$2"
|
|
173
|
-
local repo_full_name
|
|
174
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
175
|
-
|
|
176
|
-
local repo_info
|
|
177
|
-
if repo_info=$(tea repos list --login "$account_name" --owner "${repo_full_name%/*}" --repo "${repo_full_name#*/}" --output json 2>/dev/null); then
|
|
178
|
-
echo "$repo_info"
|
|
179
|
-
return 0
|
|
180
|
-
fi
|
|
181
|
-
|
|
182
|
-
print_error "$ERROR_REPO_NOT_FOUND: $repo_full_name"
|
|
183
|
-
return 1
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
# ------------------------------------------------------------------------------
|
|
187
|
-
# REPOSITORY MANAGEMENT
|
|
188
|
-
# ------------------------------------------------------------------------------
|
|
189
|
-
|
|
190
|
-
list_repos() {
|
|
191
|
-
local account_name="$1"
|
|
192
|
-
local owner_filter="${2:-}"
|
|
193
|
-
|
|
194
|
-
local config
|
|
195
|
-
config=$(get_account_config "$account_name") || exit 1
|
|
196
|
-
|
|
197
|
-
local owner
|
|
198
|
-
owner=$(echo "$config" | jq -r '.owner // "EMPTY"')
|
|
199
|
-
if [[ "$owner" == "EMPTY" || -z "$owner" ]]; then
|
|
200
|
-
print_error "$ERROR_OWNER_NOT_CONFIGURED: $account_name"
|
|
201
|
-
return 1
|
|
202
|
-
fi
|
|
203
|
-
|
|
204
|
-
local tea_args=()
|
|
205
|
-
tea_args+=("--login" "$account_name")
|
|
206
|
-
tea_args+=("--owner" "$owner")
|
|
207
|
-
|
|
208
|
-
if [[ -n "$owner_filter" ]]; then
|
|
209
|
-
tea_args+=("--search" "$owner_filter")
|
|
210
|
-
fi
|
|
211
|
-
|
|
212
|
-
print_info "Listing repositories for $owner..."
|
|
213
|
-
|
|
214
|
-
if ! tea repos list "${tea_args[@]}" --limit 50 --output tsb; then
|
|
215
|
-
print_error "$ERROR_API_FAILED"
|
|
216
|
-
return 1
|
|
217
|
-
fi
|
|
218
|
-
return 0
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
create_repo() {
|
|
222
|
-
local account_name="$1"
|
|
223
|
-
local repo_name="$2"
|
|
224
|
-
local repo_description="${3:-}"
|
|
225
|
-
local visibility="${4:-public}"
|
|
226
|
-
local auto_init="${5:-false}"
|
|
227
|
-
|
|
228
|
-
if [[ -z "$repo_name" ]]; then
|
|
229
|
-
print_error "$ERROR_REPO_NAME_REQUIRED"
|
|
230
|
-
print_info "Usage: gitea-cli-helper.sh create-repo <account> <repo-name> [description] [visibility] [init]"
|
|
231
|
-
return 1
|
|
232
|
-
fi
|
|
233
|
-
|
|
234
|
-
local config
|
|
235
|
-
config=$(get_account_config "$account_name") || exit 1
|
|
236
|
-
|
|
237
|
-
local owner
|
|
238
|
-
owner=$(echo "$config" | jq -r '.owner // "EMPTY"')
|
|
239
|
-
if [[ "$owner" == "EMPTY" || -z "$owner" ]]; then
|
|
240
|
-
print_error "$ERROR_OWNER_NOT_CONFIGURED: $account_name"
|
|
241
|
-
return 1
|
|
242
|
-
fi
|
|
243
|
-
|
|
244
|
-
print_info "Creating repository: $owner/$repo_name"
|
|
245
|
-
|
|
246
|
-
local tea_args=()
|
|
247
|
-
tea_args+=("--login" "$account_name")
|
|
248
|
-
tea_args+=("--name" "$repo_name" "--owner" "$owner")
|
|
249
|
-
|
|
250
|
-
if [[ -n "$repo_description" ]]; then
|
|
251
|
-
tea_args+=("--description" "$repo_description")
|
|
252
|
-
fi
|
|
253
|
-
|
|
254
|
-
case "$visibility" in
|
|
255
|
-
"private")
|
|
256
|
-
tea_args+=("--private")
|
|
257
|
-
;;
|
|
258
|
-
"internal")
|
|
259
|
-
tea_args+=("--internal")
|
|
260
|
-
;;
|
|
261
|
-
"public")
|
|
262
|
-
tea_args+=("--public")
|
|
263
|
-
;;
|
|
264
|
-
*)
|
|
265
|
-
# Default to public if not specified
|
|
266
|
-
tea_args+=("--public")
|
|
267
|
-
;;
|
|
268
|
-
esac
|
|
269
|
-
|
|
270
|
-
if [[ "$auto_init" == "true" ]]; then
|
|
271
|
-
tea_args+=("--init")
|
|
272
|
-
fi
|
|
273
|
-
|
|
274
|
-
if tea repos create "${tea_args[@]}"; then
|
|
275
|
-
print_success "$SUCCESS_REPO_CREATED: $owner/$repo_name"
|
|
276
|
-
|
|
277
|
-
# Add to configuration if not exists
|
|
278
|
-
local repo_full_name="$owner/$repo_name"
|
|
279
|
-
if ! jq -e ".repos.\"$repo_full_name\"" "$CONFIG_FILE" &>/dev/null; then
|
|
280
|
-
jq --arg repo "$repo_full_name" --arg account "$account_name" --arg name "$repo_name" \
|
|
281
|
-
'.repos[$repo] = {owner: $owner, name: $name, account: $account_name}' \
|
|
282
|
-
"$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
|
|
283
|
-
fi
|
|
284
|
-
else
|
|
285
|
-
print_error "Failed to create repository"
|
|
286
|
-
return 1
|
|
287
|
-
fi
|
|
288
|
-
return 0
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
delete_repo() {
|
|
292
|
-
local account_name="$1"
|
|
293
|
-
local repo_name="$2"
|
|
294
|
-
|
|
295
|
-
if [[ -z "$repo_name" ]]; then
|
|
296
|
-
print_error "$ERROR_ARGS_MISSING"
|
|
297
|
-
return 1
|
|
298
|
-
fi
|
|
299
|
-
|
|
300
|
-
local repo_full_name
|
|
301
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
302
|
-
|
|
303
|
-
print_warning "This will permanently delete repository: $repo_full_name"
|
|
304
|
-
print_info "To confirm, type 'DELETE':"
|
|
305
|
-
read -r confirmation
|
|
306
|
-
|
|
307
|
-
if [[ "$confirmation" != "DELETE" ]]; then
|
|
308
|
-
print_info "Deletion cancelled"
|
|
309
|
-
return 0
|
|
310
|
-
fi
|
|
311
|
-
|
|
312
|
-
print_info "Deleting repository: $repo_full_name"
|
|
313
|
-
|
|
314
|
-
if tea repos delete --login "$account_name" --owner "${repo_full_name%/*}" --repo "${repo_full_name#*/}"; then
|
|
315
|
-
print_success "Repository deleted successfully"
|
|
316
|
-
|
|
317
|
-
# Remove from configuration
|
|
318
|
-
jq --arg repo "$repo_full_name" 'del(.repos[$repo])' \
|
|
319
|
-
"$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
|
|
320
|
-
else
|
|
321
|
-
print_error "Failed to delete repository"
|
|
322
|
-
return 1
|
|
323
|
-
fi
|
|
324
|
-
return 0
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
get_repo_details() {
|
|
328
|
-
local account_name="$1"
|
|
329
|
-
local repo_name="$2"
|
|
330
|
-
|
|
331
|
-
if [[ -z "$repo_name" ]]; then
|
|
332
|
-
print_error "$ERROR_ARGS_MISSING"
|
|
333
|
-
return 1
|
|
334
|
-
fi
|
|
335
|
-
|
|
336
|
-
local repo_full_name
|
|
337
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
338
|
-
|
|
339
|
-
print_info "Repository details for $repo_full_name:"
|
|
340
|
-
tea repos show --login "$account_name" --owner "${repo_full_name%/*}" --repo "${repo_full_name#*/}" --output json | jq .
|
|
341
|
-
return 0
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
# ------------------------------------------------------------------------------
|
|
345
|
-
# ISSUE MANAGEMENT
|
|
346
|
-
# ------------------------------------------------------------------------------
|
|
347
|
-
|
|
348
|
-
list_issues() {
|
|
349
|
-
local account_name="$1"
|
|
350
|
-
local repo_name="$2"
|
|
351
|
-
local state="${3:-open}"
|
|
352
|
-
|
|
353
|
-
if [[ -z "$repo_name" ]]; then
|
|
354
|
-
print_error "$ERROR_ARGS_MISSING"
|
|
355
|
-
return 1
|
|
356
|
-
fi
|
|
357
|
-
|
|
358
|
-
local repo_full_name
|
|
359
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
360
|
-
|
|
361
|
-
print_info "Listing issues for $repo_full_name (state: $state)"
|
|
362
|
-
tea issues list --login "$account_name" --owner "${repo_full_name%/*}" --repo "${repo_full_name#*/}" --state "$state" --limit 50 --output tsb
|
|
363
|
-
return 0
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
create_issue() {
|
|
367
|
-
local account_name="$1"
|
|
368
|
-
local repo_name="$2"
|
|
369
|
-
local title="$3"
|
|
370
|
-
local body="${4:-}"
|
|
371
|
-
|
|
372
|
-
if [[ -z "$title" ]]; then
|
|
373
|
-
print_error "$ERROR_ISSUE_TITLE_REQUIRED"
|
|
374
|
-
return 1
|
|
375
|
-
fi
|
|
376
|
-
|
|
377
|
-
local repo_full_name
|
|
378
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
379
|
-
|
|
380
|
-
print_info "Creating issue in $repo_full_name"
|
|
381
|
-
|
|
382
|
-
local tea_args=()
|
|
383
|
-
tea_args+=("--login" "$account_name")
|
|
384
|
-
tea_args+=("--title" "$title" "--owner" "${repo_full_name%/*}" "--repo" "${repo_full_name#*/}")
|
|
385
|
-
|
|
386
|
-
if [[ -n "$body" ]]; then
|
|
387
|
-
tea_args+=("--body" "$body")
|
|
388
|
-
fi
|
|
389
|
-
|
|
390
|
-
if tea issues create "${tea_args[@]}" --output json; then
|
|
391
|
-
print_success "$SUCCESS_ISSUE_CREATED"
|
|
392
|
-
else
|
|
393
|
-
print_error "Failed to create issue"
|
|
394
|
-
return 1
|
|
395
|
-
fi
|
|
396
|
-
return 0
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
close_issue() {
|
|
400
|
-
local account_name="$1"
|
|
401
|
-
local repo_name="$2"
|
|
402
|
-
local issue_number="$3"
|
|
403
|
-
|
|
404
|
-
if [[ -z "$issue_number" ]]; then
|
|
405
|
-
print_error "$ERROR_ISSUE_NUMBER_REQUIRED"
|
|
406
|
-
return 1
|
|
407
|
-
fi
|
|
408
|
-
|
|
409
|
-
local repo_full_name
|
|
410
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
411
|
-
|
|
412
|
-
print_info "Closing issue #$issue_number in $repo_full_name"
|
|
413
|
-
|
|
414
|
-
if tea issues close --login "$account_name" --owner "${repo_full_name%/*}" --repo "${repo_full_name#*/}" --index "$issue_number"; then
|
|
415
|
-
print_success "$SUCCESS_ISSUE_CLOSED"
|
|
416
|
-
else
|
|
417
|
-
print_error "Failed to close issue"
|
|
418
|
-
return 1
|
|
419
|
-
fi
|
|
420
|
-
return 0
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
# ------------------------------------------------------------------------------
|
|
424
|
-
# PULL REQUEST MANAGEMENT
|
|
425
|
-
# ------------------------------------------------------------------------------
|
|
426
|
-
|
|
427
|
-
list_prs() {
|
|
428
|
-
local account_name="$1"
|
|
429
|
-
local repo_name="$2"
|
|
430
|
-
local state="${3:-open}"
|
|
431
|
-
|
|
432
|
-
if [[ -z "$repo_name" ]]; then
|
|
433
|
-
print_error "$ERROR_ARGS_MISSING"
|
|
434
|
-
return 1
|
|
435
|
-
fi
|
|
436
|
-
|
|
437
|
-
local repo_full_name
|
|
438
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
439
|
-
|
|
440
|
-
print_info "Listing pull requests for $repo_full_name (state: $state)"
|
|
441
|
-
tea pulls list --login "$account_name" --owner "${repo_full_name%/*}" --repo "${repo_full_name#*/}" --state "$state" --limit 50 --output tsb
|
|
442
|
-
return 0
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
create_pr() {
|
|
446
|
-
local account_name="$1"
|
|
447
|
-
local repo_name="$2"
|
|
448
|
-
local title="$3"
|
|
449
|
-
local head_branch="${4:-}"
|
|
450
|
-
local base_branch="${5:-main}"
|
|
451
|
-
local body="${6:-}"
|
|
452
|
-
|
|
453
|
-
if [[ -z "$title" || -z "$head_branch" ]]; then
|
|
454
|
-
print_error "Pull request title and head branch are required"
|
|
455
|
-
return 1
|
|
456
|
-
fi
|
|
457
|
-
|
|
458
|
-
local repo_full_name
|
|
459
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
460
|
-
|
|
461
|
-
print_info "Creating pull request in $repo_full_name"
|
|
462
|
-
|
|
463
|
-
local tea_args=()
|
|
464
|
-
tea_args+=("--login" "$account_name")
|
|
465
|
-
tea_args+=("--title" "$title" "--head" "$head_branch" "--base" "$base_branch")
|
|
466
|
-
tea_args+=("--owner" "${repo_full_name%/*}" "--repo" "${repo_full_name#*/}")
|
|
467
|
-
|
|
468
|
-
if [[ -n "$body" ]]; then
|
|
469
|
-
tea_args+=("--body" "$body")
|
|
470
|
-
fi
|
|
471
|
-
|
|
472
|
-
if tea pulls create "${tea_args[@]}" --output json; then
|
|
473
|
-
print_success "$SUCCESS_PR_CREATED"
|
|
474
|
-
else
|
|
475
|
-
print_error "Failed to create pull request"
|
|
476
|
-
return 1
|
|
477
|
-
fi
|
|
478
|
-
return 0
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
merge_pr() {
|
|
482
|
-
local account_name="$1"
|
|
483
|
-
local repo_name="$2"
|
|
484
|
-
local pr_number="$3"
|
|
485
|
-
local merge_method="${4:-merge}"
|
|
486
|
-
|
|
487
|
-
if [[ -z "$pr_number" ]]; then
|
|
488
|
-
print_error "$ERROR_PR_NUMBER_REQUIRED"
|
|
489
|
-
return 1
|
|
490
|
-
fi
|
|
491
|
-
|
|
492
|
-
local repo_full_name
|
|
493
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
494
|
-
|
|
495
|
-
print_info "Merging pull request #$pr_number in $repo_full_name"
|
|
496
|
-
|
|
497
|
-
local tea_args=()
|
|
498
|
-
tea_args+=("--login" "$account_name")
|
|
499
|
-
tea_args+=("--owner" "${repo_full_name%/*}" --repo "${repo_full_name#*/}" --index "$pr_number")
|
|
500
|
-
|
|
501
|
-
case "$merge_method" in
|
|
502
|
-
"squash")
|
|
503
|
-
tea_args+=("--squash")
|
|
504
|
-
;;
|
|
505
|
-
"rebase")
|
|
506
|
-
tea_args+=("--rebase")
|
|
507
|
-
;;
|
|
508
|
-
"merge"|*)
|
|
509
|
-
# Default merge behavior
|
|
510
|
-
;;
|
|
511
|
-
esac
|
|
512
|
-
|
|
513
|
-
if tea pulls merge "${tea_args[@]}"; then
|
|
514
|
-
print_success "$SUCCESS_PR_MERGED"
|
|
515
|
-
else
|
|
516
|
-
print_error "Failed to merge pull request"
|
|
517
|
-
return 1
|
|
518
|
-
fi
|
|
519
|
-
return 0
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
# ------------------------------------------------------------------------------
|
|
523
|
-
# BRANCH MANAGEMENT
|
|
524
|
-
# ------------------------------------------------------------------------------
|
|
525
|
-
|
|
526
|
-
list_branches() {
|
|
527
|
-
local account_name="$1"
|
|
528
|
-
local repo_name="$2"
|
|
529
|
-
|
|
530
|
-
if [[ -z "$repo_name" ]]; then
|
|
531
|
-
print_error "$ERROR_ARGS_MISSING"
|
|
532
|
-
return 1
|
|
533
|
-
fi
|
|
534
|
-
|
|
535
|
-
local repo_full_name
|
|
536
|
-
repo_full_name=$(get_repo_full_name "$account_name" "$repo_name") || exit 1
|
|
537
|
-
|
|
538
|
-
print_info "Listing branches for $repo_full_name"
|
|
539
|
-
tea repos branches --login "$account_name" --owner "${repo_full_name%/*}" --repo "${repo_full_name#*/}" --output tsb
|
|
540
|
-
return 0
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
create_branch() {
|
|
544
|
-
local account_name="$1"
|
|
545
|
-
local repo_name="$2"
|
|
546
|
-
local branch_name="$3"
|
|
547
|
-
local source_branch="${4:-main}"
|
|
548
|
-
|
|
549
|
-
if [[ -z "$branch_name" ]]; then
|
|
550
|
-
print_error "$ERROR_BRANCH_NAME_REQUIRED"
|
|
551
|
-
return 1
|
|
552
|
-
fi
|
|
553
|
-
|
|
554
|
-
local config
|
|
555
|
-
config=$(get_account_config "$account_name") || exit 1
|
|
556
|
-
|
|
557
|
-
local owner
|
|
558
|
-
owner=$(echo "$config" | jq -r '.owner // "EMPTY"')
|
|
559
|
-
if [[ "$owner" == "EMPTY" || -z "$owner" ]]; then
|
|
560
|
-
print_error "$ERROR_OWNER_NOT_CONFIGURED: $account_name"
|
|
561
|
-
return 1
|
|
562
|
-
fi
|
|
563
|
-
|
|
564
|
-
# Get API URL from config or use default
|
|
565
|
-
local api_url
|
|
566
|
-
api_url=$(echo "$config" | jq -r '.api_url // "https://gitea.com/api/v1"')
|
|
567
|
-
local token
|
|
568
|
-
token=$(echo "$config" | jq -r '.token // ""')
|
|
569
|
-
|
|
570
|
-
if [[ -z "$token" ]]; then
|
|
571
|
-
print_error "API token not configured for account: $account_name"
|
|
572
|
-
return 1
|
|
573
|
-
fi
|
|
574
|
-
|
|
575
|
-
print_info "Creating branch '$branch_name' in $owner/$repo_name from '$source_branch'"
|
|
576
|
-
|
|
577
|
-
# Use API to create branch since tea doesn't have branch creation command
|
|
578
|
-
local branch_data
|
|
579
|
-
branch_data="{\"new_branch_name\": \"$branch_name\", \"old_branch_name\": \"$source_branch\"}"
|
|
580
|
-
|
|
581
|
-
local curl_args=()
|
|
582
|
-
curl_args+=("-X" "POST" "$api_url/repos/$owner/$repo_name/branches")
|
|
583
|
-
curl_args+=("-H" "$AUTH_HEADER_TOKEN $token")
|
|
584
|
-
curl_args+=("-H" "$CONTENT_TYPE_JSON")
|
|
585
|
-
curl_args+=("-d" "$branch_data")
|
|
586
|
-
|
|
587
|
-
if curl "${curl_args[@]}" &>/dev/null; then
|
|
588
|
-
print_success "$SUCCESS_BRANCH_CREATED"
|
|
589
|
-
else
|
|
590
|
-
print_error "Failed to create branch"
|
|
591
|
-
return 1
|
|
592
|
-
fi
|
|
593
|
-
return 0
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
# ------------------------------------------------------------------------------
|
|
597
|
-
# ACCOUNT MANAGEMENT
|
|
598
|
-
# ------------------------------------------------------------------------------
|
|
599
|
-
|
|
600
|
-
list_accounts() {
|
|
601
|
-
print_info "Configured Gitea accounts:"
|
|
602
|
-
if [[ -f "$CONFIG_FILE" ]]; then
|
|
603
|
-
jq -r '.accounts | keys[]' "$CONFIG_FILE" 2>/dev/null || print_warning "No accounts configured"
|
|
604
|
-
else
|
|
605
|
-
print_warning "Configuration file not found"
|
|
606
|
-
fi
|
|
607
|
-
return 0
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
show_help() {
|
|
611
|
-
cat << EOF
|
|
612
|
-
Gitea CLI Helper Script
|
|
613
|
-
Usage: $0 [command] [account] [arguments]
|
|
614
|
-
|
|
615
|
-
Gitea management using Gitea CLI (tea)
|
|
616
|
-
|
|
617
|
-
COMMANDS:
|
|
618
|
-
Repository Management:
|
|
619
|
-
list-repos [account] [filter] - List repositories (can filter by name)
|
|
620
|
-
create-repo <account> <name> [desc] [vis] [init] - Create repository
|
|
621
|
-
visibility: public|private|internal (default: public)
|
|
622
|
-
auto_init: true|false (default: false)
|
|
623
|
-
delete-repo <account> <name> - Delete repository (requires confirmation)
|
|
624
|
-
get-repo <account> <name> - Get repository information
|
|
625
|
-
|
|
626
|
-
Issue Management:
|
|
627
|
-
list-issues <account> <repo> [state] - List issues (open|closed|all)
|
|
628
|
-
create-issue <account> <repo> <title> [body] - Create issue
|
|
629
|
-
close-issue <account> <repo> <number> - Close issue
|
|
630
|
-
|
|
631
|
-
Pull Request Management:
|
|
632
|
-
list-prs <account> <repo> [state] - List pull requests
|
|
633
|
-
create-pr <account> <repo> <title> <head> [base] [body] - Create PR
|
|
634
|
-
merge-pr <account> <repo> <number> [method] - Merge PR (merge|squash|rebase)
|
|
635
|
-
|
|
636
|
-
Branch Management:
|
|
637
|
-
list-branches <account> <repo> - List branches
|
|
638
|
-
create-branch <account> <repo> <branch> [source] - Create branch
|
|
639
|
-
|
|
640
|
-
Account Management:
|
|
641
|
-
list-accounts - List configured accounts
|
|
642
|
-
help - $HELP_SHOW_MESSAGE
|
|
643
|
-
|
|
644
|
-
EXAMPLES:
|
|
645
|
-
$0 list-repos marcusquinn
|
|
646
|
-
$0 create-repo marcusquinn my-gitea-project "My Gitea project" private true
|
|
647
|
-
$0 list-issues marcusquinn my-repo open
|
|
648
|
-
$0 create-issue marcusquinn my-repo "Bug report" "Describe the issue here"
|
|
649
|
-
$0 create-pr marcusquinn my-repo "Fix bug" bugfix-branch main
|
|
650
|
-
|
|
651
|
-
CONFIGURATION:
|
|
652
|
-
File: configs/gitea-cli-config.json
|
|
653
|
-
Example: cp configs/gitea-cli-config.json.txt configs/gitea-cli-config.json
|
|
654
|
-
|
|
655
|
-
REQUIREMENTS:
|
|
656
|
-
- Gitea CLI (tea) installed and authenticated
|
|
657
|
-
- jq JSON processor
|
|
658
|
-
- Valid Gitea access token (configured in config file)
|
|
659
|
-
|
|
660
|
-
For more information, see the Gitea CLI documentation: https://gitea.com/tea/
|
|
661
|
-
EOF
|
|
662
|
-
return 0
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
# ------------------------------------------------------------------------------
|
|
666
|
-
# MAIN COMMAND HANDLER
|
|
667
|
-
# ------------------------------------------------------------------------------
|
|
668
|
-
|
|
669
|
-
main() {
|
|
670
|
-
local command="${1:-help}"
|
|
671
|
-
local account_name="$2"
|
|
672
|
-
local target="$3"
|
|
673
|
-
local options="$4"
|
|
674
|
-
|
|
675
|
-
case "$command" in
|
|
676
|
-
"list-repos")
|
|
677
|
-
list_repos "$account_name" "$target"
|
|
678
|
-
;;
|
|
679
|
-
"create-repo")
|
|
680
|
-
local repo_desc="$options"
|
|
681
|
-
local repo_vis="$5"
|
|
682
|
-
local repo_init="$6"
|
|
683
|
-
create_repo "$account_name" "$target" "$repo_desc" "$repo_vis" "$repo_init"
|
|
684
|
-
;;
|
|
685
|
-
"delete-repo")
|
|
686
|
-
delete_repo "$account_name" "$target"
|
|
687
|
-
;;
|
|
688
|
-
"get-repo")
|
|
689
|
-
get_repo_details "$account_name" "$target"
|
|
690
|
-
;;
|
|
691
|
-
"list-issues")
|
|
692
|
-
list_issues "$account_name" "$target" "$options"
|
|
693
|
-
;;
|
|
694
|
-
"create-issue")
|
|
695
|
-
local issue_body="$5"
|
|
696
|
-
create_issue "$account_name" "$target" "$options" "$issue_body"
|
|
697
|
-
;;
|
|
698
|
-
"close-issue")
|
|
699
|
-
close_issue "$account_name" "$target" "$options"
|
|
700
|
-
;;
|
|
701
|
-
"list-prs")
|
|
702
|
-
list_prs "$account_name" "$target" "$options"
|
|
703
|
-
;;
|
|
704
|
-
"create-pr")
|
|
705
|
-
local pr_title="$options"
|
|
706
|
-
local pr_head="$5"
|
|
707
|
-
local pr_base="$6"
|
|
708
|
-
local pr_body="$7"
|
|
709
|
-
create_pr "$account_name" "$target" "$pr_title" "$pr_head" "$pr_base" "$pr_body"
|
|
710
|
-
;;
|
|
711
|
-
"merge-pr")
|
|
712
|
-
local merge_method="$5"
|
|
713
|
-
merge_pr "$account_name" "$target" "$options" "$merge_method"
|
|
714
|
-
;;
|
|
715
|
-
"list-branches")
|
|
716
|
-
list_branches "$account_name" "$target"
|
|
717
|
-
;;
|
|
718
|
-
"create-branch")
|
|
719
|
-
local source_branch="$5"
|
|
720
|
-
create_branch "$account_name" "$target" "$options" "$source_branch"
|
|
721
|
-
;;
|
|
722
|
-
"list-accounts")
|
|
723
|
-
list_accounts
|
|
724
|
-
;;
|
|
725
|
-
"help"|"-h"|"--help")
|
|
726
|
-
show_help
|
|
727
|
-
;;
|
|
728
|
-
*)
|
|
729
|
-
print_error "$ERROR_UNKNOWN_COMMAND $command"
|
|
730
|
-
print_info "Use '$0 help' for usage information"
|
|
731
|
-
exit 1
|
|
732
|
-
;;
|
|
733
|
-
esac
|
|
734
|
-
|
|
735
|
-
return 0
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
# Initialize
|
|
739
|
-
check_dependencies
|
|
740
|
-
load_config
|
|
741
|
-
|
|
742
|
-
# Execute main function
|
|
743
|
-
main "$@"
|