Add a release creation script

One TBD left is the signing of the tarballs.

Signed-off-by: Alexey Neyman <stilor@att.net>
This commit is contained in:
Alexey Neyman 2017-03-21 13:58:13 -07:00
parent 3906acc007
commit de4433298a
5 changed files with 110 additions and 3 deletions

2
.gitignore vendored
View File

@ -23,3 +23,5 @@ build.log
targets/
# .. and log for 'build-all'
.build-all
# .. and release creation
release

View File

@ -360,8 +360,8 @@ install-doc-message:
install-doc-real: $(DESTDIR)$(docdir)
@echo " INST 'docs/*.txt'"
@for doc_file in docs/*.txt; do \
@echo " INST 'docs/manual/*.md'"
@for doc_file in docs/manual/*.md; do \
$(install) -m 644 "$${doc_file}" "$(DESTDIR)$(docdir)"; \
done

5
maintainer/README Normal file
View File

@ -0,0 +1,5 @@
These scripts are not of much interest to the end user.
They are used to automate everyday maintenance tasks for crosstool-NG. As such,
they are not subject to the same level of portability requirements - they can
expect to be run on a fairly modern Linux distribution, with bash, GNU sed and
grep, etc.

100
maintainer/create-release.sh Executable file
View File

@ -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

View File

@ -422,7 +422,7 @@ CT_SanitizeVarDir() {
}
if (!seencomp && !isabs && !trail) {
# Eliminated all components, but no trailing slash -
# if the result is appened with /foo, must not become absolute
# if the result is appended with /foo, must not become absolute
printf ".";
}
if ((!seencomp && isabs) || (seencomp && trail)) {