@trebired/git-host 2.1.0 → 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 (162) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +327 -6
  3. package/bin/git-host-actions-runner-darwin-arm64 +0 -0
  4. package/bin/git-host-actions-runner-darwin-x64 +0 -0
  5. package/bin/git-host-actions-runner-linux-arm64-gnu +0 -0
  6. package/bin/git-host-actions-runner-linux-x64-gnu +0 -0
  7. package/dist/api/forge/actions.d.ts +6 -3
  8. package/dist/api/forge/actions.d.ts.map +1 -1
  9. package/dist/api/forge/actions.js +46 -10
  10. package/dist/api/forge/actions.js.map +1 -1
  11. package/dist/api/forge/route.d.ts +10 -0
  12. package/dist/api/forge/route.d.ts.map +1 -1
  13. package/dist/api/forge/route.js +6 -0
  14. package/dist/api/forge/route.js.map +1 -1
  15. package/dist/api/forge/socket.d.ts.map +1 -1
  16. package/dist/api/forge/socket.js +4 -148
  17. package/dist/api/forge/socket.js.map +1 -1
  18. package/dist/api/forge/socket_subscription.d.ts +10 -0
  19. package/dist/api/forge/socket_subscription.d.ts.map +1 -0
  20. package/dist/api/forge/socket_subscription.js +202 -0
  21. package/dist/api/forge/socket_subscription.js.map +1 -0
  22. package/dist/api/handler/action.d.ts.map +1 -1
  23. package/dist/api/handler/action.js +24 -18
  24. package/dist/api/handler/action.js.map +1 -1
  25. package/dist/api/socket/linguist_connection.d.ts +9 -0
  26. package/dist/api/socket/linguist_connection.d.ts.map +1 -0
  27. package/dist/api/socket/linguist_connection.js +167 -0
  28. package/dist/api/socket/linguist_connection.js.map +1 -0
  29. package/dist/api/socket/server.d.ts.map +1 -1
  30. package/dist/api/socket/server.js +4 -119
  31. package/dist/api/socket/server.js.map +1 -1
  32. package/dist/core/actions/artifacts.d.ts +21 -0
  33. package/dist/core/actions/artifacts.d.ts.map +1 -0
  34. package/dist/core/actions/artifacts.js +121 -0
  35. package/dist/core/actions/artifacts.js.map +1 -0
  36. package/dist/core/actions/environment.d.ts +9 -0
  37. package/dist/core/actions/environment.d.ts.map +1 -0
  38. package/dist/core/actions/environment.js +64 -0
  39. package/dist/core/actions/environment.js.map +1 -0
  40. package/dist/core/actions/expressions.d.ts +15 -0
  41. package/dist/core/actions/expressions.d.ts.map +1 -0
  42. package/dist/core/actions/expressions.js +279 -0
  43. package/dist/core/actions/expressions.js.map +1 -0
  44. package/dist/core/actions/go_runner.d.ts +6 -0
  45. package/dist/core/actions/go_runner.d.ts.map +1 -0
  46. package/dist/core/actions/go_runner.js +106 -0
  47. package/dist/core/actions/go_runner.js.map +1 -0
  48. package/dist/core/actions/local_runner.d.ts +33 -0
  49. package/dist/core/actions/local_runner.d.ts.map +1 -0
  50. package/dist/core/actions/local_runner.js +173 -0
  51. package/dist/core/actions/local_runner.js.map +1 -0
  52. package/dist/core/actions/node_runner.d.ts +4 -0
  53. package/dist/core/actions/node_runner.d.ts.map +1 -0
  54. package/dist/core/actions/node_runner.js +176 -0
  55. package/dist/core/actions/node_runner.js.map +1 -0
  56. package/dist/core/actions/normalize.d.ts +7 -0
  57. package/dist/core/actions/normalize.d.ts.map +1 -0
  58. package/dist/core/actions/normalize.js +401 -0
  59. package/dist/core/actions/normalize.js.map +1 -0
  60. package/dist/core/actions/planner.d.ts +13 -0
  61. package/dist/core/actions/planner.d.ts.map +1 -0
  62. package/dist/core/actions/planner.js +106 -0
  63. package/dist/core/actions/planner.js.map +1 -0
  64. package/dist/core/actions/redaction.d.ts +16 -0
  65. package/dist/core/actions/redaction.d.ts.map +1 -0
  66. package/dist/core/actions/redaction.js +43 -0
  67. package/dist/core/actions/redaction.js.map +1 -0
  68. package/dist/core/actions/release_assets.d.ts +31 -0
  69. package/dist/core/actions/release_assets.d.ts.map +1 -0
  70. package/dist/core/actions/release_assets.js +114 -0
  71. package/dist/core/actions/release_assets.js.map +1 -0
  72. package/dist/core/actions/runner/launch.d.ts +5 -0
  73. package/dist/core/actions/runner/launch.d.ts.map +1 -0
  74. package/dist/core/actions/runner/launch.js +100 -0
  75. package/dist/core/actions/runner/launch.js.map +1 -0
  76. package/dist/core/actions/runner/protocol.d.ts +7 -0
  77. package/dist/core/actions/runner/protocol.d.ts.map +1 -0
  78. package/dist/core/actions/runner/protocol.js +66 -0
  79. package/dist/core/actions/runner/protocol.js.map +1 -0
  80. package/dist/core/actions/runner.d.ts +6 -0
  81. package/dist/core/actions/runner.d.ts.map +1 -0
  82. package/dist/core/actions/runner.js +13 -0
  83. package/dist/core/actions/runner.js.map +1 -0
  84. package/dist/core/actions/sandbox.d.ts +4 -0
  85. package/dist/core/actions/sandbox.d.ts.map +1 -0
  86. package/dist/core/actions/sandbox.js +46 -0
  87. package/dist/core/actions/sandbox.js.map +1 -0
  88. package/dist/core/{actions_runner.d.ts → actions/types.d.ts} +38 -6
  89. package/dist/core/actions/types.d.ts.map +1 -0
  90. package/dist/core/actions/types.js +2 -0
  91. package/dist/core/actions/types.js.map +1 -0
  92. package/dist/core/{actions_workflows.d.ts → actions/workflows.d.ts} +4 -4
  93. package/dist/core/actions/workflows.d.ts.map +1 -0
  94. package/dist/core/{actions_workflows.js → actions/workflows.js} +40 -100
  95. package/dist/core/actions/workflows.js.map +1 -0
  96. package/dist/core/actions/workspace.d.ts +7 -0
  97. package/dist/core/actions/workspace.d.ts.map +1 -0
  98. package/dist/core/actions/workspace.js +47 -0
  99. package/dist/core/actions/workspace.js.map +1 -0
  100. package/dist/core/activity.d.ts.map +1 -1
  101. package/dist/core/activity.js +57 -39
  102. package/dist/core/activity.js.map +1 -1
  103. package/dist/core/archive_cache_filesystem.d.ts.map +1 -1
  104. package/dist/core/archive_cache_filesystem.js +39 -33
  105. package/dist/core/archive_cache_filesystem.js.map +1 -1
  106. package/dist/core/create/git/forge.d.ts.map +1 -1
  107. package/dist/core/create/git/forge.js +12 -2
  108. package/dist/core/create/git/forge.js.map +1 -1
  109. package/dist/core/create_git_host/remote_methods.js.map +1 -1
  110. package/dist/core/forge_actions.d.ts +10 -2
  111. package/dist/core/forge_actions.d.ts.map +1 -1
  112. package/dist/core/forge_actions.js +1025 -160
  113. package/dist/core/forge_actions.js.map +1 -1
  114. package/dist/core/git_forge/storage_memory.d.ts.map +1 -1
  115. package/dist/core/git_forge/storage_memory.js +72 -2
  116. package/dist/core/git_forge/storage_memory.js.map +1 -1
  117. package/dist/core/repository/parsers.d.ts.map +1 -1
  118. package/dist/core/repository/parsers.js +45 -32
  119. package/dist/core/repository/parsers.js.map +1 -1
  120. package/dist/core/run_git/process.d.ts.map +1 -1
  121. package/dist/core/run_git/process.js +19 -18
  122. package/dist/core/run_git/process.js.map +1 -1
  123. package/dist/core/working_tree/read.d.ts.map +1 -1
  124. package/dist/core/working_tree/read.js +26 -32
  125. package/dist/core/working_tree/read.js.map +1 -1
  126. package/dist/index.d.ts +2 -1
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +1 -0
  129. package/dist/index.js.map +1 -1
  130. package/dist/types/forge/activity.d.ts +52 -0
  131. package/dist/types/forge/activity.d.ts.map +1 -0
  132. package/dist/types/forge/activity.js +2 -0
  133. package/dist/types/forge/activity.js.map +1 -0
  134. package/dist/types/forge/api.d.ts +116 -0
  135. package/dist/types/forge/api.d.ts.map +1 -0
  136. package/dist/types/forge/api.js +2 -0
  137. package/dist/types/forge/api.js.map +1 -0
  138. package/dist/types/forge/releases.d.ts +98 -0
  139. package/dist/types/forge/releases.d.ts.map +1 -0
  140. package/dist/types/forge/releases.js +2 -0
  141. package/dist/types/forge/releases.js.map +1 -0
  142. package/dist/types/forge/social_forks.d.ts +51 -0
  143. package/dist/types/forge/social_forks.d.ts.map +1 -0
  144. package/dist/types/forge/social_forks.js +2 -0
  145. package/dist/types/forge/social_forks.js.map +1 -0
  146. package/dist/types/forge/workflows.d.ts +361 -0
  147. package/dist/types/forge/workflows.d.ts.map +1 -0
  148. package/dist/types/forge/workflows.js +2 -0
  149. package/dist/types/forge/workflows.js.map +1 -0
  150. package/dist/types/forge.d.ts +5 -475
  151. package/dist/types/forge.d.ts.map +1 -1
  152. package/dist/types/host/archive.d.ts.map +1 -1
  153. package/dist/types/host/options.d.ts.map +1 -1
  154. package/dist/types/host/service.d.ts.map +1 -1
  155. package/dist/types/index.d.ts +1 -1
  156. package/dist/types/index.d.ts.map +1 -1
  157. package/package.json +38 -9
  158. package/dist/core/actions_runner.d.ts.map +0 -1
  159. package/dist/core/actions_runner.js +0 -414
  160. package/dist/core/actions_runner.js.map +0 -1
  161. package/dist/core/actions_workflows.d.ts.map +0 -1
  162. package/dist/core/actions_workflows.js.map +0 -1
