@mokoconsulting/mcp-windows 3.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.
Files changed (184) hide show
  1. package/.gitattributes +94 -0
  2. package/.gitmessage +9 -0
  3. package/.mokogitea/ISSUE_TEMPLATE/adr.md +110 -0
  4. package/.mokogitea/ISSUE_TEMPLATE/bug_report.md +48 -0
  5. package/.mokogitea/ISSUE_TEMPLATE/config.yml +18 -0
  6. package/.mokogitea/ISSUE_TEMPLATE/documentation.md +52 -0
  7. package/.mokogitea/ISSUE_TEMPLATE/feature_request.md +51 -0
  8. package/.mokogitea/ISSUE_TEMPLATE/mcp_api_integration.md +48 -0
  9. package/.mokogitea/ISSUE_TEMPLATE/mcp_connection_issue.md +67 -0
  10. package/.mokogitea/ISSUE_TEMPLATE/mcp_tool_request.md +49 -0
  11. package/.mokogitea/ISSUE_TEMPLATE/question.md +82 -0
  12. package/.mokogitea/ISSUE_TEMPLATE/rfc.md +126 -0
  13. package/.mokogitea/ISSUE_TEMPLATE/security.md +51 -0
  14. package/.mokogitea/ISSUE_TEMPLATE/version.md +24 -0
  15. package/.mokogitea/branch-protection.yml +251 -0
  16. package/.mokogitea/workflows/auto-assign.yml +76 -0
  17. package/.mokogitea/workflows/auto-bump.yml +66 -0
  18. package/.mokogitea/workflows/auto-dev-issue.yml +207 -0
  19. package/.mokogitea/workflows/auto-release.yml +421 -0
  20. package/.mokogitea/workflows/branch-cleanup.yml +48 -0
  21. package/.mokogitea/workflows/cascade-dev.yml +10 -0
  22. package/.mokogitea/workflows/changelog-validation.yml +101 -0
  23. package/.mokogitea/workflows/ci-generic.yml +191 -0
  24. package/.mokogitea/workflows/cleanup.yml +87 -0
  25. package/.mokogitea/workflows/codeql-analysis.yml +115 -0
  26. package/.mokogitea/workflows/copilot-agent.yml +44 -0
  27. package/.mokogitea/workflows/deploy-manual.yml +126 -0
  28. package/.mokogitea/workflows/enterprise-firewall-setup.yml +758 -0
  29. package/.mokogitea/workflows/gitleaks.yml +92 -0
  30. package/.mokogitea/workflows/issue-branch.yml +73 -0
  31. package/.mokogitea/workflows/mcp-auto-release.yml +278 -0
  32. package/.mokogitea/workflows/mcp-build-test.yml +65 -0
  33. package/.mokogitea/workflows/mcp-sdk-check.yml +109 -0
  34. package/.mokogitea/workflows/mcp-tool-inventory.yml +61 -0
  35. package/.mokogitea/workflows/notify.yml +70 -0
  36. package/.mokogitea/workflows/npm-publish.yml +113 -0
  37. package/.mokogitea/workflows/pr-check.yml +534 -0
  38. package/.mokogitea/workflows/pre-release.yml +252 -0
  39. package/.mokogitea/workflows/rc-revert.yml +66 -0
  40. package/.mokogitea/workflows/repo-health.yml +712 -0
  41. package/.mokogitea/workflows/repository-cleanup.yml +525 -0
  42. package/.mokogitea/workflows/security-audit.yml +82 -0
  43. package/.mokogitea/workflows/standards-compliance.yml +2614 -0
  44. package/.mokogitea/workflows/sync-version-on-merge.yml +133 -0
  45. package/.mokogitea/workflows/update-server.yml +312 -0
  46. package/.mokogitea/workflows/workflow-sync-trigger.yml +73 -0
  47. package/CHANGELOG.md +130 -0
  48. package/CLAUDE.md +49 -0
  49. package/CONTRIBUTING.md +161 -0
  50. package/ISSUES.md +601 -0
  51. package/Makefile +70 -0
  52. package/README.md +80 -0
  53. package/automation/ci-issue-reporter.sh +237 -0
  54. package/config.example.json +18 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.js +111 -0
  57. package/dist/shell.d.ts +50 -0
  58. package/dist/shell.js +209 -0
  59. package/dist/tools/apps.d.ts +3 -0
  60. package/dist/tools/apps.js +63 -0
  61. package/dist/tools/audio.d.ts +3 -0
  62. package/dist/tools/audio.js +142 -0
  63. package/dist/tools/audio_apps.d.ts +3 -0
  64. package/dist/tools/audio_apps.js +86 -0
  65. package/dist/tools/automation.d.ts +3 -0
  66. package/dist/tools/automation.js +261 -0
  67. package/dist/tools/bluetooth.d.ts +3 -0
  68. package/dist/tools/bluetooth.js +96 -0
  69. package/dist/tools/clipboard.d.ts +3 -0
  70. package/dist/tools/clipboard.js +118 -0
  71. package/dist/tools/config.d.ts +3 -0
  72. package/dist/tools/config.js +85 -0
  73. package/dist/tools/dialog.d.ts +3 -0
  74. package/dist/tools/dialog.js +72 -0
  75. package/dist/tools/display.d.ts +3 -0
  76. package/dist/tools/display.js +256 -0
  77. package/dist/tools/drives.d.ts +3 -0
  78. package/dist/tools/drives.js +98 -0
  79. package/dist/tools/environment.d.ts +3 -0
  80. package/dist/tools/environment.js +129 -0
  81. package/dist/tools/execute.d.ts +3 -0
  82. package/dist/tools/execute.js +28 -0
  83. package/dist/tools/filesystem.d.ts +3 -0
  84. package/dist/tools/filesystem.js +230 -0
  85. package/dist/tools/firewall.d.ts +3 -0
  86. package/dist/tools/firewall.js +108 -0
  87. package/dist/tools/hosts.d.ts +3 -0
  88. package/dist/tools/hosts.js +119 -0
  89. package/dist/tools/maintenance.d.ts +3 -0
  90. package/dist/tools/maintenance.js +236 -0
  91. package/dist/tools/netstat.d.ts +3 -0
  92. package/dist/tools/netstat.js +56 -0
  93. package/dist/tools/network.d.ts +3 -0
  94. package/dist/tools/network.js +70 -0
  95. package/dist/tools/notification.d.ts +3 -0
  96. package/dist/tools/notification.js +41 -0
  97. package/dist/tools/power.d.ts +3 -0
  98. package/dist/tools/power.js +104 -0
  99. package/dist/tools/printer.d.ts +3 -0
  100. package/dist/tools/printer.js +97 -0
  101. package/dist/tools/process.d.ts +3 -0
  102. package/dist/tools/process.js +54 -0
  103. package/dist/tools/process_kill.d.ts +3 -0
  104. package/dist/tools/process_kill.js +48 -0
  105. package/dist/tools/recycle_bin.d.ts +3 -0
  106. package/dist/tools/recycle_bin.js +108 -0
  107. package/dist/tools/registry.d.ts +3 -0
  108. package/dist/tools/registry.js +136 -0
  109. package/dist/tools/scheduler.d.ts +3 -0
  110. package/dist/tools/scheduler.js +116 -0
  111. package/dist/tools/service.d.ts +3 -0
  112. package/dist/tools/service.js +79 -0
  113. package/dist/tools/startup.d.ts +3 -0
  114. package/dist/tools/startup.js +159 -0
  115. package/dist/tools/storage.d.ts +3 -0
  116. package/dist/tools/storage.js +129 -0
  117. package/dist/tools/system.d.ts +3 -0
  118. package/dist/tools/system.js +84 -0
  119. package/dist/tools/system_mgmt.d.ts +3 -0
  120. package/dist/tools/system_mgmt.js +174 -0
  121. package/dist/tools/terminal.d.ts +3 -0
  122. package/dist/tools/terminal.js +80 -0
  123. package/dist/tools/theme.d.ts +3 -0
  124. package/dist/tools/theme.js +165 -0
  125. package/dist/tools/usb.d.ts +3 -0
  126. package/dist/tools/usb.js +52 -0
  127. package/dist/tools/virtual_desktop.d.ts +3 -0
  128. package/dist/tools/virtual_desktop.js +112 -0
  129. package/dist/tools/wifi.d.ts +3 -0
  130. package/dist/tools/wifi.js +136 -0
  131. package/dist/tools/window.d.ts +3 -0
  132. package/dist/tools/window.js +189 -0
  133. package/dist/tools/winget.d.ts +3 -0
  134. package/dist/tools/winget.js +79 -0
  135. package/dist/tools/wsl.d.ts +3 -0
  136. package/dist/tools/wsl.js +99 -0
  137. package/docs/API.md +63 -0
  138. package/docs/ARCHITECTURE.md +73 -0
  139. package/docs/INSTALLATION.md +102 -0
  140. package/docs/index.md +12 -0
  141. package/package.json +35 -0
  142. package/scripts/setup.mjs +123 -0
  143. package/src/index.ts +125 -0
  144. package/src/shell.ts +253 -0
  145. package/src/tools/apps.ts +76 -0
  146. package/src/tools/audio.ts +161 -0
  147. package/src/tools/audio_apps.ts +98 -0
  148. package/src/tools/automation.ts +297 -0
  149. package/src/tools/bluetooth.ts +114 -0
  150. package/src/tools/clipboard.ts +138 -0
  151. package/src/tools/config.ts +105 -0
  152. package/src/tools/dialog.ts +87 -0
  153. package/src/tools/display.ts +285 -0
  154. package/src/tools/drives.ts +124 -0
  155. package/src/tools/environment.ts +146 -0
  156. package/src/tools/execute.ts +35 -0
  157. package/src/tools/filesystem.ts +273 -0
  158. package/src/tools/firewall.ts +125 -0
  159. package/src/tools/hosts.ts +135 -0
  160. package/src/tools/maintenance.ts +299 -0
  161. package/src/tools/netstat.ts +72 -0
  162. package/src/tools/network.ts +84 -0
  163. package/src/tools/notification.ts +50 -0
  164. package/src/tools/power.ts +123 -0
  165. package/src/tools/printer.ts +114 -0
  166. package/src/tools/process.ts +80 -0
  167. package/src/tools/process_kill.ts +57 -0
  168. package/src/tools/recycle_bin.ts +126 -0
  169. package/src/tools/registry.ts +165 -0
  170. package/src/tools/scheduler.ts +140 -0
  171. package/src/tools/service.ts +102 -0
  172. package/src/tools/startup.ts +180 -0
  173. package/src/tools/storage.ts +141 -0
  174. package/src/tools/system.ts +99 -0
  175. package/src/tools/system_mgmt.ts +190 -0
  176. package/src/tools/terminal.ts +117 -0
  177. package/src/tools/theme.ts +205 -0
  178. package/src/tools/usb.ts +65 -0
  179. package/src/tools/virtual_desktop.ts +122 -0
  180. package/src/tools/wifi.ts +157 -0
  181. package/src/tools/window.ts +211 -0
  182. package/src/tools/winget.ts +100 -0
  183. package/src/tools/wsl.ts +112 -0
  184. package/tsconfig.json +19 -0
