Compare commits

..
Author SHA1 Message Date
Felipe Suero 49b80c3ef0 switch all to main and pull 2023-04-17 14:35:54 -04:00
25 changed files with 121 additions and 285 deletions
+9 -20
View File
@@ -1,18 +1,13 @@
name: Create release PR name: Create release PR
run-name: Create release PR for new ${{ github.event.inputs.version }} version run-name: Create release PR for v${{ github.event.inputs.version }}
on: on:
workflow_dispatch: workflow_dispatch:
inputs: inputs:
version: version:
required: true required: true
type: choice description: "Version to bump `package.json` to (format: x.y.z)"
description: "What type of release is this"
options:
- "major"
- "minor"
- "patch"
jobs: jobs:
create-release-pr: create-release-pr:
@@ -36,27 +31,21 @@ jobs:
git config --global user.email "[email protected]" git config --global user.email "[email protected]"
git config --global user.name "GitHub Actions" git config --global user.name "GitHub Actions"
NEW_VERSION=$(./script/workflows/increment-version.sh ${{ inputs.version }}) git checkout -b release/${{ inputs.version }}
git checkout -b release/$NEW_VERSION npx lerna version ${{ inputs.version }} --yes --no-push --no-git-tag-version --force-publish
npx lerna version $NEW_VERSION --yes --no-push --no-git-tag-version --force-publish
git add **/package.json package-lock.json lerna.json git add **/package.json package-lock.json lerna.json
git commit -m "Release extension version $NEW_VERSION" git commit -m "Release extension version ${{ inputs.version }}"
git push --set-upstream origin release/$NEW_VERSION git push --set-upstream origin release/${{ inputs.version }}
echo "new_version=$NEW_VERSION" >> $GITHUB_ENV
- name: Create PR - name: Create PR
run: | run: |
LAST_PR=$(gh pr list --repo ${{ github.repository }} --limit 1 --state merged --search "Release version" --json number | jq -r '.[0].number')
./script/workflows/generate-release-notes.sh $LAST_PR ${{ env.new_version }}
gh pr create \ gh pr create \
--title "Release version ${{ env.new_version }}" \ --title "Release version ${{ inputs.version }}" \
--body-file releasenotes.md \ --body "Release version ${{ inputs.version }}" \
--base main \ --base main \
--head release/${{ env.new_version }} --head release/${{ inputs.version }}
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+1 -1
View File
@@ -1,5 +1,5 @@
*/node_modules */node_modules
*/dist */dist
lerna-debug.log
node_modules node_modules
.DS_Store .DS_Store
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@actions/expressions", "name": "@actions/expressions",
"version": "0.3.8", "version": "0.3.3",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"source": "./src/index.ts", "source": "./src/index.ts",
+3 -3
View File
@@ -1,6 +1,6 @@
{ {
"name": "@actions/languageserver", "name": "@actions/languageserver",
"version": "0.3.8", "version": "0.3.3",
"description": "Language server for GitHub Actions", "description": "Language server for GitHub Actions",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
@@ -43,8 +43,8 @@
"watch": "tsc --build tsconfig.build.json --watch" "watch": "tsc --build tsconfig.build.json --watch"
}, },
"dependencies": { "dependencies": {
"@actions/languageservice": "^0.3.8", "@actions/languageservice": "^0.3.3",
"@actions/workflow-parser": "^0.3.8", "@actions/workflow-parser": "^0.3.3",
"@octokit/rest": "^19.0.7", "@octokit/rest": "^19.0.7",
"@octokit/types": "^9.0.0", "@octokit/types": "^9.0.0",
"vscode-languageserver": "^8.0.2", "vscode-languageserver": "^8.0.2",
+2 -3
View File
@@ -1,9 +1,8 @@
import {Octokit} from "@octokit/rest"; import {Octokit} from "@octokit/rest";
export function getClient(token: string, userAgent?: string, apiUrl?: string): Octokit { export function getClient(token: string, userAgent?: string): Octokit {
return new Octokit({ return new Octokit({
auth: token, auth: token,
userAgent: userAgent || `GitHub Actions Language Server`, userAgent: userAgent || `GitHub Actions Language Server`
baseUrl: apiUrl
}); });
} }
+1 -1
View File
@@ -51,7 +51,7 @@ export function initConnection(connection: Connection) {
const options = params.initializationOptions as InitializationOptions; const options = params.initializationOptions as InitializationOptions;
if (options.sessionToken) { if (options.sessionToken) {
client = getClient(options.sessionToken, options.userAgent, options.gitHubApiUrl); client = getClient(options.sessionToken, options.userAgent);
} }
if (options.repos) { if (options.repos) {
@@ -28,7 +28,6 @@ export async function getSecrets(
} }
const eventsConfig = workflowContext?.template?.events; const eventsConfig = workflowContext?.template?.events;
if (eventsConfig?.workflow_call) { if (eventsConfig?.workflow_call) {
// Unpredictable secrets may be passed in via a workflow_call trigger // Unpredictable secrets may be passed in via a workflow_call trigger
secretsContext.complete = false; secretsContext.complete = false;
@@ -39,7 +38,6 @@ export async function getSecrets(
} }
let environmentName: string | undefined; let environmentName: string | undefined;
if (workflowContext?.job?.environment) { if (workflowContext?.job?.environment) {
if (isString(workflowContext.job.environment)) { if (isString(workflowContext.job.environment)) {
environmentName = workflowContext.job.environment.value; environmentName = workflowContext.job.environment.value;
@@ -48,17 +46,10 @@ export async function getSecrets(
if (isString(x.key) && x.key.value === "name") { if (isString(x.key) && x.key.value === "name") {
if (isString(x.value)) { if (isString(x.value)) {
environmentName = x.value.value; environmentName = x.value.value;
} else {
// this means we have a dynamic enviornment, in those situations we
// want to make sure we skip doing secret validation
secretsContext.complete = false;
} }
break; break;
} }
} }
} else {
// if the expression is something like environment: ${{ ... }} then we want to skip validation
secretsContext.complete = false;
} }
} }
@@ -2,10 +2,9 @@ import {data, DescriptionDictionary} from "@actions/expressions";
import {Pair} from "@actions/expressions/data/expressiondata"; import {Pair} from "@actions/expressions/data/expressiondata";
import {StringData} from "@actions/expressions/data/index"; import {StringData} from "@actions/expressions/data/index";
import {WorkflowContext} from "@actions/languageservice/context/workflow-context"; import {WorkflowContext} from "@actions/languageservice/context/workflow-context";
import {log, warn} from "@actions/languageservice/log"; import {warn} from "@actions/languageservice/log";
import {isMapping, isString} from "@actions/workflow-parser"; import {isMapping, isString} from "@actions/workflow-parser";
import {Octokit} from "@octokit/rest"; import {Octokit} from "@octokit/rest";
import {RequestError} from "@octokit/request-error";
import {RepositoryContext} from "../initializationOptions"; import {RepositoryContext} from "../initializationOptions";
import {TTLCache} from "../utils/cache"; import {TTLCache} from "../utils/cache";
@@ -43,58 +42,50 @@ export async function getVariables(
} }
const variablesContext = defaultContext || new DescriptionDictionary(); const variablesContext = defaultContext || new DescriptionDictionary();
try { const variables = await getRemoteVariables(octokit, cache, repo, environmentName);
const variables = await getRemoteVariables(octokit, cache, repo, environmentName);
// Build combined map of variables // Build combined map of variables
const variablesMap = new Map< const variablesMap = new Map<
string, string,
{ {
key: string; key: string;
value: data.StringData; value: data.StringData;
description?: string; description?: string;
} }
>(); >();
variables.organizationVariables.forEach(variable => variables.organizationVariables.forEach(variable =>
variablesMap.set(variable.key.toLowerCase(), { variablesMap.set(variable.key.toLowerCase(), {
key: variable.key, key: variable.key,
value: new data.StringData(variable.value.coerceString()), value: new data.StringData(variable.value.coerceString()),
description: `${variable.value.coerceString()} - Organization variable` description: `${variable.value.coerceString()} - Organization variable`
}) })
); );
// Override org variables with repo variables // Override org variables with repo variables
variables.repoVariables.forEach(variable => variables.repoVariables.forEach(variable =>
variablesMap.set(variable.key.toLowerCase(), { variablesMap.set(variable.key.toLowerCase(), {
key: variable.key, key: variable.key,
value: new data.StringData(variable.value.coerceString()), value: new data.StringData(variable.value.coerceString()),
description: `${variable.value.coerceString()} - Repository variable` description: `${variable.value.coerceString()} - Repository variable`
}) })
); );
// Override repo variables with environment veriables (if defined) // Override repo variables with environment veriables (if defined)
variables.environmentVariables.forEach(variable => variables.environmentVariables.forEach(variable =>
variablesMap.set(variable.key.toLowerCase(), { variablesMap.set(variable.key.toLowerCase(), {
key: variable.key, key: variable.key,
value: new data.StringData(variable.value.coerceString()), value: new data.StringData(variable.value.coerceString()),
description: `${variable.value.coerceString()} - Variable for environment \`${environmentName || ""}\`` description: `${variable.value.coerceString()} - Variable for environment \`${environmentName || ""}\``
}) })
); );
// Sort variables by key and add to context // Sort variables by key and add to context
Array.from(variablesMap.values()) Array.from(variablesMap.values())
.sort((a, b) => a.key.localeCompare(b.key)) .sort((a, b) => a.key.localeCompare(b.key))
.forEach(variable => variablesContext?.add(variable.key, variable.value, variable.description)); .forEach(variable => variablesContext?.add(variable.key, variable.value, variable.description));
return variablesContext; return variablesContext;
} catch (e) {
if (!(e instanceof RequestError)) throw e;
if (e.name == "HttpError" && e.status == 404) {
log("Failure to request variables. Ignore if you're using GitHub Enterprise Server below version 3.8");
return variablesContext;
} else throw e;
}
} }
export async function getRemoteVariables( export async function getRemoteVariables(
+2 -5
View File
@@ -2,8 +2,8 @@ import {File} from "@actions/workflow-parser/workflows/file";
import {FileProvider} from "@actions/workflow-parser/workflows/file-provider"; import {FileProvider} from "@actions/workflow-parser/workflows/file-provider";
import {fileIdentifier} from "@actions/workflow-parser/workflows/file-reference"; import {fileIdentifier} from "@actions/workflow-parser/workflows/file-reference";
import {Octokit} from "@octokit/rest"; import {Octokit} from "@octokit/rest";
import path from "path";
import {TTLCache} from "./utils/cache"; import {TTLCache} from "./utils/cache";
import vscodeURI from "vscode-uri/lib/umd";
export function getFileProvider( export function getFileProvider(
client: Octokit | undefined, client: Octokit | undefined,
@@ -31,10 +31,7 @@ export function getFileProvider(
throw new Error("Local file references are not supported with this configuration"); throw new Error("Local file references are not supported with this configuration");
} }
const workspaceURI = vscodeURI.URI.parse(workspace); const file = await readFile(path.join(workspace, ref.path));
const refURI = vscodeURI.Utils.joinPath(workspaceURI, ref.path);
const file = await readFile(refURI.toString());
if (!file) { if (!file) {
throw new Error(`File not found: ${ref.path}`); throw new Error(`File not found: ${ref.path}`);
} }
@@ -23,11 +23,6 @@ export interface InitializationOptions {
* Desired log level * Desired log level
*/ */
logLevel?: LogLevel; logLevel?: LogLevel;
/**
* If a GitHub Enterprise Server should be used, the URL of the API endpoint, eg "https://ghe.my-company.com/api/v3"
*/
gitHubApiUrl?: string;
} }
export interface RepositoryContext { export interface RepositoryContext {
+3 -3
View File
@@ -1,6 +1,6 @@
{ {
"name": "@actions/languageservice", "name": "@actions/languageservice",
"version": "0.3.8", "version": "0.3.3",
"description": "Language service for GitHub Actions", "description": "Language service for GitHub Actions",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
@@ -44,8 +44,8 @@
"watch": "tsc --build tsconfig.build.json --watch" "watch": "tsc --build tsconfig.build.json --watch"
}, },
"dependencies": { "dependencies": {
"@actions/expressions": "^0.3.8", "@actions/expressions": "^0.3.3",
"@actions/workflow-parser": "^0.3.8", "@actions/workflow-parser": "^0.3.3",
"vscode-languageserver-textdocument": "^1.0.7", "vscode-languageserver-textdocument": "^1.0.7",
"vscode-languageserver-types": "^3.17.2", "vscode-languageserver-types": "^3.17.2",
"vscode-uri": "^3.0.7", "vscode-uri": "^3.0.7",
+6 -38
View File
@@ -4,8 +4,8 @@ import {complete} from "./complete";
import {registerLogger} from "./log"; import {registerLogger} from "./log";
import {getPositionFromCursor} from "./test-utils/cursor-position"; import {getPositionFromCursor} from "./test-utils/cursor-position";
import {TestLogger} from "./test-utils/logger"; import {TestLogger} from "./test-utils/logger";
import {clearCache} from "./utils/workflow-cache";
import {ValueProviderConfig, ValueProviderKind} from "./value-providers/config"; import {ValueProviderConfig, ValueProviderKind} from "./value-providers/config";
import {clearCache} from "./utils/workflow-cache";
registerLogger(new TestLogger()); registerLogger(new TestLogger());
@@ -406,7 +406,7 @@ jobs:
expect(result.map(e => e.label)).toContain("runs-on"); expect(result.map(e => e.label)).toContain("runs-on");
const textEdit = result.filter(e => e.label === "runs-on")[0].textEdit as TextEdit; const textEdit = result.filter(e => e.label === "runs-on")[0].textEdit as TextEdit;
expect(textEdit.newText).toEqual("runs-on: "); expect(textEdit.newText).toEqual("runs-on");
expect(textEdit.range).toEqual({ expect(textEdit.range).toEqual({
start: {line: 3, character: 4}, start: {line: 3, character: 4},
end: {line: 3, character: 10} end: {line: 3, character: 10}
@@ -421,7 +421,7 @@ jobs:
expect(result.map(e => e.label)).toContain("runs-on"); expect(result.map(e => e.label)).toContain("runs-on");
const textEdit = result.filter(e => e.label === "runs-on")[0].textEdit as TextEdit; const textEdit = result.filter(e => e.label === "runs-on")[0].textEdit as TextEdit;
expect(textEdit.newText).toEqual("runs-on: "); expect(textEdit.newText).toEqual("runs-on");
expect(textEdit.range).toEqual({ expect(textEdit.range).toEqual({
start: {line: 3, character: 4}, start: {line: 3, character: 4},
end: {line: 3, character: 4} end: {line: 3, character: 4}
@@ -448,7 +448,7 @@ jobs:
]); ]);
// One-of // One-of
expect(result.filter(x => x.label === "concurrency").map(x => x.textEdit?.newText)).toEqual(["concurrency: "]); expect(result.filter(x => x.label === "concurrency").map(x => x.textEdit?.newText)).toEqual(["concurrency"]);
}); });
it("custom indentation", async () => { it("custom indentation", async () => {
@@ -471,11 +471,11 @@ jobs:
]); ]);
// One-of // One-of
expect(result.filter(x => x.label === "concurrency").map(x => x.textEdit?.newText)).toEqual(["concurrency: "]); expect(result.filter(x => x.label === "concurrency").map(x => x.textEdit?.newText)).toEqual(["concurrency"]);
}); });
}); });
it("adds a new line and indentation for mapping keys when the key is given", async () => { it("adds a new line and indentation for mapping keys", async () => {
const input = "concurrency: |"; const input = "concurrency: |";
const result = await complete(...getPositionFromCursor(input)); const result = await complete(...getPositionFromCursor(input));
@@ -485,36 +485,4 @@ jobs:
]); ]);
expect(result.filter(x => x.label === "group").map(x => x.textEdit?.newText)).toEqual(["\n group: "]); expect(result.filter(x => x.label === "group").map(x => x.textEdit?.newText)).toEqual(["\n group: "]);
}); });
it("does not add new line if no key in line", async () => {
const input = "run-n|";
const result = await complete(...getPositionFromCursor(input));
expect(result.filter(x => x.label === "run-name").map(x => x.textEdit?.newText)).toEqual(["run-name: "]);
});
it("adds new line for nested mapping", async () => {
const input = "on:\n workflow_dispatch: in|";
const result = await complete(...getPositionFromCursor(input));
expect(result.filter(x => x.label === "inputs").map(x => x.textEdit?.newText)).toEqual(["\n inputs:\n "]);
});
it("adds : for one-of", async () => {
const input = "on:\n check_run:\n ty|";
const result = await complete(...getPositionFromCursor(input));
expect(result.filter(x => x.label === "types").map(x => x.textEdit?.newText)).toEqual(["types: "]);
});
it("does not add : for one-of in key mode", async () => {
const input = "on:\n check_run: ty|";
const result = await complete(...getPositionFromCursor(input));
expect(result.filter(x => x.label === "types").map(x => x.textEdit?.newText)).toEqual(["types"]);
});
}); });
+2 -2
View File
@@ -24,7 +24,7 @@ import {isPlaceholder, transform} from "./utils/transform";
import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache"; import {fetchOrConvertWorkflowTemplate, fetchOrParseWorkflow} from "./utils/workflow-cache";
import {Value, ValueProviderConfig} from "./value-providers/config"; import {Value, ValueProviderConfig} from "./value-providers/config";
import {defaultValueProviders} from "./value-providers/default"; import {defaultValueProviders} from "./value-providers/default";
import {DefinitionValueMode, definitionValues} from "./value-providers/definition"; import {definitionValues} from "./value-providers/definition";
export function getExpressionInput(input: string, pos: number): string { export function getExpressionInput(input: string, pos: number): string {
// Find start marker around the cursor position // Find start marker around the cursor position
@@ -180,7 +180,7 @@ async function getValues(
return []; return [];
} }
const values = definitionValues(def, indentation, keyToken ? DefinitionValueMode.Key : DefinitionValueMode.Parent); const values = definitionValues(def, indentation);
return filterAndSortCompletionOptions(values, existingValues); return filterAndSortCompletionOptions(values, existingValues);
} }
@@ -8,7 +8,7 @@ import {getEventPayload, getSupportedEventTypes} from "./events/eventPayloads";
import {getInputsContext} from "./inputs"; import {getInputsContext} from "./inputs";
export function getGithubContext(workflowContext: WorkflowContext, mode: Mode): DescriptionDictionary { export function getGithubContext(workflowContext: WorkflowContext, mode: Mode): DescriptionDictionary {
// https://docs.github.com/en/actions/learn-github-actions/contexts#github-context // https://docs.github.com/en/actions/learn-github-actions/contexts#github-cwontext
const keys = [ const keys = [
"action", "action",
"action_path", "action_path",
@@ -16,7 +16,6 @@ export function getGithubContext(workflowContext: WorkflowContext, mode: Mode):
"action_repository", "action_repository",
"action_status", "action_status",
"actor", "actor",
"actor_id",
"api_url", "api_url",
"base_ref", "base_ref",
"env", "env",
@@ -26,16 +25,13 @@ export function getGithubContext(workflowContext: WorkflowContext, mode: Mode):
"graphql_url", "graphql_url",
"head_ref", "head_ref",
"job", "job",
"job_workflow_sha",
"path",
"ref", "ref",
"ref_name", "ref_name",
"ref_protected", "ref_protected",
"ref_type", "ref_type",
"path",
"repository", "repository",
"repository_id",
"repository_owner", "repository_owner",
"repository_owner_id",
"repositoryUrl", "repositoryUrl",
"retention_days", "retention_days",
"run_id", "run_id",
@@ -47,8 +43,6 @@ export function getGithubContext(workflowContext: WorkflowContext, mode: Mode):
"token", "token",
"triggering_actor", "triggering_actor",
"workflow", "workflow",
"workflow_ref",
"workflow_sha",
"workspace" "workspace"
]; ];
@@ -9,30 +9,15 @@ import {getWorkflowSchema} from "@actions/workflow-parser/workflows/workflow-sch
import {Value} from "./config"; import {Value} from "./config";
import {stringsToValues} from "./strings-to-values"; import {stringsToValues} from "./strings-to-values";
export enum DefinitionValueMode { export function definitionValues(def: Definition, indentation: string): Value[] {
/**
* We're getting completion options for a parent token
* foo:
* ba|
*/
Parent,
/**
* We're getting completion options for a key token. For example:
* foo: |
*/
Key
}
export function definitionValues(def: Definition, indentation: string, mode: DefinitionValueMode): Value[] {
const schema = getWorkflowSchema(); const schema = getWorkflowSchema();
if (def instanceof MappingDefinition) { if (def instanceof MappingDefinition) {
return mappingValues(def, schema.definitions, indentation, mode); return mappingValues(def, schema.definitions, indentation);
} }
if (def instanceof OneOfDefinition) { if (def instanceof OneOfDefinition) {
return oneOfValues(def, schema.definitions, indentation, mode); return oneOfValues(def, schema.definitions, indentation);
} }
if (def instanceof BooleanDefinition) { if (def instanceof BooleanDefinition) {
@@ -51,7 +36,7 @@ export function definitionValues(def: Definition, indentation: string, mode: Def
if (def instanceof SequenceDefinition) { if (def instanceof SequenceDefinition) {
const itemDef = schema.getDefinition(def.itemType); const itemDef = schema.getDefinition(def.itemType);
if (itemDef) { if (itemDef) {
return definitionValues(itemDef, indentation, mode); return definitionValues(itemDef, indentation);
} }
} }
@@ -61,8 +46,7 @@ export function definitionValues(def: Definition, indentation: string, mode: Def
function mappingValues( function mappingValues(
mappingDefinition: MappingDefinition, mappingDefinition: MappingDefinition,
definitions: {[key: string]: Definition}, definitions: {[key: string]: Definition},
indentation: string, indentation: string
mode: DefinitionValueMode
): Value[] { ): Value[] {
const properties: Value[] = []; const properties: Value[] = [];
for (const [key, value] of Object.entries(mappingDefinition.properties)) { for (const [key, value] of Object.entries(mappingDefinition.properties)) {
@@ -76,38 +60,21 @@ function mappingValues(
if (typeDef) { if (typeDef) {
switch (typeDef.definitionType) { switch (typeDef.definitionType) {
case DefinitionType.Sequence: case DefinitionType.Sequence:
if (mode == DefinitionValueMode.Key) { insertText = `${key}:\n${indentation}- `;
insertText = `\n${indentation}${key}:\n${indentation}${indentation}- `;
} else {
insertText = `${key}:\n${indentation}- `;
}
break; break;
case DefinitionType.Mapping: case DefinitionType.Mapping:
if (mode == DefinitionValueMode.Key) { insertText = `${key}:\n${indentation}`;
insertText = `\n${indentation}${key}:\n${indentation}${indentation}`;
} else {
insertText = `${key}:\n${indentation}`;
}
break; break;
case DefinitionType.OneOf: case DefinitionType.OneOf:
if (mode == DefinitionValueMode.Parent) { // No special insertText in this case
insertText = `${key}: `;
} else {
// No special insertText in this case
}
break; break;
case DefinitionType.String: case DefinitionType.String:
case DefinitionType.Boolean: case DefinitionType.Boolean:
if (mode == DefinitionValueMode.Key) { insertText = `\n${indentation}${key}: `;
insertText = `\n${indentation}${key}: `;
} else {
insertText = `${key}: `;
}
break; break;
default: default:
insertText = `${key}: `; insertText = `${key}: `;
} }
@@ -126,12 +93,11 @@ function mappingValues(
function oneOfValues( function oneOfValues(
oneOfDefinition: OneOfDefinition, oneOfDefinition: OneOfDefinition,
definitions: {[key: string]: Definition}, definitions: {[key: string]: Definition},
indentation: string, indentation: string
mode: DefinitionValueMode
): Value[] { ): Value[] {
const values: Value[] = []; const values: Value[] = [];
for (const key of oneOfDefinition.oneOf) { for (const key of oneOfDefinition.oneOf) {
values.push(...definitionValues(definitions[key], indentation, mode)); values.push(...definitionValues(definitions[key], indentation));
} }
return distinctValues(values); return distinctValues(values);
} }
+16
View File
@@ -0,0 +1,16 @@
## This script syncs all five repositories to the current state of main.
## It will stash changes on the current branch, switch to main, pull and remain on main.
echo "Syncing all repositories to main"
# for each folder in the above directory
cd ..
for d in */ ; do
cd $d
echo "Syncing $d"
echo "current branch: $(git rev-parse --abbrev-ref HEAD)"
git stash
git checkout main
git pull
cd ..
done
+2 -7
View File
@@ -1,10 +1,5 @@
{ {
"$schema": "node_modules/lerna/schemas/lerna-schema.json", "$schema": "node_modules/lerna/schemas/lerna-schema.json",
"packages": [ "useWorkspaces": true,
"expressions", "version": "0.3.3"
"workflow-parser",
"languageservice",
"languageserver"
],
"version": "0.3.8"
} }
+13 -15
View File
@@ -135,7 +135,7 @@
}, },
"expressions": { "expressions": {
"name": "@actions/expressions", "name": "@actions/expressions",
"version": "0.3.8", "version": "0.3.3",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@types/jest": "^29.0.3", "@types/jest": "^29.0.3",
@@ -395,11 +395,11 @@
}, },
"languageserver": { "languageserver": {
"name": "@actions/languageserver", "name": "@actions/languageserver",
"version": "0.3.8", "version": "0.3.3",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/languageservice": "^0.3.8", "@actions/languageservice": "^0.3.3",
"@actions/workflow-parser": "^0.3.8", "@actions/workflow-parser": "^0.3.3",
"@octokit/rest": "^19.0.7", "@octokit/rest": "^19.0.7",
"@octokit/types": "^9.0.0", "@octokit/types": "^9.0.0",
"vscode-languageserver": "^8.0.2", "vscode-languageserver": "^8.0.2",
@@ -678,11 +678,11 @@
}, },
"languageservice": { "languageservice": {
"name": "@actions/languageservice", "name": "@actions/languageservice",
"version": "0.3.8", "version": "0.3.3",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/expressions": "^0.3.8", "@actions/expressions": "^0.3.3",
"@actions/workflow-parser": "^0.3.8", "@actions/workflow-parser": "^0.3.3",
"vscode-languageserver-textdocument": "^1.0.7", "vscode-languageserver-textdocument": "^1.0.7",
"vscode-languageserver-types": "^3.17.2", "vscode-languageserver-types": "^3.17.2",
"vscode-uri": "^3.0.7", "vscode-uri": "^3.0.7",
@@ -11470,10 +11470,9 @@
} }
}, },
"node_modules/word-wrap": { "node_modules/word-wrap": {
"version": "1.2.4", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz",
"integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==",
"dev": true, "dev": true,
"license": "MIT",
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@@ -11669,9 +11668,8 @@
"license": "ISC" "license": "ISC"
}, },
"node_modules/yaml": { "node_modules/yaml": {
"version": "2.2.2", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", "license": "ISC",
"integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
"engines": { "engines": {
"node": ">= 14" "node": ">= 14"
} }
@@ -11722,10 +11720,10 @@
}, },
"workflow-parser": { "workflow-parser": {
"name": "@actions/workflow-parser", "name": "@actions/workflow-parser",
"version": "0.3.8", "version": "0.3.3",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/expressions": "^0.3.8", "@actions/expressions": "^0.3.3",
"cronstrue": "^2.21.0", "cronstrue": "^2.21.0",
"yaml": "^2.0.0-8" "yaml": "^2.0.0-8"
}, },
-1
View File
@@ -1 +0,0 @@
Release 0.3.5
@@ -1,32 +0,0 @@
#!/bin/bash
# this script is used to generate release notes for a given release
# first argument is the pull request id for the last release
# the second is the new release number
# the script then grabs every pull request merged since that pull request
# and outputs a string of release notes
# get the new release number
NEW_RELEASE=$2
echo "Generating release notes for $NEW_RELEASE"
# get the last release pull request id
LAST_RELEASE_PR=$1
#get when the last release was merged
LAST_RELEASE_MERGED_AT=$(gh pr view $LAST_RELEASE_PR --repo actions/languageservices --json mergedAt | jq -r '.mergedAt')
CHANGELIST=$(gh pr list --repo actions/languageservices --base main --state merged --json title --search "merged:>$LAST_RELEASE_MERGED_AT -label:no-release")
# store the release notes in a variable so we can use it later
echo "Release $NEW_RELEASE" >> releasenotes.md
echo $CHANGELIST | jq -r '.[].title' | while read line; do
echo " - $line" >> releasenotes.md
done
echo " "
-24
View File
@@ -1,24 +0,0 @@
#!/bin/bash
VERSION=$(cat lerna.json | jq -r '.version')
MAJOR=$(echo $VERSION | cut -d. -f1)
MINOR=$(echo $VERSION | cut -d. -f2)
PATCH=$(echo $VERSION | cut -d. -f3)
if [ "$1" == "major" ]; then
MAJOR=$((MAJOR+1))
MINOR=0
PATCH=0
elif [ "$1" == "minor" ]; then
MINOR=$((MINOR+1))
PATCH=0
elif [ "$1" == "patch" ]; then
PATCH=$((PATCH+1))
else
echo "Invalid version type. Use 'major', 'minor' or 'patch'"
exit 1
fi
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
echo $NEW_VERSION
+1 -1
View File
@@ -35,7 +35,7 @@ jobs:
); );
``` ```
`convertWorkflowTemplate` then takes that intermediate representation and converts it to a [`WorkflowTemplate`](./src/model/workflow-template.ts) object, which is a more convenient representation for working with workflows. `convertWorkflowTemplate` then takes that intermediate representation and converts it to a [`WorkflowTemplate`](./src/workflow-template.ts) object, which is a more convenient representation for working with workflows.
```typescript ```typescript
const workflowTemplate = await convertWorkflowTemplate(result.context, result.value); const workflowTemplate = await convertWorkflowTemplate(result.context, result.value);
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "@actions/workflow-parser", "name": "@actions/workflow-parser",
"version": "0.3.8", "version": "0.3.3",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"source": "./src/index.ts", "source": "./src/index.ts",
@@ -43,7 +43,7 @@
"watch": "tsc --build tsconfig.build.json --watch" "watch": "tsc --build tsconfig.build.json --watch"
}, },
"dependencies": { "dependencies": {
"@actions/expressions": "^0.3.8", "@actions/expressions": "^0.3.3",
"cronstrue": "^2.21.0", "cronstrue": "^2.21.0",
"yaml": "^2.0.0-8" "yaml": "^2.0.0-8"
}, },
+3 -4
View File
@@ -577,8 +577,7 @@
"mapping": { "mapping": {
"properties": { "properties": {
"types": "merge-group-activity", "types": "merge-group-activity",
"branches": "event-branches", "branches": "event-branches"
"branches-ignore": "event-branches-ignore"
} }
} }
}, },
@@ -1183,7 +1182,7 @@
] ]
}, },
"workflow-run-activity": { "workflow-run-activity": {
"description": "The types of workflow run activity that trigger the workflow. Supported activity types: `completed`, `requested`, `in_progress`.", "description": "The types of workflow run activity that trigger the workflow. Suupported activity types: `completed`, `requested`, `in_progress`.",
"one-of": [ "one-of": [
"workflow-run-activity-type", "workflow-run-activity-type",
"workflow-run-activity-types" "workflow-run-activity-types"
@@ -2489,7 +2488,7 @@
"string": { "string": {
"require-non-empty": true "require-non-empty": true
}, },
"description": "Use `shell` to override the default shell settings in the runner's operating system. You can use built-in shell keywords, or you can define a custom set of shell options. The shell command that is run internally executes a temporary file that contains the commands specified in `run`." "description": "Use `shell` to override the default shell settings in the runner's operating system. You can use built-in shell keywords, or you can define a custom set of shell options. The shell command that is run internally executes a temporary file that contains the comands specified in `run`."
}, },
"working-directory": { "working-directory": {
"string": { "string": {
+2 -7
View File
@@ -73,10 +73,8 @@ on:
- deleted - deleted
merge_group: merge_group:
branches: branches:
- master - master
- main - main
branches-ignore:
- develop
types: types:
- checks_requested - checks_requested
milestone: milestone:
@@ -323,9 +321,6 @@ jobs:
"master", "master",
"main" "main"
], ],
"branches-ignore": [
"develop"
],
"types": [ "types": [
"checks_requested" "checks_requested"
] ]