summaryrefslogtreecommitdiff
path: root/maintainer/create-release.sh
diff options
context:
space:
mode:
Diffstat (limited to 'maintainer/create-release.sh')
-rwxr-xr-xmaintainer/create-release.sh100
1 files changed, 100 insertions, 0 deletions
diff --git a/maintainer/create-release.sh b/maintainer/create-release.sh
new file mode 100755
index 0000000..b04747e
--- /dev/null
+++ b/maintainer/create-release.sh
@@ -0,0 +1,100 @@
+#!/bin/bash
+
+# Configurable portions
+docs_git=https://github.com/crosstool-ng/crosstool-ng.github.io.git
+docs_subdir=_pages/docs
+formats=( "bz2" "xz" )
+declare -A tar_opt=( ["bz2"]=j ["xz"]=J )
+digests=( md5 sha1 sha512 )
+
+do_trace()
+{
+ echo " --> $@" >&2
+}
+
+do_abort()
+{
+ echo "ERROR: $@" >&2
+ exit 1
+}
+
+# Go to the top-level
+topdir=`git rev-parse --show-toplevel`
+if [ -z "${topdir}" ]; then
+ do_abort "Not in the Git clone"
+fi
+cd "${topdir}"
+
+# Determine the version. Replace the dashes with dots, as packaging
+# systems don't expect dashes in versions, but they're ok in package
+# name.
+version=`git describe | sed -r -e 's,-,.,g' -e 's,^crosstool\.ng\.,crosstool-ng-,'`
+do_trace "Creating release for ${version}"
+
+# Create the base working directory
+if [ -e "release" -a ! -d "release" ]; then
+ do_abort "File 'release' already exists but is not a directory"
+fi
+mkdir -p "release"
+
+# Copy the base stuff
+do_trace "Copying crosstool-NG"
+rm -rf "release/${version}"
+git archive --prefix="${version}/" HEAD | tar xf - -C "release"
+
+# Clone a repository for docs. Github does not support 'git archive --remote='.
+do_trace "Checking out docs"
+rm -rf "release/site"
+git clone --depth=1 "${docs_git}" "release/site"
+
+# The rest of modifications are inside the release directory
+cd "release/${version}"
+
+# Copy the docs instead of the MANUAL_ONLINE placeholder
+do_trace "Replacing docs"
+rm "docs/MANUAL_ONLINE"
+mkdir -p "docs/manual"
+for i in "../site/${docs_subdir}/"*.md; do
+ awk '
+BEGIN { skip=0; }
+ {
+ if ($0=="---") {
+ if (NR==1) {
+ skip=1
+ next
+ }
+ else if (skip) {
+ skip=0
+ next
+ }
+ }
+ if (!skip) {
+ print $0
+ }
+ }
+' < "${i}" > "docs/manual/${i##*/}"
+done
+
+# Run bootstrap before it is removed
+do_trace "Bootstrapping"
+./bootstrap
+rm -f bootstrap
+
+# Remove other things not for the end user
+do_trace "Removing unreleased files"
+rm -f .travis.*
+find -name .gitignore | xargs rm
+rm -rf autom4te.cache maintainer
+
+# Go back to top level
+cd ../..
+
+# Package up
+do_trace "Packaging"
+for fmt in "${formats[@]}"; do
+ tar c${tar_opt[$fmt]}f "release/${version}.tar.${fmt}" -C "release" "${version}"
+ for h in "${digests[@]}"; do
+ ${h}sum "release/${version}.tar.${fmt}" > "release/${version}.tar.${fmt}.${h}"
+ done
+ # TBD sign
+done