Skip to content

Instantly share code, notes, and snippets.

@madbence
Last active January 13, 2016 15:09
Show Gist options
  • Select an option

  • Save madbence/a67c19b9eaa46c3fc49c to your computer and use it in GitHub Desktop.

Select an option

Save madbence/a67c19b9eaa46c3fc49c to your computer and use it in GitHub Desktop.
#!/bin/bash
log() {
echo "$@" 1>&2
}
create-release() {
local url="https://api.github.com/repos/$owner/$repo/releases"
local payload="{\"tag_name\":\"v$version\"}"
log "post to $url with $payload..."
local result=$(curl -XPOST -d $payload -H 'Content-Type: application/json' -H "Authorization: token $GITHUB_ACCESS_TOKEN" $url)
local release=$(node -pe "($result).id")
if [ $release = undefined ]; then
log "failed to create release: $(node -pe "($result).message")"
exit 1
fi
echo $release
}
upload-asset() {
local n=${1-5}
if [ $n -eq 0 ]; then
echo undefined
exit 1
fi
local url="https://uploads.github.com/repos/$owner/$repo/releases/$release/assets?name=$version.tgz"
log "uploading to $url... ($n)"
local result=$(curl -XPOST -H 'Content-Type: application/gzip' -H "Authorization: token $GITHUB_ACCESS_TOKEN" --data-binary @release/$version.tgz $url)
local asset=$(node -pe "($result).id" || echo undefined)
if [ $asset = undefined ]; then
log "upload failed..."
log $result
upload-asset $(( $n - 1 ))
return
fi
echo $asset
}
npv() {
node -pe "($(cat package.json)).version"
}
mk-release-asset() {
mkdir -p release
rm release/*
log "creating release asset v$version..."
tar cz --exclude .git --exclude release --exclude mk-release -f "release/$version.tgz" .
log "release asset v$version created."
}
owner=$1
repo=$2
version=$(npv)
log "create release v$version on $owner/$repo..."
mk-release-asset
release=$(create-release)
if [ $? -gt 0 ]; then
exit 1
fi
echo "release id: $release"
asset=$(upload-asset)
log "asset uploaded: $asset"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment