mirror of
https://github.com/transloadit/uppy.git
synced 2026-07-18 00:55:35 +00:00
* meta: use Yarn v3 instead of npm * Update CONTRIBUTING.md to fix linter errors * remove remaining npm commands * Update deps
114 lines
3.3 KiB
JavaScript
Executable file
114 lines
3.3 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
/* eslint-disable import/no-dynamic-require */
|
|
/* eslint-disable global-require */
|
|
|
|
// Called by the `version` npm script.
|
|
// This is run _after_ lerna updates the version numbers,
|
|
// but _before_ it commits, so we have time to update the
|
|
// version numbers throughout the repo and add it to the
|
|
// release commit.
|
|
// After updating version numbers, this runs a full
|
|
// IS_RELEASE_BUILD=1 build, so that the version numbers
|
|
// are properly embedded in the JS bundles.
|
|
// NOTE this _amends_ the previous commit, which should
|
|
// already be a "Release" commit generated by bin/release.
|
|
|
|
const lastCommitMessage = require('last-commit-message')
|
|
const { spawn } = require('child_process')
|
|
const { readFile, writeFile } = require('fs/promises')
|
|
const once = require('events.once')
|
|
const globby = require('globby')
|
|
|
|
async function replaceInFile (filename, replacements) {
|
|
let content = await readFile(filename, 'utf8')
|
|
for (const [rx, replacement] of replacements) {
|
|
content = content.replace(rx, replacement)
|
|
}
|
|
|
|
await writeFile(filename, content, 'utf8')
|
|
}
|
|
|
|
async function updateVersions (files, packageName) {
|
|
const { version } = require(`../packages/${packageName}/package.json`)
|
|
|
|
// uppy → uppy
|
|
// @uppy/robodog → uppy/robodog
|
|
const urlPart = packageName === 'uppy' ? packageName : packageName.slice(1)
|
|
|
|
const replacements = new Map([
|
|
[RegExp(`${urlPart}/v\\d+\\.\\d+\\.\\d+\\/`, 'g'), `${urlPart}/v${version}/`],
|
|
// maybe more later
|
|
])
|
|
|
|
console.log('replacing', replacements, 'in', files.length, 'files')
|
|
|
|
for (const f of files) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await replaceInFile(f, replacements)
|
|
}
|
|
}
|
|
|
|
async function gitAdd (files) {
|
|
const git = spawn('git', ['add', ...files], { stdio: 'inherit' })
|
|
const [exitCode] = await once(git, 'exit')
|
|
if (exitCode !== 0) {
|
|
throw new Error(`git add failed with ${exitCode}`)
|
|
}
|
|
}
|
|
|
|
// Run the build as a release build (that inlines version numbers etc.)
|
|
async function npmRunBuild () {
|
|
const npmRun = spawn('yarn', ['run', 'build'], {
|
|
stdio: 'inherit',
|
|
env: {
|
|
...process.env,
|
|
FRESH: true, // force rebuild everything
|
|
IS_RELEASE_BUILD: true,
|
|
},
|
|
})
|
|
const [exitCode] = await once(npmRun, 'exit')
|
|
if (exitCode !== 0) {
|
|
throw new Error(`yarn run build failed with ${exitCode}`)
|
|
}
|
|
}
|
|
|
|
async function main () {
|
|
if (process.env.ENDTOEND === '1') {
|
|
console.log('Publishing for e2e tests, skipping version number sync.')
|
|
process.exit(0)
|
|
}
|
|
|
|
const message = await lastCommitMessage()
|
|
if (message.trim() !== 'Release') {
|
|
console.error(`Last commit is not a release commit, but '${message}'`)
|
|
process.exit(1)
|
|
}
|
|
|
|
const files = await globby([
|
|
'README.md',
|
|
'BUNDLE-README.md',
|
|
'examples/**/*.html',
|
|
'packages/*/README.md',
|
|
'packages/@uppy/*/README.md',
|
|
'website/src/docs/**',
|
|
'website/src/examples/**',
|
|
'website/themes/uppy/layout/**',
|
|
'!**/node_modules/**',
|
|
])
|
|
|
|
await updateVersions(files, 'uppy')
|
|
await updateVersions(files, '@uppy/robodog')
|
|
await updateVersions(files, '@uppy/locales')
|
|
|
|
// gitignored files were updated for the npm package, but can't be updated
|
|
// on git.
|
|
const isIgnored = await globby.gitignore()
|
|
await gitAdd(files.filter((filename) => !isIgnored(filename)))
|
|
|
|
await npmRunBuild()
|
|
}
|
|
|
|
main().catch((err) => {
|
|
console.error(err.stack)
|
|
process.exit(1)
|
|
})
|