6
\$\begingroup\$

This is part of a library that wants to release builded files (eg dist/*) when published to npm and bower. However, I don't want to commit those builded files for obvious reasons. Bower uses tags, and so I need tag to hold a version that contains builded files.

I didn't think twice, and that's what I came up with:

#!/bin/bash
[[ '' == 1ドル ]] && echo "Please provide patch, minor, major argument" && exit 1
# build dist files
gulp
# use npm to get the next semver (ie npm version patch increments patch number)
# --no-git-tag-version is to avoid any git interactions
newver=$(npm --no-git-tag-version version 1ドル)
# dist files are ignored, adding them with the updated package.json
git add -f dist package.json
# commit and tag the new version with dist files
git commit -m $newver
git tag $newver
# publish on npm
npm publish
# reset the latest commit
git reset --hard HEAD~1
# issue the npm command again so that package.json gets updated
newver=$(npm --no-git-tag-version version 1ドル)
# only add the package.json, dist files are gone
git add package.json
# commit and push tags
git commit -m $newver
git push --tags
git push

I'm wondering if this would be considered as a bad-practice, if there is something I could improve, or if someone has a better idea on how to do this. It's working great, but is having a tag that refers to an overridden commit a good idea?

200_success
145k22 gold badges190 silver badges478 bronze badges
asked Jun 23, 2016 at 12:15
\$\endgroup\$

1 Answer 1

2
\$\begingroup\$

It's a very nicely written script.

It's working great, but is having a tag that refers to an overridden commit a good idea?

It doesn't sound great, but I don't have a better idea either. In any case, I don't see any harm in doing this. The content of these commits don't pollute the history because they are not really part of it.

(削除) If repository storage becomes a problem later, you can always wipe out the obsolete tags. (削除ここまで) (As you mentioned in a comment, this might not be such a good idea if package managers (like bower) rely on git tags for dependencies...)

Error handling

What if gulp fails? The script will happily go ahead and publish something broken or half-baked. It would be good to add some error handling here, for example:

if ! gulp; then
 echo "Fatal: gulp failed, aborting..."
 exit 1
fi

Code duplication

This line appears twice:

newver=$(npm --no-git-tag-version version 1ドル)

As it's a non-trivial command, it would be good to put it in a function, for example:

set_newver() {
 newver=$(npm --no-git-tag-version version 1ドル)
}

Naming

It's good to give command line parameters a proper name early on, and refer to them by that name throughout the script, instead of a meaningless 1ドル. For example version.

This may be subjective, but I find newver a bit awkward, and perhaps npm_version would be better. I leave that up to you.

answered Jul 6, 2016 at 19:29
\$\endgroup\$
2
  • \$\begingroup\$ "you can always wipe out the obsolete tags" This is not a good idea if package managers (like bower) rely on git tags for dependencies. \$\endgroup\$ Commented Jul 6, 2016 at 19:53
  • \$\begingroup\$ Hm, ok, I see your point... Scratched that out, and added your comment. \$\endgroup\$ Commented Jul 6, 2016 at 19:59

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.