From 246a7ef286564183d8a16b861aed799181d83fc7 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Wed, 29 Mar 2023 10:55:49 +0200 Subject: [PATCH 1/8] make `main` default branch for sandboxes --- code/lib/cli/src/generate.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/lib/cli/src/generate.ts b/code/lib/cli/src/generate.ts index 6af425adab8e..c6cd389a4223 100644 --- a/code/lib/cli/src/generate.ts +++ b/code/lib/cli/src/generate.ts @@ -134,10 +134,10 @@ command('extract [location] [output]') ); command('sandbox [filterValue]') - .alias('repro') // for retrocompatibility purposes + .alias('repro') // for backwards compatibility .description('Create a sandbox from a set of possible templates') .option('-o --output ', 'Define an output directory') - .option('-b --branch ', 'Define the branch to download from', 'next') + .option('-b --branch ', 'Define the branch to download from', 'main') .option('--no-init', 'Whether to download a template without an initialized Storybook', false) .action((filterValue, options) => sandbox({ filterValue, ...options }).catch((e) => { From 76f05c7fdbf0686a9338d7021599673d4ed31595 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Wed, 29 Mar 2023 12:05:38 +0200 Subject: [PATCH 2/8] split generate workflow into main and next skip yarn command for publish add branch parameter for publish script drop next parameter for publish script add a constants file for scripts to prevent mismatching paths etc. --- ...repros.yml => generate-sandboxes-main.yml} | 18 ++++----- .github/workflows/generate-sandboxes-next.yml | 40 +++++++++++++++++++ code/package.json | 2 +- generate-sandboxes.sh | 2 +- scripts/run-registry.ts | 1 + .../{generate-sandboxes.ts => generate.ts} | 13 ++---- scripts/sandbox-generators/publish.ts | 32 +++++++-------- scripts/sandbox-generators/utils/constants.ts | 7 ++++ scripts/sandbox-generators/utils/yarn.ts | 2 +- scripts/tasks/generate.ts | 10 ++--- scripts/tasks/publish.ts | 2 +- scripts/tasks/run-registry.ts | 2 +- scripts/tasks/sandbox-parts.ts | 4 +- 13 files changed, 87 insertions(+), 48 deletions(-) rename .github/workflows/{generate-repros.yml => generate-sandboxes-main.yml} (65%) create mode 100644 .github/workflows/generate-sandboxes-next.yml rename scripts/sandbox-generators/{generate-sandboxes.ts => generate.ts} (95%) create mode 100644 scripts/sandbox-generators/utils/constants.ts diff --git a/.github/workflows/generate-repros.yml b/.github/workflows/generate-sandboxes-main.yml similarity index 65% rename from .github/workflows/generate-repros.yml rename to .github/workflows/generate-sandboxes-main.yml index 352128e157a5..9cca09dd6ff5 100644 --- a/.github/workflows/generate-repros.yml +++ b/.github/workflows/generate-sandboxes-main.yml @@ -1,13 +1,9 @@ -name: Generate and push repros to Github +name: Generate and push sandboxes (main) on: schedule: - cron: '2 2 */1 * *' workflow_dispatch: - # To remove when the branch will be merged - push: - branches: - - vite-frameworks-xyz jobs: generate: @@ -20,6 +16,8 @@ jobs: with: node-version: 16 - uses: actions/checkout@v3 + with: + ref: main - name: Setup git user run: | git config --global user.name "Storybook Bot" @@ -29,14 +27,14 @@ jobs: - name: Compile Storybook libraries run: yarn task --task publish --start-from=auto --no-link - name: Running local registry - run: yarn local-registry --open & + run: ts-node --swc --project=../scripts/tsconfig.json ../scripts/run-registry.ts --open & working-directory: ./code - name: Wait for registry run: yarn wait-on http://localhost:6001 working-directory: ./code - - name: Generate repros - run: yarn generate-sandboxes --local-registry + - name: Generate + run: ts-node --swc ../scripts/sandbox-generators/generate.ts --local-registry working-directory: ./code - - name: Publish sandboxes to GitHub - run: yarn publish-sandboxes --remote=https://storybook-bot:${{ secrets.PAT_STORYBOOK_BOT}}@github.com/storybookjs/sandboxes.git --push + - name: Publish + run: ts-node --swc ../scripts/sandbox-generators/publish.ts --remote=https://storybook-bot:${{ secrets.PAT_STORYBOOK_BOT}}@github.com/storybookjs/sandboxes.git --push --branch=main working-directory: ./code diff --git a/.github/workflows/generate-sandboxes-next.yml b/.github/workflows/generate-sandboxes-next.yml new file mode 100644 index 000000000000..3d82cf9f77d3 --- /dev/null +++ b/.github/workflows/generate-sandboxes-next.yml @@ -0,0 +1,40 @@ +name: Generate and push sandboxes (next) + +on: + schedule: + - cron: '2 2 */1 * *' + workflow_dispatch: + +jobs: + generate: + runs-on: ubuntu-latest + env: + YARN_ENABLE_IMMUTABLE_INSTALLS: false + CLEANUP_SANDBOX_NODE_MODULES: true + steps: + - uses: actions/setup-node@v3 + with: + node-version: 16 + - uses: actions/checkout@v3 + with: + ref: next + - name: Setup git user + run: | + git config --global user.name "Storybook Bot" + git config --global user.email "bot@storybook.js.org" + - name: Install dependencies + run: node ./scripts/check-dependencies.js + - name: Compile Storybook libraries + run: yarn task --task publish --start-from=auto --no-link + - name: Running local registry + run: ts-node --swc --project=../scripts/tsconfig.json ../scripts/run-registry.ts --open & + working-directory: ./code + - name: Wait for registry + run: yarn wait-on http://localhost:6001 + working-directory: ./code + - name: Generate + run: ts-node --swc ../scripts/sandbox-generators/generate.ts --local-registry + working-directory: ./code + - name: Publish + run: ts-node --swc ../scripts/sandbox-generators/publish.ts --remote=https://storybook-bot:${{ secrets.PAT_STORYBOOK_BOT}}@github.com/storybookjs/sandboxes.git --push --branch=next + working-directory: ./code diff --git a/code/package.json b/code/package.json index ec60e34ef46a..9d49c8c17659 100644 --- a/code/package.json +++ b/code/package.json @@ -29,7 +29,7 @@ "check": "NODE_ENV=production node ../scripts/check-package.js", "ci-tests": "yarn task --task check --no-link --start-from=install && yarn lint && yarn test && cd ../scripts && yarn test", "danger": "danger", - "generate-sandboxes": "ts-node --swc ../scripts/sandbox-generators/generate-sandboxes.ts", + "generate-sandboxes": "ts-node --swc ../scripts/sandbox-generators/generate.ts", "github-release": "github-release-from-changelog", "linear-export": "ts-node --swc --project=../scripts/tsconfig.json ../scripts/linear-export.ts", "lint": "yarn lint:js && yarn lint:md", diff --git a/generate-sandboxes.sh b/generate-sandboxes.sh index a75eb4469559..425ead9e3b3c 100755 --- a/generate-sandboxes.sh +++ b/generate-sandboxes.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -./scripts/node_modules/.bin/ts-node ./scripts/sandbox-generators/generate-sandboxes.ts \ No newline at end of file +./scripts/node_modules/.bin/ts-node ./scripts/sandbox-generators/generate.ts \ No newline at end of file diff --git a/scripts/run-registry.ts b/scripts/run-registry.ts index a9f20bbffb84..fd55b720496e 100755 --- a/scripts/run-registry.ts +++ b/scripts/run-registry.ts @@ -29,6 +29,7 @@ const startVerdaccio = async () => { self_path: cache, }; + // @ts-expect-error (verdaccio's interface is wrong) runServer(config).then((app: Server) => { app.listen(6001, () => { resolved = true; diff --git a/scripts/sandbox-generators/generate-sandboxes.ts b/scripts/sandbox-generators/generate.ts similarity index 95% rename from scripts/sandbox-generators/generate-sandboxes.ts rename to scripts/sandbox-generators/generate.ts index a684e7c7d02a..a3b4270b054b 100755 --- a/scripts/sandbox-generators/generate-sandboxes.ts +++ b/scripts/sandbox-generators/generate.ts @@ -21,11 +21,7 @@ import { localizeYarnConfigFiles, setupYarn } from './utils/yarn'; import type { GeneratorConfig } from './utils/types'; import { getStackblitzUrl, renderTemplate } from './utils/template'; import type { JsPackageManager } from '../../code/lib/cli/src/js-package-manager'; - -const OUTPUT_DIRECTORY = join(__dirname, '..', '..', 'repros'); -const BEFORE_DIR_NAME = 'before-storybook'; -const AFTER_DIR_NAME = 'after-storybook'; -const SCRIPT_TIMEOUT = 5 * 60 * 1000; +import { BEFORE_DIR_NAME, AFTER_DIR_NAME, SCRIPT_TIMEOUT, REPROS_DIRECTORY, LOCAL_REGISTRY_URL } from './utils/constants'; const sbInit = async (cwd: string, flags?: string[], debug?: boolean) => { const sbCliBinaryPath = join(__dirname, `../../code/lib/cli/bin/index.js`); @@ -35,7 +31,6 @@ const sbInit = async (cwd: string, flags?: string[], debug?: boolean) => { await runCommand(`${sbCliBinaryPath} init ${fullFlags.join(' ')}`, { cwd, env }, debug); }; -const LOCAL_REGISTRY_URL = 'http://localhost:6001'; const withLocalRegistry = async (packageManager: JsPackageManager, action: () => Promise) => { const prevUrl = packageManager.getRegistryURL(); let error; @@ -89,7 +84,7 @@ const addStorybook = async ({ await rename(tmpDir, afterDir); }; -export const runCommand = async (script: string, options: ExecaOptions, debug: boolean) => { +export const runCommand = async (script: string, options: ExecaOptions, debug: boolean = false) => { if (debug) { console.log(`Running command: ${script}`); } @@ -136,7 +131,7 @@ const runGenerators = async ( const time = process.hrtime(); console.log(`🧬 generating ${name}`); - const baseDir = join(OUTPUT_DIRECTORY, dirName); + const baseDir = join(REPROS_DIRECTORY, dirName); const beforeDir = join(baseDir, BEFORE_DIR_NAME); await emptyDir(baseDir); @@ -239,7 +234,7 @@ export const generate = async ({ if (require.main === module) { program - .description('Create a reproduction from a set of possible templates') + .description('Generate sandboxes from a set of possible templates') .option('--template