@cnbcool/cnb-cli 1.0.0
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/.cnb.yml +37 -0
- package/DEVELOPMENT.md +345 -0
- package/LICENSE.md +9 -0
- package/README.md +119 -0
- package/bin/cnb.js +3 -0
- package/cag.config.js +57 -0
- package/downloads/1773729361207-dsfgely.png +0 -0
- package/package.json +20 -0
- package/skills/artifact-migrate/README.md +79 -0
- package/skills/artifact-migrate/SKILL.md +674 -0
- package/skills/auto-code/SKILL.md +71 -0
- package/skills/auto-code/hooks/hooks.json +15 -0
- package/skills/cnb-code-import/LICENSE +20 -0
- package/skills/cnb-code-import/README.md +311 -0
- package/skills/cnb-code-import/SKILL.md +368 -0
- package/skills/cnb-code-import/scripts/migrate.sh +371 -0
- package/skills/cnb-skill/SKILL.md +100 -0
- package/skills/cnb-skill/scripts/core/config/cag.config.js +57 -0
- package/skills/cnb-skill/scripts/core/convertLink.js +140 -0
- package/skills/cnb-skill/scripts/core/core.js +97 -0
- package/skills/cnb-skill/scripts/core/fetch-response-handler.js +34 -0
- package/skills/cnb-skill/scripts/core/help.json +35199 -0
- package/skills/cnb-skill/scripts/core/index.d.js +6 -0
- package/skills/cnb-skill/scripts/core/index.js +337 -0
- package/skills/cnb-skill/scripts/core/modules.help.js +40 -0
- package/skills/cnb-skill/scripts/core/schemaToJson.d.js +5 -0
- package/skills/cnb-skill/scripts/core/schemaToJson.js +32 -0
- package/skills/cnb-skill/scripts/core/shortcuts.js +247 -0
- package/skills/cnb-skill/scripts/core/tools.help.js +116 -0
- package/skills/cnb-skill/scripts/core/utils/convert-link.js +144 -0
- package/skills/cnb-skill/scripts/core/utils/generate-unique-id.js +10 -0
- package/skills/cnb-skill/scripts/modules/activities/get-user-activities-by-date.js +76 -0
- package/skills/cnb-skill/scripts/modules/activities/get-user-repo-activity-details.js +78 -0
- package/skills/cnb-skill/scripts/modules/activities/top-contributors.js +76 -0
- package/skills/cnb-skill/scripts/modules/ai/ai-auto-pr.js +70 -0
- package/skills/cnb-skill/scripts/modules/ai/ai-chat-completions.js +70 -0
- package/skills/cnb-skill/scripts/modules/assets/delete-asset.js +76 -0
- package/skills/cnb-skill/scripts/modules/assets/get-files.js +76 -0
- package/skills/cnb-skill/scripts/modules/assets/get-imgs.js +76 -0
- package/skills/cnb-skill/scripts/modules/assets/list-assets.js +76 -0
- package/skills/cnb-skill/scripts/modules/badge/get-badge.js +80 -0
- package/skills/cnb-skill/scripts/modules/badge/list-badge.js +70 -0
- package/skills/cnb-skill/scripts/modules/badge/upload-badge.js +70 -0
- package/skills/cnb-skill/scripts/modules/build/build-crontab-sync.js +75 -0
- package/skills/cnb-skill/scripts/modules/build/build-logs-delete.js +75 -0
- package/skills/cnb-skill/scripts/modules/build/build-runner-download-log.js +75 -0
- package/skills/cnb-skill/scripts/modules/build/get-build-logs.js +76 -0
- package/skills/cnb-skill/scripts/modules/build/get-build-stage.js +79 -0
- package/skills/cnb-skill/scripts/modules/build/get-build-status.js +75 -0
- package/skills/cnb-skill/scripts/modules/build/start-build.js +70 -0
- package/skills/cnb-skill/scripts/modules/build/stop-build.js +75 -0
- package/skills/cnb-skill/scripts/modules/charge/get-special-amount.js +68 -0
- package/skills/cnb-skill/scripts/modules/event/get-events.js +74 -0
- package/skills/cnb-skill/scripts/modules/followers/get-followers-by-user-id.js +76 -0
- package/skills/cnb-skill/scripts/modules/followers/get-following-by-user-id.js +76 -0
- package/skills/cnb-skill/scripts/modules/git/create-blob.js +70 -0
- package/skills/cnb-skill/scripts/modules/git/create-branch-lock.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/create-branch.js +70 -0
- package/skills/cnb-skill/scripts/modules/git/create-tag.js +70 -0
- package/skills/cnb-skill/scripts/modules/git/delete-branch-lock.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/delete-branch.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/delete-commit-annotation.js +77 -0
- package/skills/cnb-skill/scripts/modules/git/delete-commit-asset.js +77 -0
- package/skills/cnb-skill/scripts/modules/git/delete-tag-annotation.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/delete-tag.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-archive-commit-changed-files.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-archive-compare-changed-files.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-archive.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-branch.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-commit-annotations-in-batch.js +70 -0
- package/skills/cnb-skill/scripts/modules/git/get-commit-annotations.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-commit-assets-by-sha.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-commit-assets.js +80 -0
- package/skills/cnb-skill/scripts/modules/git/get-commit-statuses.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-commit.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-compare-commits.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-content-without-path.js +76 -0
- package/skills/cnb-skill/scripts/modules/git/get-content.js +78 -0
- package/skills/cnb-skill/scripts/modules/git/get-head.js +67 -0
- package/skills/cnb-skill/scripts/modules/git/get-presigned-lfs-download-link.js +78 -0
- package/skills/cnb-skill/scripts/modules/git/get-raw.js +78 -0
- package/skills/cnb-skill/scripts/modules/git/get-tag-annotations.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/get-tag.js +75 -0
- package/skills/cnb-skill/scripts/modules/git/list-branches.js +76 -0
- package/skills/cnb-skill/scripts/modules/git/list-commits.js +76 -0
- package/skills/cnb-skill/scripts/modules/git/list-tags.js +76 -0
- package/skills/cnb-skill/scripts/modules/git/post-commit-asset-upload-confirmation.js +82 -0
- package/skills/cnb-skill/scripts/modules/git/post-commit-asset-upload-url.js +78 -0
- package/skills/cnb-skill/scripts/modules/git/put-commit-annotations.js +78 -0
- package/skills/cnb-skill/scripts/modules/git/put-tag-annotations.js +78 -0
- package/skills/cnb-skill/scripts/modules/git-settings/delete-branch-protection.js +75 -0
- package/skills/cnb-skill/scripts/modules/git-settings/get-branch-protection.js +75 -0
- package/skills/cnb-skill/scripts/modules/git-settings/get-pipeline-settings.js +67 -0
- package/skills/cnb-skill/scripts/modules/git-settings/get-pull-request-settings.js +67 -0
- package/skills/cnb-skill/scripts/modules/git-settings/get-push-limit-settings.js +67 -0
- package/skills/cnb-skill/scripts/modules/git-settings/list-branch-protections.js +67 -0
- package/skills/cnb-skill/scripts/modules/git-settings/patch-branch-protection.js +78 -0
- package/skills/cnb-skill/scripts/modules/git-settings/post-branch-protection.js +70 -0
- package/skills/cnb-skill/scripts/modules/git-settings/put-pipeline-settings.js +70 -0
- package/skills/cnb-skill/scripts/modules/git-settings/put-pull-request-settings.js +70 -0
- package/skills/cnb-skill/scripts/modules/git-settings/put-push-limit-settings.js +70 -0
- package/skills/cnb-skill/scripts/modules/issues/can-user-be-assigned-to-issue.js +77 -0
- package/skills/cnb-skill/scripts/modules/issues/create-issue.js +70 -0
- package/skills/cnb-skill/scripts/modules/issues/delete-issue-assignees.js +78 -0
- package/skills/cnb-skill/scripts/modules/issues/delete-issue-label.js +77 -0
- package/skills/cnb-skill/scripts/modules/issues/delete-issue-labels.js +75 -0
- package/skills/cnb-skill/scripts/modules/issues/get-issue-comment.js +77 -0
- package/skills/cnb-skill/scripts/modules/issues/get-issue.js +75 -0
- package/skills/cnb-skill/scripts/modules/issues/list-issue-activities-latest.js +77 -0
- package/skills/cnb-skill/scripts/modules/issues/list-issue-activities.js +78 -0
- package/skills/cnb-skill/scripts/modules/issues/list-issue-assignees.js +75 -0
- package/skills/cnb-skill/scripts/modules/issues/list-issue-comments.js +78 -0
- package/skills/cnb-skill/scripts/modules/issues/list-issue-labels.js +78 -0
- package/skills/cnb-skill/scripts/modules/issues/list-issues.js +76 -0
- package/skills/cnb-skill/scripts/modules/issues/patch-issue-assignees.js +78 -0
- package/skills/cnb-skill/scripts/modules/issues/patch-issue-comment.js +80 -0
- package/skills/cnb-skill/scripts/modules/issues/post-issue-assignees.js +78 -0
- package/skills/cnb-skill/scripts/modules/issues/post-issue-comment.js +78 -0
- package/skills/cnb-skill/scripts/modules/issues/post-issue-labels.js +78 -0
- package/skills/cnb-skill/scripts/modules/issues/put-issue-labels.js +78 -0
- package/skills/cnb-skill/scripts/modules/issues/update-issue-properties.js +79 -0
- package/skills/cnb-skill/scripts/modules/issues/update-issue.js +78 -0
- package/skills/cnb-skill/scripts/modules/knowledge-base/delete-knowledge-base.js +67 -0
- package/skills/cnb-skill/scripts/modules/knowledge-base/get-knowledge-base-info.js +67 -0
- package/skills/cnb-skill/scripts/modules/knowledge-base/get-models.js +67 -0
- package/skills/cnb-skill/scripts/modules/knowledge-base/query-knowledge-base.js +70 -0
- package/skills/cnb-skill/scripts/modules/members/add-members-of-group.js +78 -0
- package/skills/cnb-skill/scripts/modules/members/add-members-of-mission.js +78 -0
- package/skills/cnb-skill/scripts/modules/members/add-members-of-registry.js +78 -0
- package/skills/cnb-skill/scripts/modules/members/add-members-of-repo.js +78 -0
- package/skills/cnb-skill/scripts/modules/members/delete-members-of-group.js +75 -0
- package/skills/cnb-skill/scripts/modules/members/delete-members-of-repo.js +75 -0
- package/skills/cnb-skill/scripts/modules/members/delete-outside-collaborators.js +75 -0
- package/skills/cnb-skill/scripts/modules/members/get-member-access-level-of-group.js +76 -0
- package/skills/cnb-skill/scripts/modules/members/get-member-access-level-of-repo.js +76 -0
- package/skills/cnb-skill/scripts/modules/members/list-all-members.js +76 -0
- package/skills/cnb-skill/scripts/modules/members/list-inherit-members-of-group.js +76 -0
- package/skills/cnb-skill/scripts/modules/members/list-inherit-members-of-repo.js +76 -0
- package/skills/cnb-skill/scripts/modules/members/list-member-access-level-of-group.js +75 -0
- package/skills/cnb-skill/scripts/modules/members/list-member-access-level-of-repo.js +75 -0
- package/skills/cnb-skill/scripts/modules/members/list-members-of-group.js +76 -0
- package/skills/cnb-skill/scripts/modules/members/list-members-of-repo.js +76 -0
- package/skills/cnb-skill/scripts/modules/members/list-outside-collaborators.js +76 -0
- package/skills/cnb-skill/scripts/modules/members/update-members-of-group.js +78 -0
- package/skills/cnb-skill/scripts/modules/members/update-members-of-repo.js +78 -0
- package/skills/cnb-skill/scripts/modules/members/update-outside-collaborators.js +78 -0
- package/skills/cnb-skill/scripts/modules/missions/create-mission.js +70 -0
- package/skills/cnb-skill/scripts/modules/missions/delete-mission.js +67 -0
- package/skills/cnb-skill/scripts/modules/missions/get-group-sub-missions.js +76 -0
- package/skills/cnb-skill/scripts/modules/missions/get-mission-view-config.js +76 -0
- package/skills/cnb-skill/scripts/modules/missions/get-mission-view-list.js +67 -0
- package/skills/cnb-skill/scripts/modules/missions/post-mission-view-config.js +70 -0
- package/skills/cnb-skill/scripts/modules/missions/post-mission-view-list.js +70 -0
- package/skills/cnb-skill/scripts/modules/missions/put-mission-view-list.js +70 -0
- package/skills/cnb-skill/scripts/modules/missions/set-mission-visibility.js +76 -0
- package/skills/cnb-skill/scripts/modules/organizations/create-organization.js +66 -0
- package/skills/cnb-skill/scripts/modules/organizations/delete-organization.js +67 -0
- package/skills/cnb-skill/scripts/modules/organizations/get-group-setting.js +67 -0
- package/skills/cnb-skill/scripts/modules/organizations/get-group.js +67 -0
- package/skills/cnb-skill/scripts/modules/organizations/get-groups-by-user-id.js +76 -0
- package/skills/cnb-skill/scripts/modules/organizations/list-groups.js +76 -0
- package/skills/cnb-skill/scripts/modules/organizations/list-subgroups.js +76 -0
- package/skills/cnb-skill/scripts/modules/organizations/list-top-groups.js +72 -0
- package/skills/cnb-skill/scripts/modules/organizations/transfer-group.js +70 -0
- package/skills/cnb-skill/scripts/modules/organizations/update-group-setting.js +70 -0
- package/skills/cnb-skill/scripts/modules/organizations/update-organization.js +70 -0
- package/skills/cnb-skill/scripts/modules/organizations/upload-logos.js +70 -0
- package/skills/cnb-skill/scripts/modules/pulls/can-user-be-assigned-to-pull.js +77 -0
- package/skills/cnb-skill/scripts/modules/pulls/delete-pull-assignees.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/delete-pull-label.js +77 -0
- package/skills/cnb-skill/scripts/modules/pulls/delete-pull-labels.js +75 -0
- package/skills/cnb-skill/scripts/modules/pulls/delete-repo-files.js +76 -0
- package/skills/cnb-skill/scripts/modules/pulls/delete-repo-imgs.js +76 -0
- package/skills/cnb-skill/scripts/modules/pulls/get-files.js +75 -0
- package/skills/cnb-skill/scripts/modules/pulls/get-imgs.js +75 -0
- package/skills/cnb-skill/scripts/modules/pulls/get-pull-comment.js +77 -0
- package/skills/cnb-skill/scripts/modules/pulls/get-pull.js +75 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pull-assignees.js +75 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pull-comments.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pull-commit-statuses.js +75 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pull-commits.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pull-files.js +75 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pull-labels.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pull-review-comments.js +80 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pull-reviews.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pulls-by-numbers.js +76 -0
- package/skills/cnb-skill/scripts/modules/pulls/list-pulls.js +76 -0
- package/skills/cnb-skill/scripts/modules/pulls/merge-pull.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/patch-pull-comment.js +80 -0
- package/skills/cnb-skill/scripts/modules/pulls/patch-pull.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/post-pull-assignees.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/post-pull-comment.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/post-pull-labels.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/post-pull-request-review-reply.js +80 -0
- package/skills/cnb-skill/scripts/modules/pulls/post-pull-review.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/post-pull.js +70 -0
- package/skills/cnb-skill/scripts/modules/pulls/put-pull-labels.js +78 -0
- package/skills/cnb-skill/scripts/modules/pulls/upload-files.js +70 -0
- package/skills/cnb-skill/scripts/modules/pulls/upload-imgs.js +70 -0
- package/skills/cnb-skill/scripts/modules/rank/get-language-list.js +72 -0
- package/skills/cnb-skill/scripts/modules/rank/get-repo-annual-rank.js +72 -0
- package/skills/cnb-skill/scripts/modules/rank/get-repo-daily-rank.js +72 -0
- package/skills/cnb-skill/scripts/modules/rank/get-repo-monthly-rank.js +72 -0
- package/skills/cnb-skill/scripts/modules/rank/get-repo-weekly-rank.js +72 -0
- package/skills/cnb-skill/scripts/modules/registries/delete-package-tag.js +80 -0
- package/skills/cnb-skill/scripts/modules/registries/delete-package.js +78 -0
- package/skills/cnb-skill/scripts/modules/registries/delete-registry.js +67 -0
- package/skills/cnb-skill/scripts/modules/registries/get-group-sub-registries.js +76 -0
- package/skills/cnb-skill/scripts/modules/registries/get-package-tag-detail.js +83 -0
- package/skills/cnb-skill/scripts/modules/registries/get-package.js +78 -0
- package/skills/cnb-skill/scripts/modules/registries/list-package-tags.js +81 -0
- package/skills/cnb-skill/scripts/modules/registries/list-packages.js +77 -0
- package/skills/cnb-skill/scripts/modules/registries/set-registry-visibility.js +76 -0
- package/skills/cnb-skill/scripts/modules/releases/delete-release-asset.js +77 -0
- package/skills/cnb-skill/scripts/modules/releases/delete-release.js +75 -0
- package/skills/cnb-skill/scripts/modules/releases/get-latest-release.js +67 -0
- package/skills/cnb-skill/scripts/modules/releases/get-release-asset.js +77 -0
- package/skills/cnb-skill/scripts/modules/releases/get-release-by-id.js +75 -0
- package/skills/cnb-skill/scripts/modules/releases/get-release-by-tag.js +75 -0
- package/skills/cnb-skill/scripts/modules/releases/get-releases-asset.js +80 -0
- package/skills/cnb-skill/scripts/modules/releases/list-releases.js +76 -0
- package/skills/cnb-skill/scripts/modules/releases/patch-release.js +78 -0
- package/skills/cnb-skill/scripts/modules/releases/post-release-asset-upload-confirmation.js +82 -0
- package/skills/cnb-skill/scripts/modules/releases/post-release-asset-upload-url.js +78 -0
- package/skills/cnb-skill/scripts/modules/releases/post-release.js +70 -0
- package/skills/cnb-skill/scripts/modules/repo-code-issue/get-code-issue-detail-open-api.js +76 -0
- package/skills/cnb-skill/scripts/modules/repo-code-issue/list-code-issue-open-api.js +77 -0
- package/skills/cnb-skill/scripts/modules/repo-contributor/get-repo-contributor-trend.js +76 -0
- package/skills/cnb-skill/scripts/modules/repo-labels/delete-label.js +75 -0
- package/skills/cnb-skill/scripts/modules/repo-labels/list-labels.js +76 -0
- package/skills/cnb-skill/scripts/modules/repo-labels/patch-label.js +78 -0
- package/skills/cnb-skill/scripts/modules/repo-labels/post-label.js +70 -0
- package/skills/cnb-skill/scripts/modules/repositories/archive-repo.js +67 -0
- package/skills/cnb-skill/scripts/modules/repositories/create-repo.js +70 -0
- package/skills/cnb-skill/scripts/modules/repositories/delete-repo.js +67 -0
- package/skills/cnb-skill/scripts/modules/repositories/get-by-id.js +67 -0
- package/skills/cnb-skill/scripts/modules/repositories/get-group-sub-repos.js +76 -0
- package/skills/cnb-skill/scripts/modules/repositories/get-pinned-repo-by-group.js +67 -0
- package/skills/cnb-skill/scripts/modules/repositories/get-pinned-repo-by-id.js +67 -0
- package/skills/cnb-skill/scripts/modules/repositories/get-repos-by-user-name.js +76 -0
- package/skills/cnb-skill/scripts/modules/repositories/get-repos.js +72 -0
- package/skills/cnb-skill/scripts/modules/repositories/list-forks-repos.js +76 -0
- package/skills/cnb-skill/scripts/modules/repositories/set-pinned-repo-by-group.js +70 -0
- package/skills/cnb-skill/scripts/modules/repositories/set-repo-visibility.js +76 -0
- package/skills/cnb-skill/scripts/modules/repositories/transfer-repo.js +70 -0
- package/skills/cnb-skill/scripts/modules/repositories/un-archive-repo.js +67 -0
- package/skills/cnb-skill/scripts/modules/repositories/update-repo.js +70 -0
- package/skills/cnb-skill/scripts/modules/search/list-public-repos.js +72 -0
- package/skills/cnb-skill/scripts/modules/security/get-repo-security-overview.js +76 -0
- package/skills/cnb-skill/scripts/modules/starring/get-user-all-stared-repos.js +72 -0
- package/skills/cnb-skill/scripts/modules/starring/get-user-stared-repos.js +76 -0
- package/skills/cnb-skill/scripts/modules/starring/list-star-users.js +76 -0
- package/skills/cnb-skill/scripts/modules/users/auto-complete-source.js +72 -0
- package/skills/cnb-skill/scripts/modules/users/get-user-info-by-name.js +67 -0
- package/skills/cnb-skill/scripts/modules/users/get-user-info.js +63 -0
- package/skills/cnb-skill/scripts/modules/users/list-email.js +63 -0
- package/skills/cnb-skill/scripts/modules/users/list-gpg-keys.js +72 -0
- package/skills/cnb-skill/scripts/modules/users/update-user-info.js +66 -0
- package/skills/cnb-skill/scripts/modules/workspace/delete-workspace.js +66 -0
- package/skills/cnb-skill/scripts/modules/workspace/get-workspace-detail.js +75 -0
- package/skills/cnb-skill/scripts/modules/workspace/list-workspaces.js +72 -0
- package/skills/cnb-skill/scripts/modules/workspace/start-workspace.js +70 -0
- package/skills/cnb-skill/scripts/modules/workspace/workspace-stop.js +66 -0
- package/skills/code-review/README.md +3 -0
- package/skills/code-review/SKILL.md +131 -0
- package/skills/code-review/hooks/hooks.json +15 -0
- package/skills/diagnose-pr-pipeline/README.md +3 -0
- package/skills/diagnose-pr-pipeline/SKILL.md +88 -0
- package/skills/dialog-ci-log/README.md +16 -0
- package/skills/dialog-ci-log/SKILL.md +41 -0
- package/skills/dialog-ci-log/scrips/get-failed-stage-logs.js +124 -0
- package/skills/pr-diff/README.md +3 -0
- package/skills/pr-diff/SKILL.md +97 -0
- package/skills/pr-summary/README.md +3 -0
- package/skills/pr-summary/SKILL.md +70 -0
- package/skills/tapd-resource-fetcher/README.md +3 -0
- package/skills/tapd-resource-fetcher/SKILL.md +97 -0
- package/skills/text-path-converter/README.md +3 -0
- package/skills/text-path-converter/SKILL.md +30 -0
- package/skills/text-path-converter/scripts/convertLink.js +148 -0
- package/test.js +1 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# CNB Code Import - Migration Script
|
|
3
|
+
# Usage: ./migrate.sh --source-platform <platform> --source-token <token> --cnb-org <org> --cnb-token <token> [options]
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
# 默认工作目录
|
|
8
|
+
DEFAULT_WORKSPACE="$HOME/code-import-workspace"
|
|
9
|
+
|
|
10
|
+
# Default values
|
|
11
|
+
SOURCE_PLATFORM="coding"
|
|
12
|
+
SOURCE_URL=""
|
|
13
|
+
SOURCE_TOKEN=""
|
|
14
|
+
SOURCE_REPO=""
|
|
15
|
+
SOURCE_PROJECT=""
|
|
16
|
+
CNB_URL="https://cnb.cool"
|
|
17
|
+
CNB_ROOT_ORGANIZATION=""
|
|
18
|
+
CNB_TOKEN=""
|
|
19
|
+
MIGRATE_TYPE="team"
|
|
20
|
+
MIGRATE_CONCURRENCY=5
|
|
21
|
+
MIGRATE_FORCE_PUSH="false"
|
|
22
|
+
MIGRATE_REBASE="false"
|
|
23
|
+
MIGRATE_SKIP_EXISTS_REPO="false"
|
|
24
|
+
MIGRATE_USE_LFS_MIGRATE="true"
|
|
25
|
+
MIGRATE_ALLOW_INCOMPLETE_PUSH="false"
|
|
26
|
+
MIGRATE_LOG_LEVEL="info"
|
|
27
|
+
MIGRATE_ALLOW_SELECT_REPOS="false"
|
|
28
|
+
MIGRATE_DOWNLOAD_ONLY="false"
|
|
29
|
+
SOURCE_AK=""
|
|
30
|
+
SOURCE_SK=""
|
|
31
|
+
SOURCE_REGION="cn-north-4"
|
|
32
|
+
SOURCE_ORGANIZATIONID=""
|
|
33
|
+
SOURCE_USERNAME=""
|
|
34
|
+
SOURCE_PASSWORD=""
|
|
35
|
+
SOURCE_GROUP=""
|
|
36
|
+
WORKSPACE=""
|
|
37
|
+
|
|
38
|
+
# Colors for output
|
|
39
|
+
RED='\033[0;31m'
|
|
40
|
+
GREEN='\033[0;32m'
|
|
41
|
+
YELLOW='\033[1;33m'
|
|
42
|
+
NC='\033[0m' # No Color
|
|
43
|
+
|
|
44
|
+
log_info() {
|
|
45
|
+
echo -e "${GREEN}[INFO]${NC} $1"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
log_warn() {
|
|
49
|
+
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
log_error() {
|
|
53
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Parse arguments
|
|
57
|
+
while [[ $# -gt 0 ]]; do
|
|
58
|
+
case $1 in
|
|
59
|
+
--source-platform)
|
|
60
|
+
SOURCE_PLATFORM="$2"
|
|
61
|
+
shift 2
|
|
62
|
+
;;
|
|
63
|
+
--source-url)
|
|
64
|
+
SOURCE_URL="$2"
|
|
65
|
+
shift 2
|
|
66
|
+
;;
|
|
67
|
+
--source-token)
|
|
68
|
+
SOURCE_TOKEN="$2"
|
|
69
|
+
shift 2
|
|
70
|
+
;;
|
|
71
|
+
--source-repo)
|
|
72
|
+
SOURCE_REPO="$2"
|
|
73
|
+
shift 2
|
|
74
|
+
;;
|
|
75
|
+
--source-project)
|
|
76
|
+
SOURCE_PROJECT="$2"
|
|
77
|
+
shift 2
|
|
78
|
+
;;
|
|
79
|
+
--source-ak)
|
|
80
|
+
SOURCE_AK="$2"
|
|
81
|
+
shift 2
|
|
82
|
+
;;
|
|
83
|
+
--source-sk)
|
|
84
|
+
SOURCE_SK="$2"
|
|
85
|
+
shift 2
|
|
86
|
+
;;
|
|
87
|
+
--source-region)
|
|
88
|
+
SOURCE_REGION="$2"
|
|
89
|
+
shift 2
|
|
90
|
+
;;
|
|
91
|
+
--source-organizationid)
|
|
92
|
+
SOURCE_ORGANIZATIONID="$2"
|
|
93
|
+
shift 2
|
|
94
|
+
;;
|
|
95
|
+
--source-username)
|
|
96
|
+
SOURCE_USERNAME="$2"
|
|
97
|
+
shift 2
|
|
98
|
+
;;
|
|
99
|
+
--source-password)
|
|
100
|
+
SOURCE_PASSWORD="$2"
|
|
101
|
+
shift 2
|
|
102
|
+
;;
|
|
103
|
+
--source-group)
|
|
104
|
+
SOURCE_GROUP="$2"
|
|
105
|
+
shift 2
|
|
106
|
+
;;
|
|
107
|
+
--cnb-url)
|
|
108
|
+
CNB_URL="$2"
|
|
109
|
+
shift 2
|
|
110
|
+
;;
|
|
111
|
+
--cnb-org)
|
|
112
|
+
CNB_ROOT_ORGANIZATION="$2"
|
|
113
|
+
shift 2
|
|
114
|
+
;;
|
|
115
|
+
--cnb-token)
|
|
116
|
+
CNB_TOKEN="$2"
|
|
117
|
+
shift 2
|
|
118
|
+
;;
|
|
119
|
+
--migrate-type)
|
|
120
|
+
MIGRATE_TYPE="$2"
|
|
121
|
+
shift 2
|
|
122
|
+
;;
|
|
123
|
+
--concurrency)
|
|
124
|
+
MIGRATE_CONCURRENCY="$2"
|
|
125
|
+
shift 2
|
|
126
|
+
;;
|
|
127
|
+
--force-push)
|
|
128
|
+
MIGRATE_FORCE_PUSH="$2"
|
|
129
|
+
shift 2
|
|
130
|
+
;;
|
|
131
|
+
--rebase)
|
|
132
|
+
MIGRATE_REBASE="$2"
|
|
133
|
+
shift 2
|
|
134
|
+
;;
|
|
135
|
+
--allow-incomplete-push)
|
|
136
|
+
MIGRATE_ALLOW_INCOMPLETE_PUSH="$2"
|
|
137
|
+
shift 2
|
|
138
|
+
;;
|
|
139
|
+
--skip-exists)
|
|
140
|
+
MIGRATE_SKIP_EXISTS_REPO="$2"
|
|
141
|
+
shift 2
|
|
142
|
+
;;
|
|
143
|
+
--lfs-migrate)
|
|
144
|
+
MIGRATE_USE_LFS_MIGRATE="$2"
|
|
145
|
+
shift 2
|
|
146
|
+
;;
|
|
147
|
+
--log-level)
|
|
148
|
+
MIGRATE_LOG_LEVEL="$2"
|
|
149
|
+
shift 2
|
|
150
|
+
;;
|
|
151
|
+
--allow-select-repos)
|
|
152
|
+
MIGRATE_ALLOW_SELECT_REPOS="$2"
|
|
153
|
+
shift 2
|
|
154
|
+
;;
|
|
155
|
+
--download-only)
|
|
156
|
+
MIGRATE_DOWNLOAD_ONLY="$2"
|
|
157
|
+
shift 2
|
|
158
|
+
;;
|
|
159
|
+
--workspace)
|
|
160
|
+
WORKSPACE="$2"
|
|
161
|
+
shift 2
|
|
162
|
+
;;
|
|
163
|
+
-h|--help)
|
|
164
|
+
echo "CNB Code Import - Migrate code repositories to CNB"
|
|
165
|
+
echo ""
|
|
166
|
+
echo "Usage: $0 --source-platform <platform> --source-token <token> --cnb-org <org> --cnb-token <token> [options]"
|
|
167
|
+
echo ""
|
|
168
|
+
echo "Required:"
|
|
169
|
+
echo " --source-platform Source platform: coding/github/gitlab/gitee/aliyun/cnb/gongfeng/huaweicloud/common"
|
|
170
|
+
echo " --source-token Source platform access token"
|
|
171
|
+
echo " --cnb-org CNB root organization name"
|
|
172
|
+
echo " --cnb-token CNB access token"
|
|
173
|
+
echo ""
|
|
174
|
+
echo "Optional:"
|
|
175
|
+
echo " --source-url Source platform URL (default: auto-detect)"
|
|
176
|
+
echo " --source-repo Specific repos to migrate (comma-separated)"
|
|
177
|
+
echo " --source-project CODING project names (comma-separated, when migrate-type=project)"
|
|
178
|
+
echo " --source-ak HuaweiCloud AK (when source-platform=huaweicloud)"
|
|
179
|
+
echo " --source-sk HuaweiCloud SK (when source-platform=huaweicloud)"
|
|
180
|
+
echo " --source-region HuaweiCloud region (default: cn-north-4)"
|
|
181
|
+
echo " --source-organizationid Aliyun organization ID"
|
|
182
|
+
echo " --source-username Common platform username"
|
|
183
|
+
echo " --source-password Common platform password"
|
|
184
|
+
echo " --source-group CNB source group (when migrating from CNB to CNB)"
|
|
185
|
+
echo " --cnb-url CNB URL (default: https://cnb.cool)"
|
|
186
|
+
echo " --migrate-type Migration type: team/project/repo (default: team)"
|
|
187
|
+
echo " --concurrency Concurrent migration count (default: 5, max: 10)"
|
|
188
|
+
echo " --force-push Force push to CNB (true/false, default: false) ⚠️ DANGEROUS"
|
|
189
|
+
echo " --skip-exists Skip existing repos on CNB (true/false, default: false)"
|
|
190
|
+
echo " --lfs-migrate Use LFS migrate for large files (true/false, default: true)"
|
|
191
|
+
echo " --rebase Use git rebase for sync (true/false, default: false) ⚠️ DANGEROUS"
|
|
192
|
+
echo " --allow-incomplete-push Allow incomplete LFS push (true/false, default: false) ⚠️ DANGEROUS"
|
|
193
|
+
echo " --log-level Log level: debug/info/warn/error (default: info)"
|
|
194
|
+
echo " --allow-select-repos Allow selecting specific repos (true/false, default: false)"
|
|
195
|
+
echo " --download-only Only download repos, don't push to CNB (true/false, default: false)"
|
|
196
|
+
echo " --workspace Custom workspace directory (default: \$HOME/code-import-workspace)"
|
|
197
|
+
echo ""
|
|
198
|
+
echo "Examples:"
|
|
199
|
+
echo " # Migrate all repos from CODING"
|
|
200
|
+
echo " $0 --source-platform coding --source-token xxx --cnb-org myorg --cnb-token xxx"
|
|
201
|
+
echo ""
|
|
202
|
+
echo " # Migrate specific GitHub repos"
|
|
203
|
+
echo " $0 --source-platform github --source-token xxx --cnb-org myorg --cnb-token xxx --source-repo 'user/repo1,user/repo2'"
|
|
204
|
+
echo ""
|
|
205
|
+
echo " # Migrate from HuaweiCloud"
|
|
206
|
+
echo " $0 --source-platform huaweicloud --source-token xxx --source-ak xxx --source-sk xxx --source-region cn-north-4 --cnb-org myorg --cnb-token xxx"
|
|
207
|
+
exit 0
|
|
208
|
+
;;
|
|
209
|
+
*)
|
|
210
|
+
log_error "Unknown option: $1"
|
|
211
|
+
exit 1
|
|
212
|
+
;;
|
|
213
|
+
esac
|
|
214
|
+
done
|
|
215
|
+
|
|
216
|
+
# Validate required parameters
|
|
217
|
+
if [[ -z "$SOURCE_PLATFORM" ]]; then
|
|
218
|
+
log_error "Missing required parameter: --source-platform"
|
|
219
|
+
exit 1
|
|
220
|
+
fi
|
|
221
|
+
|
|
222
|
+
if [[ -z "$CNB_ROOT_ORGANIZATION" ]]; then
|
|
223
|
+
log_error "Missing required parameter: --cnb-org"
|
|
224
|
+
exit 1
|
|
225
|
+
fi
|
|
226
|
+
|
|
227
|
+
if [[ -z "$CNB_TOKEN" ]]; then
|
|
228
|
+
log_error "Missing required parameter: --cnb-token"
|
|
229
|
+
exit 1
|
|
230
|
+
fi
|
|
231
|
+
|
|
232
|
+
# 危险选项二次确认
|
|
233
|
+
DANGER_OPTIONS=()
|
|
234
|
+
[[ "$MIGRATE_FORCE_PUSH" == "true" ]] && DANGER_OPTIONS+=("强制推送 (force-push): 将强制覆盖 CNB 侧仓库历史")
|
|
235
|
+
[[ "$MIGRATE_REBASE" == "true" ]] && DANGER_OPTIONS+=("Rebase 模式 (rebase): 将使用 git rebase 同步,如遇冲突需人工解决")
|
|
236
|
+
[[ "$MIGRATE_ALLOW_INCOMPLETE_PUSH" == "true" ]] && DANGER_OPTIONS+=("不完整推送 (allow-incomplete-push): 可能忽略损坏的 LFS 文件,导致数据不完整")
|
|
237
|
+
|
|
238
|
+
if [[ ${#DANGER_OPTIONS[@]} -gt 0 ]]; then
|
|
239
|
+
log_warn "⚠️ 检测到以下危险选项:"
|
|
240
|
+
for opt in "${DANGER_OPTIONS[@]}"; do
|
|
241
|
+
echo -e "${YELLOW} - $opt${NC}"
|
|
242
|
+
done
|
|
243
|
+
echo ""
|
|
244
|
+
log_warn "⚠️ 这些操作可能导致数据丢失或损坏!"
|
|
245
|
+
echo ""
|
|
246
|
+
read -p "是否确认继续执行?(输入 yes 确认): " CONFIRM
|
|
247
|
+
if [[ "$CONFIRM" != "yes" ]]; then
|
|
248
|
+
log_error "用户取消执行"
|
|
249
|
+
exit 1
|
|
250
|
+
fi
|
|
251
|
+
log_info "用户已确认危险操作,继续执行..."
|
|
252
|
+
echo ""
|
|
253
|
+
fi
|
|
254
|
+
|
|
255
|
+
# Set default SOURCE_URL based on platform
|
|
256
|
+
if [[ -z "$SOURCE_URL" ]]; then
|
|
257
|
+
case $SOURCE_PLATFORM in
|
|
258
|
+
coding)
|
|
259
|
+
SOURCE_URL="https://e.coding.net"
|
|
260
|
+
;;
|
|
261
|
+
github)
|
|
262
|
+
SOURCE_URL="https://github.com"
|
|
263
|
+
;;
|
|
264
|
+
gitlab)
|
|
265
|
+
SOURCE_URL="https://gitlab.com"
|
|
266
|
+
;;
|
|
267
|
+
gitee)
|
|
268
|
+
SOURCE_URL="https://gitee.com"
|
|
269
|
+
;;
|
|
270
|
+
aliyun)
|
|
271
|
+
SOURCE_URL="https://codeup.aliyun.com"
|
|
272
|
+
;;
|
|
273
|
+
cnb)
|
|
274
|
+
SOURCE_URL="https://cnb.cool"
|
|
275
|
+
;;
|
|
276
|
+
gongfeng)
|
|
277
|
+
SOURCE_URL="https://git.woa.com"
|
|
278
|
+
;;
|
|
279
|
+
gitea)
|
|
280
|
+
# Gitea 通常是自建实例,需用户通过 --source-url 指定
|
|
281
|
+
log_error "Gitea requires --source-url to specify the instance URL"
|
|
282
|
+
exit 1
|
|
283
|
+
;;
|
|
284
|
+
huaweicloud)
|
|
285
|
+
SOURCE_URL="https://codearts.devcloud.${SOURCE_REGION}.huaweicloud.com"
|
|
286
|
+
;;
|
|
287
|
+
common)
|
|
288
|
+
SOURCE_URL="https://common.com"
|
|
289
|
+
;;
|
|
290
|
+
*)
|
|
291
|
+
log_error "Unknown source platform: $SOURCE_PLATFORM"
|
|
292
|
+
exit 1
|
|
293
|
+
;;
|
|
294
|
+
esac
|
|
295
|
+
fi
|
|
296
|
+
|
|
297
|
+
# Validate HuaweiCloud parameters
|
|
298
|
+
if [[ "$SOURCE_PLATFORM" == "huaweicloud" ]]; then
|
|
299
|
+
if [[ -z "$SOURCE_AK" || -z "$SOURCE_SK" ]]; then
|
|
300
|
+
log_error "HuaweiCloud requires --source-ak and --source-sk"
|
|
301
|
+
exit 1
|
|
302
|
+
fi
|
|
303
|
+
fi
|
|
304
|
+
|
|
305
|
+
# Validate Aliyun parameters
|
|
306
|
+
if [[ "$SOURCE_PLATFORM" == "aliyun" ]]; then
|
|
307
|
+
if [[ -z "$SOURCE_ORGANIZATIONID" ]]; then
|
|
308
|
+
log_error "Aliyun requires --source-organizationid"
|
|
309
|
+
exit 1
|
|
310
|
+
fi
|
|
311
|
+
fi
|
|
312
|
+
|
|
313
|
+
# Build docker run command
|
|
314
|
+
DOCKER_CMD="docker run --rm"
|
|
315
|
+
|
|
316
|
+
# Add environment variables
|
|
317
|
+
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_PLATFORM=\"$SOURCE_PLATFORM\""
|
|
318
|
+
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_URL=\"$SOURCE_URL\""
|
|
319
|
+
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_TOKEN=\"$SOURCE_TOKEN\""
|
|
320
|
+
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_CNB_ROOT_ORGANIZATION=\"$CNB_ROOT_ORGANIZATION\""
|
|
321
|
+
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_CNB_TOKEN=\"$CNB_TOKEN\""
|
|
322
|
+
|
|
323
|
+
# Optional parameters
|
|
324
|
+
[[ -n "$SOURCE_REPO" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_REPO=\"$SOURCE_REPO\""
|
|
325
|
+
[[ -n "$SOURCE_PROJECT" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_PROJECT=\"$SOURCE_PROJECT\""
|
|
326
|
+
[[ -n "$SOURCE_AK" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_AK=\"$SOURCE_AK\""
|
|
327
|
+
[[ -n "$SOURCE_SK" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_SK=\"$SOURCE_SK\""
|
|
328
|
+
[[ -n "$SOURCE_REGION" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_REGION=\"$SOURCE_REGION\""
|
|
329
|
+
[[ -n "$SOURCE_ORGANIZATIONID" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_ORGANIZATIONID=\"$SOURCE_ORGANIZATIONID\""
|
|
330
|
+
[[ -n "$SOURCE_USERNAME" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_USERNAME=\"$SOURCE_USERNAME\""
|
|
331
|
+
[[ -n "$SOURCE_PASSWORD" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_PASSWORD=\"$SOURCE_PASSWORD\""
|
|
332
|
+
[[ -n "$SOURCE_GROUP" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_GROUP=\"$SOURCE_GROUP\""
|
|
333
|
+
[[ -n "$CNB_URL" && "$CNB_URL" != "https://cnb.cool" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_CNB_URL=\"$CNB_URL\""
|
|
334
|
+
[[ -n "$MIGRATE_TYPE" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_TYPE=\"$MIGRATE_TYPE\""
|
|
335
|
+
[[ -n "$MIGRATE_CONCURRENCY" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_CONCURRENCY=\"$MIGRATE_CONCURRENCY\""
|
|
336
|
+
[[ "$MIGRATE_FORCE_PUSH" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_FORCE_PUSH=\"true\""
|
|
337
|
+
[[ "$MIGRATE_REBASE" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_REBASE=\"true\""
|
|
338
|
+
[[ "$MIGRATE_ALLOW_INCOMPLETE_PUSH" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_ALLOW_INCOMPLETE_PUSH=\"true\""
|
|
339
|
+
[[ "$MIGRATE_SKIP_EXISTS_REPO" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_SKIP_EXISTS_REPO=\"true\""
|
|
340
|
+
[[ "$MIGRATE_USE_LFS_MIGRATE" == "false" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_USE_LFS_MIGRATE=\"false\""
|
|
341
|
+
[[ -n "$MIGRATE_LOG_LEVEL" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_LOG_LEVEL=\"$MIGRATE_LOG_LEVEL\""
|
|
342
|
+
[[ "$MIGRATE_ALLOW_SELECT_REPOS" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_ALLOW_SELECT_REPOS=\"true\""
|
|
343
|
+
[[ "$MIGRATE_DOWNLOAD_ONLY" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_DOWNLOAD_ONLY=\"true\""
|
|
344
|
+
|
|
345
|
+
# Add volume mount
|
|
346
|
+
DOCKER_CMD="$DOCKER_CMD -v \$(pwd):\$(pwd) -w \$(pwd)"
|
|
347
|
+
|
|
348
|
+
# Add image (使用 CNB 镜像源,更稳定)
|
|
349
|
+
DOCKER_CMD="$DOCKER_CMD docker.cnb.cool/cnb/plugins/cnbcool/code-import:latest"
|
|
350
|
+
|
|
351
|
+
# 设置工作目录
|
|
352
|
+
if [[ -z "$WORKSPACE" ]]; then
|
|
353
|
+
WORKSPACE="$DEFAULT_WORKSPACE"
|
|
354
|
+
fi
|
|
355
|
+
|
|
356
|
+
# 创建工作目录
|
|
357
|
+
mkdir -p "$WORKSPACE"
|
|
358
|
+
cd "$WORKSPACE"
|
|
359
|
+
|
|
360
|
+
log_info "Starting migration..."
|
|
361
|
+
log_info "Source Platform: $SOURCE_PLATFORM"
|
|
362
|
+
log_info "Source URL: $SOURCE_URL"
|
|
363
|
+
log_info "CNB Organization: $CNB_ROOT_ORGANIZATION"
|
|
364
|
+
log_info "Concurrency: $MIGRATE_CONCURRENCY"
|
|
365
|
+
log_info "Workspace: $WORKSPACE"
|
|
366
|
+
echo ""
|
|
367
|
+
|
|
368
|
+
# Execute docker command
|
|
369
|
+
eval $DOCKER_CMD
|
|
370
|
+
|
|
371
|
+
log_info "Migration completed!"
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cnb-skill
|
|
3
|
+
description: 提供与CNB(Cloud Native Build)OpenAPI的完整交互能力,支持项目、组织、代码仓库、Issue、PR、合并请求、流水线,制品库等核心功能的增删改查操作。适用于开发协作、代码管理和CI/CD流程管理场景。关键词:CNB、云原生构建、组织、代码仓库、Issue、PR、合并请求、流水线、制品库,查询、新增、修改、删除、评论、合并、审批。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# cnb-skill
|
|
7
|
+
|
|
8
|
+
## 概括
|
|
9
|
+
|
|
10
|
+
本Skill提供完整的CNB的Openapi完整交互能力,用户可以使用此skills对CNB上的资源进行操作。
|
|
11
|
+
|
|
12
|
+
## 适用场景
|
|
13
|
+
|
|
14
|
+
当用户描述对CNB上的资源进行操作时,应该使用此skills进行操作。例如:
|
|
15
|
+
- 查询cnb上某个仓库的Issue列表
|
|
16
|
+
- 对cnb上的某个仓库的Issue或者pr进行评论。
|
|
17
|
+
- ...
|
|
18
|
+
|
|
19
|
+
## 核心原则
|
|
20
|
+
|
|
21
|
+
### 准确性原则
|
|
22
|
+
- **CRITICAL**: 必须先执行 `cnb --help` 获取最新的使用方式
|
|
23
|
+
- **CRITICAL**: 必须通过使用 `cnb`命令行工具,按照帮助信息执行操作
|
|
24
|
+
- **CRITICAL**: 禁止推测或臆断使用方式,严格基于脚本返回的帮助信息进行操作
|
|
25
|
+
- **CRITICAL**: 不要询问用户"是否需要我执行",直接根据帮助信息执行脚本,并返回结果
|
|
26
|
+
|
|
27
|
+
## 脚本使用指南
|
|
28
|
+
|
|
29
|
+
### 第一步:获取帮助信息
|
|
30
|
+
在执行任何任务前,必须先运行以下命令获取最新的使用方式:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
cnb --help
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
这将显示所有可用的模块及其工具列表。
|
|
37
|
+
|
|
38
|
+
### 第二步:查看具体模块帮助
|
|
39
|
+
使用 `--module` 参数查看特定模块的详细帮助:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
cnb --module <模块名> -help
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 第三步:查看工具详细使用
|
|
46
|
+
使用 `--module` 和 `--tool` 参数查看工具的详细参数说明:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
cnb --module <模块名> --tool <工具名> --help
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 第四步:执行工具
|
|
53
|
+
根据第三步获取的参数说明,执行工具:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
cnb --module <模块名> --tool <工具名> --path '{"参数": "值"}' --query '{"参数": "值"}' --data '{"参数": "值"}'
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**参数说明:**
|
|
60
|
+
- `--module`: 必须参数,模块名称
|
|
61
|
+
- `--tool`: 必须参数,工具名称
|
|
62
|
+
- `--path`: 可选参数,路径参数,JSON字符串格式
|
|
63
|
+
- `--query`: 可选参数,查询参数,JSON字符串格式
|
|
64
|
+
- `--data`: 可选参数,数据参数,JSON字符串格式
|
|
65
|
+
- `--help`: 可选参数,显示帮助文档
|
|
66
|
+
|
|
67
|
+
### 第五步:处理结果
|
|
68
|
+
|
|
69
|
+
每一个工具调用都会返回一个标准的JSON结构:
|
|
70
|
+
- status: 一个http状态码
|
|
71
|
+
- trace: 本次调用的traceID
|
|
72
|
+
- header: 本次调用的header
|
|
73
|
+
- data: 本次调用的openapi返回的实体内容
|
|
74
|
+
|
|
75
|
+
#### header说明
|
|
76
|
+
当请求列表时,会在header中包含以下字段说明列表的情况:
|
|
77
|
+
- `x-cnb-page`: 当前页数
|
|
78
|
+
- `x-cnb-page-size`: 每页条数
|
|
79
|
+
- `x-cnb-total`: 总条数
|
|
80
|
+
|
|
81
|
+
从中可以获取到列表的总条数,以及当前页数和每页条数,避免循环请求。
|
|
82
|
+
|
|
83
|
+
#### status说明
|
|
84
|
+
API 返回标准的 JSON 格式响应。请根据 HTTP 状态码判断请求是否成功:
|
|
85
|
+
|
|
86
|
+
- 200: 请求成功
|
|
87
|
+
- 400: 请求参数错误
|
|
88
|
+
- 401: 未授权
|
|
89
|
+
- 403: 禁止访问
|
|
90
|
+
- 404: 资源不存在
|
|
91
|
+
- 500: 服务器内部错误
|
|
92
|
+
|
|
93
|
+
当本地调用返回的 `status` 在 200 ~ 299 之间,只需要返回 `data` 内容给用户。只有当 `status >= 300` 时,才将 `status` 和 `trace` 返回给用户。
|
|
94
|
+
|
|
95
|
+
#### 资源处理
|
|
96
|
+
|
|
97
|
+
当尝试下载图片进行图片分析时,遇到图片下载异常时,请使用以下工具进行图片下载!
|
|
98
|
+
```bash
|
|
99
|
+
node scripts/core/index.js assets get-imgs --help
|
|
100
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
target: 'https://api.cnb.cool/swagger.json',
|
|
3
|
+
skillsOutputDir: `./skills/cnb-skill`,
|
|
4
|
+
// skillsDev: true,
|
|
5
|
+
skillConfig: {
|
|
6
|
+
fetchConfig: {
|
|
7
|
+
responseConverter: {
|
|
8
|
+
'get@/{repo}/-/issues/{number}': {
|
|
9
|
+
converter: 'convert-link',
|
|
10
|
+
handler: (handler, fetchOriginParams, data) => {
|
|
11
|
+
data.body = handler(data.body, fetchOriginParams.path.repo);
|
|
12
|
+
return data
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
'get@/{repo}/-/issues/{number}/comments/{comment_id}': {
|
|
16
|
+
converter: 'convert-link',
|
|
17
|
+
handler: (handler, fetchOriginParams, data) => {
|
|
18
|
+
data.body = handler(data.body, fetchOriginParams.path.repo);
|
|
19
|
+
return data
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
'get@/{repo}/-/issues/{number}/comments': {
|
|
23
|
+
converter: 'convert-link',
|
|
24
|
+
handler: (handler, fetchOriginParams, data) => {
|
|
25
|
+
for (let i = 0; i < data.length; i++) {
|
|
26
|
+
data[i].body = handler(data[i].body, fetchOriginParams.path.repo);
|
|
27
|
+
}
|
|
28
|
+
return data
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
'get@/{repo}/-/pulls/{number}': {
|
|
32
|
+
converter: 'convert-link',
|
|
33
|
+
handler: (handler, fetchOriginParams, data) => {
|
|
34
|
+
data.body = handler(data.body, fetchOriginParams.path.repo);
|
|
35
|
+
return data
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
'get@/{repo}/-/pulls/{number}/comments/{comment_id}': {
|
|
39
|
+
converter: 'convert-link',
|
|
40
|
+
handler: (handler, fetchOriginParams, data) => {
|
|
41
|
+
data.body = handler(data.body, fetchOriginParams.path.repo);
|
|
42
|
+
return data
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
'get@/{repo}/-/pulls/{number}/comments': {
|
|
46
|
+
converter: 'convert-link',
|
|
47
|
+
handler: (handler, fetchOriginParams, data) => {
|
|
48
|
+
for (let i = 0; i < data.length; i++) {
|
|
49
|
+
data[i].body = handler(data[i].body, fetchOriginParams.path.repo);
|
|
50
|
+
}
|
|
51
|
+
return data
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = convertLink;
|
|
7
|
+
/**
|
|
8
|
+
* 把文本里的相对路径转换为绝对路径
|
|
9
|
+
* 与 codebuddy/skills/cnb-text-relative-path-converter/scripts/convertLink.js 逻辑一致
|
|
10
|
+
*
|
|
11
|
+
* @param {String} text 待转换的文本
|
|
12
|
+
* @param {String} repoSlug 仓库路径
|
|
13
|
+
* @param {String} branchOrSha 可选,分支或SHA
|
|
14
|
+
* @returns {String}
|
|
15
|
+
*/
|
|
16
|
+
function convertLink(text, repoSlug, branchOrSha) {
|
|
17
|
+
// 查询所有代码块的位置
|
|
18
|
+
let codeBlockPositions = [];
|
|
19
|
+
let index = 0;
|
|
20
|
+
while (index !== -1) {
|
|
21
|
+
const nextIndex = text.indexOf('```', index);
|
|
22
|
+
if (nextIndex === -1) break;
|
|
23
|
+
codeBlockPositions.push(nextIndex);
|
|
24
|
+
index = nextIndex + 3; // 跳过已匹配的三个反引号
|
|
25
|
+
}
|
|
26
|
+
if (codeBlockPositions.length % 2 !== 0) {
|
|
27
|
+
codeBlockPositions = codeBlockPositions.slice(0, codeBlockPositions.length - 1);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// 查询所有行内代码块的位置
|
|
31
|
+
let inlineCodeBlockPositions = [];
|
|
32
|
+
index = 0;
|
|
33
|
+
while (index < text.length) {
|
|
34
|
+
const nextIndex = text.indexOf('`', index);
|
|
35
|
+
if (nextIndex === -1) break;
|
|
36
|
+
// 检查是否是单独的反引号(不是代码块的一部分)
|
|
37
|
+
if ((nextIndex === 0 || text.charAt(nextIndex - 1) !== '`') && (nextIndex === text.length - 1 || text.charAt(nextIndex + 1) !== '`')) {
|
|
38
|
+
inlineCodeBlockPositions.push(nextIndex);
|
|
39
|
+
}
|
|
40
|
+
index = nextIndex + 1;
|
|
41
|
+
}
|
|
42
|
+
if (inlineCodeBlockPositions.length % 2 !== 0) {
|
|
43
|
+
inlineCodeBlockPositions = inlineCodeBlockPositions.slice(0, inlineCodeBlockPositions.length - 1);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// 整理起始和结束位置
|
|
47
|
+
const excludedRanges = [...codeBlockPositions, ...inlineCodeBlockPositions].reduce((result, item, index) => {
|
|
48
|
+
if (index % 2 === 0) {
|
|
49
|
+
return result.concat([[item]]);
|
|
50
|
+
}
|
|
51
|
+
result[result.length - 1].push(item);
|
|
52
|
+
return result;
|
|
53
|
+
}, []);
|
|
54
|
+
|
|
55
|
+
// Helper function to check if an index is within excluded ranges
|
|
56
|
+
const isInExcludedRange = index => {
|
|
57
|
+
return excludedRanges.some(([start, end]) => index >= start && index < end);
|
|
58
|
+
};
|
|
59
|
+
let match;
|
|
60
|
+
|
|
61
|
+
// Collect all replacements with their positions
|
|
62
|
+
const replacements = [];
|
|
63
|
+
|
|
64
|
+
// Match markdown links and images: [text](url) and 
|
|
65
|
+
const markdownLinkRegex = /!?\[([^\]]+)\]\(([^)]+)\)/g;
|
|
66
|
+
while ((match = markdownLinkRegex.exec(text)) !== null) {
|
|
67
|
+
if (!isInExcludedRange(match.index)) {
|
|
68
|
+
// Calculate URL position: match.index + length of "![" + match[1] + "]("
|
|
69
|
+
const prefixLength = (match[0].startsWith('!') ? 1 : 0) + 1 + match[1].length + 2;
|
|
70
|
+
const urlStart = match.index + prefixLength;
|
|
71
|
+
const urlEnd = urlStart + match[2].length;
|
|
72
|
+
const newUrl = normaliseLink(match[2], repoSlug, branchOrSha);
|
|
73
|
+
if (newUrl !== match[2]) {
|
|
74
|
+
replacements.push({
|
|
75
|
+
start: urlStart,
|
|
76
|
+
end: urlEnd,
|
|
77
|
+
newUrl
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Match HTML tags: <img src="..."> and <a href="...">
|
|
84
|
+
const htmlTagRegex = /\s(src|href)=["']([^"']+)["']/gi;
|
|
85
|
+
while ((match = htmlTagRegex.exec(text)) !== null) {
|
|
86
|
+
if (!isInExcludedRange(match.index)) {
|
|
87
|
+
const urlStart = match.index + match[0].indexOf(match[2]);
|
|
88
|
+
const urlEnd = urlStart + match[2].length;
|
|
89
|
+
const newUrl = normaliseLink(match[2], repoSlug, branchOrSha);
|
|
90
|
+
if (newUrl !== match[2]) {
|
|
91
|
+
replacements.push({
|
|
92
|
+
start: urlStart,
|
|
93
|
+
end: urlEnd,
|
|
94
|
+
newUrl
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Sort replacements by start position in descending order
|
|
101
|
+
replacements.sort((a, b) => b.start - a.start);
|
|
102
|
+
|
|
103
|
+
// Apply replacements from end to start to maintain correct indices
|
|
104
|
+
let result = text;
|
|
105
|
+
for (const {
|
|
106
|
+
start,
|
|
107
|
+
end,
|
|
108
|
+
newUrl
|
|
109
|
+
} of replacements) {
|
|
110
|
+
result = result.substring(0, start) + newUrl + result.substring(end);
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* 相对路径转换为绝对路径
|
|
117
|
+
* 与 codebuddy/skills/cnb-text-relative-path-converter/scripts/convertLink.js 逻辑一致
|
|
118
|
+
*
|
|
119
|
+
* @param {String} link 待转换的链接
|
|
120
|
+
* @param {String} repoSlug 仓库路径
|
|
121
|
+
* @param {String} branchOrSha 分支或SHA,默认为 HEAD
|
|
122
|
+
* @returns {String}
|
|
123
|
+
*/
|
|
124
|
+
function normaliseLink(link, repoSlug, branchOrSha = 'HEAD') {
|
|
125
|
+
const baseURL = `${process.env.CNB_WEB_ENDPOINT}/${repoSlug}`;
|
|
126
|
+
if (link.startsWith('/-/')) {
|
|
127
|
+
return `${baseURL}${link}`;
|
|
128
|
+
}
|
|
129
|
+
if (link.indexOf('/-/') === -1 && (link.startsWith('../') || link.startsWith('./') || link.startsWith('/') && !link.startsWith('//'))) {
|
|
130
|
+
let chunks = link.split('/');
|
|
131
|
+
// 过滤掉空字符串和 . .. 这些无效路径
|
|
132
|
+
chunks = chunks.filter(chunk => !!chunk && chunk !== '.' && chunk !== '..');
|
|
133
|
+
if (chunks.length === 0) {
|
|
134
|
+
return link;
|
|
135
|
+
}
|
|
136
|
+
chunks.unshift(branchOrSha);
|
|
137
|
+
return `${baseURL}/-/git/raw/${chunks.join('/')}`;
|
|
138
|
+
}
|
|
139
|
+
return link;
|
|
140
|
+
}
|