@@ -0,0 +1,252 @@
1
+ # Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
2
+ #
3
+ # SPDX-License-Identifier: GPL-3.0-or-later
4
+ #
5
+ # FILE INFORMATION
6
+ # DEFGROUP: Gitea.Workflow
7
+ # INGROUP: mokocli.Release
8
+ # REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
9
+ # PATH: /templates/workflows/universal/pre-release.yml.template
10
+ # VERSION: 05.01.00
11
+ # BRIEF: Auto pre-release on push to dev/alpha/beta/rc branches
12
+
13
+ name: "Universal: Pre-Release"
14
+
15
+ on:
16
+ push:
17
+ branches:
18
+ - dev
19
+ - 'fix/**'
20
+ - 'patch/**'
21
+ - 'hotfix/**'
22
+ - 'bugfix/**'
23
+ - 'chore/**'
24
+ - alpha
25
+ - beta
26
+ - rc
27
+ workflow_dispatch:
28
+ inputs:
29
+ stability:
30
+ description: 'Pre-release channel'
31
+ required: true
32
+ type: choice
33
+ options:
34
+ - development
35
+ - alpha
36
+ - beta
37
+ - release-candidate
38
+
39
+ permissions:
40
+ contents: write
41
+
42
+ env:
43
+ GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }}
44
+ GITEA_ORG: ${{ vars.GITEA_ORG || github.repository_owner }}
45
+ GITEA_REPO: ${{ vars.GITEA_REPO || github.event.repository.name }}
46
+
47
+ jobs:
48
+ build:
49
+ name: "Build Pre-Release (${{ inputs.stability || github.ref_name }})"
50
+ runs-on: release
51
+ if: >-
52
+ github.event_name == 'workflow_dispatch' ||
53
+ github.event_name == 'push'
54
+
55
+ steps:
56
+ - name: Checkout
57
+ uses: actions/checkout@v4
58
+ with:
59
+ fetch-depth: 0
60
+ token: ${{ secrets.MOKOGITEA_TOKEN }}
61
+ ref: ${{ github.ref_name }}
62
+
63
+ - name: Setup mokocli tools
64
+ env:
65
+ MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }}
66
+ MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting
67
+ run: |
68
+ # Use pre-installed /opt/mokocli if available (updated by cron every 6h)
69
+ if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/cli/manifest_element.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then
70
+ echo Using pre-installed /opt/mokocli
71
+ echo MOKO_CLI=/opt/mokocli/cli >> $GITHUB_ENV
72
+ else
73
+ echo Falling back to fresh clone
74
+ if ! command -v composer > /dev/null 2>&1; then
75
+ sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer > /dev/null 2>&1
76
+ fi
77
+ rm -rf /tmp/mokocli
78
+ CLONE_URL=https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/mokocli.git
79
+ git clone --depth 1 --branch main --quiet $CLONE_URL /tmp/mokocli
80
+ cd /tmp/mokocli && composer install --no-dev --no-interaction --quiet
81
+ echo MOKO_CLI=/tmp/mokocli/cli >> $GITHUB_ENV
82
+ fi
83
+
84
+ - name: Detect platform
85
+ id: platform
86
+ run: |
87
+ # Auto-detect and update platform if not set in manifest
88
+ php ${MOKO_CLI}/platform_detect.php --path . --github-output 2>/dev/null || true
89
+ php ${MOKO_CLI}/manifest_read.php --path . --github-output
90
+
91
+ - name: Resolve metadata and bump version
92
+ id: meta
93
+ run: |
94
+ # Auto-detect stability from branch name on push, or use input on dispatch
95
+ if [ "${{ github.event_name }}" = "push" ]; then
96
+ case "${{ github.ref_name }}" in
97
+ rc) STABILITY="release-candidate" ;;
98
+ alpha) STABILITY="alpha" ;;
99
+ beta) STABILITY="beta" ;;
100
+ *) STABILITY="development" ;;
101
+ esac
102
+ else
103
+ STABILITY="${{ inputs.stability || 'development' }}"
104
+ fi
105
+
106
+ case "$STABILITY" in
107
+ development) SUFFIX="-dev"; TAG="development" ;;
108
+ alpha) SUFFIX="-alpha"; TAG="alpha" ;;
109
+ beta) SUFFIX="-beta"; TAG="beta" ;;
110
+ release-candidate) SUFFIX="-rc"; TAG="release-candidate" ;;
111
+ esac
112
+
113
+ # Bump version via CLI: patch for dev/alpha/beta, minor for RC
114
+ case "$STABILITY" in
115
+ release-candidate) BUMP="minor" ;;
116
+ *) BUMP="patch" ;;
117
+ esac
118
+
119
+ php ${MOKO_CLI}/version_bump.php --path . $([ "$BUMP" = "minor" ] && echo "--minor") 2>/dev/null || true
120
+
121
+ # Set stability suffix and verify consistency
122
+ VERSION=$(php ${MOKO_CLI}/version_read.php --path . 2>/dev/null || echo "00.00.01")
123
+ VERSION=$(echo "$VERSION" | sed 's/-\(dev\|alpha\|beta\|rc\)$//')
124
+
125
+ php ${MOKO_CLI}/version_set_platform.php \
126
+ --path . --version "$VERSION" --branch "${{ github.ref_name }}" --stability "$STABILITY" 2>/dev/null || true
127
+ php ${MOKO_CLI}/version_check.php --path . --fix 2>/dev/null || true
128
+
129
+ # Ensure licensing tags (updateservers, dlid) if enabled in manifest.xml
130
+ php ${MOKO_CLI}/manifest_licensing.php --path . --fix 2>/dev/null || true
131
+
132
+ # Append suffix for output
133
+ if [ -n "$SUFFIX" ]; then
134
+ VERSION="${VERSION}${SUFFIX}"
135
+ fi
136
+
137
+ # Commit version bump
138
+ git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
139
+ git config --local user.name "gitea-actions[bot]"
140
+ git remote set-url origin "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git"
141
+ git add -A
142
+ git diff --cached --quiet || {
143
+ git commit -m "chore(version): pre-release bump to ${VERSION} [skip ci]"
144
+ git push origin HEAD 2>&1
145
+ }
146
+
147
+ # Auto-detect element via manifest_element.php
148
+ php ${MOKO_CLI}/manifest_element.php \
149
+ --path . --version "$VERSION" --stability "$STABILITY" \
150
+ --repo "${GITEA_REPO}" --github-output
151
+
152
+ # Read back element outputs
153
+ EXT_ELEMENT=$(grep '^ext_element=' "$GITHUB_OUTPUT" | tail -1 | cut -d= -f2)
154
+ ZIP_NAME=$(grep '^zip_name=' "$GITHUB_OUTPUT" | tail -1 | cut -d= -f2)
155
+ [ -z "$EXT_ELEMENT" ] && EXT_ELEMENT=$(echo "${GITEA_REPO}" | tr '[:upper:]' '[:lower:]' | tr -d ' -')
156
+ [ -z "$ZIP_NAME" ] && ZIP_NAME="${EXT_ELEMENT}-${VERSION}.zip"
157
+
158
+ echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
159
+ echo "stability=${STABILITY}" >> "$GITHUB_OUTPUT"
160
+ echo "suffix=${SUFFIX}" >> "$GITHUB_OUTPUT"
161
+ echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
162
+ echo "zip_name=${ZIP_NAME}" >> "$GITHUB_OUTPUT"
163
+ echo "ext_element=${EXT_ELEMENT}" >> "$GITHUB_OUTPUT"
164
+
165
+ echo "=== Pre-Release: ${EXT_ELEMENT} ${VERSION}${SUFFIX} ==="
166
+
167
+ - name: Create release
168
+ id: release
169
+ run: |
170
+ TAG="${{ steps.meta.outputs.tag }}"
171
+ VERSION="${{ steps.meta.outputs.version }}"
172
+ API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
173
+ php ${MOKO_CLI}/release_create.php \
174
+ --path . --version "$VERSION" --tag "$TAG" \
175
+ --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "$API_BASE" \
176
+ --repo "${GITEA_REPO}" --branch "${{ github.ref_name }}" --prerelease
177
+
178
+ - name: Update release notes from CHANGELOG.md
179
+ run: |
180
+ TAG="${{ steps.meta.outputs.tag }}"
181
+ VERSION="${{ steps.meta.outputs.version }}"
182
+ API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
183
+
184
+ # Extract [Unreleased] section from changelog (everything between [Unreleased] and next ## heading)
185
+ if [ -f "CHANGELOG.md" ]; then
186
+ NOTES=$(awk '/^## \[Unreleased\]/{found=1; next} /^## \[/{if(found) exit} found{print}' CHANGELOG.md)
187
+ [ -z "$NOTES" ] && NOTES="Release ${VERSION}"
188
+ else
189
+ NOTES="Release ${VERSION}"
190
+ fi
191
+
192
+ # Update release body via API
193
+ RELEASE_ID=$(curl -sf -H "Authorization: token ${{ secrets.MOKOGITEA_TOKEN }}" \
194
+ "${API_BASE}/releases/tags/${TAG}" | python3 -c "import json,sys; print(json.load(sys.stdin).get('id',''))" 2>/dev/null || true)
195
+
196
+ if [ -n "$RELEASE_ID" ]; then
197
+ python3 -c "
198
+ import json, urllib.request
199
+ body = open('/dev/stdin').read()
200
+ payload = json.dumps({'body': body}).encode()
201
+ req = urllib.request.Request(
202
+ '${API_BASE}/releases/${RELEASE_ID}',
203
+ data=payload, method='PATCH',
204
+ headers={
205
+ 'Authorization': 'token ${{ secrets.MOKOGITEA_TOKEN }}',
206
+ 'Content-Type': 'application/json'
207
+ })
208
+ urllib.request.urlopen(req)
209
+ " <<< "$NOTES"
210
+ echo "Release notes updated from CHANGELOG.md"
211
+ fi
212
+
213
+ - name: Build package and upload
214
+ id: package
215
+ run: |
216
+ VERSION="${{ steps.meta.outputs.version }}"
217
+ TAG="${{ steps.meta.outputs.tag }}"
218
+ API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
219
+ php ${MOKO_CLI}/release_package.php \
220
+ --path . --version "$VERSION" --tag "$TAG" \
221
+ --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "$API_BASE" \
222
+ --repo "${GITEA_REPO}" --output /tmp || true
223
+
224
+ # updates.xml is generated dynamically by MokoGitea license server
225
+ # No need to build, commit, or sync updates.xml from workflows
226
+
227
+ - name: "Delete lesser pre-release channels (cascade)"
228
+ continue-on-error: true
229
+ run: |
230
+ API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
231
+ TOKEN="${{ secrets.MOKOGITEA_TOKEN }}"
232
+
233
+ php ${MOKO_CLI}/release_cascade.php \
234
+ --stability "${{ steps.meta.outputs.stability }}" \
235
+ --token "${TOKEN}" \
236
+ --api-base "${API_BASE}"
237
+
238
+ - name: Summary
239
+ if: always()
240
+ run: |
241
+ VERSION="${{ steps.meta.outputs.version }}"
242
+ STABILITY="${{ steps.meta.outputs.stability }}"
243
+ ZIP_NAME="${{ steps.meta.outputs.zip_name }}"
244
+ SHA256="${{ steps.package.outputs.sha256_zip }}"
245
+ echo "## Pre-Release Complete" >> $GITHUB_STEP_SUMMARY
246
+ echo "" >> $GITHUB_STEP_SUMMARY
247
+ echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY
248
+ echo "|-------|-------|" >> $GITHUB_STEP_SUMMARY
249
+ echo "| Version | \`${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
250
+ echo "| Channel | ${STABILITY} |" >> $GITHUB_STEP_SUMMARY
251
+ echo "| Package | \`${ZIP_NAME}\` |" >> $GITHUB_STEP_SUMMARY
252
+ echo "| SHA-256 | \`${SHA256:-n/a}\` |" >> $GITHUB_STEP_SUMMARY
@@ -0,0 +1,66 @@
1
+ # Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
2
+ #
3
+ # SPDX-License-Identifier: GPL-3.0-or-later
4
+ #
5
+ # FILE INFORMATION
6
+ # DEFGROUP: Gitea.Workflow
7
+ # INGROUP: mokocli.Universal
8
+ # REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli
9
+ # PATH: /.mokogitea/workflows/rc-revert.yml
10
+ # VERSION: 09.23.00
11
+ # BRIEF: Rename rc/ branch back to dev/ when PR is closed without merge
12
+
13
+ name: "RC Revert"
14
+
15
+ on:
16
+ pull_request:
17
+ types: [closed]
18
+
19
+ env:
20
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
21
+
22
+ jobs:
23
+ revert:
24
+ name: Rename rc/ back to dev/
25
+ runs-on: ubuntu-latest
26
+ if: >-
27
+ github.event.pull_request.merged == false &&
28
+ startsWith(github.event.pull_request.head.ref, 'rc/')
29
+
30
+ steps:
31
+ - name: Rename branch
32
+ run: |
33
+ BRANCH="${{ github.event.pull_request.head.ref }}"
34
+ SUFFIX="${BRANCH#rc/}"
35
+ DEV_BRANCH="dev/${SUFFIX}"
36
+ API="${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }}/api/v1/repos/${{ github.repository }}/branches"
37
+ TOKEN="${{ secrets.MOKOGITEA_TOKEN }}"
38
+
39
+ # Create dev/ branch from rc/ branch
40
+ STATUS=$(curl -sf -o /dev/null -w "%{http_code}" -X POST \
41
+ -H "Authorization: token ${TOKEN}" \
42
+ -H "Content-Type: application/json" \
43
+ -d "{\"new_branch_name\": \"${DEV_BRANCH}\", \"old_branch_name\": \"${BRANCH}\"}" \
44
+ "${API}" 2>/dev/null || true)
45
+
46
+ if [ "$STATUS" = "201" ]; then
47
+ echo "Created branch: ${DEV_BRANCH}" >> $GITHUB_STEP_SUMMARY
48
+ else
49
+ echo "::error::Failed to create ${DEV_BRANCH} from ${BRANCH} (HTTP ${STATUS})"
50
+ exit 1
51
+ fi
52
+
53
+ # Delete rc/ branch
54
+ ENCODED=$(php -r "echo rawurlencode('${BRANCH}');")
55
+ STATUS=$(curl -sf -o /dev/null -w "%{http_code}" -X DELETE \
56
+ -H "Authorization: token ${TOKEN}" \
57
+ "${API}/${ENCODED}" 2>/dev/null || true)
58
+
59
+ if [ "$STATUS" = "204" ]; then
60
+ echo "Deleted branch: ${BRANCH}" >> $GITHUB_STEP_SUMMARY
61
+ else
62
+ echo "::warning::Failed to delete ${BRANCH} (HTTP ${STATUS})"
63
+ fi
64
+
65
+ echo "### RC Reverted" >> $GITHUB_STEP_SUMMARY
66
+ echo "${BRANCH} → ${DEV_BRANCH}" >> $GITHUB_STEP_SUMMARY