mirror of
https://github.com/upx/upx.git
synced 2024-11-30 16:11:08 +00:00
206 lines
5.5 KiB
Bash
206 lines
5.5 KiB
Bash
#! /bin/bash
|
|
## vim:set ts=4 sw=4 et:
|
|
set -e; set -o pipefail
|
|
|
|
# Support for Travis CI -- https://travis-ci.org/upx/upx/builds
|
|
# Copyright (C) Markus Franz Xaver Johannes Oberhumer
|
|
|
|
if [[ $TRAVIS_OS_NAME == osx ]]; then
|
|
argv0=$0; argv0abs=$(greadlink -en -- "$0"); argv0dir=$(dirname "$argv0abs")
|
|
else
|
|
argv0=$0; argv0abs=$(readlink -en -- "$0"); argv0dir=$(dirname "$argv0abs")
|
|
fi
|
|
source "$argv0dir/travis_init.sh" || exit 1
|
|
|
|
set -x # debug
|
|
|
|
if [[ $BM_X == rebuild-stubs ]]; then exit 0; fi
|
|
# save space and do not deploy debug builds
|
|
if [[ $BM_B =~ (^|\+)coverage($|\+) ]]; then exit 0; fi
|
|
if [[ $BM_B =~ (^|\+)debug($|\+) ]]; then exit 0; fi
|
|
if [[ $BM_B =~ (^|\+)sanitize($|\+) ]]; then exit 0; fi
|
|
if [[ $BM_B =~ (^|\+)scan-build($|\+) ]]; then exit 0; fi
|
|
if [[ $BM_B =~ (^|\+)valgrind($|\+) ]]; then exit 0; fi
|
|
|
|
# prepare $subdir and $branch
|
|
subdir=
|
|
branch=
|
|
if [[ -n $APPVEYOR_JOB_ID ]]; then
|
|
branch=$APPVEYOR_REPO_BRANCH
|
|
if [[ -n $APPVEYOR_PULL_REQUEST_NUMBER ]]; then exit 0; fi
|
|
elif [[ -n $GITLAB_CI ]]; then
|
|
subdir=$CI_BUILD_NAME
|
|
branch=$CI_BUILD_REF_NAME
|
|
else
|
|
branch=$TRAVIS_BRANCH
|
|
if [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then exit 0; fi
|
|
fi
|
|
subdir=${subdir%%:*}; subdir=${subdir%%/*}; subdir=${subdir%%--*}
|
|
case $branch in
|
|
appveyor*) ;;
|
|
devel*) ;;
|
|
gitlab*) ;;
|
|
master*) ;;
|
|
travis*) ;;
|
|
*) exit 0;;
|
|
esac
|
|
|
|
# get $rev, $branch and $git_user
|
|
cd / && cd $upx_SRCDIR || exit 1
|
|
rev=$(git rev-parse --verify HEAD)
|
|
if [[ "$branch" == gitlab* ]]; then
|
|
if git fetch -v origin devel; then
|
|
git branch -a -v
|
|
rev=$(git merge-base origin/devel $rev || echo $rev)
|
|
fi
|
|
fi
|
|
timestamp=$(git log -n1 --format='%at' $rev)
|
|
date=$(TZ=UTC0 date -d "@$timestamp" '+%Y%m%d-%H%M%S')
|
|
#branch="$branch-$date-${rev:0:6}"
|
|
# make the branch name a little bit shorter so that it looks nice on GitHub
|
|
branch="$branch-${date:0:8}-${rev:0:7}"
|
|
if [[ -n $APPVEYOR_JOB_ID ]]; then
|
|
branch="$branch-appveyor"
|
|
git_user="AppVeyor CI"
|
|
elif [[ -n $GITLAB_CI ]]; then
|
|
branch="$branch-gitlab"
|
|
git_user="GitLab CI"
|
|
else
|
|
branch="$branch-travis"
|
|
git_user="Travis CI"
|
|
fi
|
|
unset timestamp date
|
|
|
|
# /***********************************************************************
|
|
# // prepare directory $d
|
|
# ************************************************************************/
|
|
|
|
cd / && cd $upx_BUILDDIR || exit 1
|
|
|
|
mkdir deploy || exit 1
|
|
chmod 700 deploy
|
|
cd deploy || exit 1
|
|
|
|
if [[ -n $BM_CROSS ]]; then
|
|
d=$BM_CROSS
|
|
else
|
|
cpu=unknown
|
|
case $BM_C in
|
|
clang*-m32 | gcc*-m32) cpu=i386;;
|
|
clang*-m64 | gcc*-m64) cpu=amd64;;
|
|
clang*-mx32 | gcc*-mx32) cpu=amd64;;
|
|
msvc*-x86) cpu=i386;;
|
|
msvc*-x64) cpu=amd64;;
|
|
esac
|
|
os=$TRAVIS_OS_NAME
|
|
if [[ $os == osx ]]; then
|
|
os=darwin
|
|
elif [[ $os == windows ]]; then
|
|
[[ $cpu == i386 ]] && os=win32
|
|
[[ $cpu == amd64 ]] && os=win64
|
|
fi
|
|
d=$cpu-$os
|
|
unset cpu os
|
|
fi
|
|
d=$d-$BM_C-$BM_B
|
|
|
|
# remove redundant -m32/-m64/-x86/-x64 from directory name
|
|
if [[ $d =~ ^((i386-darwin|i386-linux|i386-win32).*)(-m32|-x86)(-.+)?$ ]]; then
|
|
d="${BASH_REMATCH[1]}${BASH_REMATCH[4]}"
|
|
fi
|
|
if [[ $d =~ ^((amd64-darwin|amd64-linux|amd64-win64).*)(-m64|-x64)(-.+)?$ ]]; then
|
|
d="${BASH_REMATCH[1]}${BASH_REMATCH[4]}"
|
|
fi
|
|
|
|
if [[ -n $subdir ]]; then
|
|
print_header "DEPLOY $subdir/$d"
|
|
else
|
|
print_header "DEPLOY $d"
|
|
fi
|
|
|
|
mkdir $d || exit 1
|
|
for exeext in .exe .out; do
|
|
f=$upx_BUILDDIR/upx$exeext
|
|
if [[ -f $f ]]; then
|
|
cp -p -i $f $d/upx-git-${rev:0:12}$exeext
|
|
sha256sum -b $d/upx-git-${rev:0:12}$exeext
|
|
fi
|
|
unset f
|
|
done
|
|
|
|
# /***********************************************************************
|
|
# // clone, add files & push
|
|
# ************************************************************************/
|
|
|
|
new_branch=0
|
|
if ! git clone -b "$branch" --single-branch https://github.com/upx/upx-automatic-builds.git; then
|
|
git clone -b master --single-branch https://github.com/upx/upx-automatic-builds.git
|
|
new_branch=1
|
|
fi
|
|
cd upx-automatic-builds || exit 1
|
|
chmod 700 .git
|
|
git config user.name "$git_user"
|
|
git config user.email "none@none"
|
|
if [[ $new_branch == 1 ]]; then
|
|
git checkout --orphan "$branch"
|
|
git reset --hard || true
|
|
fi
|
|
git ls-files -v
|
|
|
|
if [[ -n $subdir ]]; then
|
|
[[ -d $subdir ]] || mkdir $subdir
|
|
mv ../$d $subdir/
|
|
git add $subdir/$d
|
|
else
|
|
mv ../$d .
|
|
git add $d
|
|
fi
|
|
|
|
if git diff --cached --exit-code --quiet >/dev/null; then
|
|
# nothing to do ???
|
|
exit 0
|
|
fi
|
|
|
|
now=$(date '+%s')
|
|
##date=$(TZ=UTC0 date -d "@$now" '+%Y-%m-%d %H:%M:%S')
|
|
git commit --date="$now" -m "Automatic build $d"
|
|
git ls-files -v
|
|
#git log --pretty=fuller
|
|
|
|
umask 077
|
|
[[ -d ~/.ssh ]] || mkdir ~/.ssh
|
|
fix_home_ssh_perms
|
|
repo=$(git config remote.origin.url)
|
|
ssh_repo=${repo/https:\/\/github.com\//git@github.com:}
|
|
eval $(ssh-agent -s)
|
|
set +x # IMPORTANT
|
|
openssl aes-256-cbc -d -a -K "$UPX_AUTOMATIC_BUILDS_SSL_KEY" -iv "$UPX_AUTOMATIC_BUILDS_SSL_IV" -in "$upx_SRCDIR/.github/upx-automatic-builds@github.com.enc" -out .git/deploy.key
|
|
set -x
|
|
chmod 600 .git/deploy.key
|
|
ssh-add .git/deploy.key
|
|
fix_home_ssh_perms
|
|
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
|
|
fix_home_ssh_perms
|
|
|
|
let i=0 || true
|
|
while true; do
|
|
if [[ $i -ge 10 ]]; then
|
|
echo "ERROR: git push failed"
|
|
exit 1
|
|
fi
|
|
if [[ $new_branch == 1 ]]; then
|
|
if git push -u $ssh_repo "$branch"; then break; fi
|
|
else
|
|
if git push $ssh_repo "$branch"; then break; fi
|
|
fi
|
|
git branch -a -v
|
|
git fetch -v origin "$branch"
|
|
git branch -a -v
|
|
git rebase FETCH_HEAD
|
|
git branch -a -v
|
|
sleep $((RANDOM % 5 + 1))
|
|
let i+=1
|
|
done
|
|
|
|
exit 0
|