@actions/languageserver 0.2.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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/dist/client.d.ts +3 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +8 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/commands.d.ts +4 -0
  8. package/dist/commands.d.ts.map +1 -0
  9. package/dist/commands.js +5 -0
  10. package/dist/commands.js.map +1 -0
  11. package/dist/connection.d.ts +3 -0
  12. package/dist/connection.d.ts.map +1 -0
  13. package/dist/connection.js +127 -0
  14. package/dist/connection.js.map +1 -0
  15. package/dist/context-providers/action-outputs.d.ts +5 -0
  16. package/dist/context-providers/action-outputs.d.ts.map +1 -0
  17. package/dist/context-providers/action-outputs.js +5 -0
  18. package/dist/context-providers/action-outputs.js.map +1 -0
  19. package/dist/context-providers/secrets.d.ts +8 -0
  20. package/dist/context-providers/secrets.d.ts.map +1 -0
  21. package/dist/context-providers/secrets.js +122 -0
  22. package/dist/context-providers/secrets.js.map +1 -0
  23. package/dist/context-providers/steps.d.ts +6 -0
  24. package/dist/context-providers/steps.d.ts.map +1 -0
  25. package/dist/context-providers/steps.js +60 -0
  26. package/dist/context-providers/steps.js.map +1 -0
  27. package/dist/context-providers/variables.d.ts +13 -0
  28. package/dist/context-providers/variables.d.ts.map +1 -0
  29. package/dist/context-providers/variables.js +120 -0
  30. package/dist/context-providers/variables.js.map +1 -0
  31. package/dist/context-providers.d.ts +6 -0
  32. package/dist/context-providers.d.ts.map +1 -0
  33. package/dist/context-providers.js +20 -0
  34. package/dist/context-providers.js.map +1 -0
  35. package/dist/description-provider.d.ts +5 -0
  36. package/dist/description-provider.d.ts.map +1 -0
  37. package/dist/description-provider.js +20 -0
  38. package/dist/description-provider.js.map +1 -0
  39. package/dist/description-providers/action-description.d.ts +5 -0
  40. package/dist/description-providers/action-description.d.ts.map +1 -0
  41. package/dist/description-providers/action-description.js +18 -0
  42. package/dist/description-providers/action-description.js.map +1 -0
  43. package/dist/description-providers/action-input.d.ts +6 -0
  44. package/dist/description-providers/action-input.d.ts.map +1 -0
  45. package/dist/description-providers/action-input.js +36 -0
  46. package/dist/description-providers/action-input.js.map +1 -0
  47. package/dist/file-provider.d.ts +5 -0
  48. package/dist/file-provider.d.ts.map +1 -0
  49. package/dist/file-provider.js +49 -0
  50. package/dist/file-provider.js.map +1 -0
  51. package/dist/index.d.ts +2 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +19 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/initializationOptions.d.ts +45 -0
  56. package/dist/initializationOptions.d.ts.map +1 -0
  57. package/dist/initializationOptions.js +2 -0
  58. package/dist/initializationOptions.js.map +1 -0
  59. package/dist/on-completion.d.ts +7 -0
  60. package/dist/on-completion.d.ts.map +1 -0
  61. package/dist/on-completion.js +15 -0
  62. package/dist/on-completion.js.map +1 -0
  63. package/dist/request.d.ts +7 -0
  64. package/dist/request.d.ts.map +1 -0
  65. package/dist/request.js +4 -0
  66. package/dist/request.js.map +1 -0
  67. package/dist/utils/action-metadata.d.ts +5 -0
  68. package/dist/utils/action-metadata.d.ts.map +1 -0
  69. package/dist/utils/action-metadata.js +56 -0
  70. package/dist/utils/action-metadata.js.map +1 -0
  71. package/dist/utils/cache.d.ts +14 -0
  72. package/dist/utils/cache.d.ts.map +1 -0
  73. package/dist/utils/cache.js +35 -0
  74. package/dist/utils/cache.js.map +1 -0
  75. package/dist/utils/error.d.ts +3 -0
  76. package/dist/utils/error.d.ts.map +1 -0
  77. package/dist/utils/error.js +22 -0
  78. package/dist/utils/error.js.map +1 -0
  79. package/dist/utils/repo-permission.d.ts +6 -0
  80. package/dist/utils/repo-permission.d.ts.map +1 -0
  81. package/dist/utils/repo-permission.js +36 -0
  82. package/dist/utils/repo-permission.js.map +1 -0
  83. package/dist/utils/timer.d.ts +2 -0
  84. package/dist/utils/timer.d.ts.map +1 -0
  85. package/dist/utils/timer.js +12 -0
  86. package/dist/utils/timer.js.map +1 -0
  87. package/dist/utils/username.d.ts +4 -0
  88. package/dist/utils/username.d.ts.map +1 -0
  89. package/dist/utils/username.js +14 -0
  90. package/dist/utils/username.js.map +1 -0
  91. package/dist/value-providers/action-inputs.d.ts +8 -0
  92. package/dist/value-providers/action-inputs.d.ts.map +1 -0
  93. package/dist/value-providers/action-inputs.js +28 -0
  94. package/dist/value-providers/action-inputs.js.map +1 -0
  95. package/dist/value-providers/job-environment.d.ts +5 -0
  96. package/dist/value-providers/job-environment.d.ts.map +1 -0
  97. package/dist/value-providers/job-environment.js +21 -0
  98. package/dist/value-providers/job-environment.js.map +1 -0
  99. package/dist/value-providers/runs-on.d.ts +5 -0
  100. package/dist/value-providers/runs-on.d.ts.map +1 -0
  101. package/dist/value-providers/runs-on.js +34 -0
  102. package/dist/value-providers/runs-on.js.map +1 -0
  103. package/dist/value-providers.d.ts +6 -0
  104. package/dist/value-providers.d.ts.map +1 -0
  105. package/dist/value-providers.js +30 -0
  106. package/dist/value-providers.js.map +1 -0
  107. package/package.json +75 -0