@@ -0,0 +1,167 @@
1
+ import { text } from "../../utils/text.js";
2
+ import { authorizationAllowed, serializeError, statusForError } from "../handler/response.js";
3
+ import { LINGUIST_DONE_EVENT, LINGUIST_ERROR_EVENT, LINGUIST_PROGRESS_EVENT, LINGUIST_RESULT_EVENT, } from "./events.js";
4
+ function emitMissingRepositoryKey(socket) {
5
+ socket.emit(LINGUIST_ERROR_EVENT, {
6
+ error: {
7
+ code: "repository_not_found",
8
+ message: "Repository key is required.",
9
+ },
10
+ status: 404,
11
+ });
12
+ socket.emit(LINGUIST_DONE_EVENT, { ok: false });
13
+ socket.disconnect();
14
+ }
15
+ function emitMissingRepositoryId(socket, repositoryKey) {
16
+ socket.emit(LINGUIST_ERROR_EVENT, {
17
+ error: {
18
+ code: "repository_not_found",
19
+ message: "Repository not found.",
20
+ },
21
+ status: 404,
22
+ });
23
+ socket.emit(LINGUIST_DONE_EVENT, { ok: false, repository_key: repositoryKey });
24
+ socket.disconnect();
25
+ }
26
+ function emitDeniedSocket(socket, repositoryId, repositoryKey, status, message) {
27
+ socket.emit(LINGUIST_ERROR_EVENT, {
28
+ error: {
29
+ code: "permission_denied",
30
+ message,
31
+ },
32
+ status,
33
+ });
34
+ socket.emit(LINGUIST_DONE_EVENT, {
35
+ ok: false,
36
+ repository_id: repositoryId,
37
+ repository_key: repositoryKey,
38
+ });
39
+ socket.disconnect();
40
+ }
41
+ async function authorizeLinguistSocket(options, socket, pathname, repositoryId, repositoryKey, ref) {
42
+ const searchParams = new URLSearchParams();
43
+ if (ref)
44
+ searchParams.set("ref", ref);
45
+ return authorizationAllowed(options.authorize
46
+ ? await options.authorize({
47
+ action: "linguist_socket",
48
+ method: "SOCKET",
49
+ pathname,
50
+ remoteAddress: text(socket.handshake.address),
51
+ repositoryId,
52
+ repositoryKey,
53
+ request: socket.request,
54
+ searchParams,
55
+ })
56
+ : undefined);
57
+ }
58
+ function logDeniedSocket(logger, logGroup, pathname, repositoryId, repositoryKey, status) {
59
+ logger.warn(logGroup, "api socket permission denied", {
60
+ action: "linguist_socket",
61
+ pathname,
62
+ repositoryId,
63
+ repositoryKey,
64
+ status,
65
+ });
66
+ }
67
+ function emitLinguistResult(socket, repositoryId, repositoryKey, data) {
68
+ socket.emit(LINGUIST_RESULT_EVENT, {
69
+ action: "linguist",
70
+ data,
71
+ repository_id: repositoryId,
72
+ repository_key: repositoryKey,
73
+ });
74
+ socket.emit(LINGUIST_DONE_EVENT, {
75
+ ok: true,
76
+ repository_id: repositoryId,
77
+ repository_key: repositoryKey,
78
+ });
79
+ }
80
+ function logCompletedSocket(logger, logGroup, repositoryId, repositoryKey, socketId) {
81
+ logger.info(logGroup, "api linguist socket completed", {
82
+ repositoryId,
83
+ repositoryKey,
84
+ socketId,
85
+ });
86
+ }
87
+ function logFailedSocket(logger, logGroup, repositoryId, repositoryKey, socketId, error) {
88
+ logger.error(logGroup, "api linguist socket failed", {
89
+ error: error instanceof Error ? error.message : String(error),
90
+ repositoryId,
91
+ repositoryKey,
92
+ socketId,
93
+ });
94
+ }
95
+ function emitFailedSocket(socket, repositoryId, repositoryKey, error) {
96
+ socket.emit(LINGUIST_ERROR_EVENT, {
97
+ ...serializeError(error),
98
+ ok: false,
99
+ repository_id: repositoryId,
100
+ repository_key: repositoryKey,
101
+ status: statusForError(error),
102
+ });
103
+ socket.emit(LINGUIST_DONE_EVENT, {
104
+ ok: false,
105
+ repository_id: repositoryId,
106
+ repository_key: repositoryKey,
107
+ });
108
+ }
109
+ async function resolveLinguistContext(options, socket, basePath, payload) {
110
+ const repositoryKey = text(payload?.repositoryKey);
111
+ const ref = text(payload?.ref);
112
+ if (!repositoryKey)
113
+ return null;
114
+ const repositoryId = text(options.resolveRepositoryId
115
+ ? await options.resolveRepositoryId(repositoryKey, socket.request)
116
+ : repositoryKey);
117
+ return {
118
+ pathname: `${basePath.replace(/\/+$/g, "") || ""}/repositories/${encodeURIComponent(repositoryKey)}/linguist/socket`,
119
+ ref,
120
+ repositoryId,
121
+ repositoryKey,
122
+ };
123
+ }
124
+ async function runLinguistSocket(options, socket, context, verbose, logger, logGroup) {
125
+ const auth = await authorizeLinguistSocket(options, socket, context.pathname, context.repositoryId, context.repositoryKey, context.ref);
126
+ if (!auth.allowed) {
127
+ const status = auth.status || 403;
128
+ logDeniedSocket(logger, logGroup, context.pathname, context.repositoryId, context.repositoryKey, status);
129
+ emitDeniedSocket(socket, context.repositoryId, context.repositoryKey, status, auth.message || "Permission denied.");
130
+ return;
131
+ }
132
+ try {
133
+ const data = await options.gitHost.readLinguist(context.repositoryId, {
134
+ onProgress(progressEvent) {
135
+ socket.emit(LINGUIST_PROGRESS_EVENT, progressEvent);
136
+ },
137
+ ref: context.ref,
138
+ });
139
+ emitLinguistResult(socket, context.repositoryId, context.repositoryKey, data);
140
+ if (verbose) {
141
+ logCompletedSocket(logger, logGroup, context.repositoryId, context.repositoryKey, socket.id);
142
+ }
143
+ }
144
+ catch (error) {
145
+ logFailedSocket(logger, logGroup, context.repositoryId, context.repositoryKey, socket.id, error);
146
+ emitFailedSocket(socket, context.repositoryId, context.repositoryKey, error);
147
+ }
148
+ finally {
149
+ socket.disconnect();
150
+ }
151
+ }
152
+ function createLinguistConnectionHandler(options, logger, logGroup, basePath, verbose) {
153
+ return async function handleLinguistSocket(socket, payload) {
154
+ const context = await resolveLinguistContext(options, socket, basePath, payload);
155
+ if (!context) {
156
+ emitMissingRepositoryKey(socket);
157
+ return;
158
+ }
159
+ if (!context.repositoryId) {
160
+ emitMissingRepositoryId(socket, context.repositoryKey);
161
+ return;
162
+ }
163
+ await runLinguistSocket(options, socket, context, verbose, logger, logGroup);
164
+ };
165
+ }
166
+ export { createLinguistConnectionHandler };
167
+ //# sourceMappingURL=linguist_connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linguist_connection.js","sourceRoot":"","sources":["../../../src/api/socket/linguist_connection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/api/socket/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AAIrD,OAAO,KAAK,EACV,+BAA+B,EAEhC,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAcrB,iBAAS,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,yIAuJzE;AAED,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,GACrB,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/api/socket/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AAIrD,OAAO,KAAK,EACV,+BAA+B,EAChC,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAcrB,iBAAS,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,yIAiCzE;AAED,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,GACrB,CAAC"}
@@ -3,7 +3,7 @@ import { logPackageInitialized } from "@trebired/logger-adapter";
3
3
  import { resolveLogger } from "../../logging.js";
