Skip to content
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
7d13790
Remove coverage, since no source JS files
mikeharder Jul 12, 2024
2cef63a
Add starter project tsp-client-tests
mikeharder Jul 12, 2024
176490d
Add GH Action
mikeharder Jul 12, 2024
ffb9b42
Rename job
mikeharder Jul 12, 2024
4fc3917
Add usage test
mikeharder Jul 12, 2024
1bc8cb7
Increase timeout to 30s
mikeharder Jul 12, 2024
605ac4e
Add test for keyvault/data-plane
mikeharder Jul 12, 2024
f89fd21
Update lockfile
mikeharder Jul 12, 2024
c895ef7
Verify generated files exist
mikeharder Jul 12, 2024
a62d712
Add logs, verify folder deleted
mikeharder Jul 12, 2024
dcedf0b
Add test for sphere/resource-manager
mikeharder Jul 12, 2024
6725661
Add sparse-checkout-paths
mikeharder Jul 12, 2024
5a42646
Merge branch 'main' into tsp-client-tests
mikeharder Jul 12, 2024
fae4852
Add paths to PR trigger
mikeharder Jul 12, 2024
4fae6f5
Checkout all of spec folder
mikeharder Jul 12, 2024
59df497
Disable sparse checkout
mikeharder Jul 12, 2024
3d4ac77
enable git long paths
mikeharder Jul 12, 2024
206d78c
Only enable longpaths on windows
mikeharder Jul 12, 2024
8c0761b
Revert "Disable sparse checkout"
mikeharder Jul 12, 2024
064339d
Show full output if exit code is nonzero
mikeharder Jul 15, 2024
e5e6213
Narrow sparse checkout
mikeharder Jul 15, 2024
cb07ea5
Add common-types to sparse checkout
mikeharder Jul 15, 2024
35a1dcc
Increase timeout to 2 minutes
mikeharder Jul 15, 2024
2e3bcfe
Add comment
mikeharder Jul 15, 2024
e799cca
Revert disable parallelism in package.json
mikeharder Jul 15, 2024
89781de
Increase timeout to 4 minutes
mikeharder Jul 15, 2024
8f60e52
Add comment
mikeharder Jul 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .github/workflows/_reusable-eng-tools-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ on:
description: Name of package under eng/tools
required: true
type: string
sparse-checkout-paths:
description: Paths for sparse checkout
type: string

jobs:
test:
Expand All @@ -24,9 +27,15 @@ jobs:
runs-on: ${{ matrix.os }}

steps:
- if: runner.os == 'Windows'
run: git config --global core.longpaths true
shell: pwsh

- uses: actions/checkout@v4
with:
sparse-checkout: eng
sparse-checkout: |
eng
${{ inputs.sparse-checkout-paths }}

- name: Use Node ${{ matrix.node-version }}.x
uses: actions/setup-node@v4
Expand Down
26 changes: 26 additions & 0 deletions .github/workflows/tsp-client-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: tsp-client - Test

