- Updated version to `0.10.0` in `README.md`, `cli-package/package.json`, and `src/utils/version.ts`. - Removed `CHANGELOG.md` from the root and `cli-package`, as GitHub auto-generates release notes. - Refactored `brainy-wrapper.js` to simplify utility methods (`isFloat32Array` and `isTypedArray`) by moving them to instance-level definitions. - Standardized Node.js version requirement to `>= 24.3.0` across documentation and configuration files. - Improved `textEncoding.ts` by introducing a unified `Platform` class for cross-environment compatibility (Node.js and browser). - Restructured scripts: - Replaced outdated commands (e.g., `test-cli` -> `test:cli` and `test-all` -> `test:all`) for consistency. - Removed changelog updates from `scripts/create-github-release.js` as part of simplification. - Enhanced `patch-textencoder.js` to also patch `worker.js` for both `TextEncoder` and `TextDecoder`. This release improves compatibility with Node.js 24, simplifies the deployment/changelog process, and refines text encoding and worker functionalities.
98 lines
3.3 KiB
JavaScript
98 lines
3.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Create GitHub Release Script
|
|
*
|
|
* This script creates a GitHub release with auto-generated release notes
|
|
* for the current version of the package.
|
|
*
|
|
* It uses the GitHub CLI (gh) to create the release, so the gh CLI must be installed
|
|
* and authenticated with appropriate permissions.
|
|
*
|
|
* The script:
|
|
* 1. Gets the current version from package.json
|
|
* 2. Creates a GitHub release for that version
|
|
* 3. Auto-generates release notes based on commits since the last release
|
|
*
|
|
* This ensures that each npm release has a corresponding GitHub release with notes.
|
|
*/
|
|
|
|
import { execSync } from 'child_process'
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
import { fileURLToPath } from 'url'
|
|
|
|
// Get the directory of the current module
|
|
const __filename = fileURLToPath(import.meta.url)
|
|
const __dirname = path.dirname(__filename)
|
|
|
|
// Path to the root directory
|
|
const rootDir = path.join(__dirname, '..')
|
|
|
|
// Path to package.json
|
|
const packageJsonPath = path.join(rootDir, 'package.json')
|
|
|
|
// Read package.json
|
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
|
|
const version = packageJson.version
|
|
|
|
// Check if GitHub CLI is installed
|
|
try {
|
|
execSync('gh --version', { stdio: 'ignore' })
|
|
} catch (error) {
|
|
console.error('Error: GitHub CLI (gh) is not installed or not in PATH')
|
|
console.error('Please install it from https://cli.github.com/ and authenticate with `gh auth login`')
|
|
process.exit(1)
|
|
}
|
|
|
|
// Check if the tag exists locally
|
|
let tagExistsLocally = false
|
|
try {
|
|
execSync(`git tag -l v${version}`, { stdio: 'pipe', cwd: rootDir }).toString().trim() === `v${version}` ? tagExistsLocally = true : tagExistsLocally = false
|
|
} catch (error) {
|
|
console.log(`Error checking if tag exists: ${error.message}`)
|
|
tagExistsLocally = false
|
|
}
|
|
|
|
// Push the tag to remote if it exists locally
|
|
if (tagExistsLocally) {
|
|
try {
|
|
console.log(`Pushing tag v${version} to remote...`)
|
|
execSync(`git push origin v${version}`, { stdio: 'inherit', cwd: rootDir })
|
|
console.log(`Successfully pushed tag v${version} to remote`)
|
|
} catch (error) {
|
|
console.error(`Error pushing tag to remote: ${error.message}`)
|
|
// Continue with release creation even if tag push fails
|
|
}
|
|
} else {
|
|
console.log(`Tag v${version} does not exist locally, skipping tag push`)
|
|
}
|
|
|
|
// Create the GitHub release
|
|
try {
|
|
console.log(`Creating GitHub release for v${version}...`)
|
|
|
|
// Create a release with auto-generated notes
|
|
// The --generate-notes flag automatically generates release notes based on PRs and commits
|
|
execSync(
|
|
`gh release create v${version} --title "v${version}" --generate-notes`,
|
|
{ stdio: 'inherit', cwd: rootDir }
|
|
)
|
|
|
|
console.log(`GitHub release v${version} created successfully!`)
|
|
|
|
// GitHub will automatically handle the changelog
|
|
console.log('GitHub release created with auto-generated notes')
|
|
} catch (error) {
|
|
// If the release already exists, this is not a fatal error
|
|
if (error.message.includes('already exists')) {
|
|
console.log(`GitHub release v${version} already exists, skipping creation.`)
|
|
|
|
// GitHub will automatically handle the changelog
|
|
console.log('GitHub release already exists with auto-generated notes')
|
|
} else {
|
|
console.error('Error creating GitHub release:', error.message)
|
|
// Don't exit with error to allow the npm publish to continue
|
|
// process.exit(1)
|
|
}
|
|
}
|