From 677b12fc4d8b96d2b1a03baf6c78db3042134dc6 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Wed, 22 Nov 2023 20:09:04 +0700 Subject: [PATCH 01/61] Setup repository on publish --- tools/scripts/publish.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/scripts/publish.mjs b/tools/scripts/publish.mjs index f1eb6f537..8af3725e6 100644 --- a/tools/scripts/publish.mjs +++ b/tools/scripts/publish.mjs @@ -29,6 +29,7 @@ writeJsonFile('package.json', { ...originalPackageJson, publishConfig: { access: 'public' }, license: 'MIT', + repository: 'https://github.com/igorkamyshev/farfetched', }); const { version } = originalPackageJson; From 03f109376329196d6d05a99585698245286d1c61 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Wed, 22 Nov 2023 20:31:34 +0700 Subject: [PATCH 02/61] Try to setup beta packages --- .github/workflows/beta.yml | 25 +++++++++++++++++++++++++ package.json | 3 ++- tools/scripts/beta.mjs | 15 +++++++++++++++ tools/scripts/publish.mjs | 9 ++------- tools/scripts/shared/invariant.mjs | 8 ++++++++ 5 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/beta.yml create mode 100644 tools/scripts/beta.mjs create mode 100644 tools/scripts/shared/invariant.mjs diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml new file mode 100644 index 000000000..afd5f01d3 --- /dev/null +++ b/.github/workflows/beta.yml @@ -0,0 +1,25 @@ +name: Beta + +on: + push: + branches: + - '*' + - '!master' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 + - uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + - run: pnpm install --frozen-lockfile + shell: sh + - run: | + echo "@farfetched:registry=https://npm.pkg.github.com" > ~/.npmrc + shell: sh + - run: pnpm beta + - run: pnpm nx run-many --output-style=static --target=publish --all diff --git a/package.json b/package.json index ace8bce2e..4f8ed8e63 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "build": "nx run-many --target=build --all", "format": "nx format:write --all", "size": "nx run-many --target=size --all", - "changes": "changeset" + "changes": "changeset", + "beta": "node ./tools/scripts/beta.mjs" }, "devDependencies": { "@algolia/client-search": "^4.14.2", diff --git a/tools/scripts/beta.mjs b/tools/scripts/beta.mjs new file mode 100644 index 000000000..d8a067cad --- /dev/null +++ b/tools/scripts/beta.mjs @@ -0,0 +1,15 @@ +import { spawnSync } from 'child_process'; + +const branch = spawnSync('git', ['branch', '--show-current'], { + stdio: 'pipe', +}) + .stdout.toString() + .trim(); + +spawnSync('pnpm', ['changeset', 'pre', 'enter', branch], { + stdio: 'inherit', +}); + +spawnSync('pnpm', ['changeset', 'version'], { + stdio: 'inherit', +}); diff --git a/tools/scripts/publish.mjs b/tools/scripts/publish.mjs index 8af3725e6..e7e331bfa 100644 --- a/tools/scripts/publish.mjs +++ b/tools/scripts/publish.mjs @@ -6,6 +6,8 @@ import { } from '@nrwl/devkit'; import { spawnSync } from 'child_process'; +import { invariant } from './shared/invariant.mjs'; + const [, , name] = process.argv; const graph = readCachedProjectGraph(); @@ -70,10 +72,3 @@ function getLastJsonObjectFromString(str) { } return null; } - -function invariant(condition, message) { - if (!condition) { - logger.error(message); - process.exit(1); - } -} diff --git a/tools/scripts/shared/invariant.mjs b/tools/scripts/shared/invariant.mjs new file mode 100644 index 000000000..51f647dc4 --- /dev/null +++ b/tools/scripts/shared/invariant.mjs @@ -0,0 +1,8 @@ +import { logger } from '@nrwl/devkit'; + +export function invariant(condition, message) { + if (!condition) { + logger.error(message); + process.exit(1); + } +} From f751a74240675e5de67e8734d4c27e0cfdc5b8ed Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Wed, 22 Nov 2023 20:34:58 +0700 Subject: [PATCH 03/61] Pass GITHUB_TOKEN --- .github/workflows/beta.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index afd5f01d3..b24029403 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -23,3 +23,5 @@ jobs: shell: sh - run: pnpm beta - run: pnpm nx run-many --output-style=static --target=publish --all + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 4287d7a9cb73be112045d296214206aafcc953de Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Wed, 22 Nov 2023 20:38:32 +0700 Subject: [PATCH 04/61] Migrate --- .github/workflows/beta.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index b24029403..def53dbab 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -14,13 +14,12 @@ jobs: - uses: pnpm/action-setup@v2 - uses: actions/setup-node@v3 with: + registry-url: 'https://npm.pkg.github.com' + scope: '@farfetched' node-version-file: '.nvmrc' cache: 'pnpm' - run: pnpm install --frozen-lockfile shell: sh - - run: | - echo "@farfetched:registry=https://npm.pkg.github.com" > ~/.npmrc - shell: sh - run: pnpm beta - run: pnpm nx run-many --output-style=static --target=publish --all env: From fc5c8efcf05d908f9ec661ca0910739d9994d82a Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Wed, 22 Nov 2023 20:50:00 +0700 Subject: [PATCH 05/61] Replace names for packages --- tools/scripts/beta.mjs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tools/scripts/beta.mjs b/tools/scripts/beta.mjs index d8a067cad..1e4d79c9a 100644 --- a/tools/scripts/beta.mjs +++ b/tools/scripts/beta.mjs @@ -1,4 +1,10 @@ +import { + readCachedProjectGraph, + writeJsonFile, + readJsonFile, +} from '@nrwl/devkit'; import { spawnSync } from 'child_process'; +import { join } from 'path'; const branch = spawnSync('git', ['branch', '--show-current'], { stdio: 'pipe', @@ -13,3 +19,26 @@ spawnSync('pnpm', ['changeset', 'pre', 'enter', branch], { spawnSync('pnpm', ['changeset', 'version'], { stdio: 'inherit', }); + +for (const [_name, project] of Object.entries(readCachedProjectGraph().nodes)) { + if (project.type !== 'lib') { + continue; + } + + const packageJsonPath = join(project.data.sourceRoot, 'package.json'); + + const originalPackageJson = readJsonFile(packageJsonPath); + + writeJsonFile(packageJsonPath, { + ...originalPackageJson, + name: adjustPackageName(originalPackageJson.name), + }); +} + +spawnSync('pnpm', ['changeset', 'pre', 'exit'], { + stdio: 'inherit', +}); + +function adjustPackageName(name) { + return name.replace('@farfetched/', '@igorkamyshev/farfetched-'); +} From ee435f26eb3dd73649ea16a62e191697be415810 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Wed, 22 Nov 2023 21:03:12 +0700 Subject: [PATCH 06/61] Fix invalid nx usage --- tools/scripts/beta.mjs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/scripts/beta.mjs b/tools/scripts/beta.mjs index 1e4d79c9a..39618f163 100644 --- a/tools/scripts/beta.mjs +++ b/tools/scripts/beta.mjs @@ -1,5 +1,5 @@ import { - readCachedProjectGraph, + createProjectGraphAsync, writeJsonFile, readJsonFile, } from '@nrwl/devkit'; @@ -20,7 +20,9 @@ spawnSync('pnpm', ['changeset', 'version'], { stdio: 'inherit', }); -for (const [_name, project] of Object.entries(readCachedProjectGraph().nodes)) { +const graph = await createProjectGraphAsync(); + +for (const [_name, project] of Object.entries(graph.nodes)) { if (project.type !== 'lib') { continue; } From 8e215530e0ab69424340405c7d49be90f0f86c49 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Wed, 22 Nov 2023 21:05:52 +0700 Subject: [PATCH 07/61] Correct replace --- tools/scripts/beta.mjs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tools/scripts/beta.mjs b/tools/scripts/beta.mjs index 39618f163..4156e99cd 100644 --- a/tools/scripts/beta.mjs +++ b/tools/scripts/beta.mjs @@ -20,6 +20,10 @@ spawnSync('pnpm', ['changeset', 'version'], { stdio: 'inherit', }); +spawnSync('pnpm', ['changeset', 'pre', 'exit'], { + stdio: 'inherit', +}); + const graph = await createProjectGraphAsync(); for (const [_name, project] of Object.entries(graph.nodes)) { @@ -27,7 +31,12 @@ for (const [_name, project] of Object.entries(graph.nodes)) { continue; } - const packageJsonPath = join(project.data.sourceRoot, 'package.json'); + const packageJsonPath = join( + process.cwd(), + project.data.sourceRoot, + '..', + 'package.json' + ); const originalPackageJson = readJsonFile(packageJsonPath); @@ -37,10 +46,6 @@ for (const [_name, project] of Object.entries(graph.nodes)) { }); } -spawnSync('pnpm', ['changeset', 'pre', 'exit'], { - stdio: 'inherit', -}); - function adjustPackageName(name) { return name.replace('@farfetched/', '@igorkamyshev/farfetched-'); } From 5c6b4293ca667d7e98cefc40f5ccb8560225eb14 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 09:52:41 +0700 Subject: [PATCH 08/61] Setup publishing correctly --- .github/workflows/beta.yml | 10 ++++-- package.json | 3 +- packages/atomic-router/project.json | 9 +++-- packages/core/project.json | 9 +++-- packages/io-ts/project.json | 9 +++-- packages/runtypes/project.json | 9 +++-- packages/solid/project.json | 9 +++-- packages/superstruct/project.json | 9 +++-- packages/typed-contracts/project.json | 9 +++-- packages/zod/project.json | 9 +++-- tools/scripts/beta.mjs | 51 --------------------------- tools/scripts/publish.mjs | 9 ++++- tools/scripts/rename.mjs | 47 ++++++++++++++++++++++++ 13 files changed, 120 insertions(+), 72 deletions(-) delete mode 100644 tools/scripts/beta.mjs create mode 100644 tools/scripts/rename.mjs diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index def53dbab..5da0e87a6 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -20,7 +20,13 @@ jobs: cache: 'pnpm' - run: pnpm install --frozen-lockfile shell: sh - - run: pnpm beta - - run: pnpm nx run-many --output-style=static --target=publish --all + - name: Extract branch name + shell: bash + run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT + id: extract_branch + - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} + - run: pnpm changeset version + - run: pnpm changeset pre exit + - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/package.json b/package.json index 4f8ed8e63..ace8bce2e 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,7 @@ "build": "nx run-many --target=build --all", "format": "nx format:write --all", "size": "nx run-many --target=size --all", - "changes": "changeset", - "beta": "node ./tools/scripts/beta.mjs" + "changes": "changeset" }, "devDependencies": { "@algolia/client-search": "^4.14.2", diff --git a/packages/atomic-router/project.json b/packages/atomic-router/project.json index 71577eb59..cd2b98d0f 100644 --- a/packages/atomic-router/project.json +++ b/packages/atomic-router/project.json @@ -32,14 +32,19 @@ "publish": { "executor": "nx:run-commands", "options": { - "command": "node tools/scripts/publish.mjs atomic-router" + "command": "node tools/scripts/publish.mjs atomic-router --rename={args.rename}" }, "dependsOn": [ { "projects": "self", "target": "pack" } - ] + ], + "configurations": { + "beta": { + "args": "--rename=github" + } + } }, "lint": { "executor": "@nrwl/linter:eslint", diff --git a/packages/core/project.json b/packages/core/project.json index 9957096bb..f03a4ff34 100644 --- a/packages/core/project.json +++ b/packages/core/project.json @@ -32,14 +32,19 @@ "publish": { "executor": "nx:run-commands", "options": { - "command": "node tools/scripts/publish.mjs core" + "command": "node tools/scripts/publish.mjs core --rename={args.rename}" }, "dependsOn": [ { "projects": "self", "target": "pack" } - ] + ], + "configurations": { + "beta": { + "args": "--rename=github" + } + } }, "lint": { "executor": "@nrwl/linter:eslint", diff --git a/packages/io-ts/project.json b/packages/io-ts/project.json index 01f82df68..65032cebe 100644 --- a/packages/io-ts/project.json +++ b/packages/io-ts/project.json @@ -32,14 +32,19 @@ "publish": { "executor": "nx:run-commands", "options": { - "command": "node tools/scripts/publish.mjs io-ts" + "command": "node tools/scripts/publish.mjs io-ts --rename={args.rename}" }, "dependsOn": [ { "projects": "self", "target": "pack" } - ] + ], + "configurations": { + "beta": { + "args": "--rename=github" + } + } }, "lint": { "executor": "@nrwl/linter:eslint", diff --git a/packages/runtypes/project.json b/packages/runtypes/project.json index e0f19aef0..fa08d7675 100644 --- a/packages/runtypes/project.json +++ b/packages/runtypes/project.json @@ -32,14 +32,19 @@ "publish": { "executor": "nx:run-commands", "options": { - "command": "node tools/scripts/publish.mjs runtypes" + "command": "node tools/scripts/publish.mjs runtypes --rename={args.rename}" }, "dependsOn": [ { "projects": "self", "target": "pack" } - ] + ], + "configurations": { + "beta": { + "args": "--rename=github" + } + } }, "lint": { "executor": "@nrwl/linter:eslint", diff --git a/packages/solid/project.json b/packages/solid/project.json index 16448f3ae..ecfbe041f 100644 --- a/packages/solid/project.json +++ b/packages/solid/project.json @@ -33,14 +33,19 @@ "publish": { "executor": "nx:run-commands", "options": { - "command": "node tools/scripts/publish.mjs solid" + "command": "node tools/scripts/publish.mjs solid --rename={args.rename}" }, "dependsOn": [ { "projects": "self", "target": "pack" } - ] + ], + "configurations": { + "beta": { + "args": "--rename=github" + } + } }, "lint": { "executor": "@nrwl/linter:eslint", diff --git a/packages/superstruct/project.json b/packages/superstruct/project.json index 8ced33580..d02df560d 100644 --- a/packages/superstruct/project.json +++ b/packages/superstruct/project.json @@ -32,14 +32,19 @@ "publish": { "executor": "nx:run-commands", "options": { - "command": "node tools/scripts/publish.mjs superstruct" + "command": "node tools/scripts/publish.mjs superstruct --rename={args.rename}" }, "dependsOn": [ { "projects": "self", "target": "pack" } - ] + ], + "configurations": { + "beta": { + "args": "--rename=github" + } + } }, "lint": { "executor": "@nrwl/linter:eslint", diff --git a/packages/typed-contracts/project.json b/packages/typed-contracts/project.json index af0b55620..b24823e97 100644 --- a/packages/typed-contracts/project.json +++ b/packages/typed-contracts/project.json @@ -32,14 +32,19 @@ "publish": { "executor": "nx:run-commands", "options": { - "command": "node tools/scripts/publish.mjs typed-contracts" + "command": "node tools/scripts/publish.mjs typed-contracts --rename={args.rename}" }, "dependsOn": [ { "projects": "self", "target": "pack" } - ] + ], + "configurations": { + "beta": { + "args": "--rename=github" + } + } }, "lint": { "executor": "@nrwl/linter:eslint", diff --git a/packages/zod/project.json b/packages/zod/project.json index 4775217f0..d883f9f9d 100644 --- a/packages/zod/project.json +++ b/packages/zod/project.json @@ -32,14 +32,19 @@ "publish": { "executor": "nx:run-commands", "options": { - "command": "node tools/scripts/publish.mjs zod" + "command": "node tools/scripts/publish.mjs zod --rename={args.rename}" }, "dependsOn": [ { "projects": "self", "target": "pack" } - ] + ], + "configurations": { + "beta": { + "args": "--rename=github" + } + } }, "lint": { "executor": "@nrwl/linter:eslint", diff --git a/tools/scripts/beta.mjs b/tools/scripts/beta.mjs deleted file mode 100644 index 4156e99cd..000000000 --- a/tools/scripts/beta.mjs +++ /dev/null @@ -1,51 +0,0 @@ -import { - createProjectGraphAsync, - writeJsonFile, - readJsonFile, -} from '@nrwl/devkit'; -import { spawnSync } from 'child_process'; -import { join } from 'path'; - -const branch = spawnSync('git', ['branch', '--show-current'], { - stdio: 'pipe', -}) - .stdout.toString() - .trim(); - -spawnSync('pnpm', ['changeset', 'pre', 'enter', branch], { - stdio: 'inherit', -}); - -spawnSync('pnpm', ['changeset', 'version'], { - stdio: 'inherit', -}); - -spawnSync('pnpm', ['changeset', 'pre', 'exit'], { - stdio: 'inherit', -}); - -const graph = await createProjectGraphAsync(); - -for (const [_name, project] of Object.entries(graph.nodes)) { - if (project.type !== 'lib') { - continue; - } - - const packageJsonPath = join( - process.cwd(), - project.data.sourceRoot, - '..', - 'package.json' - ); - - const originalPackageJson = readJsonFile(packageJsonPath); - - writeJsonFile(packageJsonPath, { - ...originalPackageJson, - name: adjustPackageName(originalPackageJson.name), - }); -} - -function adjustPackageName(name) { - return name.replace('@farfetched/', '@igorkamyshev/farfetched-'); -} diff --git a/tools/scripts/publish.mjs b/tools/scripts/publish.mjs index e7e331bfa..3a34150b7 100644 --- a/tools/scripts/publish.mjs +++ b/tools/scripts/publish.mjs @@ -5,12 +5,15 @@ import { writeJsonFile, } from '@nrwl/devkit'; import { spawnSync } from 'child_process'; +import { renameForGitHub } from './rename.mjs'; import { invariant } from './shared/invariant.mjs'; -const [, , name] = process.argv; +const [, , name, renameOption] = process.argv; const graph = readCachedProjectGraph(); +const shouldRenameForGithub = renameOption === '--rename=github'; + const project = graph.nodes[name]; invariant( project, @@ -43,6 +46,10 @@ invariant( `No version provided or version did not match Semantic Versioning, expected: #.#.#-tag.# or #.#.#, got ${version}.` ); +if (shouldRenameForGithub) { + await renameForGitHub(); +} + const result = spawnSync('npm', ['publish', '--json', '--access', 'public']); const errorInfo = getLastJsonObjectFromString(result.stderr.toString()); diff --git a/tools/scripts/rename.mjs b/tools/scripts/rename.mjs new file mode 100644 index 000000000..7747870bd --- /dev/null +++ b/tools/scripts/rename.mjs @@ -0,0 +1,47 @@ +import { writeJsonFile, readJsonFile } from '@nrwl/devkit'; +import { readFile, writeFile } from 'fs/promises'; + +export async function renameForGitHub() { + const originalPackageJson = readJsonFile('package.json'); + + writeJsonFile('package.json', { + ...originalPackageJson, + name: adjustPackageName(originalPackageJson.name), + peerDependencies: mapKeys( + originalPackageJson.peerDependencies ?? {}, + adjustPackageName + ), + }); + + const files = [ + [ + originalPackageJson.module, + originalPackageJson.main, + originalPackageJson.types, + ], + Object.values(originalPackageJson.exports['.']), + ].flat(); + + await Promise.all( + files.map(async (fileName) => { + const content = await readFile(fileName, 'utf-8'); + + await writeFile(fileName, adjustPackageName(content)); + }) + ); +} + +// utils + +function adjustPackageName(name) { + return name.replaceAll('@farfetched/', '@igorkamyshev/farfetched-'); +} + +export function mapKeys(val, fn) { + const mappedEntries = Object.entries(val).map(([key, value]) => [ + fn(key), + value, + ]); + + return Object.fromEntries(mappedEntries); +} From 7dc549e31b3c6206b273eb15162c0237c4a03040 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 09:55:41 +0700 Subject: [PATCH 09/61] Revert npmrc setting --- .github/workflows/beta.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 5da0e87a6..7db110bb1 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -14,12 +14,13 @@ jobs: - uses: pnpm/action-setup@v2 - uses: actions/setup-node@v3 with: - registry-url: 'https://npm.pkg.github.com' - scope: '@farfetched' node-version-file: '.nvmrc' cache: 'pnpm' - run: pnpm install --frozen-lockfile shell: sh + - run: | + echo "@farfetched:registry=https://npm.pkg.github.com" > ~/.npmrc + shell: sh - name: Extract branch name shell: bash run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT From 9bf03be55d0f2e02c2e8dd283d5424faed4240d4 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 09:58:51 +0700 Subject: [PATCH 10/61] One more time --- .github/workflows/beta.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 7db110bb1..038670b72 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -14,13 +14,12 @@ jobs: - uses: pnpm/action-setup@v2 - uses: actions/setup-node@v3 with: + registry-url: 'https://npm.pkg.github.com' + scope: '@igorkamyshev' node-version-file: '.nvmrc' cache: 'pnpm' - run: pnpm install --frozen-lockfile shell: sh - - run: | - echo "@farfetched:registry=https://npm.pkg.github.com" > ~/.npmrc - shell: sh - name: Extract branch name shell: bash run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT From ed60b6ca7c71062fa02397030a8d16056d4b1b8d Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:01:19 +0700 Subject: [PATCH 11/61] Just test change --- .changeset/rare-pets-give.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .changeset/rare-pets-give.md diff --git a/.changeset/rare-pets-give.md b/.changeset/rare-pets-give.md new file mode 100644 index 000000000..88b81e9ef --- /dev/null +++ b/.changeset/rare-pets-give.md @@ -0,0 +1,12 @@ +--- +'@farfetched/atomic-router': patch +'@farfetched/core': patch +'@farfetched/io-ts': patch +'@farfetched/runtypes': patch +'@farfetched/solid': patch +'@farfetched/superstruct': patch +'@farfetched/typed-contracts': patch +'@farfetched/zod': patch +--- + +Just test change From 394bb64409dd8905466ea88e4fc6ee5f241780ec Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:11:17 +0700 Subject: [PATCH 12/61] One more test --- .changeset/blue-chefs-own.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/blue-chefs-own.md diff --git a/.changeset/blue-chefs-own.md b/.changeset/blue-chefs-own.md new file mode 100644 index 000000000..2c3dffd9b --- /dev/null +++ b/.changeset/blue-chefs-own.md @@ -0,0 +1,5 @@ +--- +'@farfetched/atomic-router': patch +--- + +One more test From a6bb6ded73a1eb89f380e3765dc207fa9b7cd095 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:24:48 +0700 Subject: [PATCH 13/61] Next step --- .github/workflows/beta.yml | 1 + .npmrc | 1 + tools/scripts/restore_beta_version.mjs | 31 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 .npmrc create mode 100644 tools/scripts/restore_beta_version.mjs diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 038670b72..6d5011c23 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -24,6 +24,7 @@ jobs: shell: bash run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT id: extract_branch + - run: node ./tools/scripts/restore_beta_versions.mjs - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} - run: pnpm changeset version - run: pnpm changeset pre exit diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..23c4923b4 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@igorkamyshev:registry=https://npm.pkg.github.com \ No newline at end of file diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs new file mode 100644 index 000000000..a9f32fe52 --- /dev/null +++ b/tools/scripts/restore_beta_version.mjs @@ -0,0 +1,31 @@ +import { + createProjectGraphAsync, + logger, + readJsonFile, + writeJsonFile, +} from '@nrwl/devkit'; +import { spawnSync, execSync } from 'child_process'; +import { renameForGitHub } from './rename.mjs'; + +import { invariant } from './shared/invariant.mjs'; + +const graph = await createProjectGraphAsync(); + +const packages = Object.entries(graph.nodes) + .filter(([_name, { type }]) => type === 'lib') + .map(([name, { data }]) => ({ name, root: data.root })); +// .map(([name]) => `@igorkamyshev/farfetched-${name}`); + +const betaNames = packages.map( + ({ name }) => `@igorkamyshev/farfetched-${name}` +); + +const betaVersions = betaNames.flatMap((betaName) => { + const versions = JSON.parse( + execSync(`npm view ${betaName} versions --json`).toString().trim() + ); + + return versions; +}); + +console.log(betaVersions); From 976812d95d514337a4189407b9161c09f726fc8e Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:25:43 +0700 Subject: [PATCH 14/61] typo --- .github/workflows/beta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 6d5011c23..77201f977 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -24,7 +24,7 @@ jobs: shell: bash run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT id: extract_branch - - run: node ./tools/scripts/restore_beta_versions.mjs + - run: node ./tools/scripts/restore_beta_version.mjs - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} - run: pnpm changeset version - run: pnpm changeset pre exit From ab1aa80833f316dc4bdf7300dfcef9cf61683049 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:26:33 +0700 Subject: [PATCH 15/61] Pass env --- .github/workflows/beta.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 77201f977..3ff5371be 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -26,6 +26,8 @@ jobs: id: extract_branch - run: node ./tools/scripts/restore_beta_version.mjs - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: pnpm changeset version - run: pnpm changeset pre exit - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta From ad31441c7744db7879d090dec19f3f5d6ccccfb0 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:26:42 +0700 Subject: [PATCH 16/61] Pass env --- .github/workflows/beta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 3ff5371be..75617acc3 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -25,9 +25,9 @@ jobs: run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT id: extract_branch - run: node ./tools/scripts/restore_beta_version.mjs - - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} - run: pnpm changeset version - run: pnpm changeset pre exit - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta From 7745f17e6950a17ab2b13ced4dc5bed2dfa94ecd Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:29:10 +0700 Subject: [PATCH 17/61] Filter --- tools/scripts/restore_beta_version.mjs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index a9f32fe52..87d9dc441 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -12,9 +12,8 @@ import { invariant } from './shared/invariant.mjs'; const graph = await createProjectGraphAsync(); const packages = Object.entries(graph.nodes) - .filter(([_name, { type }]) => type === 'lib') + .filter(([_name, { type, data }]) => type === 'lib' && data.targets.publish) .map(([name, { data }]) => ({ name, root: data.root })); -// .map(([name]) => `@igorkamyshev/farfetched-${name}`); const betaNames = packages.map( ({ name }) => `@igorkamyshev/farfetched-${name}` From 7d66415a961acd8606ac6dd4317b64ba19b6a881 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:33:04 +0700 Subject: [PATCH 18/61] latest beta version --- .github/workflows/beta.yml | 2 +- tools/scripts/restore_beta_version.mjs | 34 ++++++++++++++++++++------ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 75617acc3..47976bb06 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -24,7 +24,7 @@ jobs: shell: bash run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT id: extract_branch - - run: node ./tools/scripts/restore_beta_version.mjs + - run: node ./tools/scripts/restore_beta_version.mjs ${{ steps.extract_branch.outputs.branch }} env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index 87d9dc441..e80915ff1 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -9,6 +9,8 @@ import { renameForGitHub } from './rename.mjs'; import { invariant } from './shared/invariant.mjs'; +const [, , branch] = process.argv; + const graph = await createProjectGraphAsync(); const packages = Object.entries(graph.nodes) @@ -19,12 +21,30 @@ const betaNames = packages.map( ({ name }) => `@igorkamyshev/farfetched-${name}` ); -const betaVersions = betaNames.flatMap((betaName) => { - const versions = JSON.parse( - execSync(`npm view ${betaName} versions --json`).toString().trim() - ); +const betaVersions = new Set( + betaNames + .flatMap((betaName) => { + const versions = JSON.parse( + execSync(`npm view ${betaName} versions --json`).toString().trim() + ); + + return versions; + }) + .filter((version) => version.includes(`-${branch}.`)) +); + +const latestBetaVerisonSuffix = -1; +const latestBetaVerison = null; + +for (const betaVersion of betaVersions.values()) { + const [_, suffix] = betaVersion.split(`-${branch}.`); + + const subbfixNumber = Number(suffix); - return versions; -}); + if (subbfixNumber > latestBetaVerison) { + latestBetaVerisonSuffix = subbfixNumber; + latestBetaVerison = betaVersion; + } +} -console.log(betaVersions); +console.log(latestBetaVerison); From 075dbd8b356fc372530161b63a9a0438e38d4456 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:34:57 +0700 Subject: [PATCH 19/61] logs --- tools/scripts/restore_beta_version.mjs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index e80915ff1..114972127 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -33,16 +33,18 @@ const betaVersions = new Set( .filter((version) => version.includes(`-${branch}.`)) ); +logger.info(`Found beta versions: ${JSON.stringify(betaVersions.values())}`); + const latestBetaVerisonSuffix = -1; const latestBetaVerison = null; for (const betaVersion of betaVersions.values()) { const [_, suffix] = betaVersion.split(`-${branch}.`); - const subbfixNumber = Number(suffix); + const suffixNumber = Number(suffix); - if (subbfixNumber > latestBetaVerison) { - latestBetaVerisonSuffix = subbfixNumber; + if (suffixNumber > latestBetaVerison) { + latestBetaVerisonSuffix = suffixNumber; latestBetaVerison = betaVersion; } } From c6da3cfbb7c22a319407b1730b8664392f75f3e5 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:36:48 +0700 Subject: [PATCH 20/61] logs --- tools/scripts/restore_beta_version.mjs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index 114972127..5e948720c 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -5,12 +5,13 @@ import { writeJsonFile, } from '@nrwl/devkit'; import { spawnSync, execSync } from 'child_process'; -import { renameForGitHub } from './rename.mjs'; import { invariant } from './shared/invariant.mjs'; const [, , branch] = process.argv; +logger.info(`Beta name is ${branch}`); + const graph = await createProjectGraphAsync(); const packages = Object.entries(graph.nodes) @@ -33,7 +34,7 @@ const betaVersions = new Set( .filter((version) => version.includes(`-${branch}.`)) ); -logger.info(`Found beta versions: ${JSON.stringify(betaVersions.values())}`); +logger.info(`Found beta versions: ${JSON.stringify(Array.from(betaVersions))}`); const latestBetaVerisonSuffix = -1; const latestBetaVerison = null; From 7ecb6b4630bd84c9f055f8e5126f5312204d0dcd Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:38:57 +0700 Subject: [PATCH 21/61] logs --- tools/scripts/restore_beta_version.mjs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index 5e948720c..9496efa6f 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -44,10 +44,15 @@ for (const betaVersion of betaVersions.values()) { const suffixNumber = Number(suffix); + console.log('BEF', { suffixNumber, latestBetaVerisonSuffix, betaVersion }); + if (suffixNumber > latestBetaVerison) { + console.log('IN', { suffixNumber, latestBetaVerisonSuffix, betaVersion }); latestBetaVerisonSuffix = suffixNumber; latestBetaVerison = betaVersion; } } -console.log(latestBetaVerison); +invariant(latestBetaVerison, 'Latest beta version is not found'); + +logger.info(`Latest beta version: ${latestBetaVerison}`); From 7b58ef00d170ff5a7bd05e9b033ce99fa5cf2835 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:40:02 +0700 Subject: [PATCH 22/61] typo --- tools/scripts/restore_beta_version.mjs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index 9496efa6f..a574c6dc5 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -44,10 +44,7 @@ for (const betaVersion of betaVersions.values()) { const suffixNumber = Number(suffix); - console.log('BEF', { suffixNumber, latestBetaVerisonSuffix, betaVersion }); - - if (suffixNumber > latestBetaVerison) { - console.log('IN', { suffixNumber, latestBetaVerisonSuffix, betaVersion }); + if (suffixNumber > latestBetaVerisonSuffix) { latestBetaVerisonSuffix = suffixNumber; latestBetaVerison = betaVersion; } From d12c2c0ebb54b710131b06eefa4126d59a36d724 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:41:01 +0700 Subject: [PATCH 23/61] Fix typo --- tools/scripts/restore_beta_version.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index a574c6dc5..91700c0a6 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -36,8 +36,8 @@ const betaVersions = new Set( logger.info(`Found beta versions: ${JSON.stringify(Array.from(betaVersions))}`); -const latestBetaVerisonSuffix = -1; -const latestBetaVerison = null; +let latestBetaVerisonSuffix = -1; +let latestBetaVerison = null; for (const betaVersion of betaVersions.values()) { const [_, suffix] = betaVersion.split(`-${branch}.`); From 161116b4bfcc06ecce62a730ae6fc95b625ee5a3 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:42:53 +0700 Subject: [PATCH 24/61] Rewrite versions --- tools/scripts/restore_beta_version.mjs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index 91700c0a6..320fbf9dd 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -4,7 +4,7 @@ import { readJsonFile, writeJsonFile, } from '@nrwl/devkit'; -import { spawnSync, execSync } from 'child_process'; +import { execSync } from 'child_process'; import { invariant } from './shared/invariant.mjs'; @@ -53,3 +53,14 @@ for (const betaVersion of betaVersions.values()) { invariant(latestBetaVerison, 'Latest beta version is not found'); logger.info(`Latest beta version: ${latestBetaVerison}`); + +for (const { root } of packages) { + process.chdir(root); + + const originalPackageJson = readJsonFile(`package.json`); + + writeJsonFile('package.json', { + ...originalPackageJson, + version: latestBetaVerison, + }); +} From d2ce43baa1d9aaa7fafd1e082322020e723b2c4b Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 10:44:51 +0700 Subject: [PATCH 25/61] fixes --- tools/scripts/restore_beta_version.mjs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index 320fbf9dd..e6dcba555 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -5,6 +5,7 @@ import { writeJsonFile, } from '@nrwl/devkit'; import { execSync } from 'child_process'; +import { join } from 'path'; import { invariant } from './shared/invariant.mjs'; @@ -55,12 +56,18 @@ invariant(latestBetaVerison, 'Latest beta version is not found'); logger.info(`Latest beta version: ${latestBetaVerison}`); for (const { root } of packages) { - process.chdir(root); + const packageJsonPath = join(process.cwd(), root, 'package.json'); - const originalPackageJson = readJsonFile(`package.json`); + const originalPackageJson = readJsonFile(packageJsonPath); - writeJsonFile('package.json', { + const nextPackageJson = { ...originalPackageJson, version: latestBetaVerison, - }); + }; + + writeJsonFile(packageJsonPath, nextPackageJson); + + logger.info( + `Updated ${packageJsonPath} with version: ${nextPackageJson.version}` + ); } From 4cecb207f3f727387133564c45ec3901ec9bf904 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 11:46:15 +0700 Subject: [PATCH 26/61] Add commenter --- .github/workflows/beta.yml | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 47976bb06..7b7ceab10 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -1,10 +1,6 @@ name: Beta -on: - push: - branches: - - '*' - - '!master' +on: pull_request jobs: release: @@ -33,3 +29,26 @@ jobs: - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Find Comment + uses: peter-evans/find-comment@v1 + id: fc + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: Farfetched Beta + + - name: Create comment + if: steps.fc.outputs.comment-id == '' + uses: peter-evans/create-or-update-comment@v1 + with: + issue-number: ${{ github.event.pull_request.number }} + body: | + Farfetched Beta: This comment was written by a bot! + + - name: Update comment + if: steps.fc.outputs.comment-id != '' + uses: peter-evans/create-or-update-comment@v1 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + body: | + Farfetched Beta: This comment has been updated! From bd0f86ac702cd265a98f4bbfd1b576d9388fd63c Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 11:58:07 +0700 Subject: [PATCH 27/61] Add version to commenter --- .github/workflows/beta.yml | 10 ++++++---- tools/scripts/beta_message.mjs | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 tools/scripts/beta_message.mjs diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 7b7ceab10..90cf0d9fc 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -36,19 +36,21 @@ jobs: issue-number: ${{ github.event.pull_request.number }} comment-author: 'github-actions[bot]' body-includes: Farfetched Beta - + - name: What happened with Changes + shell: bash + run: node ./tools/scripts/beta_info.mjs >> $GITHUB_OUTPUT + id: release_info - name: Create comment if: steps.fc.outputs.comment-id == '' uses: peter-evans/create-or-update-comment@v1 with: issue-number: ${{ github.event.pull_request.number }} body: | - Farfetched Beta: This comment was written by a bot! - + Farfetched Beta: Latest published version is ${{ steps.release_info.outputs.version }} - name: Update comment if: steps.fc.outputs.comment-id != '' uses: peter-evans/create-or-update-comment@v1 with: comment-id: ${{ steps.fc.outputs.comment-id }} body: | - Farfetched Beta: This comment has been updated! + Farfetched Beta: Latest published version is ${{ steps.release_info.outputs.version }} diff --git a/tools/scripts/beta_message.mjs b/tools/scripts/beta_message.mjs new file mode 100644 index 000000000..264bf260d --- /dev/null +++ b/tools/scripts/beta_message.mjs @@ -0,0 +1,20 @@ +import { createProjectGraphAsync, logger, readJsonFile } from '@nrwl/devkit'; +import { join } from 'path'; + +const graph = await createProjectGraphAsync(); + +const packages = Object.entries(graph.nodes) + .filter(([_name, { type, data }]) => type === 'lib' && data.targets.publish) + .map(([name, { data }]) => ({ name, root: data.root })); + +const { root } = packages.at(0); +const packageJsonPath = join(process.cwd(), root, 'package.json'); + +const betaVersion = readJsonFile(packageJsonPath).version; + +const usedChangesets = readJsonFile( + join(process.cwd(), '.changeset', 'pre.json') +).changesets; + +logger.log(`betaVersion="${betaVersion}"`); +logger.log(`usedChangesets="${JSON.stringify(usedChangesets)}"`); From 33c9d95db192e8d4f7981fcb7dbce78a3e2922e9 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:00:46 +0700 Subject: [PATCH 28/61] fix typo --- tools/scripts/{beta_message.mjs => beta_info.mjs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tools/scripts/{beta_message.mjs => beta_info.mjs} (100%) diff --git a/tools/scripts/beta_message.mjs b/tools/scripts/beta_info.mjs similarity index 100% rename from tools/scripts/beta_message.mjs rename to tools/scripts/beta_info.mjs From f2cfd4cb5dcc82f8f4e809b76d28c160f0cfb9c6 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:06:17 +0700 Subject: [PATCH 29/61] Debug --- .github/workflows/beta.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 90cf0d9fc..5e3796ffc 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -38,19 +38,20 @@ jobs: body-includes: Farfetched Beta - name: What happened with Changes shell: bash - run: node ./tools/scripts/beta_info.mjs >> $GITHUB_OUTPUT - id: release_info + run: node ./tools/scripts/beta_info.mjs >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + id: beta_info - name: Create comment if: steps.fc.outputs.comment-id == '' uses: peter-evans/create-or-update-comment@v1 with: issue-number: ${{ github.event.pull_request.number }} body: | - Farfetched Beta: Latest published version is ${{ steps.release_info.outputs.version }} + Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.version }}` - name: Update comment if: steps.fc.outputs.comment-id != '' uses: peter-evans/create-or-update-comment@v1 with: + edit-mode: replace comment-id: ${{ steps.fc.outputs.comment-id }} body: | - Farfetched Beta: Latest published version is ${{ steps.release_info.outputs.version }} + Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.version }}` From 5a858a3ea2d634cd9915b83e89e8f0c2bab5de4b Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:08:28 +0700 Subject: [PATCH 30/61] Fix typo --- .github/workflows/beta.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 5e3796ffc..0399460a9 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -46,7 +46,7 @@ jobs: with: issue-number: ${{ github.event.pull_request.number }} body: | - Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.version }}` + Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.betaVersion }}` - name: Update comment if: steps.fc.outputs.comment-id != '' uses: peter-evans/create-or-update-comment@v1 @@ -54,4 +54,4 @@ jobs: edit-mode: replace comment-id: ${{ steps.fc.outputs.comment-id }} body: | - Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.version }}` + Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.betaVersion }}` From 0f00e8cd24b8f8a533da1fadc77650dd1a73ad6a Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:13:09 +0700 Subject: [PATCH 31/61] Used to comment --- .github/workflows/beta.yml | 24 ++++++++++++++---------- tools/scripts/beta_required.mjs | 11 +++++++++++ 2 files changed, 25 insertions(+), 10 deletions(-) create mode 100644 tools/scripts/beta_required.mjs diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 0399460a9..2efe970bc 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -6,6 +6,13 @@ jobs: release: runs-on: ubuntu-latest steps: + - name: Find Comment + uses: peter-evans/find-comment@v1 + id: find_comment + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: Farfetched Beta - uses: actions/checkout@v3 - uses: pnpm/action-setup@v2 - uses: actions/setup-node@v3 @@ -26,32 +33,29 @@ jobs: - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} - run: pnpm changeset version - run: pnpm changeset pre exit + - run: node ./tools/scripts/beta_required.mjs ${{ steps.find_comment.outputs.comment-body }} >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + id: beta_required - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Find Comment - uses: peter-evans/find-comment@v1 - id: fc - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: 'github-actions[bot]' - body-includes: Farfetched Beta - name: What happened with Changes shell: bash run: node ./tools/scripts/beta_info.mjs >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT id: beta_info - name: Create comment - if: steps.fc.outputs.comment-id == '' + if: steps.find_comment.outputs.comment-id == '' uses: peter-evans/create-or-update-comment@v1 with: issue-number: ${{ github.event.pull_request.number }} body: | Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.betaVersion }}` + Used changeset: `${{ steps.beta_info.outputs.usedChangesets }}` - name: Update comment - if: steps.fc.outputs.comment-id != '' + if: steps.find_comment.outputs.comment-id != '' uses: peter-evans/create-or-update-comment@v1 with: edit-mode: replace - comment-id: ${{ steps.fc.outputs.comment-id }} + comment-id: ${{ steps.find_comment.outputs.comment-id }} body: | Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.betaVersion }}` + Used changeset: `${{ steps.beta_info.outputs.usedChangesets }}` diff --git a/tools/scripts/beta_required.mjs b/tools/scripts/beta_required.mjs new file mode 100644 index 000000000..56b205fdb --- /dev/null +++ b/tools/scripts/beta_required.mjs @@ -0,0 +1,11 @@ +import { logger, readJsonFile } from '@nrwl/devkit'; +import { join } from 'path'; + +const [, , commentBody] = process.argv; + +const usedChangesets = readJsonFile( + join(process.cwd(), '.changeset', 'pre.json') +).changesets; + +logger.log(`commentBody="${commentBody}"`); +logger.log(`usedChangesets="${JSON.stringify(usedChangesets)}"`); From 74b13e81f87b1c4752adaa1570736c0dd6671b20 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:15:39 +0700 Subject: [PATCH 32/61] Fix typo --- .github/workflows/beta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 2efe970bc..becff417b 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -33,7 +33,7 @@ jobs: - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} - run: pnpm changeset version - run: pnpm changeset pre exit - - run: node ./tools/scripts/beta_required.mjs ${{ steps.find_comment.outputs.comment-body }} >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + - run: node ./tools/scripts/beta_required.mjs "${{ steps.find_comment.outputs.comment-body }}" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT id: beta_required - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta env: From 99d20b8e18824b300fbf1296bc7e9a9af90c44aa Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:17:45 +0700 Subject: [PATCH 33/61] Fix typo --- .github/workflows/beta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index becff417b..a5cbf561c 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -33,7 +33,7 @@ jobs: - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} - run: pnpm changeset version - run: pnpm changeset pre exit - - run: node ./tools/scripts/beta_required.mjs "${{ steps.find_comment.outputs.comment-body }}" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + - run: node ./tools/scripts/beta_required.mjs '${{ steps.find_comment.outputs.comment-body }}' >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT id: beta_required - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta env: From adaf31fb86550e3f5ecd5b1d5b6e1d800fb863cd Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:28:22 +0700 Subject: [PATCH 34/61] Escape --- .github/workflows/beta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index a5cbf561c..39c92fedd 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -33,7 +33,7 @@ jobs: - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} - run: pnpm changeset version - run: pnpm changeset pre exit - - run: node ./tools/scripts/beta_required.mjs '${{ steps.find_comment.outputs.comment-body }}' >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + - run: node ./tools/scripts/beta_required.mjs """${{ steps.find_comment.outputs.comment-body }}""" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT id: beta_required - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta env: From 2974e3800d2de4edaa860d29486cac604a441b53 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:31:12 +0700 Subject: [PATCH 35/61] Escapes --- .github/workflows/beta.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 39c92fedd..6a9668113 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -48,8 +48,13 @@ jobs: with: issue-number: ${{ github.event.pull_request.number }} body: | - Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.betaVersion }}` - Used changeset: `${{ steps.beta_info.outputs.usedChangesets }}` + # Farfetched Beta + + Latest published version is ${{ steps.beta_info.outputs.betaVersion }} + + --- + + Used changeset: ${{ steps.beta_info.outputs.usedChangesets }} - name: Update comment if: steps.find_comment.outputs.comment-id != '' uses: peter-evans/create-or-update-comment@v1 @@ -57,5 +62,10 @@ jobs: edit-mode: replace comment-id: ${{ steps.find_comment.outputs.comment-id }} body: | - Farfetched Beta: Latest published version is `${{ steps.beta_info.outputs.betaVersion }}` - Used changeset: `${{ steps.beta_info.outputs.usedChangesets }}` + # Farfetched Beta + + Latest published version is ${{ steps.beta_info.outputs.betaVersion }} + + --- + + Used changeset: ${{ steps.beta_info.outputs.usedChangesets }} From 979b689a106bb770123366478701621cc9bbcae8 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:33:56 +0700 Subject: [PATCH 36/61] Next --- tools/scripts/beta_required.mjs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tools/scripts/beta_required.mjs b/tools/scripts/beta_required.mjs index 56b205fdb..fc6ab0a15 100644 --- a/tools/scripts/beta_required.mjs +++ b/tools/scripts/beta_required.mjs @@ -3,9 +3,18 @@ import { join } from 'path'; const [, , commentBody] = process.argv; +const LINE_START = 'Used changeset: '; + +const previousChangesets = JSON.parse( + commentBody + .split('\n') + .find((line) => line.includes(LINE_START)) + ?.replace(LINE_START, '') ?? '[]' +); + const usedChangesets = readJsonFile( join(process.cwd(), '.changeset', 'pre.json') ).changesets; -logger.log(`commentBody="${commentBody}"`); +logger.log(`previousChangesets="${JSON.stringify(previousChangesets)}"`); logger.log(`usedChangesets="${JSON.stringify(usedChangesets)}"`); From cd33416eac318a15b0e12797923bc72f8c2e7286 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:37:35 +0700 Subject: [PATCH 37/61] Next --- tools/scripts/beta_required.mjs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/scripts/beta_required.mjs b/tools/scripts/beta_required.mjs index fc6ab0a15..de4d8b46d 100644 --- a/tools/scripts/beta_required.mjs +++ b/tools/scripts/beta_required.mjs @@ -5,12 +5,13 @@ const [, , commentBody] = process.argv; const LINE_START = 'Used changeset: '; -const previousChangesets = JSON.parse( +const previousChangesets = split( commentBody .split('\n') .find((line) => line.includes(LINE_START)) - ?.replace(LINE_START, '') ?? '[]' -); + ?.replace(LINE_START, '') ?? '[]', + ',' +).map((changeset) => changeset.replaceAll('[', '').replaceAll(']', '')); const usedChangesets = readJsonFile( join(process.cwd(), '.changeset', 'pre.json') From 25ffe85f0cfdc88bb54be6b31a8fdf8e83c92a10 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:40:43 +0700 Subject: [PATCH 38/61] Next --- tools/scripts/beta_required.mjs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/scripts/beta_required.mjs b/tools/scripts/beta_required.mjs index de4d8b46d..d800a425f 100644 --- a/tools/scripts/beta_required.mjs +++ b/tools/scripts/beta_required.mjs @@ -5,13 +5,15 @@ const [, , commentBody] = process.argv; const LINE_START = 'Used changeset: '; -const previousChangesets = split( +const previousChangesets = ( commentBody .split('\n') .find((line) => line.includes(LINE_START)) - ?.replace(LINE_START, '') ?? '[]', - ',' -).map((changeset) => changeset.replaceAll('[', '').replaceAll(']', '')); + ?.replace(LINE_START, '') ?? '[]' +) + .split(',') + .map((changeset) => changeset.replaceAll('[', '').replaceAll(']', '')) + .filter(Boolean); const usedChangesets = readJsonFile( join(process.cwd(), '.changeset', 'pre.json') From e4f578a1ec5e2a97e8abaca5e98c7900e4aef916 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:45:41 +0700 Subject: [PATCH 39/61] Skip beta --- .github/workflows/beta.yml | 3 ++- tools/scripts/beta_required.mjs | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 6a9668113..45675b73a 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -36,6 +36,7 @@ jobs: - run: node ./tools/scripts/beta_required.mjs """${{ steps.find_comment.outputs.comment-body }}""" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT id: beta_required - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta + if: steps.beta_required.outputs.skipBeta == '' env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: What happened with Changes @@ -49,7 +50,7 @@ jobs: issue-number: ${{ github.event.pull_request.number }} body: | # Farfetched Beta - + Latest published version is ${{ steps.beta_info.outputs.betaVersion }} --- diff --git a/tools/scripts/beta_required.mjs b/tools/scripts/beta_required.mjs index d800a425f..df1a8f030 100644 --- a/tools/scripts/beta_required.mjs +++ b/tools/scripts/beta_required.mjs @@ -19,5 +19,23 @@ const usedChangesets = readJsonFile( join(process.cwd(), '.changeset', 'pre.json') ).changesets; +previousChangesets.sort(); +usedChangesets.sort(); + +const skipBeta = isArraysEquals(previousChangesets, usedChangesets) + ? 'skip' + : ''; + logger.log(`previousChangesets="${JSON.stringify(previousChangesets)}"`); logger.log(`usedChangesets="${JSON.stringify(usedChangesets)}"`); +logger.log(`skipBeta=${skipBeta}`); + +// utils + +function isArraysEquals(a, b) { + if (a.length !== b.length) { + return false; + } + + return a.every((item, index) => item === b[index]); +} From d781a9e07cf74507f4be793f05639e9c20bce2d8 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:47:31 +0700 Subject: [PATCH 40/61] Skip beta in comments as well --- .github/workflows/beta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 45675b73a..c417f7aa6 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -57,7 +57,7 @@ jobs: Used changeset: ${{ steps.beta_info.outputs.usedChangesets }} - name: Update comment - if: steps.find_comment.outputs.comment-id != '' + if: steps.find_comment.outputs.comment-id != '' && steps.beta_required.outputs.skipBeta == '' uses: peter-evans/create-or-update-comment@v1 with: edit-mode: replace From d0d75dd23aab17df5079fd7f2782c6228164dc58 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:49:00 +0700 Subject: [PATCH 41/61] Expect next version --- .changeset/thin-comics-arrive.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/thin-comics-arrive.md diff --git a/.changeset/thin-comics-arrive.md b/.changeset/thin-comics-arrive.md new file mode 100644 index 000000000..69ee1079a --- /dev/null +++ b/.changeset/thin-comics-arrive.md @@ -0,0 +1,5 @@ +--- +'@farfetched/runtypes': patch +--- + +Expect next version From cee0e92c86e1c5768a882588dc0cc326c79194b6 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:57:42 +0700 Subject: [PATCH 42/61] Comments in yaml --- .github/workflows/beta.yml | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index c417f7aa6..187e8d0ef 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -6,7 +6,10 @@ jobs: release: runs-on: ubuntu-latest steps: - - name: Find Comment + # We store information about used changeset in the comment + # So we need to find it to check if we need to publish a new beta + # Also we will update this comment with new information in case of new beta + - name: Find comment about previous beta uses: peter-evans/find-comment@v1 id: find_comment with: @@ -17,32 +20,40 @@ jobs: - uses: pnpm/action-setup@v2 - uses: actions/setup-node@v3 with: + # Beta version is published to GitHub Package Registry registry-url: 'https://npm.pkg.github.com' + # Under the scope of the user who owns the repo scope: '@igorkamyshev' node-version-file: '.nvmrc' cache: 'pnpm' - run: pnpm install --frozen-lockfile - shell: sh + # We will use branch name as a name for beta - name: Extract branch name - shell: bash - run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT id: extract_branch - - run: node ./tools/scripts/restore_beta_version.mjs ${{ steps.extract_branch.outputs.branch }} + run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT + # Parse latest published version of the beta and update local package.json for all packages + - name: Restore beta version + run: node ./tools/scripts/restore_beta_version.mjs ${{ steps.extract_branch.outputs.branch }} env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Update version in package.json for all packages with changeset and generate pre.json file - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} - run: pnpm changeset version - run: pnpm changeset pre exit - - run: node ./tools/scripts/beta_required.mjs """${{ steps.find_comment.outputs.comment-body }}""" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + # Check if we need to publish a new beta + # it uses pre.json file and information about previous beta from the comment + - name: Check if new beta is required id: beta_required - - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta + run: node ./tools/scripts/beta_required.mjs """${{ steps.find_comment.outputs.comment-body }}""" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + - name: Publish beta if: steps.beta_required.outputs.skipBeta == '' + run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: What happened with Changes - shell: bash - run: node ./tools/scripts/beta_info.mjs >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + - name: Retrieve information about latest beta id: beta_info + run: node ./tools/scripts/beta_info.mjs >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + # In case of absence of the comment we will create it with information about latest beta - name: Create comment if: steps.find_comment.outputs.comment-id == '' uses: peter-evans/create-or-update-comment@v1 @@ -56,6 +67,8 @@ jobs: --- Used changeset: ${{ steps.beta_info.outputs.usedChangesets }} + # Otherwise we will update it with information about latest beta, + # but only if we published a new beta - name: Update comment if: steps.find_comment.outputs.comment-id != '' && steps.beta_required.outputs.skipBeta == '' uses: peter-evans/create-or-update-comment@v1 From e91cea36b18fa6ac01798f58a2ed07b8a25ebd61 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 12:59:27 +0700 Subject: [PATCH 43/61] Use PR number instead of branch name --- .github/workflows/beta.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 187e8d0ef..32edaab2e 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -27,17 +27,13 @@ jobs: node-version-file: '.nvmrc' cache: 'pnpm' - run: pnpm install --frozen-lockfile - # We will use branch name as a name for beta - - name: Extract branch name - id: extract_branch - run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT # Parse latest published version of the beta and update local package.json for all packages - name: Restore beta version - run: node ./tools/scripts/restore_beta_version.mjs ${{ steps.extract_branch.outputs.branch }} + run: node ./tools/scripts/restore_beta_version.mjs ${{ github.event.pull_request.number }} env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Update version in package.json for all packages with changeset and generate pre.json file - - run: pnpm changeset pre enter ${{ steps.extract_branch.outputs.branch }} + - run: pnpm changeset pre enter ${{ github.event.pull_request.number }} - run: pnpm changeset version - run: pnpm changeset pre exit # Check if we need to publish a new beta From 0fbe819120c1b88d47ae85d2ae9fb9fc7b19805e Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 13:01:17 +0700 Subject: [PATCH 44/61] Allow to create new betas --- tools/scripts/restore_beta_version.mjs | 30 ++++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index e6dcba555..3e7af3888 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -51,23 +51,25 @@ for (const betaVersion of betaVersions.values()) { } } -invariant(latestBetaVerison, 'Latest beta version is not found'); +if (latestBetaVerison) { + logger.info(`Latest beta version: ${latestBetaVerison}`); -logger.info(`Latest beta version: ${latestBetaVerison}`); + for (const { root } of packages) { + const packageJsonPath = join(process.cwd(), root, 'package.json'); -for (const { root } of packages) { - const packageJsonPath = join(process.cwd(), root, 'package.json'); + const originalPackageJson = readJsonFile(packageJsonPath); - const originalPackageJson = readJsonFile(packageJsonPath); + const nextPackageJson = { + ...originalPackageJson, + version: latestBetaVerison, + }; - const nextPackageJson = { - ...originalPackageJson, - version: latestBetaVerison, - }; + writeJsonFile(packageJsonPath, nextPackageJson); - writeJsonFile(packageJsonPath, nextPackageJson); - - logger.info( - `Updated ${packageJsonPath} with version: ${nextPackageJson.version}` - ); + logger.info( + `Updated ${packageJsonPath} with version: ${nextPackageJson.version}` + ); + } +} else { + logger.info(`No beta versions found`); } From e544622bcc10b65bb8d3097bac092ae1a1bac34c Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 13:05:27 +0700 Subject: [PATCH 45/61] One more tests --- .changeset/witty-pens-sleep.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/witty-pens-sleep.md diff --git a/.changeset/witty-pens-sleep.md b/.changeset/witty-pens-sleep.md new file mode 100644 index 000000000..924adf709 --- /dev/null +++ b/.changeset/witty-pens-sleep.md @@ -0,0 +1,5 @@ +--- +'@farfetched/io-ts': patch +--- + +One more tests From a45c34d2eef42f05d28d92f3ec7fcd313365d297 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 13:50:11 +0700 Subject: [PATCH 46/61] Use correct overrides for betas" --- .changeset/lemon-pots-allow.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/lemon-pots-allow.md diff --git a/.changeset/lemon-pots-allow.md b/.changeset/lemon-pots-allow.md new file mode 100644 index 000000000..405d783b8 --- /dev/null +++ b/.changeset/lemon-pots-allow.md @@ -0,0 +1,5 @@ +--- +'@farfetched/atomic-router': patch +--- + +Use correct overrides for betas" From 50269312d69a7cc6f7414a696bc9c874b939eb74 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 13:50:34 +0700 Subject: [PATCH 47/61] New beta --- .changeset/big-news-wait.md | 5 +++++ apps/website/docs/releases/beta.md | 6 ++++++ apps/website/docs/releases/index.md | 4 ++++ tools/scripts/rename.mjs | 28 +++++----------------------- 4 files changed, 20 insertions(+), 23 deletions(-) create mode 100644 .changeset/big-news-wait.md create mode 100644 apps/website/docs/releases/beta.md diff --git a/.changeset/big-news-wait.md b/.changeset/big-news-wait.md new file mode 100644 index 000000000..e360273ce --- /dev/null +++ b/.changeset/big-news-wait.md @@ -0,0 +1,5 @@ +--- +'@farfetched/atomic-router': patch +--- + +New beta diff --git a/apps/website/docs/releases/beta.md b/apps/website/docs/releases/beta.md new file mode 100644 index 000000000..5662ced9b --- /dev/null +++ b/apps/website/docs/releases/beta.md @@ -0,0 +1,6 @@ +--- +sidebar: false +--- + +# Beta versions of Farfetched + diff --git a/apps/website/docs/releases/index.md b/apps/website/docs/releases/index.md index 2df4f5ad7..9e8048b2d 100644 --- a/apps/website/docs/releases/index.md +++ b/apps/website/docs/releases/index.md @@ -6,6 +6,10 @@ sidebar: false Farfetched is mostly been creating in Thailand, so all releases are named after beautiful places in Thailand. +:::tip +To use unreleased version of Farfetched, please refer to [beta](/releases/beta) page. +::: + diff --git a/tools/scripts/rename.mjs b/tools/scripts/rename.mjs index 7747870bd..8f6a18dc5 100644 --- a/tools/scripts/rename.mjs +++ b/tools/scripts/rename.mjs @@ -1,5 +1,4 @@ import { writeJsonFile, readJsonFile } from '@nrwl/devkit'; -import { readFile, writeFile } from 'fs/promises'; export async function renameForGitHub() { const originalPackageJson = readJsonFile('package.json'); @@ -7,28 +6,11 @@ export async function renameForGitHub() { writeJsonFile('package.json', { ...originalPackageJson, name: adjustPackageName(originalPackageJson.name), - peerDependencies: mapKeys( + peerDependencies: mapValues( originalPackageJson.peerDependencies ?? {}, - adjustPackageName + (version, name) => `npm:${adjustPackageName(name)}@${version},` ), }); - - const files = [ - [ - originalPackageJson.module, - originalPackageJson.main, - originalPackageJson.types, - ], - Object.values(originalPackageJson.exports['.']), - ].flat(); - - await Promise.all( - files.map(async (fileName) => { - const content = await readFile(fileName, 'utf-8'); - - await writeFile(fileName, adjustPackageName(content)); - }) - ); } // utils @@ -37,10 +19,10 @@ function adjustPackageName(name) { return name.replaceAll('@farfetched/', '@igorkamyshev/farfetched-'); } -export function mapKeys(val, fn) { +export function mapValues(val, fn) { const mappedEntries = Object.entries(val).map(([key, value]) => [ - fn(key), - value, + key, + fn(value, key), ]); return Object.fromEntries(mappedEntries); From 3ec4083e8bf5bbfd1631366a4d1014b1ad749174 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:11:17 +0700 Subject: [PATCH 48/61] Add more info about beta --- apps/website/docs/releases/beta.md | 73 +++++++++++++++++++ .../docs/releases/beta_mapping.data.ts | 18 +++++ 2 files changed, 91 insertions(+) create mode 100644 apps/website/docs/releases/beta_mapping.data.ts diff --git a/apps/website/docs/releases/beta.md b/apps/website/docs/releases/beta.md index 5662ced9b..96fec9c64 100644 --- a/apps/website/docs/releases/beta.md +++ b/apps/website/docs/releases/beta.md @@ -4,3 +4,76 @@ sidebar: false # Beta versions of Farfetched +## Package names + +Beta versions of Farfetched are published to scope `@farfetched-canary` instead of `@farfetched`. To use them, you need to change the package name in `package.json` from `@farfetched/*` to `@farfetched-canary/*`. + +::: details Full mapping + + + + + + + + + + + + + + + + +
Release package nameCanary package name
{{item.release}}{{item.canary}}
+ +::: + +## Package versions + +Package versions for beta versions of Farfetched are generated automatically by the following rules: + +1. Generate next version of the package according to [semver](https://semver.org/) rules based on changesets in the branch. +2. Add PR number to the end of the version. +3. Add build number to the end of the version. + +::: details Examples + +- If the latest version of the package is `0.10.4` and branch contains changeset for `minor` change, PR number is `403` and this is the first build for this PR, then the version of the package will be `0.11.0-403.0`. + +- If the latest version of the package is `0.10.4` and branch contains changeset for `patch` change, PR number is `406` and this is the second build for this PR, then the version of the package will be `0.10.5-406.1`. + +::: + +## How to use + +1. Replace current versions with the beta versions in `package.json` + +```json +{ + "dependencies": { + "@farfetched/core": "0.10.4", // [!code --] + "@farfetched/core": "npm:@farfetched-canary/core@0.10.7-403.0" // [!code ++] + } +} +``` + +2. Install packages + +::: code-group + +```bash [pnpm] +pnpm install +``` + +```bash [yarn] +yarn install +``` + +```bash [npm] +npm install +``` + +::: diff --git a/apps/website/docs/releases/beta_mapping.data.ts b/apps/website/docs/releases/beta_mapping.data.ts new file mode 100644 index 000000000..c06a368f2 --- /dev/null +++ b/apps/website/docs/releases/beta_mapping.data.ts @@ -0,0 +1,18 @@ +import { createProjectGraphAsync } from '@nrwl/devkit'; + +process.env.NX_DAEMON = 'false'; + +export default { + async load() { + const graph = await createProjectGraphAsync(); + + return Object.values(graph.nodes) + .filter( + (node) => node.type === 'lib' && Boolean(node.data.targets?.build) + ) + .map((node) => ({ + release: `@farfetched/${node.name}`, + canary: `@farfetched-canary/${node.name}`, + })); + }, +}; From a7694021fe50d1ec83056ada01d4cda75f2703b1 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:13:25 +0700 Subject: [PATCH 49/61] get rid of github npm registry --- .github/workflows/beta.yml | 11 +++-------- tools/scripts/rename.mjs | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 32edaab2e..68f26f446 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -20,18 +20,15 @@ jobs: - uses: pnpm/action-setup@v2 - uses: actions/setup-node@v3 with: - # Beta version is published to GitHub Package Registry - registry-url: 'https://npm.pkg.github.com' - # Under the scope of the user who owns the repo - scope: '@igorkamyshev' node-version-file: '.nvmrc' cache: 'pnpm' + - name: Authenticate with NPM + run: | + echo "//registry.npmjs.org/:_authToken="${{secrets.NPM_TOKEN}}"" > ~/.npmrc - run: pnpm install --frozen-lockfile # Parse latest published version of the beta and update local package.json for all packages - name: Restore beta version run: node ./tools/scripts/restore_beta_version.mjs ${{ github.event.pull_request.number }} - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Update version in package.json for all packages with changeset and generate pre.json file - run: pnpm changeset pre enter ${{ github.event.pull_request.number }} - run: pnpm changeset version @@ -44,8 +41,6 @@ jobs: - name: Publish beta if: steps.beta_required.outputs.skipBeta == '' run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Retrieve information about latest beta id: beta_info run: node ./tools/scripts/beta_info.mjs >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT diff --git a/tools/scripts/rename.mjs b/tools/scripts/rename.mjs index 8f6a18dc5..ea0f0d2d4 100644 --- a/tools/scripts/rename.mjs +++ b/tools/scripts/rename.mjs @@ -16,7 +16,7 @@ export async function renameForGitHub() { // utils function adjustPackageName(name) { - return name.replaceAll('@farfetched/', '@igorkamyshev/farfetched-'); + return name.replaceAll('@farfetched/', '@farfetched-canary/'); } export function mapValues(val, fn) { From 3744d16912d63332b61b9e495205b2987c53b3ce Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:14:31 +0700 Subject: [PATCH 50/61] get rid of github npm registry 2 --- .npmrc | 1 - tools/scripts/restore_beta_version.mjs | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 .npmrc diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 23c4923b4..000000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -@igorkamyshev:registry=https://npm.pkg.github.com \ No newline at end of file diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index 3e7af3888..0bb5f8460 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -19,9 +19,7 @@ const packages = Object.entries(graph.nodes) .filter(([_name, { type, data }]) => type === 'lib' && data.targets.publish) .map(([name, { data }]) => ({ name, root: data.root })); -const betaNames = packages.map( - ({ name }) => `@igorkamyshev/farfetched-${name}` -); +const betaNames = packages.map(({ name }) => `@farfetched-canary/${name}`); const betaVersions = new Set( betaNames From 4db24abbf74b1bd22dbb12c50c2823702108271a Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:18:34 +0700 Subject: [PATCH 51/61] Do not fail on empty beta versions --- tools/scripts/restore_beta_version.mjs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/restore_beta_version.mjs index 0bb5f8460..6be5bc983 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/restore_beta_version.mjs @@ -24,11 +24,14 @@ const betaNames = packages.map(({ name }) => `@farfetched-canary/${name}`); const betaVersions = new Set( betaNames .flatMap((betaName) => { - const versions = JSON.parse( - execSync(`npm view ${betaName} versions --json`).toString().trim() - ); - - return versions; + try { + const versions = JSON.parse( + execSync(`npm view ${betaName} versions --json`).toString().trim() + ); + return versions; + } catch (e) { + return []; + } }) .filter((version) => version.includes(`-${branch}.`)) ); From 7dd59e16276ea9c9ea74a2a976e4e05e4a9282db Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:21:14 +0700 Subject: [PATCH 52/61] Please publish beta --- .changeset/weak-boxes-cheat.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/weak-boxes-cheat.md diff --git a/.changeset/weak-boxes-cheat.md b/.changeset/weak-boxes-cheat.md new file mode 100644 index 000000000..3bd698ae3 --- /dev/null +++ b/.changeset/weak-boxes-cheat.md @@ -0,0 +1,5 @@ +--- +'@farfetched/atomic-router': patch +--- + +Please publish beta From 24e531c68ceff9f8c9d780f2bc5d4dd9a20d4b1b Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:26:50 +0700 Subject: [PATCH 53/61] Fix renaming --- tools/scripts/rename.mjs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/scripts/rename.mjs b/tools/scripts/rename.mjs index ea0f0d2d4..11477b91e 100644 --- a/tools/scripts/rename.mjs +++ b/tools/scripts/rename.mjs @@ -8,7 +8,10 @@ export async function renameForGitHub() { name: adjustPackageName(originalPackageJson.name), peerDependencies: mapValues( originalPackageJson.peerDependencies ?? {}, - (version, name) => `npm:${adjustPackageName(name)}@${version},` + (version, name) => + name.includes('@farfetched') + ? `npm:${adjustPackageName(name)}@${version}` + : version ), }); } From ae03caa53f7d677b0481dc398368d52648482fc1 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:27:54 +0700 Subject: [PATCH 54/61] Naming issues --- packages/atomic-router/project.json | 2 +- packages/core/project.json | 2 +- packages/io-ts/project.json | 2 +- packages/runtypes/project.json | 2 +- packages/solid/project.json | 2 +- packages/superstruct/project.json | 2 +- packages/typed-contracts/project.json | 2 +- packages/zod/project.json | 2 +- tools/scripts/publish.mjs | 8 ++++---- tools/scripts/rename.mjs | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/atomic-router/project.json b/packages/atomic-router/project.json index cd2b98d0f..d1f790ebe 100644 --- a/packages/atomic-router/project.json +++ b/packages/atomic-router/project.json @@ -42,7 +42,7 @@ ], "configurations": { "beta": { - "args": "--rename=github" + "args": "--rename=canary" } } }, diff --git a/packages/core/project.json b/packages/core/project.json index f03a4ff34..a4037c2ce 100644 --- a/packages/core/project.json +++ b/packages/core/project.json @@ -42,7 +42,7 @@ ], "configurations": { "beta": { - "args": "--rename=github" + "args": "--rename=canary" } } }, diff --git a/packages/io-ts/project.json b/packages/io-ts/project.json index 65032cebe..5f24c3b53 100644 --- a/packages/io-ts/project.json +++ b/packages/io-ts/project.json @@ -42,7 +42,7 @@ ], "configurations": { "beta": { - "args": "--rename=github" + "args": "--rename=canary" } } }, diff --git a/packages/runtypes/project.json b/packages/runtypes/project.json index fa08d7675..12a14f5a6 100644 --- a/packages/runtypes/project.json +++ b/packages/runtypes/project.json @@ -42,7 +42,7 @@ ], "configurations": { "beta": { - "args": "--rename=github" + "args": "--rename=canary" } } }, diff --git a/packages/solid/project.json b/packages/solid/project.json index ecfbe041f..a0683f0a4 100644 --- a/packages/solid/project.json +++ b/packages/solid/project.json @@ -43,7 +43,7 @@ ], "configurations": { "beta": { - "args": "--rename=github" + "args": "--rename=canary" } } }, diff --git a/packages/superstruct/project.json b/packages/superstruct/project.json index d02df560d..fa80df456 100644 --- a/packages/superstruct/project.json +++ b/packages/superstruct/project.json @@ -42,7 +42,7 @@ ], "configurations": { "beta": { - "args": "--rename=github" + "args": "--rename=canary" } } }, diff --git a/packages/typed-contracts/project.json b/packages/typed-contracts/project.json index b24823e97..5f9b3791b 100644 --- a/packages/typed-contracts/project.json +++ b/packages/typed-contracts/project.json @@ -42,7 +42,7 @@ ], "configurations": { "beta": { - "args": "--rename=github" + "args": "--rename=canary" } } }, diff --git a/packages/zod/project.json b/packages/zod/project.json index d883f9f9d..80e1d66c2 100644 --- a/packages/zod/project.json +++ b/packages/zod/project.json @@ -42,7 +42,7 @@ ], "configurations": { "beta": { - "args": "--rename=github" + "args": "--rename=canary" } } }, diff --git a/tools/scripts/publish.mjs b/tools/scripts/publish.mjs index 3a34150b7..8912afb46 100644 --- a/tools/scripts/publish.mjs +++ b/tools/scripts/publish.mjs @@ -5,14 +5,14 @@ import { writeJsonFile, } from '@nrwl/devkit'; import { spawnSync } from 'child_process'; -import { renameForGitHub } from './rename.mjs'; +import { renameForCanary } from './rename.mjs'; import { invariant } from './shared/invariant.mjs'; const [, , name, renameOption] = process.argv; const graph = readCachedProjectGraph(); -const shouldRenameForGithub = renameOption === '--rename=github'; +const shouldRenameForCanary = renameOption === '--rename=canary'; const project = graph.nodes[name]; invariant( @@ -46,8 +46,8 @@ invariant( `No version provided or version did not match Semantic Versioning, expected: #.#.#-tag.# or #.#.#, got ${version}.` ); -if (shouldRenameForGithub) { - await renameForGitHub(); +if (shouldRenameForCanary) { + await renameForCanary(); } const result = spawnSync('npm', ['publish', '--json', '--access', 'public']); diff --git a/tools/scripts/rename.mjs b/tools/scripts/rename.mjs index 11477b91e..4fd59149a 100644 --- a/tools/scripts/rename.mjs +++ b/tools/scripts/rename.mjs @@ -1,6 +1,6 @@ import { writeJsonFile, readJsonFile } from '@nrwl/devkit'; -export async function renameForGitHub() { +export async function renameForCanary() { const originalPackageJson = readJsonFile('package.json'); writeJsonFile('package.json', { From 92ac0655e253f728c35159aa1009a31a6c1efa29 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:29:09 +0700 Subject: [PATCH 55/61] Clean up tooling --- .github/workflows/beta.yml | 6 +++--- tools/scripts/{ => beta}/beta_info.mjs | 0 tools/scripts/{rename.mjs => beta/beta_rename.mjs} | 0 tools/scripts/{ => beta}/beta_required.mjs | 0 .../beta_version_restore.mjs} | 2 -- tools/scripts/publish.mjs | 2 +- 6 files changed, 4 insertions(+), 6 deletions(-) rename tools/scripts/{ => beta}/beta_info.mjs (100%) rename tools/scripts/{rename.mjs => beta/beta_rename.mjs} (100%) rename tools/scripts/{ => beta}/beta_required.mjs (100%) rename tools/scripts/{restore_beta_version.mjs => beta/beta_version_restore.mjs} (97%) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 68f26f446..b4cf69e12 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -28,7 +28,7 @@ jobs: - run: pnpm install --frozen-lockfile # Parse latest published version of the beta and update local package.json for all packages - name: Restore beta version - run: node ./tools/scripts/restore_beta_version.mjs ${{ github.event.pull_request.number }} + run: node ./tools/scripts/beta/beta_version_restore.mjs ${{ github.event.pull_request.number }} # Update version in package.json for all packages with changeset and generate pre.json file - run: pnpm changeset pre enter ${{ github.event.pull_request.number }} - run: pnpm changeset version @@ -37,13 +37,13 @@ jobs: # it uses pre.json file and information about previous beta from the comment - name: Check if new beta is required id: beta_required - run: node ./tools/scripts/beta_required.mjs """${{ steps.find_comment.outputs.comment-body }}""" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + run: node ./tools/scripts/beta/beta_required.mjs """${{ steps.find_comment.outputs.comment-body }}""" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT - name: Publish beta if: steps.beta_required.outputs.skipBeta == '' run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta - name: Retrieve information about latest beta id: beta_info - run: node ./tools/scripts/beta_info.mjs >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + run: node ./tools/scripts/beta/beta_info.mjs >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT # In case of absence of the comment we will create it with information about latest beta - name: Create comment if: steps.find_comment.outputs.comment-id == '' diff --git a/tools/scripts/beta_info.mjs b/tools/scripts/beta/beta_info.mjs similarity index 100% rename from tools/scripts/beta_info.mjs rename to tools/scripts/beta/beta_info.mjs diff --git a/tools/scripts/rename.mjs b/tools/scripts/beta/beta_rename.mjs similarity index 100% rename from tools/scripts/rename.mjs rename to tools/scripts/beta/beta_rename.mjs diff --git a/tools/scripts/beta_required.mjs b/tools/scripts/beta/beta_required.mjs similarity index 100% rename from tools/scripts/beta_required.mjs rename to tools/scripts/beta/beta_required.mjs diff --git a/tools/scripts/restore_beta_version.mjs b/tools/scripts/beta/beta_version_restore.mjs similarity index 97% rename from tools/scripts/restore_beta_version.mjs rename to tools/scripts/beta/beta_version_restore.mjs index 6be5bc983..ad24605cf 100644 --- a/tools/scripts/restore_beta_version.mjs +++ b/tools/scripts/beta/beta_version_restore.mjs @@ -7,8 +7,6 @@ import { import { execSync } from 'child_process'; import { join } from 'path'; -import { invariant } from './shared/invariant.mjs'; - const [, , branch] = process.argv; logger.info(`Beta name is ${branch}`); diff --git a/tools/scripts/publish.mjs b/tools/scripts/publish.mjs index 8912afb46..1fe8a0d7e 100644 --- a/tools/scripts/publish.mjs +++ b/tools/scripts/publish.mjs @@ -5,8 +5,8 @@ import { writeJsonFile, } from '@nrwl/devkit'; import { spawnSync } from 'child_process'; -import { renameForCanary } from './rename.mjs'; +import { renameForCanary } from './beta/beta_rename.mjs'; import { invariant } from './shared/invariant.mjs'; const [, , name, renameOption] = process.argv; From 929089eb4b1e0c87afd666a00ba4bc3697c84901 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:30:00 +0700 Subject: [PATCH 56/61] Improve github comment --- .github/workflows/beta.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index b4cf69e12..75e77e9d5 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -53,7 +53,9 @@ jobs: body: | # Farfetched Beta - Latest published version is ${{ steps.beta_info.outputs.betaVersion }} + Latest beta version is ${{ steps.beta_info.outputs.betaVersion }} + + [More information about beta versions](https://beta.farfetched.pages.dev/releases/beta.html) --- @@ -69,7 +71,9 @@ jobs: body: | # Farfetched Beta - Latest published version is ${{ steps.beta_info.outputs.betaVersion }} + Latest beta version is ${{ steps.beta_info.outputs.betaVersion }} + + [More information about beta versions](https://beta.farfetched.pages.dev/releases/beta.html) --- From 89d154784e3d0da542b27cea910967747248d291 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:30:09 +0700 Subject: [PATCH 57/61] One more beta please --- .changeset/thick-mice-appear.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/thick-mice-appear.md diff --git a/.changeset/thick-mice-appear.md b/.changeset/thick-mice-appear.md new file mode 100644 index 000000000..382bba8fb --- /dev/null +++ b/.changeset/thick-mice-appear.md @@ -0,0 +1,5 @@ +--- +'@farfetched/superstruct': patch +--- + +One more beta please From e16947b970eebec12ea14201ae72aca64c877b69 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 14:33:16 +0700 Subject: [PATCH 58/61] Improve beta page --- apps/website/docs/releases/beta.md | 74 +++++++++++++++++------------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/apps/website/docs/releases/beta.md b/apps/website/docs/releases/beta.md index 96fec9c64..e9c793d30 100644 --- a/apps/website/docs/releases/beta.md +++ b/apps/website/docs/releases/beta.md @@ -4,7 +4,46 @@ sidebar: false # Beta versions of Farfetched -## Package names +We release beta versions of Farfetched to allow you to try new features before they are released. Beta versions are published for every PR that contains changesets. You can find the latest beta version of the package for particular PR in the PR comments. + +## How to use + +1. Replace current versions with the beta versions in `package.json` + +```json +{ + "dependencies": { + "@farfetched/core": "0.10.4", // [!code --] + "@farfetched/core": "npm:@farfetched-canary/core@0.10.7-403.0" // [!code ++] + } +} +``` + +2. Install packages + +::: code-group + +```bash [pnpm] +pnpm install +``` + +```bash [yarn] +yarn install +``` + +```bash [npm] +npm install +``` + +3. Enjoy new features! + +::: + +## Deep-dive + +In this section, you can find more details about beta versions publishing process. + +### Package names Beta versions of Farfetched are published to scope `@farfetched-canary` instead of `@farfetched`. To use them, you need to change the package name in `package.json` from `@farfetched/*` to `@farfetched-canary/*`. @@ -31,7 +70,7 @@ Beta versions of Farfetched are published to scope `@farfetched-canary` instead ::: -## Package versions +### Package versions Package versions for beta versions of Farfetched are generated automatically by the following rules: @@ -46,34 +85,3 @@ Package versions for beta versions of Farfetched are generated automatically by - If the latest version of the package is `0.10.4` and branch contains changeset for `patch` change, PR number is `406` and this is the second build for this PR, then the version of the package will be `0.10.5-406.1`. ::: - -## How to use - -1. Replace current versions with the beta versions in `package.json` - -```json -{ - "dependencies": { - "@farfetched/core": "0.10.4", // [!code --] - "@farfetched/core": "npm:@farfetched-canary/core@0.10.7-403.0" // [!code ++] - } -} -``` - -2. Install packages - -::: code-group - -```bash [pnpm] -pnpm install -``` - -```bash [yarn] -yarn install -``` - -```bash [npm] -npm install -``` - -::: From a109c827c1acb44f87e0a84a8f76c75938a13844 Mon Sep 17 00:00:00 2001 From: Igor Kamyshev Date: Thu, 23 Nov 2023 16:06:58 +0700 Subject: [PATCH 59/61] Rename beta versions to canary versions --- .github/workflows/beta.yml | 80 ------------------- .github/workflows/canary.yml | 80 +++++++++++++++++++ .../docs/releases/{beta.md => canary.md} | 16 ++-- ...mapping.data.ts => canary_mapping.data.ts} | 0 apps/website/docs/releases/index.md | 2 +- packages/atomic-router/project.json | 2 +- packages/core/project.json | 2 +- packages/io-ts/project.json | 2 +- packages/runtypes/project.json | 2 +- packages/solid/project.json | 2 +- packages/superstruct/project.json | 2 +- packages/typed-contracts/project.json | 2 +- packages/zod/project.json | 2 +- .../beta_info.mjs => canary/canary_info.mjs} | 4 +- .../canary_rename.mjs} | 0 .../canary_required.mjs} | 4 +- .../canary_version_restore.mjs} | 24 +++--- tools/scripts/publish.mjs | 2 +- 18 files changed, 114 insertions(+), 114 deletions(-) delete mode 100644 .github/workflows/beta.yml create mode 100644 .github/workflows/canary.yml rename apps/website/docs/releases/{beta.md => canary.md} (62%) rename apps/website/docs/releases/{beta_mapping.data.ts => canary_mapping.data.ts} (100%) rename tools/scripts/{beta/beta_info.mjs => canary/canary_info.mjs} (84%) rename tools/scripts/{beta/beta_rename.mjs => canary/canary_rename.mjs} (100%) rename tools/scripts/{beta/beta_required.mjs => canary/canary_required.mjs} (88%) rename tools/scripts/{beta/beta_version_restore.mjs => canary/canary_version_restore.mjs} (70%) diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml deleted file mode 100644 index 75e77e9d5..000000000 --- a/.github/workflows/beta.yml +++ /dev/null @@ -1,80 +0,0 @@ -name: Beta - -on: pull_request - -jobs: - release: - runs-on: ubuntu-latest - steps: - # We store information about used changeset in the comment - # So we need to find it to check if we need to publish a new beta - # Also we will update this comment with new information in case of new beta - - name: Find comment about previous beta - uses: peter-evans/find-comment@v1 - id: find_comment - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: 'github-actions[bot]' - body-includes: Farfetched Beta - - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2 - - uses: actions/setup-node@v3 - with: - node-version-file: '.nvmrc' - cache: 'pnpm' - - name: Authenticate with NPM - run: | - echo "//registry.npmjs.org/:_authToken="${{secrets.NPM_TOKEN}}"" > ~/.npmrc - - run: pnpm install --frozen-lockfile - # Parse latest published version of the beta and update local package.json for all packages - - name: Restore beta version - run: node ./tools/scripts/beta/beta_version_restore.mjs ${{ github.event.pull_request.number }} - # Update version in package.json for all packages with changeset and generate pre.json file - - run: pnpm changeset pre enter ${{ github.event.pull_request.number }} - - run: pnpm changeset version - - run: pnpm changeset pre exit - # Check if we need to publish a new beta - # it uses pre.json file and information about previous beta from the comment - - name: Check if new beta is required - id: beta_required - run: node ./tools/scripts/beta/beta_required.mjs """${{ steps.find_comment.outputs.comment-body }}""" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT - - name: Publish beta - if: steps.beta_required.outputs.skipBeta == '' - run: pnpm nx run-many --output-style=static --target=publish --all --configuration=beta - - name: Retrieve information about latest beta - id: beta_info - run: node ./tools/scripts/beta/beta_info.mjs >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT - # In case of absence of the comment we will create it with information about latest beta - - name: Create comment - if: steps.find_comment.outputs.comment-id == '' - uses: peter-evans/create-or-update-comment@v1 - with: - issue-number: ${{ github.event.pull_request.number }} - body: | - # Farfetched Beta - - Latest beta version is ${{ steps.beta_info.outputs.betaVersion }} - - [More information about beta versions](https://beta.farfetched.pages.dev/releases/beta.html) - - --- - - Used changeset: ${{ steps.beta_info.outputs.usedChangesets }} - # Otherwise we will update it with information about latest beta, - # but only if we published a new beta - - name: Update comment - if: steps.find_comment.outputs.comment-id != '' && steps.beta_required.outputs.skipBeta == '' - uses: peter-evans/create-or-update-comment@v1 - with: - edit-mode: replace - comment-id: ${{ steps.find_comment.outputs.comment-id }} - body: | - # Farfetched Beta - - Latest beta version is ${{ steps.beta_info.outputs.betaVersion }} - - [More information about beta versions](https://beta.farfetched.pages.dev/releases/beta.html) - - --- - - Used changeset: ${{ steps.beta_info.outputs.usedChangesets }} diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml new file mode 100644 index 000000000..1adc6a991 --- /dev/null +++ b/.github/workflows/canary.yml @@ -0,0 +1,80 @@ +name: Canary + +on: pull_request + +jobs: + release: + runs-on: ubuntu-latest + steps: + # We store information about used changeset in the comment + # So we need to find it to check if we need to publish a new canary release + # Also we will update this comment with new information in case of new canary release + - name: Find comment about previous canary release + uses: peter-evans/find-comment@v1 + id: find_comment + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: Farfetched Canary + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 + - uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + - name: Authenticate with NPM + run: | + echo "//registry.npmjs.org/:_authToken="${{secrets.NPM_TOKEN}}"" > ~/.npmrc + - run: pnpm install --frozen-lockfile + # Parse latest published version of the canary release and update local package.json for all packages + - name: Restore canary release version + run: node ./tools/scripts/canary/canary_version_restore.mjs ${{ github.event.pull_request.number }} + # Update version in package.json for all packages with changeset and generate pre.json file + - run: pnpm changeset pre enter ${{ github.event.pull_request.number }} + - run: pnpm changeset version + - run: pnpm changeset pre exit + # Check if we need to publish a new canary release + # it uses pre.json file and information about previous canary relase from the comment + - name: Check if new canary release is required + id: canary_required + run: node ./tools/scripts/canary/canary_required.mjs """${{ steps.find_comment.outputs.comment-body }}""" >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + - name: Publish canary release + if: steps.canary_required.outputs.skipCanary == '' + run: pnpm nx run-many --output-style=static --target=publish --all --configuration=canary + - name: Retrieve information about latest canary release + id: canary_info + run: node ./tools/scripts/canary/canary_info.mjs >> $GITHUB_OUTPUT && cat $GITHUB_OUTPUT + # In case of absence of the comment we will create it with information about latest canary release + - name: Create comment + if: steps.find_comment.outputs.comment-id == '' + uses: peter-evans/create-or-update-comment@v1 + with: + issue-number: ${{ github.event.pull_request.number }} + body: | + # Farfetched Canary + + Latest canary version is ${{ steps.canary_info.outputs.canaryVersion }} + + [More information about canary versions](https://farfetched.pages.dev/releases/canary.html) + + --- + + Used changeset: ${{ steps.canary_info.outputs.usedChangesets }} + # Otherwise we will update it with information about latest caanry release, + # but only if we published a new canary release + - name: Update comment + if: steps.find_comment.outputs.comment-id != '' && steps.canary_required.outputs.skipCanary == '' + uses: peter-evans/create-or-update-comment@v1 + with: + edit-mode: replace + comment-id: ${{ steps.find_comment.outputs.comment-id }} + body: | + # Farfetched Canary + + Latest canary version is ${{ steps.canary_info.outputs.canaryVersion }} + + [More information about canary versions](https://farfetched.pages.dev/releases/canary.html) + + --- + + Used changeset: ${{ steps.canary_info.outputs.usedChangesets }} diff --git a/apps/website/docs/releases/beta.md b/apps/website/docs/releases/canary.md similarity index 62% rename from apps/website/docs/releases/beta.md rename to apps/website/docs/releases/canary.md index e9c793d30..755c895ce 100644 --- a/apps/website/docs/releases/beta.md +++ b/apps/website/docs/releases/canary.md @@ -2,13 +2,13 @@ sidebar: false --- -# Beta versions of Farfetched +# Canary versions of Farfetched -We release beta versions of Farfetched to allow you to try new features before they are released. Beta versions are published for every PR that contains changesets. You can find the latest beta version of the package for particular PR in the PR comments. +We release canary versions of Farfetched to allow you to try new features before they are released. Canary versions are published for every PR that contains changesets. You can find the latest canary version of the package for particular PR in the PR comments. ## How to use -1. Replace current versions with the beta versions in `package.json` +1. Replace current versions with the canary versions in `package.json` ```json { @@ -35,22 +35,22 @@ yarn install npm install ``` -3. Enjoy new features! +3. Test your application with the canary version of Farfetched ::: ## Deep-dive -In this section, you can find more details about beta versions publishing process. +In this section, you can find more details about canary versions publishing process. ### Package names -Beta versions of Farfetched are published to scope `@farfetched-canary` instead of `@farfetched`. To use them, you need to change the package name in `package.json` from `@farfetched/*` to `@farfetched-canary/*`. +Canary versions of Farfetched are published to scope `@farfetched-canary` instead of `@farfetched`. To use them, you need to change the package name in `package.json` from `@farfetched/*` to `@farfetched-canary/*`. ::: details Full mapping @@ -72,7 +72,7 @@ Beta versions of Farfetched are published to scope `@farfetched-canary` instead ### Package versions -Package versions for beta versions of Farfetched are generated automatically by the following rules: +Package versions for canary versions of Farfetched are generated automatically by the following rules: 1. Generate next version of the package according to [semver](https://semver.org/) rules based on changesets in the branch. 2. Add PR number to the end of the version. diff --git a/apps/website/docs/releases/beta_mapping.data.ts b/apps/website/docs/releases/canary_mapping.data.ts similarity index 100% rename from apps/website/docs/releases/beta_mapping.data.ts rename to apps/website/docs/releases/canary_mapping.data.ts diff --git a/apps/website/docs/releases/index.md b/apps/website/docs/releases/index.md index 9e8048b2d..d30a358f5 100644 --- a/apps/website/docs/releases/index.md +++ b/apps/website/docs/releases/index.md @@ -7,7 +7,7 @@ sidebar: false Farfetched is mostly been creating in Thailand, so all releases are named after beautiful places in Thailand. :::tip -To use unreleased version of Farfetched, please refer to [beta](/releases/beta) page. +To use unreleased version of Farfetched, please refer to [canary](/releases/canary) page. :::