on:
push:
branches:
- main
pull_request:
paths:
- package-lock.json
- package.json
- tsconfig.json
- .github/workflows/_reusable-eng-tools-test.yaml
- .github/workflows/tsp-client-test.yaml
- eng/tools/package.json
- eng/tools/tsconfig.json
- eng/tools/tsp-client/**
- specification/keyvault
- specification/sphere

jobs:
tsp-client:
uses: ./.github/workflows/_reusable-eng-tools-test.yaml
with:
package: tsp-client-tests
sparse-checkout-paths: |
specification
1 change: 1 addition & 0 deletions eng/tools/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "azure-rest-api-specs-eng-tools",
"devDependencies": {
"@azure-tools/suppressions": "file:suppressions",
"@azure-tools/tsp-client-tests": "file:tsp-client-tests",
"@azure-tools/typespec-requirement": "file:typespec-requirement",
"@azure-tools/typespec-validation": "file:typespec-validation"
},
Expand Down
20 changes: 20 additions & 0 deletions eng/tools/tsp-client-tests/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "@azure-tools/tsp-client-tests",
"private": true,
"type": "module",
"devDependencies": {
"@types/node": "^18.19.31",
"execa": "^9.3.0",
"typescript": "~5.4.5",
"vitest": "^1.6.0"
},
"scripts": {
"build": "tsc",
"postinstall": "npm run build",
"test": "vitest",
"test:ci": "vitest run --reporter=verbose"
},
"engines": {
"node": ">= 18.0.0"
}
}
70 changes: 70 additions & 0 deletions eng/tools/tsp-client-tests/test/tsp-client.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { execa } from "execa";
import { access, constants, mkdir, rm } from "fs/promises";
import { dirname, join } from "path";
import { ExpectStatic, test } from "vitest";

const repoRoot = join(__dirname, "..", "..", "..", "..");

async function tspClient(...args: string[]) {
const allArgs = ["exec", "--no", "--", "tsp-client"].concat(args);

console.log(`${repoRoot}$ npm ${allArgs.join(" ")}`);

return await execa("npm", allArgs, { cwd: repoRoot, reject: false });
}

async function convert(expect: ExpectStatic, readme: string) {
const specFolder = dirname(dirname(join(repoRoot, readme)));
const outputFolder = join(specFolder, "Test.TspClientConvert");

try {
await mkdir(outputFolder);
} catch {
// Delete and retry
await rm(outputFolder, { recursive: true, force: true });
await mkdir(outputFolder);
}

try {
const { stdout, exitCode } = await tspClient(
"convert",
"--no-prompt",
"--swagger-readme",
readme,
"-o",
outputFolder,
readme.includes("resource-manager") ? "--arm" : "",
);

expect(stdout).toContain("Converting");
expect(exitCode).toBe(0);

const tspConfigYaml = join(outputFolder, "tspconfig.yaml");
await access(tspConfigYaml, constants.R_OK);
console.log(`File exists: ${tspConfigYaml}`);

const mainTsp = join(outputFolder, "main.tsp");
await access(mainTsp, constants.R_OK);
console.log(`File exists: ${mainTsp}`);
} finally {
await rm(outputFolder, { recursive: true, force: true });
}

// Ensure outputFolder is deleted
expect(() => access(outputFolder)).rejects.toThrowError();
}

test.concurrent("Usage", async ({ expect }) => {
const { stdout, exitCode } = await tspClient();

expect(stdout).toContain("Usage");
expect(exitCode).not.toBe(0);
});

test.concurrent("Convert keyvault/data-plane", async ({ expect }) => {
await convert(expect, "specification/keyvault/data-plane/readme.md");
});

test.concurrent("Convert sphere/resource-manager", async ({ expect }) => {
await convert(expect, "specification/sphere/resource-manager/readme.md");
});
6 changes: 6 additions & 0 deletions eng/tools/tsp-client-tests/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "./dist",
}
}
8 changes: 8 additions & 0 deletions eng/tools/tsp-client-tests/vite.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { defineConfig } from "vite";

export default defineConfig({
test: {
// Default timeout of 5 seconds is too low
testTimeout: 60000,
},
});
3 changes: 1 addition & 2 deletions eng/tools/typespec-requirement/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
"type": "module",
"devDependencies": {
"@types/node": "^18.19.31",
"@vitest/coverage-v8": "^1.6.0",
"execa": "^9.3.0",
"typescript": "~5.4.5",
"vitest": "^1.6.0"
Expand All @@ -13,7 +12,7 @@
"build": "tsc",
"postinstall": "npm run build",
"test": "vitest",
"test:ci": "vitest run --coverage --reporter=verbose"
"test:ci": "vitest run --reporter=verbose"
},
"engines": {
"node": ">= 18.0.0"
Expand Down
20 changes: 19 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.