CI workflow

This commit is contained in:
Gregory Schier
2024-09-09 11:43:21 -07:00
parent b72e037e6a
commit 48e62eb1d9
5 changed files with 68 additions and 203 deletions

41
.github/workflows/ci.yaml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Release
on: push
jobs:
ci:
runs-on: ubuntu-latest
name: CI
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: "lts/*"
- run: npm install
- run: npm test
working-directory: npm/cli-darwin-arm64
env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" }
- name: Publish @yaakapp/cli-darwin-x64
run: npm publish --provenance --access public
working-directory: npm/cli-darwin-x64
env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" }
- name: Publish @yaakapp/cli-linux-x64
run: npm publish --provenance --access public
working-directory: npm/cli-linux-x64
env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" }
- name: Publish @yaakapp/cli-win32-x64
run: npm publish --provenance --access public
working-directory: npm/cli-win32-x64
env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" }
- name: Publish @yaakapp/cli
run: npm publish --provenance --access public
working-directory: npm/cli
env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" }

View File

@@ -3,7 +3,8 @@
"repository": "https://github.com/yaakapp/plugins",
"private": true,
"scripts": {
"build": "node scripts/build-plugins.cjs"
"build": "node scripts/build-plugins.cjs",
"test": "vitest run"
},
"devDependencies": {
"jsonpath": "^1.1.1",

View File

@@ -5,9 +5,9 @@ import { pluginHookExport } from '../src';
const ctx = {} as Context;
describe('exporter-curl', () => {
test('Exports GET with params', () => {
test('Exports GET with params', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
urlParameters: [
{ name: 'a', value: 'aaa' },
@@ -19,9 +19,9 @@ describe('exporter-curl', () => {
[`curl 'https://yaak.app'`, `--url-query 'a=aaa'`, `--url-query 'b=bbb'`].join(` \\\n `),
);
});
test('Exports POST with url form data', () => {
test('Exports POST with url form data', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
method: 'POST',
bodyType: 'application/x-www-form-urlencoded',
@@ -38,9 +38,9 @@ describe('exporter-curl', () => {
);
});
test('Exports PUT with multipart form', () => {
test('Exports PUT with multipart form', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
method: 'PUT',
bodyType: 'multipart/form-data',
@@ -63,9 +63,9 @@ describe('exporter-curl', () => {
);
});
test('Exports JSON body', () => {
test('Exports JSON body', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
method: 'POST',
bodyType: 'application/json',
@@ -83,9 +83,9 @@ describe('exporter-curl', () => {
);
});
test('Exports multi-line JSON body', () => {
test('Exports multi-line JSON body', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
method: 'POST',
bodyType: 'application/json',
@@ -103,9 +103,9 @@ describe('exporter-curl', () => {
);
});
test('Exports headers', () => {
test('Exports headers', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
headers: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
@@ -115,9 +115,9 @@ describe('exporter-curl', () => {
).toEqual([`curl`, `--header 'a: aaa'`, `--header 'b: bbb'`].join(` \\\n `));
});
test('Basic auth', () => {
test('Basic auth', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'basic',
authentication: {
@@ -128,9 +128,9 @@ describe('exporter-curl', () => {
).toEqual([`curl 'https://yaak.app'`, `--user 'user:pass'`].join(` \\\n `));
});
test('Broken basic auth', () => {
test('Broken basic auth', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'basic',
authentication: {},
@@ -138,9 +138,9 @@ describe('exporter-curl', () => {
).toEqual([`curl 'https://yaak.app'`, `--user ':'`].join(` \\\n `));
});
test('Digest auth', () => {
test('Digest auth', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'digest',
authentication: {
@@ -151,9 +151,9 @@ describe('exporter-curl', () => {
).toEqual([`curl 'https://yaak.app'`, `--digest --user 'user:pass'`].join(` \\\n `));
});
test('Bearer auth', () => {
test('Bearer auth', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'bearer',
authentication: {
@@ -163,9 +163,9 @@ describe('exporter-curl', () => {
).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer tok'`].join(` \\\n `));
});
test('Broken bearer auth', () => {
test('Broken bearer auth', async () => {
expect(
pluginHookExport(ctx, {
await pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'bearer',
authentication: {

View File

@@ -1,8 +1,8 @@
import { Context, HttpRequest, Model, Workspace } from '@yaakapp/api';
import { describe, expect, test } from 'vitest';
import { HttpRequest, Model, Workspace } from '../../../src-web/lib/models';
import { pluginHookImport } from '../src';
const ctx = {};
const ctx = {} as Context;
describe('importer-curl', () => {
test('Imports basic GET', () => {
@@ -298,7 +298,7 @@ describe('importer-curl', () => {
url: 'https://yaak.app',
urlParameters: [
{ name: 'foo', value: 'bar', enabled: true },
{ name: 'baz', value: 'a%20a', enabled: true },
{ name: 'baz', value: 'a a', enabled: true },
],
}),
],

View File

@@ -1,177 +0,0 @@
import { describe, expect, test } from 'vitest';
import { pluginHookExport } from '../src';
const ctx = {};
describe('exporter-curl', () => {
test('Exports GET with params', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
urlParameters: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
{ name: 'c', value: 'ccc', enabled: false },
],
}),
).toEqual(
[`curl 'https://yaak.app'`, `--url-query 'a=aaa'`, `--url-query 'b=bbb'`].join(` \\\n `),
);
});
test('Exports POST with url form data', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
method: 'POST',
bodyType: 'application/x-www-form-urlencoded',
body: {
form: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
{ name: 'c', value: 'ccc', enabled: false },
],
},
}),
).toEqual(
[`curl -X POST 'https://yaak.app'`, `--data 'a=aaa'`, `--data 'b=bbb'`].join(` \\\n `),
);
});
test('Exports PUT with multipart form', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
method: 'PUT',
bodyType: 'multipart/form-data',
body: {
form: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
{ name: 'c', value: 'ccc', enabled: false },
{ name: 'f', file: '/foo/bar.png', contentType: 'image/png' },
],
},
}),
).toEqual(
[
`curl -X PUT 'https://yaak.app'`,
`--form 'a=aaa'`,
`--form 'b=bbb'`,
`--form f=@/foo/bar.png;type=image/png`,
].join(` \\\n `),
);
});
test('Exports JSON body', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
method: 'POST',
bodyType: 'application/json',
body: {
text: `{"foo":"bar's"}`,
},
headers: [{ name: 'Content-Type', value: 'application/json' }],
}),
).toEqual(
[
`curl -X POST 'https://yaak.app'`,
`--header 'Content-Type: application/json'`,
`--data-raw $'{"foo":"bar\\'s"}'`,
].join(` \\\n `),
);
});
test('Exports multi-line JSON body', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
method: 'POST',
bodyType: 'application/json',
body: {
text: `{"foo":"bar",\n"baz":"qux"}`,
},
headers: [{ name: 'Content-Type', value: 'application/json' }],
}),
).toEqual(
[
`curl -X POST 'https://yaak.app'`,
`--header 'Content-Type: application/json'`,
`--data-raw $'{"foo":"bar",\n"baz":"qux"}'`,
].join(` \\\n `),
);
});
test('Exports headers', () => {
expect(
pluginHookExport(ctx, {
headers: [
{ name: 'a', value: 'aaa' },
{ name: 'b', value: 'bbb', enabled: true },
{ name: 'c', value: 'ccc', enabled: false },
],
}),
).toEqual([`curl`, `--header 'a: aaa'`, `--header 'b: bbb'`].join(` \\\n `));
});
test('Basic auth', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'basic',
authentication: {
username: 'user',
password: 'pass',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--user 'user:pass'`].join(` \\\n `));
});
test('Broken basic auth', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'basic',
authentication: {},
}),
).toEqual([`curl 'https://yaak.app'`, `--user ':'`].join(` \\\n `));
});
test('Digest auth', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'digest',
authentication: {
username: 'user',
password: 'pass',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--digest --user 'user:pass'`].join(` \\\n `));
});
test('Bearer auth', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'bearer',
authentication: {
token: 'tok',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer tok'`].join(` \\\n `));
});
test('Broken bearer auth', () => {
expect(
pluginHookExport(ctx, {
url: 'https://yaak.app',
authenticationType: 'bearer',
authentication: {
username: 'user',
password: 'pass',
},
}),
).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer '`].join(` \\\n `));
});
});