Compare commits

...

2 Commits

Author SHA1 Message Date
github-actions[bot] 3734de18ee Release extension version 0.3.30 (#274)
Co-authored-by: GitHub Actions <github-actions@github.com>
2025-12-30 12:01:49 -06:00
eric sciple 90e7932e97 Add runs-on label completions for mapping syntax (#273)
Provides runner label completions (ubuntu-latest, macos-latest, etc.)
when using the runs-on mapping syntax with the labels property:

  jobs:
    build:
      runs-on:
        labels: |

  jobs:
    build:
      runs-on:
        labels:
          - |

Previously, completions only worked for the simple runs-on syntax:

  jobs:
    build:
      runs-on: |

The fix registers the same value provider for both 'runs-on' and
'runs-on-labels' definition keys in the schema.
2025-12-30 10:30:19 -06:00
8 changed files with 73 additions and 23 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@actions/expressions",
"version": "0.3.29",
"version": "0.3.30",
"license": "MIT",
"type": "module",
"source": "./src/index.ts",
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@actions/languageserver",
"version": "0.3.29",
"version": "0.3.30",
"description": "Language server for GitHub Actions",
"license": "MIT",
"type": "module",
@@ -48,8 +48,8 @@
"actions-languageserver": "./bin/actions-languageserver"
},
"dependencies": {
"@actions/languageservice": "^0.3.29",
"@actions/workflow-parser": "^0.3.29",
"@actions/languageservice": "^0.3.30",
"@actions/workflow-parser": "^0.3.30",
"@octokit/rest": "^21.1.1",
"@octokit/types": "^9.0.0",
"vscode-languageserver": "^8.0.2",
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@actions/languageservice",
"version": "0.3.29",
"version": "0.3.30",
"description": "Language service for GitHub Actions",
"license": "MIT",
"type": "module",
@@ -47,8 +47,8 @@
"watch": "tsc --build tsconfig.build.json --watch"
},
"dependencies": {
"@actions/expressions": "^0.3.29",
"@actions/workflow-parser": "^0.3.29",
"@actions/expressions": "^0.3.30",
"@actions/workflow-parser": "^0.3.30",
"vscode-languageserver-textdocument": "^1.0.7",
"vscode-languageserver-types": "^3.17.2",
"vscode-uri": "^3.0.8",
+47
View File
@@ -825,4 +825,51 @@ jobs:
expect(textEdit.newText).toEqual("runs-on:\n - ");
});
});
describe("runs-on mapping syntax", () => {
it("provides label completions for labels as scalar", async () => {
const input = `on: push
jobs:
build:
runs-on:
labels: |`;
const result = await complete(...getPositionFromCursor(input));
// Should show runner labels
expect(result.some(x => x.label === "ubuntu-latest")).toBe(true);
expect(result.some(x => x.label === "macos-latest")).toBe(true);
expect(result.some(x => x.label === "self-hosted")).toBe(true);
});
it("provides label completions for labels as sequence item", async () => {
const input = `on: push
jobs:
build:
runs-on:
labels:
- |`;
const result = await complete(...getPositionFromCursor(input));
// Should show runner labels
expect(result.some(x => x.label === "ubuntu-latest")).toBe(true);
expect(result.some(x => x.label === "macos-latest")).toBe(true);
expect(result.some(x => x.label === "self-hosted")).toBe(true);
});
it("excludes already used labels in sequence", async () => {
const input = `on: push
jobs:
build:
runs-on:
labels:
- ubuntu-latest
- |`;
const result = await complete(...getPositionFromCursor(input));
// Should NOT show ubuntu-latest since it's already in the list
expect(result.some(x => x.label === "ubuntu-latest")).toBe(false);
// But should show other labels
expect(result.some(x => x.label === "macos-latest")).toBe(true);
});
});
});
@@ -19,6 +19,11 @@ export const DEFAULT_RUNNER_LABELS = [
"self-hosted"
];
const runsOnValueProvider = {
kind: ValueProviderKind.SuggestedValues,
get: () => Promise.resolve(stringsToValues(DEFAULT_RUNNER_LABELS))
};
export const defaultValueProviders: ValueProviderConfig = {
needs: {
kind: ValueProviderKind.AllowedValues,
@@ -32,8 +37,6 @@ export const defaultValueProviders: ValueProviderConfig = {
kind: ValueProviderKind.SuggestedValues,
get: (context, existingValues) => Promise.resolve(reusableJobSecrets(context, existingValues))
},
"runs-on": {
kind: ValueProviderKind.SuggestedValues,
get: () => Promise.resolve(stringsToValues(DEFAULT_RUNNER_LABELS))
}
"runs-on": runsOnValueProvider,
"runs-on-labels": runsOnValueProvider
};
+1 -1
View File
@@ -6,5 +6,5 @@
"languageservice",
"languageserver"
],
"version": "0.3.29"
"version": "0.3.30"
}
+9 -9
View File
@@ -136,7 +136,7 @@
},
"expressions": {
"name": "@actions/expressions",
"version": "0.3.29",
"version": "0.3.30",
"license": "MIT",
"devDependencies": {
"@types/jest": "^29.0.3",
@@ -396,11 +396,11 @@
},
"languageserver": {
"name": "@actions/languageserver",
"version": "0.3.29",
"version": "0.3.30",
"license": "MIT",
"dependencies": {
"@actions/languageservice": "^0.3.29",
"@actions/workflow-parser": "^0.3.29",
"@actions/languageservice": "^0.3.30",
"@actions/workflow-parser": "^0.3.30",
"@octokit/rest": "^21.1.1",
"@octokit/types": "^9.0.0",
"vscode-languageserver": "^8.0.2",
@@ -940,11 +940,11 @@
},
"languageservice": {
"name": "@actions/languageservice",
"version": "0.3.29",
"version": "0.3.30",
"license": "MIT",
"dependencies": {
"@actions/expressions": "^0.3.29",
"@actions/workflow-parser": "^0.3.29",
"@actions/expressions": "^0.3.30",
"@actions/workflow-parser": "^0.3.30",
"vscode-languageserver-textdocument": "^1.0.7",
"vscode-languageserver-types": "^3.17.2",
"vscode-uri": "^3.0.8",
@@ -13345,10 +13345,10 @@
},
"workflow-parser": {
"name": "@actions/workflow-parser",
"version": "0.3.29",
"version": "0.3.30",
"license": "MIT",
"dependencies": {
"@actions/expressions": "^0.3.29",
"@actions/expressions": "^0.3.30",
"cronstrue": "^2.21.0",
"yaml": "^2.0.0-8"
},
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@actions/workflow-parser",
"version": "0.3.29",
"version": "0.3.30",
"license": "MIT",
"type": "module",
"source": "./src/index.ts",
@@ -48,7 +48,7 @@
"watch": "tsc --build tsconfig.build.json --watch"
},
"dependencies": {
"@actions/expressions": "^0.3.29",
"@actions/expressions": "^0.3.30",
"cronstrue": "^2.21.0",
"yaml": "^2.0.0-8"
},