scripts/publish-packages.ts (46 lines of code) (raw):

/** * Called from the `create-releases.yml` workflow with the output * of the release please action as the first argument. * * Example JSON input: * * ```json { "releases_created": "true", "release_created": "true", "id": "137967744", "name": "sdk: v0.14.5", "tag_name": "sdk-v0.14.5", "sha": "7cc2ba5c694e76a117f731d4cf0b06f8b8361f2e", "body": "## 0.14.5 (2024-01-22)\n\n...", "html_url": "https://github.com/$org/$repo/releases/tag/sdk-v0.14.5", "draft": "false", "upload_url": "https://uploads.github.com/repos/$org/$repo/releases/137967744/assets{?name,label}", "path": ".", "version": "0.14.5", "major": "0", "minor": "14", "patch": "5", "packages/additional-sdk--release_created": "true", "packages/additional-sdk--id": "137967756", "packages/additional-sdk--name": "additional-sdk: v0.5.2", "packages/additional-sdk--tag_name": "additional-sdk-v0.5.2", "packages/additional-sdk--sha": "7cc2ba5c694e76a117f731d4cf0b06f8b8361f2e", "packages/additional-sdk--body": "## 0.5.2 (2024-01-22)\n\n...", "packages/additional-sdk--html_url": "https://github.com/$org/$repo/releases/tag/additional-sdk-v0.5.2", "packages/additional-sdk--draft": "false", "packages/additional-sdk--upload_url": "https://uploads.github.com/repos/$org/$repo/releases/137967756/assets{?name,label}", "packages/additional-sdk--path": "packages/additional-sdk", "packages/additional-sdk--version": "0.5.2", "packages/additional-sdk--major": "0", "packages/additional-sdk--minor": "5", "packages/additional-sdk--patch": "2", "paths_released": "[\".\",\"packages/additional-sdk\"]" } ``` */ import { execSync } from 'child_process'; import path from 'path'; function main() { const data = process.argv[2] ?? process.env['DATA']; if (!data) { throw new Error(`Usage: publish-packages.ts '{"json": "obj"}'`); } const rootDir = path.join(__dirname, '..'); console.log('root dir', rootDir); console.log(`publish-packages called with ${data}`); const outputs = JSON.parse(data); const rawPaths = outputs.paths_released; if (!rawPaths) { console.error(JSON.stringify(outputs, null, 2)); throw new Error('Expected outputs to contain a truthy `paths_released` property'); } if (typeof rawPaths !== 'string') { console.error(JSON.stringify(outputs, null, 2)); throw new Error('Expected outputs `paths_released` property to be a JSON string'); } const paths = JSON.parse(rawPaths); if (!Array.isArray(paths)) { console.error(JSON.stringify(outputs, null, 2)); throw new Error('Expected outputs `paths_released` property to be an array'); } if (!paths.length) { console.error(JSON.stringify(outputs, null, 2)); throw new Error('Expected outputs `paths_released` property to contain at least one entry'); } const publishScriptPath = path.join(rootDir, 'bin', 'publish-npm'); console.log('Using publish script at', publishScriptPath); console.log('Ensuring root package is built'); console.log(`$ yarn build`); execSync(`yarn build`, { cwd: rootDir, encoding: 'utf8', stdio: 'inherit' }); for (const relPackagePath of paths) { console.log('\n'); const packagePath = path.join(rootDir, relPackagePath); console.log(`Publishing in directory: ${packagePath}`); console.log(`$ yarn install`); execSync(`yarn install`, { cwd: packagePath, encoding: 'utf8', stdio: 'inherit' }); console.log(`$ bash ${publishScriptPath}`); execSync(`bash ${publishScriptPath}`, { cwd: packagePath, encoding: 'utf8', stdio: 'inherit' }); } console.log('Finished publishing packages'); } main();