4
4
  import { text } from "../../utils/text.js";
5
5
  import { LINGUIST_DONE_EVENT, LINGUIST_ERROR_EVENT, LINGUIST_PROGRESS_EVENT, LINGUIST_RESULT_EVENT, LINGUIST_START_EVENT, } from "./events.js";
6
- import { authorizationAllowed, serializeError, statusForError } from "../handler/response.js";
6
+ import { createLinguistConnectionHandler } from "./linguist_connection.js";
7
7
  function normalizeSocketPath(basePathInput, socketPathInput) {
8
8
  const socketPath = text(socketPathInput).replace(/\/+$/g, "");
9
9
  if (socketPath) {
@@ -37,125 +37,10 @@ function createGitApiSocketServer(options) {
37
37
  ...(options.socketOptions || {}),
38
38
  path,
39
39
  });
40
+ const handleLinguistSocket = createLinguistConnectionHandler(options, logger, logGroup, basePath, verbose);
40
41
  io.on("connection", (socket) => {
41
- socket.on(LINGUIST_START_EVENT, async (payload) => {
42
- const repositoryKey = text(payload && payload.repositoryKey);
43
- const ref = text(payload && payload.ref);
44
- const pathname = `${basePath.replace(/\/+$/g, "") || ""}/repositories/${encodeURIComponent(repositoryKey)}/linguist/socket`;
45
- if (!repositoryKey) {
46
- socket.emit(LINGUIST_ERROR_EVENT, {
47
- error: {
48
- code: "repository_not_found",
49
- message: "Repository key is required.",
50
- },
51
- status: 404,
52
- });
53
- socket.emit(LINGUIST_DONE_EVENT, { ok: false });
54
- socket.disconnect();
55
- return;
56
- }
57
- const repositoryId = text(options.resolveRepositoryId
58
- ? await options.resolveRepositoryId(repositoryKey, socket.request)
59
- : repositoryKey);
60
- if (!repositoryId) {
61
- socket.emit(LINGUIST_ERROR_EVENT, {
62
- error: {
63
- code: "repository_not_found",
64
- message: "Repository not found.",
65
- },
66
- status: 404,
67
- });
68
- socket.emit(LINGUIST_DONE_EVENT, { ok: false, repository_key: repositoryKey });
69
- socket.disconnect();
70
- return;
71
- }
72
- const searchParams = new URLSearchParams();
73
- if (ref)
74
- searchParams.set("ref", ref);
75
- const auth = authorizationAllowed(options.authorize
76
- ? await options.authorize({
77
- action: "linguist_socket",
78
- method: "SOCKET",
79
- pathname,
80
- remoteAddress: text(socket.handshake.address),
81
- repositoryId,
82
- repositoryKey,
83
- request: socket.request,
84
- searchParams,
85
- })
86
- : undefined);
87
- if (!auth.allowed) {
88
- logger.warn(logGroup, "api socket permission denied", {
89
- action: "linguist_socket",
90
- pathname,
91
- repositoryId,
92
- repositoryKey,
93
- status: auth.status || 403,
94
- });
95
- socket.emit(LINGUIST_ERROR_EVENT, {
96
- error: {
97
- code: "permission_denied",
98
- message: auth.message || "Permission denied.",
99
- },
100
- status: auth.status || 403,
101
- });
102
- socket.emit(LINGUIST_DONE_EVENT, {
103
- ok: false,
104
- repository_id: repositoryId,
105
- repository_key: repositoryKey,
106
- });
107
- socket.disconnect();
108
- return;
109
- }
110
- try {
111
- const data = await options.gitHost.readLinguist(repositoryId, {
112
- onProgress(progressEvent) {
113
- socket.emit(LINGUIST_PROGRESS_EVENT, progressEvent);
114
- },
115
- ref,
116
- });
117
- socket.emit(LINGUIST_RESULT_EVENT, {
118
- action: "linguist",
119
- data,
120
- repository_id: repositoryId,
121
- repository_key: repositoryKey,
122
- });
123
- socket.emit(LINGUIST_DONE_EVENT, {
124
- ok: true,
125
- repository_id: repositoryId,
126
- repository_key: repositoryKey,
127
- });
128
- if (verbose) {
129
- logger.info(logGroup, "api linguist socket completed", {
130
- repositoryId,
131
- repositoryKey,
132
- socketId: socket.id,
133
- });
134
- }
135
- }
136
- catch (error) {
137
- logger.error(logGroup, "api linguist socket failed", {
138
- error: error instanceof Error ? error.message : String(error),
139
- repositoryId,
140
- repositoryKey,
141
- socketId: socket.id,
142
- });
143
- socket.emit(LINGUIST_ERROR_EVENT, {
144
- ...serializeError(error),
145
- ok: false,
146
- repository_id: repositoryId,
147
- repository_key: repositoryKey,
148
- status: statusForError(error),
149
- });
150
- socket.emit(LINGUIST_DONE_EVENT, {
151
- ok: false,
152
- repository_id: repositoryId,
153
- repository_key: repositoryKey,
154
- });
155
- }
156
- finally {
157
- socket.disconnect();
158
- }
42
+ socket.on(LINGUIST_START_EVENT, (payload) => {
43
+ void handleLinguistSocket(socket, payload);
159
44
  });
160
45
  });
161
46
  return io;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/api/socket/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/api/socket/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { GitForgeWorkflowRunArtifact } from "../../types.js";
2
+ type StoredArtifact = {
3
+ fileCount: number;
4
+ path: string;
5
+ size: number;
6
+ };
7
+ declare function artifactStoragePath(artifactsRoot: string, artifactName: string): string;
8
+ declare function uploadArtifact(input: {
9
+ artifactName: string;
10
+ artifactsRoot: string;
11
+ pathSpec: string;
12
+ workspacePath: string;
13
+ }): StoredArtifact;
14
+ declare function downloadArtifact(input: {
15
+ artifact: GitForgeWorkflowRunArtifact;
16
+ artifactsRoot: string;
17
+ destinationPath: string;
18
+ workspacePath: string;
19
+ }): void;
20
+ export { artifactStoragePath, downloadArtifact, uploadArtifact, };
21
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../src/core/actions/artifacts.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAGjE,KAAK,cAAc,GAAG;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AA6EF,iBAAS,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAEvE;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,cAAc,CAyBjB;AAED,iBAAS,gBAAgB,CAAC,KAAK,EAAE;IAC/B,QAAQ,EAAE,2BAA2B,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB,QAWA;AAED,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,GACf,CAAC"}
@@ -0,0 +1,121 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { GitHostError } from "../../errors.js";
4
+ import { text } from "../../utils/text.js";
5
+ function ensureDirectory(directory) {
6
+ fs.mkdirSync(directory, { recursive: true });
7
+ }
8
+ function walkFiles(root) {
9
+ if (!fs.existsSync(root))
10
+ return [];
11
+ const stat = fs.statSync(root);
12
+ if (stat.isFile())
13
+ return [root];
14
+ const results = [];
15
+ const stack = [root];
16
+ while (stack.length) {
17
+ const current = stack.pop();
18
+ if (!current)
19
+ continue;
20
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
21
+ const absolutePath = path.join(current, entry.name);
22
+ if (entry.isDirectory()) {
23
+ stack.push(absolutePath);
24
+ continue;
25
+ }
26
+ if (entry.isFile())
27
+ results.push(absolutePath);
28
+ }
29
+ }
30
+ return results;
31
+ }
32
+ function toMatcher(pattern) {
33
+ const escaped = pattern
34
+ .replace(/[.+^${}()|[\]\\]/g, "\\$&")
35
+ .replace(/\*\*/g, ".*")
36
+ .replace(/\*/g, "[^/]*")
37
+ .replace(/\?/g, ".");
38
+ return new RegExp(`^${escaped}$`);
39
+ }
40
+ function expandArtifactPathSpec(workspacePath, spec) {
41
+ const normalizedSpec = text(spec).replace(/\\/g, "/");
42
+ if (!normalizedSpec)
43
+ return [];
44
+ const absolute = path.resolve(workspacePath, normalizedSpec);
45
+ if (!normalizedSpec.includes("*") && !normalizedSpec.includes("?")) {
46
+ return fs.existsSync(absolute) ? [absolute] : [];
47
+ }
48
+ const matcher = toMatcher(normalizedSpec);
49
+ const candidates = walkFiles(workspacePath)
50
+ .map((entry) => ({
51
+ absolutePath: entry,
52
+ relativePath: path.relative(workspacePath, entry).replace(/\\/g, "/"),
53
+ }));
54
+ return candidates
55
+ .filter((entry) => matcher.test(entry.relativePath))
56
+ .map((entry) => entry.absolutePath);
57
+ }
58
+ function parseArtifactPathSpecs(input) {
59
+ return text(input)
60
+ .split(/\r?\n|,/)
61
+ .map((entry) => text(entry).trim())
62
+ .filter(Boolean);
63
+ }
64
+ function directorySize(root) {
65
+ return walkFiles(root)
66
+ .map((entry) => fs.statSync(entry).size)
67
+ .reduce((total, value) => total + value, 0);
68
+ }
69
+ function copyArtifactEntry(sourcePath, destinationPath) {
70
+ const stat = fs.statSync(sourcePath);
71
+ if (stat.isDirectory()) {
72
+ fs.cpSync(sourcePath, destinationPath, { recursive: true });
73
+ return;
74
+ }
75
+ ensureDirectory(path.dirname(destinationPath));
76
+ fs.copyFileSync(sourcePath, destinationPath);
77
+ }
78
+ function artifactStoragePath(artifactsRoot, artifactName) {
79
+ return path.join(artifactsRoot, encodeURIComponent(artifactName));
80
+ }
81
+ function uploadArtifact(input) {
82
+ const specs = parseArtifactPathSpecs(input.pathSpec);
83
+ const matches = Array.from(new Set(specs.flatMap((spec) => expandArtifactPathSpec(input.workspacePath, spec))));
84
+ if (!matches.length) {
85
+ throw new GitHostError("forge_actions_runner_failed", `Artifact "${input.artifactName}" did not match any files.`, {
86
+ artifactName: input.artifactName,
87
+ pathSpec: input.pathSpec,
88
+ });
89
+ }
90
+ const destinationRoot = artifactStoragePath(input.artifactsRoot, input.artifactName);
91
+ fs.rmSync(destinationRoot, { force: true, recursive: true });
92
+ ensureDirectory(destinationRoot);
93
+ const copied = new Set();
94
+ for (const match of matches) {
95
+ const relativePath = path.relative(input.workspacePath, match);
96
+ const nextDestination = path.join(destinationRoot, relativePath);
97
+ if (copied.has(nextDestination))
98
+ continue;
99
+ copied.add(nextDestination);
100
+ copyArtifactEntry(match, nextDestination);
101
+ }
102
+ return {
103
+ fileCount: walkFiles(destinationRoot).length,
104
+ path: destinationRoot,
105
+ size: directorySize(destinationRoot),
106
+ };
107
+ }
108
+ function downloadArtifact(input) {
109
+ const sourceRoot = input.artifact.path || artifactStoragePath(input.artifactsRoot, input.artifact.name);
110
+ if (!fs.existsSync(sourceRoot)) {
111
+ throw new GitHostError("forge_actions_runner_failed", `Artifact "${input.artifact.name}" is missing from storage.`, {
112
+ artifactId: input.artifact.id,
113
+ artifactName: input.artifact.name,
114
+ });
115
+ }
116
+ const destination = path.resolve(input.workspacePath, text(input.destinationPath, "."));
117
+ ensureDirectory(destination);
118
+ fs.cpSync(sourceRoot, destination, { force: true, recursive: true });
119
+ }
120
+ export { artifactStoragePath, downloadArtifact, uploadArtifact, };
121
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/core/actions/artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { GitForgeActionsEnvironmentOptions, GitForgeLocalRunnerOptions } from "../../types.js";
2
+ declare function defaultPassthroughKeys(): string[];
3
+ declare function buildStepBaseEnv(policy: GitForgeActionsEnvironmentOptions | undefined): Record<string, string>;
4
+ declare function runnerNeedsPrivilegeWarning(input: {
5
+ localRunner: GitForgeLocalRunnerOptions | undefined;
6
+ uid: number | null;
7
+ }): boolean;
8
+ export { buildStepBaseEnv, defaultPassthroughKeys, runnerNeedsPrivilegeWarning, };
9
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/core/actions/environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAwBnG,iBAAS,sBAAsB,aAE9B;AAiBD,iBAAS,gBAAgB,CAAC,MAAM,EAAE,iCAAiC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAavG;AAID,iBAAS,2BAA2B,CAAC,KAAK,EAAE;IAC1C,WAAW,EAAE,0BAA0B,GAAG,SAAS,CAAC;IACpD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB,WAMA;AAED,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAC5B,CAAC"}
@@ -0,0 +1,64 @@
1
+ // Minimal set of variables that generic tooling (shells, git, common CLIs) needs
2
+ // to function. Everything else is opt-in so host process secrets never leak into
3
+ // workflow steps by default.
4
+ const POSIX_PASSTHROUGH = ["PATH", "HOME", "LANG", "LC_ALL", "TZ", "TERM"];
5
+ const WINDOWS_PASSTHROUGH = [
6
+ "PATH",
7
+ "Path",
8
+ "PATHEXT",
9
+ "SystemRoot",
10
+ "SystemDrive",
11
+ "HOMEDRIVE",
12
+ "HOMEPATH",
13
+ "USERPROFILE",
14
+ "TEMP",
15
+ "TMP",
16
+ "COMSPEC",
17
+ "LANG",
18
+ "LC_ALL",
19
+ "TZ",
20
+ "TERM",
21
+ ];
22
+ function defaultPassthroughKeys() {
23
+ return process.platform === "win32" ? WINDOWS_PASSTHROUGH : POSIX_PASSTHROUGH;
24
+ }
25
+ function inheritKeys(keys) {
26
+ const inherited = {};
27
+ for (const key of keys) {
28
+ const value = process.env[key];
29
+ if (value !== undefined) {
30
+ inherited[key] = value;
31
+ }
32
+ }
33
+ return inherited;
34
+ }
35
+ // Builds the clean base environment for a workflow step. By default only the
36
+ // documented passthrough allowlist (plus any caller additions and explicit
37
+ // `baseEnv`) is exposed; `inheritProcessEnv` restores full `process.env`
38
+ // inheritance for callers that depend on the historical behavior.
39
+ function buildStepBaseEnv(policy) {
40
+ const baseEnv = { ...(policy?.baseEnv || {}) };
41
+ if (policy?.inheritProcessEnv) {
42
+ return {
43
+ ...process.env,
44
+ ...baseEnv,
45
+ };
46
+ }
47
+ const allow = new Set([...defaultPassthroughKeys(), ...(policy?.passthrough || [])]);
48
+ return {
49
+ ...inheritKeys(allow),
50
+ ...baseEnv,
51
+ };
52
+ }
53
+ // True when the local runner would execute steps as root without any privilege
54
+ // drop or sandbox, which means workflow code runs as root on the host.
55
+ function runnerNeedsPrivilegeWarning(input) {
56
+ if (input.uid !== 0)
57
+ return false;
58
+ const { localRunner } = input;
59
+ const dropsPrivileges = localRunner?.uid !== undefined && localRunner.uid !== 0;
60
+ const sandboxed = typeof localRunner?.beforeSpawn === "function";
61
+ return !dropsPrivileges && !sandboxed;
62
+ }
63
+ export { buildStepBaseEnv, defaultPassthroughKeys, runnerNeedsPrivilegeWarning, };
64
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/core/actions/environment.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,iFAAiF;AACjF,6BAA6B;AAC7B,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3E,MAAM,mBAAmB,GAAG;IAC1B,MAAM;IACN,MAAM;IACN,SAAS;IACT,YAAY;IACZ,aAAa;IACb,WAAW;IACX,UAAU;IACV,aAAa;IACb,MAAM;IACN,KAAK;IACL,SAAS;IACT,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,MAAM;CACP,CAAC;AAEF,SAAS,sBAAsB;IAC7B,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAChF,CAAC;AAED,SAAS,WAAW,CAAC,IAAsB;IACzC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,kEAAkE;AAClE,SAAS,gBAAgB,CAAC,MAAqD;IAC7E,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/C,IAAI,MAAM,EAAE,iBAAiB,EAAE,CAAC;QAC9B,OAAO;YACL,GAAI,OAAO,CAAC,GAA8B;YAC1C,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,sBAAsB,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,OAAO;QACL,GAAG,WAAW,CAAC,KAAK,CAAC;QACrB,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,uEAAuE;AACvE,SAAS,2BAA2B,CAAC,KAGpC;IACC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC9B,MAAM,eAAe,GAAG,WAAW,EAAE,GAAG,KAAK,SAAS,IAAI,WAAW,CAAC,GAAG,KAAK,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,OAAO,WAAW,EAAE,WAAW,KAAK,UAAU,CAAC;IACjE,OAAO,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC;AACxC,CAAC;AAED,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAC5B,CAAC"}
@@ -0,0 +1,15 @@
1
+ type WorkflowExpressionContext = {
2
+ env?: Record<string, unknown>;
3
+ github?: Record<string, unknown>;
4
+ job?: Record<string, unknown>;
5
+ matrix?: Record<string, unknown>;
6
+ needs?: Record<string, unknown>;
7
+ secrets?: Record<string, unknown>;
8
+ };
9
+ declare function booleanValue(input: unknown): boolean;
10
+ declare function resolveWorkflowExpression(input: string, context: WorkflowExpressionContext): unknown;
11
+ declare function resolveWorkflowString(input: string, context: WorkflowExpressionContext): string;
12
+ declare function resolveWorkflowBoolean(input: unknown, context: WorkflowExpressionContext, fallback?: boolean): boolean;
13
+ export { booleanValue, resolveWorkflowBoolean, resolveWorkflowExpression, resolveWorkflowString, };
14
+ export type { WorkflowExpressionContext };
15
+ //# sourceMappingURL=expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../../src/core/actions/expressions.ts"],"names":[],"mappings":"AAGA,KAAK,yBAAyB,GAAG;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AA8IF,iBAAS,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAU7C;AA6HD,iBAAS,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAG7F;AAED,iBAAS,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,MAAM,CAOxF;AAED,iBAAS,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,QAAQ,UAAO,GAAG,OAAO,CAI5G;AAED,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,GACtB,CAAC;AAEF,YAAY,EAAE,yBAAyB,EAAE,CAAC"}