mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-25 02:08:28 +02:00
CI workflow
This commit is contained in:
41
.github/workflows/ci.yaml
vendored
Normal file
41
.github/workflows/ci.yaml
vendored
Normal 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 }}" }
|
||||||
@@ -3,7 +3,8 @@
|
|||||||
"repository": "https://github.com/yaakapp/plugins",
|
"repository": "https://github.com/yaakapp/plugins",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "node scripts/build-plugins.cjs"
|
"build": "node scripts/build-plugins.cjs",
|
||||||
|
"test": "vitest run"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"jsonpath": "^1.1.1",
|
"jsonpath": "^1.1.1",
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ import { pluginHookExport } from '../src';
|
|||||||
const ctx = {} as Context;
|
const ctx = {} as Context;
|
||||||
|
|
||||||
describe('exporter-curl', () => {
|
describe('exporter-curl', () => {
|
||||||
test('Exports GET with params', () => {
|
test('Exports GET with params', async () => {
|
||||||
expect(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
urlParameters: [
|
urlParameters: [
|
||||||
{ name: 'a', value: 'aaa' },
|
{ 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 `),
|
[`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(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
bodyType: 'application/x-www-form-urlencoded',
|
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(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
bodyType: 'multipart/form-data',
|
bodyType: 'multipart/form-data',
|
||||||
@@ -63,9 +63,9 @@ describe('exporter-curl', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Exports JSON body', () => {
|
test('Exports JSON body', async () => {
|
||||||
expect(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
bodyType: 'application/json',
|
bodyType: 'application/json',
|
||||||
@@ -83,9 +83,9 @@ describe('exporter-curl', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Exports multi-line JSON body', () => {
|
test('Exports multi-line JSON body', async () => {
|
||||||
expect(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
bodyType: 'application/json',
|
bodyType: 'application/json',
|
||||||
@@ -103,9 +103,9 @@ describe('exporter-curl', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Exports headers', () => {
|
test('Exports headers', async () => {
|
||||||
expect(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
headers: [
|
headers: [
|
||||||
{ name: 'a', value: 'aaa' },
|
{ name: 'a', value: 'aaa' },
|
||||||
{ name: 'b', value: 'bbb', enabled: true },
|
{ name: 'b', value: 'bbb', enabled: true },
|
||||||
@@ -115,9 +115,9 @@ describe('exporter-curl', () => {
|
|||||||
).toEqual([`curl`, `--header 'a: aaa'`, `--header 'b: bbb'`].join(` \\\n `));
|
).toEqual([`curl`, `--header 'a: aaa'`, `--header 'b: bbb'`].join(` \\\n `));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Basic auth', () => {
|
test('Basic auth', async () => {
|
||||||
expect(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
authenticationType: 'basic',
|
authenticationType: 'basic',
|
||||||
authentication: {
|
authentication: {
|
||||||
@@ -128,9 +128,9 @@ describe('exporter-curl', () => {
|
|||||||
).toEqual([`curl 'https://yaak.app'`, `--user 'user:pass'`].join(` \\\n `));
|
).toEqual([`curl 'https://yaak.app'`, `--user 'user:pass'`].join(` \\\n `));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Broken basic auth', () => {
|
test('Broken basic auth', async () => {
|
||||||
expect(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
authenticationType: 'basic',
|
authenticationType: 'basic',
|
||||||
authentication: {},
|
authentication: {},
|
||||||
@@ -138,9 +138,9 @@ describe('exporter-curl', () => {
|
|||||||
).toEqual([`curl 'https://yaak.app'`, `--user ':'`].join(` \\\n `));
|
).toEqual([`curl 'https://yaak.app'`, `--user ':'`].join(` \\\n `));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Digest auth', () => {
|
test('Digest auth', async () => {
|
||||||
expect(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
authenticationType: 'digest',
|
authenticationType: 'digest',
|
||||||
authentication: {
|
authentication: {
|
||||||
@@ -151,9 +151,9 @@ describe('exporter-curl', () => {
|
|||||||
).toEqual([`curl 'https://yaak.app'`, `--digest --user 'user:pass'`].join(` \\\n `));
|
).toEqual([`curl 'https://yaak.app'`, `--digest --user 'user:pass'`].join(` \\\n `));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Bearer auth', () => {
|
test('Bearer auth', async () => {
|
||||||
expect(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
authenticationType: 'bearer',
|
authenticationType: 'bearer',
|
||||||
authentication: {
|
authentication: {
|
||||||
@@ -163,9 +163,9 @@ describe('exporter-curl', () => {
|
|||||||
).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer tok'`].join(` \\\n `));
|
).toEqual([`curl 'https://yaak.app'`, `--header 'Authorization: Bearer tok'`].join(` \\\n `));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Broken bearer auth', () => {
|
test('Broken bearer auth', async () => {
|
||||||
expect(
|
expect(
|
||||||
pluginHookExport(ctx, {
|
await pluginHookExport(ctx, {
|
||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
authenticationType: 'bearer',
|
authenticationType: 'bearer',
|
||||||
authentication: {
|
authentication: {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
import { Context, HttpRequest, Model, Workspace } from '@yaakapp/api';
|
||||||
import { describe, expect, test } from 'vitest';
|
import { describe, expect, test } from 'vitest';
|
||||||
import { HttpRequest, Model, Workspace } from '../../../src-web/lib/models';
|
|
||||||
import { pluginHookImport } from '../src';
|
import { pluginHookImport } from '../src';
|
||||||
|
|
||||||
const ctx = {};
|
const ctx = {} as Context;
|
||||||
|
|
||||||
describe('importer-curl', () => {
|
describe('importer-curl', () => {
|
||||||
test('Imports basic GET', () => {
|
test('Imports basic GET', () => {
|
||||||
@@ -298,7 +298,7 @@ describe('importer-curl', () => {
|
|||||||
url: 'https://yaak.app',
|
url: 'https://yaak.app',
|
||||||
urlParameters: [
|
urlParameters: [
|
||||||
{ name: 'foo', value: 'bar', enabled: true },
|
{ name: 'foo', value: 'bar', enabled: true },
|
||||||
{ name: 'baz', value: 'a%20a', enabled: true },
|
{ name: 'baz', value: 'a a', enabled: true },
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -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 `));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
Reference in New Issue
Block a user