blob: 4c75533945baf1820d53f812e075cce903515811 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#!/usr/bin/env bash
set -o errexit -o nounset -o pipefail
[[ $(whoami) == "root" ]] || exit 1
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
function ENV_SETUP() {
eselect news read --quiet all
eselect ruby set 1
if [[ ! -d /etc/portage/env/ ]]; then
mkdir /etc/portage/env/
fi
echo 'FEATURES="${FEATURES} test keepwork"' > /etc/portage/env/test
if [[ ! -d $SCRIPT_DIR/ci-logs/ ]]; then
mkdir "$SCRIPT_DIR/ci-logs"
fi
}
function SETUP () {
cp /var/lib/portage/world /var/lib/portage/world.original
echo "" > /etc/portage/package.accept_keywords
echo "=$PACKAGE doc" > /etc/portage/package.use
echo "=$PACKAGE test" > /etc/portage/package.env
if [[ -e /usr/portage/packages/$PACKAGE.tbz2 ]]; then
rm "/usr/portage/packages/$PACKAGE.tbz2"
fi
if [[ $TYPE == "next_target" ]]; then
mkdir -p "$SCRIPT_DIR/overlay"
mkdir -p "$SCRIPT_DIR/overlay/$CATEGORY/$NAME"
cp "/usr/portage/$CATEGORY/$NAME/$NAME-$VERSION.ebuild" "$SCRIPT_DIR/overlay/$CATEGORY/$NAME"
cp "/usr/portage/$CATEGORY/$NAME/metadata.xml" "$SCRIPT_DIR/overlay/$CATEGORY/$NAME"
cp -r "/usr/portage/$CATEGORY/$NAME/files" "$SCRIPT_DIR/overlay/$CATEGORY/$NAME" || true
(
cd "$SCRIPT_DIR/overlay/$CATEGORY/$NAME"
sed -i -e "/^USE_RUBY/s/$CURR_TARGET/$CURR_TARGET $NEXT_TARGET/" "$NAME-$VERSION.ebuild"
repoman manifest
repoman full
)
fi
set +e
emerge --pretend --quiet "=$PACKAGE"
if [[ $? == 1 ]]; then
emerge --autounmask-write "=$PACKAGE"
etc-update --automode -5
fi
set -e
}
function EMERGE() {
set +e
timeout 1000 emerge --usepkg --buildpkg "=$PACKAGE"
LOG "$?"
set -e
}
function LOG() {
DATE=$(date +%s)
SHA1=$(sha1sum "/usr/portage/$CATEGORY/$NAME/$NAME-$VERSION.ebuild" | awk '{print $1}')
mkdir -p "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE"
emerge --info "=$PACKAGE" > "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE/emerge-info"
emerge -pqv "=$PACKAGE" > "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE/emerge-pqv"
cp "/var/tmp/portage/$PACKAGE/temp/build.log" "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE/build.log"
cp "/var/tmp/portage/$PACKAGE/temp/environment" "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE/environment"
gem list > "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE/gem-list"
if [[ $1 == 0 ]]; then
RESULT="\e[0;32mBUILD SUCCEEDED\e[0m"
echo "succeeded" > "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE/result"
elif [[ $1 == 1 ]]; then
RESULT="\e[0;31mBUILD FAILED\e[0m"
echo "failed" > "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE/result"
elif [[ $1 == 124 ]]; then
RESULT="\e[0;31mBUILD TIMED OUT\e[0m"
echo "timed out" > "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE/result"
else
RESULT="\e[0;31mBUILD UNKNOWN\e[0m"
echo "unknown" > "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE/result"
fi
chmod 755 -R "$SCRIPT_DIR/ci-logs/$SHA1/$TYPE/builds/$DATE"
}
function CLEANUP() {
mv /var/lib/portage/world.original /var/lib/portage/world
rm -r /var/tmp/portage/* || true
emerge --depclean --quiet
echo -e "$PACKAGE : $RESULT"
if [[ $TYPE == "next_target" ]]; then
rm -r "$SCRIPT_DIR/overlay"
fi
}
ENV_SETUP
PKG_ARR=($(qatom "$1"))
CATEGORY="${PKG_ARR[0]}"
NAME="${PKG_ARR[1]}"
if [[ ${PKG_ARR[3]:=foo} == "foo" ]]; then
VERSION="${PKG_ARR[2]}"
else
VERSION="${PKG_ARR[2]}-${PKG_ARR[3]}"
fi
if [[ $# -eq 1 ]]; then
TYPE="current_target"
PACKAGE=$1
SETUP
EMERGE
CLEANUP
elif [[ $# -eq 3 ]]; then
TYPE="current_target"
PACKAGE=$1
SETUP
EMERGE
CLEANUP
TYPE="next_target"
PACKAGE=$1
CURR_TARGET=$2
NEXT_TARGET=$3
SETUP
EMERGE
CLEANUP
fi
|