From 3849b7ba993e82b3d2465244c7e7c697920231d8 Mon Sep 17 00:00:00 2001 From: Matt Travi Date: Wed, 28 Dec 2022 14:29:34 -0500 Subject: [PATCH 1/4] feat(script): generated the script file --- src/canary-test.js | 7 ----- src/scaffolder-test.js | 27 +++++++++++++++++++ src/scaffolder.js | 6 +++-- test/integration/features/scaffolder.feature | 1 + .../step_definitions/common-steps.mjs | 8 ++++-- .../step_definitions/script-steps.mjs | 10 +++++++ 6 files changed, 48 insertions(+), 11 deletions(-) delete mode 100644 src/canary-test.js create mode 100644 src/scaffolder-test.js create mode 100644 test/integration/features/step_definitions/script-steps.mjs diff --git a/src/canary-test.js b/src/canary-test.js deleted file mode 100644 index 98ac6072..00000000 --- a/src/canary-test.js +++ /dev/null @@ -1,7 +0,0 @@ -import {assert} from 'chai'; - -suite('canary test', () => { - test('that mocha is wired together correctly', () => { - assert.isTrue(true); - }); -}); diff --git a/src/scaffolder-test.js b/src/scaffolder-test.js new file mode 100644 index 00000000..f282c06f --- /dev/null +++ b/src/scaffolder-test.js @@ -0,0 +1,27 @@ +import {promises as fs} from 'fs'; + +import any from '@travi/any'; +import sinon from 'sinon'; +import {assert} from 'chai'; + +import scaffold from './scaffolder'; + +suite('scaffold script', () => { + let sandbox; + + setup(() => { + sandbox = sinon.createSandbox(); + + sandbox.stub(fs, 'writeFile'); + }); + + teardown(() => sandbox.restore()); + + test('that the script is scaffolded', async () => { + const projectRoot = any.string(); + + await scaffold({projectRoot}); + + assert.calledWith(fs.writeFile, `${projectRoot}/script.js`, 'export async function script(octokit, repository) {}'); + }); +}); diff --git a/src/scaffolder.js b/src/scaffolder.js index 0042b643..19130265 100644 --- a/src/scaffolder.js +++ b/src/scaffolder.js @@ -1,3 +1,5 @@ -export default function () { - return undefined; +import {promises as fs} from 'fs'; + +export default function ({projectRoot}) { + return fs.writeFile(`${projectRoot}/script.js`, 'export async function script(octokit, repository) {}'); } diff --git a/test/integration/features/scaffolder.feature b/test/integration/features/scaffolder.feature index f9140d92..8e9215e1 100644 --- a/test/integration/features/scaffolder.feature +++ b/test/integration/features/scaffolder.feature @@ -2,3 +2,4 @@ Feature: Scaffolder Scenario: Scaffold When the project is scaffolded + Then the script file is bootstrapped diff --git a/test/integration/features/step_definitions/common-steps.mjs b/test/integration/features/step_definitions/common-steps.mjs index c675bab1..877c787d 100644 --- a/test/integration/features/step_definitions/common-steps.mjs +++ b/test/integration/features/step_definitions/common-steps.mjs @@ -1,12 +1,16 @@ import {dirname, resolve} from 'node:path'; import {fileURLToPath} from 'node:url'; -import {After, When} from '@cucumber/cucumber'; +import {After, Before, When} from '@cucumber/cucumber'; import stubbedFs from 'mock-fs'; const __dirname = dirname(fileURLToPath(import.meta.url)); const stubbedNodeModules = stubbedFs.load(resolve(__dirname, '..', '..', '..', '..', 'node_modules')); +Before(function () { + this.projectRoot = process.cwd(); +}) + After(function () { stubbedFs.restore(); }); @@ -19,5 +23,5 @@ When('the project is scaffolded', async function () { node_modules: stubbedNodeModules }); - await scaffold({projectRoot: process.cwd()}); + await scaffold({projectRoot: this.projectRoot}); }); diff --git a/test/integration/features/step_definitions/script-steps.mjs b/test/integration/features/step_definitions/script-steps.mjs new file mode 100644 index 00000000..932a32ba --- /dev/null +++ b/test/integration/features/step_definitions/script-steps.mjs @@ -0,0 +1,10 @@ +import {promises as fs} from 'fs'; + +import {Then} from '@cucumber/cucumber'; +import {assert} from 'chai'; + +Then('the script file is bootstrapped', async function () { + const scriptContent = await fs.readFile(`${this.projectRoot}/script.js`, 'utf-8'); + + assert.equal(scriptContent, `export async function script(octokit, repository) {}`); +}); From b1f0e85b6460a66416d3ac720ecb65cc545ebf97 Mon Sep 17 00:00:00 2001 From: Matt Travi Date: Wed, 28 Dec 2022 14:38:21 -0500 Subject: [PATCH 2/4] fix(script): made the generated file be the index --- src/scaffolder-test.js | 2 +- src/scaffolder.js | 2 +- test/integration/features/step_definitions/script-steps.mjs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/scaffolder-test.js b/src/scaffolder-test.js index f282c06f..81e1cf75 100644 --- a/src/scaffolder-test.js +++ b/src/scaffolder-test.js @@ -22,6 +22,6 @@ suite('scaffold script', () => { await scaffold({projectRoot}); - assert.calledWith(fs.writeFile, `${projectRoot}/script.js`, 'export async function script(octokit, repository) {}'); + assert.calledWith(fs.writeFile, `${projectRoot}/index.js`, 'export async function script(octokit, repository) {}'); }); }); diff --git a/src/scaffolder.js b/src/scaffolder.js index 19130265..a9281391 100644 --- a/src/scaffolder.js +++ b/src/scaffolder.js @@ -1,5 +1,5 @@ import {promises as fs} from 'fs'; export default function ({projectRoot}) { - return fs.writeFile(`${projectRoot}/script.js`, 'export async function script(octokit, repository) {}'); + return fs.writeFile(`${projectRoot}/index.js`, 'export async function script(octokit, repository) {}'); } diff --git a/test/integration/features/step_definitions/script-steps.mjs b/test/integration/features/step_definitions/script-steps.mjs index 932a32ba..0c536c6b 100644 --- a/test/integration/features/step_definitions/script-steps.mjs +++ b/test/integration/features/step_definitions/script-steps.mjs @@ -4,7 +4,7 @@ import {Then} from '@cucumber/cucumber'; import {assert} from 'chai'; Then('the script file is bootstrapped', async function () { - const scriptContent = await fs.readFile(`${this.projectRoot}/script.js`, 'utf-8'); + const scriptContent = await fs.readFile(`${this.projectRoot}/index.js`, 'utf-8'); assert.equal(scriptContent, `export async function script(octokit, repository) {}`); }); From 86d5c0e43616bcf19e57c250b667903ec0b8d5c9 Mon Sep 17 00:00:00 2001 From: Matt Travi Date: Wed, 28 Dec 2022 14:51:14 -0500 Subject: [PATCH 3/4] feat(metadata): defined the conventional tag for octoherd-script projects --- src/scaffolder-test.js | 3 ++- src/scaffolder.js | 6 ++++-- test/integration/features/scaffolder.feature | 1 + .../features/step_definitions/common-steps.mjs | 2 +- .../features/step_definitions/metadata-steps.mjs | 8 ++++++++ 5 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 test/integration/features/step_definitions/metadata-steps.mjs diff --git a/src/scaffolder-test.js b/src/scaffolder-test.js index 81e1cf75..0cec1458 100644 --- a/src/scaffolder-test.js +++ b/src/scaffolder-test.js @@ -20,8 +20,9 @@ suite('scaffold script', () => { test('that the script is scaffolded', async () => { const projectRoot = any.string(); - await scaffold({projectRoot}); + const {tags} = await scaffold({projectRoot}); assert.calledWith(fs.writeFile, `${projectRoot}/index.js`, 'export async function script(octokit, repository) {}'); + assert.deepEqual(tags, ['octoherd-script']); }); }); diff --git a/src/scaffolder.js b/src/scaffolder.js index a9281391..f09437db 100644 --- a/src/scaffolder.js +++ b/src/scaffolder.js @@ -1,5 +1,7 @@ import {promises as fs} from 'fs'; -export default function ({projectRoot}) { - return fs.writeFile(`${projectRoot}/index.js`, 'export async function script(octokit, repository) {}'); +export default async function ({projectRoot}) { + await fs.writeFile(`${projectRoot}/index.js`, 'export async function script(octokit, repository) {}'); + + return {tags: ['octoherd-script']}; } diff --git a/test/integration/features/scaffolder.feature b/test/integration/features/scaffolder.feature index 8e9215e1..be0e79f0 100644 --- a/test/integration/features/scaffolder.feature +++ b/test/integration/features/scaffolder.feature @@ -3,3 +3,4 @@ Feature: Scaffolder Scenario: Scaffold When the project is scaffolded Then the script file is bootstrapped + And project metadata is generated diff --git a/test/integration/features/step_definitions/common-steps.mjs b/test/integration/features/step_definitions/common-steps.mjs index 877c787d..c97fa96f 100644 --- a/test/integration/features/step_definitions/common-steps.mjs +++ b/test/integration/features/step_definitions/common-steps.mjs @@ -23,5 +23,5 @@ When('the project is scaffolded', async function () { node_modules: stubbedNodeModules }); - await scaffold({projectRoot: this.projectRoot}); + this.result = await scaffold({projectRoot: this.projectRoot}); }); diff --git a/test/integration/features/step_definitions/metadata-steps.mjs b/test/integration/features/step_definitions/metadata-steps.mjs new file mode 100644 index 00000000..cc4f7f87 --- /dev/null +++ b/test/integration/features/step_definitions/metadata-steps.mjs @@ -0,0 +1,8 @@ +import {Then} from '@cucumber/cucumber'; +import {assert} from 'chai'; + +Then('project metadata is generated', async function () { + const {tags} = this.result; + + assert.deepEqual(tags, ['octoherd-script']); +}); From 0662547c91ffd5f89437bbfe90cf85eefd85f053 Mon Sep 17 00:00:00 2001 From: Matt Travi Date: Wed, 28 Dec 2022 15:32:50 -0500 Subject: [PATCH 4/4] docs: linked to the form8ion and octoherd projects --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 99f5a34f..e069b64c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # octoherd-script -form8ion plugin to manage script projects for octoherd +[form8ion](https://github.com/form8ion) plugin to manage script projects for +[octoherd](https://github.com/octoherd)