Compare commits

..
Author SHA1 Message Date
Jonathan Tamsut 1e02fbb597 fix format 2023-05-03 15:24:04 -07:00
Jonathan Tamsut b534e3a243 use certificate reader to read in certs 2023-05-03 15:14:32 -07:00
Jonathan Tamsut 523f24c92f create certificate reader 2023-05-03 15:14:09 -07:00
Jonathan Tamsut 0901deea32 add packages to look up root certs 2023-05-03 15:12:59 -07:00
Jonathan Tamsut 59620fae2d format and lint 2023-05-01 15:14:08 -07:00
Jonathan Tamsut 3fbdfd5f2e update var 2023-05-01 15:08:41 -07:00
Jonathan Tamsut 57a5994e12 add the ability to read in cert 2023-05-01 14:51:54 -07:00
13 changed files with 137 additions and 71 deletions
+1 -3
View File
@@ -51,11 +51,9 @@ jobs:
- name: Create PR
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 \
--title "Release version ${{ env.new_version }}" \
--body-file releasenotes.md \
--body "Release version ${{ env.new_version }}" \
--base main \
--head release/${{ env.new_version }}
env:
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@actions/expressions",
"version": "0.3.5",
"version": "0.3.4",
"license": "MIT",
"type": "module",
"source": "./src/index.ts",
+6 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@actions/languageserver",
"version": "0.3.5",
"version": "0.3.4",
"description": "Language server for GitHub Actions",
"license": "MIT",
"type": "module",
@@ -43,12 +43,15 @@
"watch": "tsc --build tsconfig.build.json --watch"
},
"dependencies": {
"@actions/languageservice": "^0.3.5",
"@actions/workflow-parser": "^0.3.5",
"@actions/languageservice": "^0.3.4",
"@actions/workflow-parser": "^0.3.4",
"@octokit/rest": "^19.0.7",
"@octokit/types": "^9.0.0",
"@roamhq/mac-ca": "^1.0.7",
"node-forge": "^1.3.1",
"vscode-languageserver": "^8.0.2",
"vscode-languageserver-textdocument": "^1.0.7",
"win-ca": "^3.5.0",
"yaml": "^2.1.3"
},
"engines": {
+35
View File
@@ -0,0 +1,35 @@
export class CertificateReader {
getAllRootCAs(): string[] {
switch (process.platform) {
case "darwin":
return this.getMacOSCerts();
case "win32":
return this.getWindowsCerts();
default:
// We only support self-signed certs from Windows anc MacOS
return [];
}
}
private getMacOSCerts(): string[] {
// loading modules here prevents unnecessary module loading
// see: https://stackoverflow.com/questions/9132772/lazy-loading-in-node-js
const macCa = require("@roamhq/mac-ca");
const forge = require("node-forge");
return macCa.all().map((cert: any) => forge.pki.certificateToPem(cert));
}
private getWindowsCerts(): string[] {
const ca = require("win-ca");
let rootCAs: string[] = [];
ca({
format: ca.der2.pem,
ondata: (crt: string) => rootCAs.push(crt)
});
return rootCAs;
}
}
+23 -4
View File
@@ -1,8 +1,27 @@
import {Octokit} from "@octokit/rest";
import {Agent} from "node:https";
import {CertificateReader} from "./certificate-reader";
export function getClient(token: string, userAgent?: string): Octokit {
return new Octokit({
auth: token,
userAgent: userAgent || `GitHub Actions Language Server`
});
const certReader = new CertificateReader();
const selfSignedCerts = certReader.getAllRootCAs();
if (selfSignedCerts.length > 0) {
const httpsAgent = new Agent({
ca: selfSignedCerts
});
return new Octokit({
auth: token,
userAgent: userAgent || `GitHub Actions Language Server`,
request: {
agent: httpsAgent
}
});
} else {
return new Octokit({
auth: token,
userAgent: userAgent || `GitHub Actions Language Server`
});
}
}
@@ -28,7 +28,6 @@ export async function getSecrets(
}
const eventsConfig = workflowContext?.template?.events;
if (eventsConfig?.workflow_call) {
// Unpredictable secrets may be passed in via a workflow_call trigger
secretsContext.complete = false;
@@ -39,7 +38,6 @@ export async function getSecrets(
}
let environmentName: string | undefined;
if (workflowContext?.job?.environment) {
if (isString(workflowContext.job.environment)) {
environmentName = workflowContext.job.environment.value;
@@ -48,17 +46,10 @@ export async function getSecrets(
if (isString(x.key) && x.key.value === "name") {
if (isString(x.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;
}
}
} else {
// if the expression is something like environment: ${{ ... }} then we want to skip validation
secretsContext.complete = false;
}
}
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@actions/languageservice",
"version": "0.3.5",
"version": "0.3.4",
"description": "Language service for GitHub Actions",
"license": "MIT",
"type": "module",
@@ -44,8 +44,8 @@
"watch": "tsc --build tsconfig.build.json --watch"
},
"dependencies": {
"@actions/expressions": "^0.3.5",
"@actions/workflow-parser": "^0.3.5",
"@actions/expressions": "^0.3.4",
"@actions/workflow-parser": "^0.3.4",
"vscode-languageserver-textdocument": "^1.0.7",
"vscode-languageserver-types": "^3.17.2",
"vscode-uri": "^3.0.7",
+1 -1
View File
@@ -1,5 +1,5 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"useWorkspaces": true,
"version": "0.3.5"
"version": "0.3.4"
}
+64 -11
View File
@@ -135,7 +135,7 @@
},
"expressions": {
"name": "@actions/expressions",
"version": "0.3.5",
"version": "0.3.4",
"license": "MIT",
"devDependencies": {
"@types/jest": "^29.0.3",
@@ -395,15 +395,18 @@
},
"languageserver": {
"name": "@actions/languageserver",
"version": "0.3.5",
"version": "0.3.4",
"license": "MIT",
"dependencies": {
"@actions/languageservice": "^0.3.5",
"@actions/workflow-parser": "^0.3.5",
"@actions/languageservice": "^0.3.4",
"@actions/workflow-parser": "^0.3.4",
"@octokit/rest": "^19.0.7",
"@octokit/types": "^9.0.0",
"@roamhq/mac-ca": "^1.0.7",
"node-forge": "^1.3.1",
"vscode-languageserver": "^8.0.2",
"vscode-languageserver-textdocument": "^1.0.7",
"win-ca": "^3.5.0",
"yaml": "^2.1.3"
},
"devDependencies": {
@@ -678,11 +681,11 @@
},
"languageservice": {
"name": "@actions/languageservice",
"version": "0.3.5",
"version": "0.3.4",
"license": "MIT",
"dependencies": {
"@actions/expressions": "^0.3.5",
"@actions/workflow-parser": "^0.3.5",
"@actions/expressions": "^0.3.4",
"@actions/workflow-parser": "^0.3.4",
"vscode-languageserver-textdocument": "^1.0.7",
"vscode-languageserver-types": "^3.17.2",
"vscode-uri": "^3.0.7",
@@ -3695,6 +3698,14 @@
"typescript": "^3 || ^4"
}
},
"node_modules/@roamhq/mac-ca": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/@roamhq/mac-ca/-/mac-ca-1.0.7.tgz",
"integrity": "sha512-AOHGY1R0pH+dWJueA5i1gx2V19CLfDa8ojanhyd5ZSI/YDZ3szDr0NSDntFgWGKsvT4TtvNZfDWmXuwbSY9fTg==",
"dependencies": {
"node-forge": "^1.3.1"
}
},
"node_modules/@sinclair/typebox": {
"version": "0.24.51",
"dev": true,
@@ -6998,6 +7009,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-electron": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz",
"integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg=="
},
"node_modules/is-extglob": {
"version": "2.1.1",
"dev": true,
@@ -8710,6 +8726,14 @@
}
}
},
"node_modules/node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
"integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
"engines": {
"node": ">= 6.13.0"
}
},
"node_modules/node-gyp": {
"version": "9.3.0",
"dev": true,
@@ -10688,7 +10712,6 @@
},
"node_modules/split": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"through": "2"
@@ -10954,7 +10977,6 @@
},
"node_modules/through": {
"version": "2.3.8",
"dev": true,
"license": "MIT"
},
"node_modules/through2": {
@@ -11469,6 +11491,37 @@
"string-width": "^1.0.2 || 2 || 3 || 4"
}
},
"node_modules/win-ca": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/win-ca/-/win-ca-3.5.0.tgz",
"integrity": "sha512-0TgO/+2iz2pS3OxBy2ikovPHOYyZRdLRxRTT9ze7DpZwEpaahLFOBuac93GM3lYEVzDyf8fXskJjIX/EILvkhQ==",
"hasInstallScript": true,
"dependencies": {
"is-electron": "^2.2.0",
"make-dir": "^1.3.0",
"node-forge": "^1.2.1",
"split": "^1.0.1"
}
},
"node_modules/win-ca/node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/win-ca/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"engines": {
"node": ">=4"
}
},
"node_modules/word-wrap": {
"version": "1.2.3",
"dev": true,
@@ -11720,10 +11773,10 @@
},
"workflow-parser": {
"name": "@actions/workflow-parser",
"version": "0.3.5",
"version": "0.3.4",
"license": "MIT",
"dependencies": {
"@actions/expressions": "^0.3.5",
"@actions/expressions": "^0.3.4",
"cronstrue": "^2.21.0",
"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 " "
+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
const workflowTemplate = await convertWorkflowTemplate(result.context, result.value);
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@actions/workflow-parser",
"version": "0.3.5",
"version": "0.3.4",
"license": "MIT",
"type": "module",
"source": "./src/index.ts",
@@ -43,7 +43,7 @@
"watch": "tsc --build tsconfig.build.json --watch"
},
"dependencies": {
"@actions/expressions": "^0.3.5",
"@actions/expressions": "^0.3.4",
"cronstrue": "^2.21.0",
"yaml": "^2.0.0-8"
},