Skip to content

Commit

Permalink
Add a script to bump the version (#1694)
Browse files Browse the repository at this point in the history
Also, add the version in font CSS and SCSS files
  • Loading branch information
XhmikosR authored Apr 26, 2023
1 parent 3d5e1e7 commit 5bfa399
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 2 deletions.
102 changes: 102 additions & 0 deletions build/bump-version.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#!/usr/bin/env node

/*!
* Script to update version number references in the project.
* Copyright 2023 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE)
*/

'use strict'

const { execFile } = require('node:child_process')
const fs = require('node:fs').promises

const VERBOSE = process.argv.includes('--verbose')
const DRY_RUN = process.argv.includes('--dry') || process.argv.includes('--dry-run')

// These are the files we only care about replacing the version
const FILES = [
'build/font/css.hbs',
'build/font/scss.hbs',
'config.yml'
]

// Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
function regExpQuote(string) {
return string.replace(/[$()*+-.?[\\\]^{|}]/g, '\\$&')
}

function regExpQuoteReplacement(string) {
return string.replace(/\$/g, '$$')
}

async function replaceRecursively(file, oldVersion, newVersion) {
const originalString = await fs.readFile(file, 'utf8')
const newString = originalString.replace(
new RegExp(regExpQuote(oldVersion), 'g'),
regExpQuoteReplacement(newVersion)
)

// No need to move any further if the strings are identical
if (originalString === newString) {
return
}

if (VERBOSE) {
console.log(`Found ${oldVersion} in ${file}`)
}

if (DRY_RUN) {
return
}

await fs.writeFile(file, newString, 'utf8')
}

function bumpNpmVersion(newVersion) {
if (DRY_RUN) {
return
}

execFile('npm', ['version', newVersion, '--no-git-tag'], { shell: true }, (error) => {
if (error) {
console.error(error)
process.exit(1)
}
})
}

function showUsage(args) {
console.error('USAGE: change-version old_version new_version [--verbose] [--dry[-run]]')
console.error('Got arguments:', args)
process.exit(1)
}

async function main(args) {
let [oldVersion, newVersion] = args

if (!oldVersion || !newVersion) {
showUsage(args)
}

// Strip any leading `v` from arguments because
// otherwise we will end up with duplicate `v`s
[oldVersion, newVersion] = [oldVersion, newVersion].map(arg => {
return arg.startsWith('v') ? arg.slice(1) : arg
})

if (oldVersion === newVersion) {
showUsage(args)
}

bumpNpmVersion(newVersion)

try {
await Promise.all(FILES.map(file => replaceRecursively(file, oldVersion, newVersion)))
} catch (error) {
console.error(error)
process.exit(1)
}
}

main(process.argv.slice(2))
2 changes: 1 addition & 1 deletion build/font/css.hbs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Bootstrap Icons (https://icons.getbootstrap.com/)
* Bootstrap Icons v1.10.4 (https://icons.getbootstrap.com/)
* Copyright 2019-2023 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE)
*/
Expand Down
2 changes: 1 addition & 1 deletion build/font/scss.hbs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Bootstrap Icons (https://icons.getbootstrap.com/)
* Bootstrap Icons v1.10.4 (https://icons.getbootstrap.com/)
* Copyright 2019-2023 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE)
*/
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
"icons-font-main": "fantasticon",
"icons-font-min": "cleancss -O1 --format breakWith=lf --with-rebase --output font/bootstrap-icons.min.css font/bootstrap-icons.css",
"release": "npm-run-all icons docs-build icons-zip",
"release-version": "node build/bump-version.js",
"netlify": "cross-env-shell HUGO_BASEURL=$DEPLOY_PRIME_URL npm-run-all icons docs-build",
"test:fusv": "fusv docs/assets/scss/",
"test:eslint": "eslint --cache --cache-location .cache/.eslintcache --report-unused-disable-directives .",
Expand Down

0 comments on commit 5bfa399

Please sign in to comment.