@@ -0,0 +1,120 @@
1
+ import { data, DescriptionDictionary } from "@actions/expressions";
2
+ import { StringData } from "@actions/expressions/data/index";
3
+ import { warn } from "@actions/languageservice/log";
4
+ import { isMapping, isString } from "@actions/workflow-parser";
5
+ import { errorStatus } from "../utils/error";
6
+ import { getRepoPermission } from "../utils/repo-permission";
7
+ export async function getVariables(workflowContext, octokit, cache, repo, defaultContext) {
8
+ const permission = await getRepoPermission(octokit, cache, repo);
9
+ if (permission === "none") {
10
+ const secretsContext = defaultContext || new DescriptionDictionary();
11
+ secretsContext.complete = false;
12
+ return secretsContext;
13
+ }
14
+ let environmentName;
15
+ if (workflowContext?.job?.environment) {
16
+ if (isString(workflowContext.job.environment)) {
17
+ environmentName = workflowContext.job.environment.value;
18
+ }
19
+ else if (isMapping(workflowContext.job.environment)) {
20
+ for (const x of workflowContext.job.environment) {
21
+ if (isString(x.key) && x.key.value === "name") {
22
+ if (isString(x.value)) {
23
+ environmentName = x.value.value;
24
+ }
25
+ break;
26
+ }
27
+ }
28
+ }
29
+ }
30
+ const variablesContext = defaultContext || new DescriptionDictionary();
31
+ const variables = await getRemoteVariables(octokit, cache, repo, environmentName);
32
+ // Build combined map of variables
33
+ const variablesMap = new Map();
34
+ variables.organizationVariables.forEach(variable => variablesMap.set(variable.key.toLowerCase(), {
35
+ key: variable.key,
36
+ value: new data.StringData(variable.value.coerceString()),
37
+ description: `${variable.value.coerceString()} - Organization variable`
38
+ }));
39
+ // Override org variables with repo variables
40
+ variables.repoVariables.forEach(variable => variablesMap.set(variable.key.toLowerCase(), {
41
+ key: variable.key,
42
+ value: new data.StringData(variable.value.coerceString()),
43
+ description: `${variable.value.coerceString()} - Repository variable`
44
+ }));
45
+ // Override repo variables with environment veriables (if defined)
46
+ variables.environmentVariables.forEach(variable => variablesMap.set(variable.key.toLowerCase(), {
47
+ key: variable.key,
48
+ value: new data.StringData(variable.value.coerceString()),
49
+ description: `${variable.value.coerceString()} - Variable for environment \`${environmentName || ""}\``
50
+ }));
51
+ // Sort variables by key and add to context
52
+ Array.from(variablesMap.values())
53
+ .sort((a, b) => a.key.localeCompare(b.key))
54
+ .forEach(variable => variablesContext?.add(variable.key, variable.value, variable.description));
55
+ return variablesContext;
56
+ }
57
+ export async function getRemoteVariables(octokit, cache, repo, environmentName) {
58
+ // Repo variables
59
+ return {
60
+ repoVariables: await cache.get(`${repo.owner}/${repo.name}/vars`, undefined, () => fetchVariables(octokit, repo.owner, repo.name)),
61
+ environmentVariables: (environmentName &&
62
+ (await cache.get(`${repo.owner}/${repo.name}/vars/environment/${environmentName}`, undefined, () => fetchEnvironmentVariables(octokit, repo.id, environmentName)))) ||
63
+ [],
64
+ organizationVariables: await cache.get(`${repo.owner}/vars`, undefined, () => fetchOrganizationVariables(octokit, repo))
65
+ };
66
+ }
67
+ async function fetchVariables(octokit, owner, name) {
68
+ try {
69
+ return await octokit.paginate(octokit.actions.listRepoVariables, {
70
+ owner: owner,
71
+ repo: name,
72
+ per_page: 100
73
+ }, response => response.data.map(variable => {
74
+ return { key: variable.name, value: new StringData(variable.value) };
75
+ }));
76
+ }
77
+ catch (e) {
78
+ console.log("Failure to retrieve variables: ", e);
79
+ throw e;
80
+ }
81
+ }
82
+ async function fetchEnvironmentVariables(octokit, repositoryId, environmentName) {
83
+ try {
84
+ return await octokit.paginate(octokit.actions.listEnvironmentVariables, {
85
+ repository_id: repositoryId,
86
+ environment_name: environmentName,
87
+ per_page: 100
88
+ }, response => response.data.map(variable => {
89
+ return { key: variable.name, value: new StringData(variable.value) };
90
+ }));
91
+ }
92
+ catch (e) {
93
+ if (errorStatus(e) === 404) {
94
+ warn(`Environment ${environmentName} not found`);
95
+ return [];
96
+ }
97
+ console.log("Failure to retrieve environment variables: ", e);
98
+ throw e;
99
+ }
100
+ }
101
+ async function fetchOrganizationVariables(octokit, repo) {
102
+ if (!repo.organizationOwned) {
103
+ return [];
104
+ }
105
+ try {
106
+ const variables = await octokit.paginate("GET /repos/{owner}/{repo}/actions/organization-variables", {
107
+ owner: repo.owner,
108
+ repo: repo.name,
109
+ per_page: 100
110
+ });
111
+ return variables.map(variable => {
112
+ return { key: variable.name, value: new StringData(variable.value) };
113
+ });
114
+ }
115
+ catch (e) {
116
+ console.log("Failure to retrieve organization variables: ", e);
117
+ throw e;
118
+ }
119
+ }
120
+ //# sourceMappingURL=variables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../src/context-providers/variables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ContextProviderConfig } from "@actions/languageservice";
2
+ import { Octokit } from "@octokit/rest";
3
+ import { RepositoryContext } from "./initializationOptions";
4
+ import { TTLCache } from "./utils/cache";
5
+ export declare function contextProviders(client: Octokit | undefined, repo: RepositoryContext | undefined, cache: TTLCache): ContextProviderConfig;
6
+ //# sourceMappingURL=context-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-providers.d.ts","sourceRoot":"","sources":["../src/context-providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAItC,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,IAAI,EAAE,iBAAiB,GAAG,SAAS,EACnC,KAAK,EAAE,QAAQ,GACd,qBAAqB,CAsBvB"}
@@ -0,0 +1,20 @@
1
+ import { getSecrets } from "./context-providers/secrets";
2
+ import { getStepsContext } from "./context-providers/steps";
3
+ import { getVariables } from "./context-providers/variables";
4
+ export function contextProviders(client, repo, cache) {
5
+ if (!repo || !client) {
6
+ return { getContext: () => Promise.resolve(undefined) };
7
+ }
8
+ const getContext = async (name, defaultContext, workflowContext, mode) => {
9
+ switch (name) {
10
+ case "secrets":
11
+ return await getSecrets(workflowContext, client, cache, repo, defaultContext, mode);
12
+ case "vars":
13
+ return await getVariables(workflowContext, client, cache, repo, defaultContext);
14
+ case "steps":
15
+ return await getStepsContext(client, cache, defaultContext, workflowContext);
16
+ }
17
+ };
18
+ return { getContext };
19
+ }
20
+ //# sourceMappingURL=context-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-providers.js","sourceRoot":"","sources":["../src/context-providers.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,UAAU,EAAC,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAC,YAAY,EAAC,MAAM,+BAA+B,CAAC;AAI3D,MAAM,UAAU,gBAAgB,CAC9B,MAA2B,EAC3B,IAAmC,EACnC,KAAe;IAEf,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;QACpB,OAAO,EAAC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAC,CAAC;KACvD;IAED,MAAM,UAAU,GAAG,KAAK,EACtB,IAAY,EACZ,cAAiD,EACjD,eAAgC,EAChC,IAAU,EACV,EAAE;QACF,QAAQ,IAAI,EAAE;YACZ,KAAK,SAAS;gBACZ,OAAO,MAAM,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;YACtF,KAAK,MAAM;gBACT,OAAO,MAAM,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;YAClF,KAAK,OAAO;gBACV,OAAO,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;SAChF;IACH,CAAC,CAAC;IAEF,OAAO,EAAC,UAAU,EAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { DescriptionProvider } from "@actions/languageservice/hover";
2
+ import { Octokit } from "@octokit/rest";
3
+ import { TTLCache } from "./utils/cache";
4
+ export declare function descriptionProvider(client: Octokit | undefined, cache: TTLCache): DescriptionProvider;
5
+ //# sourceMappingURL=description-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description-provider.d.ts","sourceRoot":"","sources":["../src/description-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,mBAAmB,CAmBrG"}
@@ -0,0 +1,20 @@
1
+ import { getActionDescription } from "./description-providers/action-description";
2
+ import { getActionInputDescription } from "./description-providers/action-input";
3
+ export function descriptionProvider(client, cache) {
4
+ const getDescription = async (context, token, path) => {
5
+ if (!client || !context.step) {
6
+ return undefined;
7
+ }
8
+ const parent = path[path.length - 1];
9
+ if (parent.definition?.key === "step-with") {
10
+ return await getActionInputDescription(client, cache, context.step, token);
11
+ }
12
+ if (parent.definition?.key === "step-uses") {
13
+ return await getActionDescription(client, cache, context.step);
14
+ }
15
+ };
16
+ return {
17
+ getDescription
18
+ };
19
+ }
20
+ //# sourceMappingURL=description-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description-provider.js","sourceRoot":"","sources":["../src/description-provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,oBAAoB,EAAC,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAC,yBAAyB,EAAC,MAAM,sCAAsC,CAAC;AAG/E,MAAM,UAAU,mBAAmB,CAAC,MAA2B,EAAE,KAAe;IAC9E,MAAM,cAAc,GAA0C,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3F,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAC5B,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,KAAK,WAAW,EAAE;YAC1C,OAAO,MAAM,yBAAyB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC5E;QAED,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,KAAK,WAAW,EAAE;YAC1C,OAAO,MAAM,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;SAChE;IACH,CAAC,CAAC;IAEF,OAAO;QACL,cAAc;KACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Step } from "@actions/workflow-parser/model/workflow-template";
2
+ import { Octokit } from "@octokit/rest";
3
+ import { TTLCache } from "../utils/cache";
4
+ export declare function getActionDescription(client: Octokit, cache: TTLCache, step: Step): Promise<string | undefined>;
5
+ //# sourceMappingURL=action-description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-description.d.ts","sourceRoot":"","sources":["../../src/description-providers/action-description.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,IAAI,EAAC,MAAM,kDAAkD,CAAC;AACtE,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAExC,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAepH"}
@@ -0,0 +1,18 @@
1
+ import { actionUrl, parseActionReference } from "@actions/languageservice/action";
2
+ import { isActionStep } from "@actions/workflow-parser/model/type-guards";
3
+ import { fetchActionMetadata } from "../utils/action-metadata";
4
+ export async function getActionDescription(client, cache, step) {
5
+ if (!isActionStep(step)) {
6
+ return undefined;
7
+ }
8
+ const action = parseActionReference(step.uses.value);
9
+ if (!action) {
10
+ return undefined;
11
+ }
12
+ const metadata = await fetchActionMetadata(client, cache, action);
13
+ if (!metadata?.name || !metadata?.description) {
14
+ return undefined;
15
+ }
16
+ return `[**${metadata.name}**](${actionUrl(action)})\n\n${metadata.description}`;
17
+ }
18
+ //# sourceMappingURL=action-description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-description.js","sourceRoot":"","sources":["../../src/description-providers/action-description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,oBAAoB,EAAC,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAC,YAAY,EAAC,MAAM,4CAA4C,CAAC;AAGxE,OAAO,EAAC,mBAAmB,EAAC,MAAM,0BAA0B,CAAC;AAG7D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAe,EAAE,KAAe,EAAE,IAAU;IACrF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,SAAS,CAAC;KAClB;IACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;QAC7C,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,MAAM,QAAQ,CAAC,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,QAAQ,CAAC,WAAW,EAAE,CAAC;AACnF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Step } from "@actions/workflow-parser/model/workflow-template";
2
+ import { TemplateToken } from "@actions/workflow-parser/templates/tokens/template-token";
3
+ import { Octokit } from "@octokit/rest";
4
+ import { TTLCache } from "../utils/cache";
5
+ export declare function getActionInputDescription(client: Octokit, cache: TTLCache, step: Step, token: TemplateToken): Promise<string | undefined>;
6
+ //# sourceMappingURL=action-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-input.d.ts","sourceRoot":"","sources":["../../src/description-providers/action-input.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,IAAI,EAAC,MAAM,kDAAkD,CAAC;AACtE,OAAO,EAAC,aAAa,EAAC,MAAM,0DAA0D,CAAC;AACvF,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAExC,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsC7B"}
@@ -0,0 +1,36 @@
1
+ import { parseActionReference } from "@actions/languageservice/action";
2
+ import { isString } from "@actions/workflow-parser";
3
+ import { isActionStep } from "@actions/workflow-parser/model/type-guards";
4
+ import { fetchActionMetadata } from "../utils/action-metadata";
5
+ export async function getActionInputDescription(client, cache, step, token) {
6
+ if (!isActionStep(step)) {
7
+ return undefined;
8
+ }
9
+ const action = parseActionReference(step.uses.value);
10
+ if (!action) {
11
+ return undefined;
12
+ }
13
+ const inputName = isString(token) && token.value;
14
+ if (!inputName) {
15
+ return undefined;
16
+ }
17
+ const metadata = await fetchActionMetadata(client, cache, action);
18
+ if (!metadata?.inputs) {
19
+ return undefined;
20
+ }
21
+ const input = metadata.inputs[inputName];
22
+ if (!input) {
23
+ return undefined;
24
+ }
25
+ let description = input.description;
26
+ const deprecated = input.deprecationMessage !== undefined;
27
+ if (deprecated) {
28
+ // Validation will include the deprecation message, so don't duplicate it here
29
+ description += `\n\n**Deprecated**`;
30
+ }
31
+ if (input.required) {
32
+ description += "\n\n**Required**";
33
+ }
34
+ return description;
35
+ }
36
+ //# sourceMappingURL=action-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-input.js","sourceRoot":"","sources":["../../src/description-providers/action-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,4CAA4C,CAAC;AAIxE,OAAO,EAAC,mBAAmB,EAAC,MAAM,0BAA0B,CAAC;AAG7D,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAe,EACf,KAAe,EACf,IAAU,EACV,KAAoB;IAEpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,SAAS,CAAC;KAClB;IACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;QACrB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAEpC,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,KAAK,SAAS,CAAC;IAE1D,IAAI,UAAU,EAAE;QACd,8EAA8E;QAC9E,WAAW,IAAI,oBAAoB,CAAC;KACrC;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE;QAClB,WAAW,IAAI,kBAAkB,CAAC;KACnC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { FileProvider } from "@actions/workflow-parser/workflows/file-provider";
2
+ import { Octokit } from "@octokit/rest";
3
+ import { TTLCache } from "./utils/cache";
4
+ export declare function getFileProvider(client: Octokit | undefined, cache: TTLCache, workspace: string | undefined, readFile: (path: string) => Promise<string>): FileProvider | undefined;
5
+ //# sourceMappingURL=file-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-provider.d.ts","sourceRoot":"","sources":["../src/file-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,kDAAkD,CAAC;AAE9E,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC1C,YAAY,GAAG,SAAS,CA+B1B"}
@@ -0,0 +1,49 @@
1
+ import { fileIdentifier } from "@actions/workflow-parser/workflows/file-reference";
2
+ import path from "path";
3
+ export function getFileProvider(client, cache, workspace, readFile) {
4
+ if (!client && !workspace) {
5
+ return undefined;
6
+ }
7
+ return {
8
+ getFileContent: async (ref) => {
9
+ if ("repository" in ref) {
10
+ if (!client) {
11
+ throw new Error("Remote file references are not supported with this configuration");
12
+ }
13
+ return await cache.get(`file-content-${fileIdentifier(ref)}`, undefined, () => fetchWorkflowFile(client, ref.owner, ref.repository, ref.path, ref.version));
14
+ }
15
+ if (!workspace) {
16
+ throw new Error("Local file references are not supported with this configuration");
17
+ }
18
+ const file = await readFile(path.join(workspace, ref.path));
19
+ if (!file) {
20
+ throw new Error(`File not found: ${ref.path}`);
21
+ }
22
+ return {
23
+ name: ref.path,
24
+ content: file
25
+ };
26
+ }
27
+ };
28
+ }
29
+ async function fetchWorkflowFile(client, owner, repo, path, version) {
30
+ const resp = await client.repos.getContent({
31
+ owner,
32
+ repo,
33
+ path,
34
+ ref: version
35
+ });
36
+ // https://docs.github.com/rest/repos/contents?apiVersion=2022-11-28
37
+ // Ignore directories (array of files) and non-file content
38
+ if (resp.data === undefined ||
39
+ Array.isArray(resp.data) ||
40
+ resp.data.type !== "file" ||
41
+ resp.data.content === undefined) {
42
+ throw new Error("Not a file");
43
+ }
44
+ return {
45
+ name: path,
46
+ content: Buffer.from(resp.data.content, "base64").toString("utf8")
47
+ };
48
+ }
49
+ //# sourceMappingURL=file-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-provider.js","sourceRoot":"","sources":["../src/file-provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAC,MAAM,mDAAmD,CAAC;AAEjF,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,UAAU,eAAe,CAC7B,MAA2B,EAC3B,KAAe,EACf,SAA6B,EAC7B,QAA2C;IAE3C,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE;QACzB,OAAO,SAAS,CAAC;KAClB;IAED,OAAO;QACL,cAAc,EAAE,KAAK,EAAE,GAAG,EAAiB,EAAE;YAC3C,IAAI,YAAY,IAAI,GAAG,EAAE;gBACvB,IAAI,CAAC,MAAM,EAAE;oBACX,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;iBACrF;gBAED,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,gBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAC5E,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAC5E,CAAC;aACH;YAED,IAAI,CAAC,SAAS,EAAE;gBACd,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;aACpF;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,EAAE;gBACT,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;aAChD;YACD,OAAO;gBACL,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAe,EACf,KAAa,EACb,IAAY,EACZ,IAAY,EACZ,OAAe;IAEf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QACzC,KAAK;QACL,IAAI;QACJ,IAAI;QACJ,GAAG,EAAE,OAAO;KACb,CAAC,CAAC;IAEH,oEAAoE;IACpE,2DAA2D;IAC3D,IACE,IAAI,CAAC,IAAI,KAAK,SAAS;QACvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAC/B;QACA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;KAC/B;IAED,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;KACnE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ import { BrowserMessageReader, BrowserMessageWriter, createConnection as createBrowserConnection } from "vscode-languageserver/browser";
2
+ import { createConnection as createNodeConnection } from "vscode-languageserver/node";
3
+ import { initConnection } from "./connection";
4
+ /** Helper function determining whether we are executing with node runtime */
5
+ function isNode() {
6
+ return typeof process !== "undefined" && process.versions?.node != null;
7
+ }
8
+ function getConnection() {
9
+ if (isNode()) {
10
+ return createNodeConnection();
11
+ }
12
+ else {
13
+ const messageReader = new BrowserMessageReader(self);
14
+ const messageWriter = new BrowserMessageWriter(self);
15
+ return createBrowserConnection(messageReader, messageWriter);
16
+ }
17
+ }
18
+ initConnection(getConnection());
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,IAAI,uBAAuB,EAC5C,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,gBAAgB,IAAI,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAE5C,6EAA6E;AAC7E,SAAS,MAAM;IACb,OAAO,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;AAC1E,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,MAAM,EAAE,EAAE;QACZ,OAAO,oBAAoB,EAAE,CAAC;KAC/B;SAAM;QACL,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,uBAAuB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;KAC9D;AACH,CAAC;AAED,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { LogLevel } from "@actions/languageservice/log";
2
+ export { LogLevel } from "@actions/languageservice/log";
3
+ export interface InitializationOptions {
4
+ /**
5
+ * GitHub token that will be used to retrieve additional information from github.com
6
+ *
7
+ * Requires the `repo` and `workflow` scopes
8
+ */
9
+ sessionToken?: string;
10
+ /**
11
+ * Optional user agent to use when making calls to github.com
12
+ */
13
+ userAgent?: string;
14
+ /**
15
+ * List of repositories that the language server should be aware of
16
+ */
17
+ repos?: RepositoryContext[];
18
+ /**
19
+ * Desired log level
20
+ */
21
+ logLevel?: LogLevel;
22
+ }
23
+ export interface RepositoryContext {
24
+ /**
25
+ * Repository ID
26
+ */
27
+ id: number;
28
+ /**
29
+ * Repository owner
30
+ */
31
+ owner: string;
32
+ /**
33
+ * Indicates if the repository is owned by an organization
34
+ */
35
+ organizationOwned: boolean;
36
+ /**
37
+ * Repository name
38
+ */
39
+ name: string;
40
+ /**
41
+ * Local workspace uri
42
+ */
43
+ workspaceUri: string;
44
+ }
45
+ //# sourceMappingURL=initializationOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializationOptions.d.ts","sourceRoot":"","sources":["../src/initializationOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAC,QAAQ,EAAC,MAAM,8BAA8B,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export { LogLevel } from "@actions/languageservice/log";
2
+ //# sourceMappingURL=initializationOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializationOptions.js","sourceRoot":"","sources":["../src/initializationOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Octokit } from "@octokit/rest";
2
+ import { CompletionItem, Connection, Position } from "vscode-languageserver";
3
+ import { TextDocument } from "vscode-languageserver-textdocument";
4
+ import { RepositoryContext } from "./initializationOptions";
5
+ import { TTLCache } from "./utils/cache";
6
+ export declare function onCompletion(connection: Connection, position: Position, document: TextDocument, client: Octokit | undefined, repoContext: RepositoryContext | undefined, cache: TTLCache): Promise<CompletionItem[]>;
7
+ //# sourceMappingURL=on-completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-completion.d.ts","sourceRoot":"","sources":["../src/on-completion.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EAAC,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAC,YAAY,EAAC,MAAM,oCAAoC,CAAC;AAGhE,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAGvC,wBAAsB,YAAY,CAChC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,WAAW,EAAE,iBAAiB,GAAG,SAAS,EAC1C,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC,cAAc,EAAE,CAAC,CAQ3B"}
@@ -0,0 +1,15 @@
1
+ import { complete } from "@actions/languageservice/complete";
2
+ import { contextProviders } from "./context-providers";
3
+ import { getFileProvider } from "./file-provider";
4
+ import { Requests } from "./request";
5
+ import { valueProviders } from "./value-providers";
6
+ export async function onCompletion(connection, position, document, client, repoContext, cache) {
7
+ return await complete(document, position, {
8
+ valueProviderConfig: repoContext && valueProviders(client, repoContext, cache),
9
+ contextProviderConfig: repoContext && contextProviders(client, repoContext, cache),
10
+ fileProvider: getFileProvider(client, cache, repoContext?.workspaceUri, async (path) => {
11
+ return await connection.sendRequest(Requests.ReadFile, { path });
12
+ })
13
+ });
14
+ }
15
+ //# sourceMappingURL=on-completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-completion.js","sourceRoot":"","sources":["../src/on-completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,mCAAmC,CAAC;AAI3D,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAsB,EACtB,QAAkB,EAClB,QAAsB,EACtB,MAA2B,EAC3B,WAA0C,EAC1C,KAAe;IAEf,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE;QACxC,mBAAmB,EAAE,WAAW,IAAI,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC;QAC9E,qBAAqB,EAAE,WAAW,IAAI,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC;QAClF,YAAY,EAAE,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;YACnF,OAAO,MAAM,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAC,CAAC,CAAC;QACjE,CAAC,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const Requests: {
2
+ readonly ReadFile: "actions/readFile";
3
+ };
4
+ export type ReadFileRequest = {
5
+ path: string;
6
+ };
7
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;CAEX,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const Requests = {
2
+ ReadFile: "actions/readFile"
3
+ };
4
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,kBAAkB;CACpB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ActionMetadata, ActionReference } from "@actions/languageservice/action";
2
+ import { Octokit } from "@octokit/rest";
3
+ import { TTLCache } from "./cache";
4
+ export declare function fetchActionMetadata(client: Octokit, cache: TTLCache, action: ActionReference): Promise<ActionMetadata | undefined>;
5
+ //# sourceMappingURL=action-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-metadata.d.ts","sourceRoot":"","sources":["../../src/utils/action-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAE,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAElG,OAAO,EAAC,OAAO,EAA0B,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAGjC,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAUrC"}
@@ -0,0 +1,56 @@
1
+ import { actionIdentifier } from "@actions/languageservice/action";
2
+ import { error } from "@actions/languageservice/log";
3
+ import { parse } from "yaml";
4
+ import { errorMessage, errorStatus } from "./error";
5
+ export async function fetchActionMetadata(client, cache, action) {
6
+ const metadata = await cache.get(`${actionIdentifier(action)}/action-metadata`, undefined, () => getActionMetadata(client, action));
7
+ if (!metadata) {
8
+ return undefined;
9
+ }
10
+ // https://docs.github.com/actions/creating-actions/metadata-syntax-for-github-actions
11
+ return parse(metadata);
12
+ }
13
+ async function getActionMetadata(client, action) {
14
+ let resp;
15
+ try {
16
+ resp = await fetchAction(client, action);
17
+ }
18
+ catch (e) {
19
+ error(`Failed to fetch action metadata for ${actionIdentifier(action)}: '${errorMessage(e)}'`);
20
+ return;
21
+ }
22
+ // https://docs.github.com/rest/repos/contents?apiVersion=2022-11-28
23
+ // Ignore directories (array of files) and non-file content
24
+ if (resp.data === undefined || Array.isArray(resp.data) || resp.data.type !== "file") {
25
+ return undefined;
26
+ }
27
+ if (resp.data.content === undefined) {
28
+ return undefined;
29
+ }
30
+ return Buffer.from(resp.data.content, "base64").toString("utf8");
31
+ }
32
+ async function fetchAction(client, action) {
33
+ try {
34
+ return await client.repos.getContent({
35
+ owner: action.owner,
36
+ repo: action.name,
37
+ ref: action.ref,
38
+ path: action.path ? `${action.path}/action.yml` : "action.yml"
39
+ });
40
+ }
41
+ catch (e) {
42
+ // If action.yml doesn't exist, try action.yaml
43
+ if (errorStatus(e) === 404) {
44
+ return await client.repos.getContent({
45
+ owner: action.owner,
46
+ repo: action.name,
47
+ ref: action.ref,
48
+ path: action.path ? `${action.path}/action.yaml` : "action.yaml"
49
+ });
50
+ }
51
+ else {
52
+ throw e;
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=action-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-metadata.js","sourceRoot":"","sources":["../../src/utils/action-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAkC,MAAM,iCAAiC,CAAC;AAClG,OAAO,EAAC,KAAK,EAAC,MAAM,8BAA8B,CAAC;AAEnD,OAAO,EAAC,KAAK,EAAC,MAAM,MAAM,CAAC;AAE3B,OAAO,EAAC,YAAY,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAe,EACf,KAAe,EACf,MAAuB;IAEvB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,EAAE,GAAG,EAAE,CAC9F,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAClC,CAAC;IACF,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,SAAS,CAAC;KAClB;IAED,sFAAsF;IACtF,OAAO,KAAK,CAAC,QAAQ,CAAmB,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,MAAe,EAAE,MAAuB;IACvE,IAAI,IAAgE,CAAC;IACrE,IAAI;QACF,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1C;IAAC,OAAO,CAAC,EAAE;QACV,KAAK,CAAC,uCAAuC,gBAAgB,CAAC,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/F,OAAO;KACR;IAED,oEAAoE;IACpE,2DAA2D;IAC3D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;QACpF,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;QACnC,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAe,EAAE,MAAuB;IACjE,IAAI;QACF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;YACnC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,YAAY;SAC/D,CAAC,CAAC;KACJ;IAAC,OAAO,CAAC,EAAE;QACV,+CAA+C;QAC/C,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAC1B,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;gBACnC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,aAAa;aACjE,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,CAAC,CAAC;SACT;KACF;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare class TTLCache {
2
+ private defaultTTLinMS;
3
+ private cache;
4
+ constructor(defaultTTLinMS?: number);
5
+ /**
6
+ *
7
+ * @param key Key to cache value under
8
+ * @param ttlInMS How long is the content valid. If optional, default value will be used
9
+ * @param getter Function to retrieve content if not in cache
10
+ */
11
+ get<T>(key: string, ttlInMS: number | undefined, getter: () => Promise<T>): Promise<T>;
12
+ clear(): void;
13
+ }
14
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAMA,qBAAa,QAAQ;IAGP,OAAO,CAAC,cAAc;IAFlC,OAAO,CAAC,KAAK,CAA0C;gBAEnC,cAAc,GAAE,MAAuB;IAE3D;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAsB5F,KAAK,IAAI,IAAI;CAGd"}