diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f7343a7da..47fe312e3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,6 +12,7 @@ jobs: release: name: Release runs-on: ubuntu-latest + if: github.repository == 'apollographql/federation' steps: - name: Checkout Repo uses: actions/checkout@v3 @@ -55,3 +56,9 @@ jobs: version: "${{ env.FEDERATION_VERSION }}" } }) + - name: Write token to the NPM rc file (login) + if: steps.changesets.outputs.published == 'true' + # write token to the NPM rc file (npm login) + run: echo //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} > ~/.npmrc + - name: Update next tags if appropriate + run: node scripts/update-next-tags.mjs diff --git a/docs/source/federated-types/composition.mdx b/docs/source/federated-types/composition.mdx index 93abb511c..4ce0108fe 100644 --- a/docs/source/federated-types/composition.mdx +++ b/docs/source/federated-types/composition.mdx @@ -353,7 +353,7 @@ input UserInput { } type Library { - findBook(title: String): Book + book(title: String): Book } ``` diff --git a/package-lock.json b/package-lock.json index 1b24fb2a3..255995f4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@apollo/utils.fetcher": "2.0.0", "@changesets/changelog-github": "0.4.8", "@changesets/cli": "2.26.0", - "@graphql-codegen/cli": "3.1.0", + "@graphql-codegen/cli": "3.2.1", "@graphql-codegen/typescript": "3.0.1", "@graphql-codegen/typescript-operations": "3.0.1", "@josephg/resolvable": "1.0.1", @@ -53,6 +53,7 @@ "nock": "13.3.0", "node-fetch": "2.6.9", "prettier": "2.8.4", + "semver": "^7.3.8", "strip-indent": "3.0.0", "ts-jest": "29.0.5", "ts-node": "10.9.1", @@ -2513,9 +2514,9 @@ } }, "node_modules/@graphql-codegen/cli": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-3.1.0.tgz", - "integrity": "sha512-MUYyHkh/n8XVuONk7AYvJV/ObZDlPGwyevl8ch21jNFNj2M5PM39WViHKmIYwVw2n4fDmoh3BNdaeHQs1wb4HA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-3.2.1.tgz", + "integrity": "sha512-AeXzOvhSgAyMC0TzIoc6/HIc2Fy2rCZJcs5pt1LDypn1k4gpGRzqZ5JOjYx+XIna2hLfB9NbAkcO5dcdHwFdJA==", "dev": true, "dependencies": { "@babel/generator": "^7.18.13", @@ -2533,9 +2534,9 @@ "@graphql-tools/prisma-loader": "^7.2.49", "@graphql-tools/url-loader": "^7.13.2", "@graphql-tools/utils": "^9.0.0", + "@parcel/watcher": "^2.1.0", "@whatwg-node/fetch": "^0.8.0", "chalk": "^4.1.0", - "chokidar": "^3.5.2", "cosmiconfig": "^7.0.0", "cosmiconfig-typescript-loader": "^4.3.0", "debounce": "^1.2.0", @@ -2546,6 +2547,7 @@ "json-to-pretty-yaml": "^1.2.2", "listr2": "^4.0.5", "log-symbols": "^4.0.0", + "micromatch": "^4.0.5", "shell-quote": "^1.7.3", "string-env-interpolation": "^1.0.1", "ts-log": "^2.2.3", @@ -2578,9 +2580,9 @@ } }, "node_modules/@graphql-codegen/cli/node_modules/@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", + "version": "18.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.1.tgz", + "integrity": "sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ==", "dev": true, "peer": true }, @@ -4513,6 +4515,26 @@ "@opentelemetry/api": "^1.0.1" } }, + "node_modules/@parcel/watcher": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", + "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@peculiar/asn1-schema": { "version": "2.2.0", "dev": true, @@ -6072,14 +6094,6 @@ "node": ">=4" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/bl": { "version": "4.1.0", "dev": true, @@ -6492,26 +6506,6 @@ "node": ">= 0.8.0" } }, - "node_modules/chokidar": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/chownr": { "version": "2.0.0", "license": "ISC", @@ -9355,17 +9349,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-boolean-object": { "version": "1.1.2", "license": "MIT", @@ -12319,12 +12302,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "license": "MIT", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -12754,6 +12738,12 @@ "version": "3.0.1", "license": "MIT" }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, "node_modules/node-domexception": { "version": "1.0.0", "dev": true, @@ -12805,6 +12795,17 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-int64": { "version": "0.4.0", "dev": true, @@ -13908,17 +13909,6 @@ "node": ">= 6" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/redent": { "version": "3.0.0", "dev": true, @@ -18683,9 +18673,9 @@ } }, "@graphql-codegen/cli": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-3.1.0.tgz", - "integrity": "sha512-MUYyHkh/n8XVuONk7AYvJV/ObZDlPGwyevl8ch21jNFNj2M5PM39WViHKmIYwVw2n4fDmoh3BNdaeHQs1wb4HA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-3.2.1.tgz", + "integrity": "sha512-AeXzOvhSgAyMC0TzIoc6/HIc2Fy2rCZJcs5pt1LDypn1k4gpGRzqZ5JOjYx+XIna2hLfB9NbAkcO5dcdHwFdJA==", "dev": true, "requires": { "@babel/generator": "^7.18.13", @@ -18703,9 +18693,9 @@ "@graphql-tools/prisma-loader": "^7.2.49", "@graphql-tools/url-loader": "^7.13.2", "@graphql-tools/utils": "^9.0.0", + "@parcel/watcher": "^2.1.0", "@whatwg-node/fetch": "^0.8.0", "chalk": "^4.1.0", - "chokidar": "^3.5.2", "cosmiconfig": "^7.0.0", "cosmiconfig-typescript-loader": "^4.3.0", "debounce": "^1.2.0", @@ -18716,6 +18706,7 @@ "json-to-pretty-yaml": "^1.2.2", "listr2": "^4.0.5", "log-symbols": "^4.0.0", + "micromatch": "^4.0.5", "shell-quote": "^1.7.3", "string-env-interpolation": "^1.0.1", "ts-log": "^2.2.3", @@ -18736,9 +18727,9 @@ } }, "@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", + "version": "18.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.1.tgz", + "integrity": "sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ==", "dev": true, "peer": true }, @@ -20320,6 +20311,18 @@ "lodash.merge": "^4.6.2" } }, + "@parcel/watcher": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", + "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", + "dev": true, + "requires": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + } + }, "@peculiar/asn1-schema": { "version": "2.2.0", "dev": true, @@ -21437,10 +21440,6 @@ "is-windows": "^1.0.0" } }, - "binary-extensions": { - "version": "2.2.0", - "dev": true - }, "bl": { "version": "4.1.0", "dev": true, @@ -21728,20 +21727,6 @@ "version": "2.24.0", "dev": true }, - "chokidar": { - "version": "3.5.2", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, "chownr": { "version": "2.0.0" }, @@ -23714,13 +23699,6 @@ "has-bigints": "^1.0.1" } }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, "is-boolean-object": { "version": "1.1.2", "requires": { @@ -25809,11 +25787,13 @@ "dev": true }, "micromatch": { - "version": "4.0.4", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { @@ -26102,6 +26082,12 @@ "node-abort-controller": { "version": "3.0.1" }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, "node-domexception": { "version": "1.0.0", "dev": true @@ -26130,6 +26116,12 @@ } } }, + "node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true + }, "node-int64": { "version": "0.4.0", "dev": true @@ -26878,13 +26870,6 @@ "util-deprecate": "^1.0.1" } }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, "redent": { "version": "3.0.0", "dev": true, diff --git a/package.json b/package.json index aecfbc7f0..231b71a0c 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@apollo/utils.fetcher": "2.0.0", "@changesets/changelog-github": "0.4.8", "@changesets/cli": "2.26.0", - "@graphql-codegen/cli": "3.1.0", + "@graphql-codegen/cli": "3.2.1", "@graphql-codegen/typescript": "3.0.1", "@graphql-codegen/typescript-operations": "3.0.1", "@josephg/resolvable": "1.0.1", @@ -77,6 +77,7 @@ "nock": "13.3.0", "node-fetch": "2.6.9", "prettier": "2.8.4", + "semver": "^7.3.8", "strip-indent": "3.0.0", "ts-jest": "29.0.5", "ts-node": "10.9.1", @@ -96,6 +97,6 @@ }, "volta": { "node": "18.14.2", - "npm": "9.5.0" + "npm": "9.5.1" } } diff --git a/scripts/update-next-tags.mjs b/scripts/update-next-tags.mjs new file mode 100644 index 000000000..133acd345 --- /dev/null +++ b/scripts/update-next-tags.mjs @@ -0,0 +1,49 @@ +// @ts-check +import { exec } from "child_process"; +import { readFileSync } from "fs"; +import fetch from "node-fetch"; +import { resolve } from "path"; +import semver from "semver"; + +// Collect all the packages that we publish +const workspaces = JSON.parse( + readFileSync(resolve("package.json"), "utf-8") +).workspaces; +const publishedPackages = workspaces + .map((workspace) => { + const packageFile = JSON.parse( + readFileSync(resolve(workspace, "package.json"), "utf-8") + ); + if (packageFile.private === true) return null; + return packageFile.name; + }) + .filter(Boolean); + +for (const pkg of publishedPackages) { + const response = await fetch( + `https://registry.npmjs.org/${encodeURIComponent(pkg)}` + ); + const json = await response.json(); + const nextVersion = json["dist-tags"].next; + const sortedVersions = semver.sort(Object.keys(json.versions)); + const mostRecentVersion = sortedVersions.pop(); + + console.log(`Found most recent version of ${pkg}: ${mostRecentVersion}`); + console.log(`Current \`next\` tag version of ${pkg}: ${nextVersion}`); + + if (nextVersion !== mostRecentVersion) { + console.log(`\`next\` tag is behind, updating...`); + exec(`npm dist-tag add ${pkg}@${mostRecentVersion} next`, (e) => { + if (e) { + console.error(e); + console.error("Error occurred while updating `next` tag!"); + } else { + console.log("`next` tag updated successfully!"); + } + }); + } else { + console.log( + "No action needed, `next` tag is pointed to most recent version" + ); + } +}