-
Notifications
You must be signed in to change notification settings - Fork 21
/
makeRelease.sh
executable file
·170 lines (138 loc) · 3.88 KB
/
makeRelease.sh
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/bin/bash
PREVIOUS_SF_ENV=${SYMFONY_ENV}
PREVIOUS_EB_ENV=${ENGINEBLOCK_ENV}
export SYMFONY_ENV=prod
export ENGINEBLOCK_ENV=production
RELEASE_DIR=${HOME}/Releases
GITHUB_USER=OpenConext
PROJECT_NAME=OpenConext-engineblock
if [ -z "$1" ]
then
cat << EOF
Please specify the tag or branch to make a release of.
Examples:
sh makeRelease.sh 0.1.0
sh makeRelease.sh master
sh makeRelease.sh develop
If you want to GPG sign the release, you can specify the "sign" parameter, this will
invoke the gpg command line tool to sign it.
sh makeRelease 0.1.0 sign
EOF
exit 1
else
TAG=$1
fi
PROJECT_DIR_NAME=${PROJECT_NAME}-${TAG//\//_} &&
PROJECT_DIR=${RELEASE_DIR}/${PROJECT_DIR_NAME} &&
# Check requirements
command -v php >/dev/null 2>&1 || { echo >&2 "Missing PHP 7.2. Aborting"; exit 1; }
command -v composer >/dev/null 2>&1 || { echo >&2 "Missing Composer. Aborting."; exit 1; }
command -v yarn >/dev/null 2>&1 || { echo >&2 "Missing yarn. Aborting."; exit 1; }
command -v git >/dev/null 2>&1 || { echo >&2 "Missing Git. Aborting."; exit 1; }
# Prepare environment
echo "Preparing environment" &&
mkdir -p ${RELEASE_DIR} &&
rm -rf ${PROJECT_DIR} &&
echo "Cloning repository" &&
cd ${RELEASE_DIR} &&
git clone https://github.com/${GITHUB_USER}/${PROJECT_NAME}.git ${PROJECT_DIR_NAME} &&
echo "Checking out ${TAG}" &&
cd ${PROJECT_DIR} &&
git checkout ${TAG}
if [ $? -eq 0 ]; then
echo "Project prepared"
else
echo "Initialization failed"
exit 1
fi
# Install composer dependencies
echo "Running Composer Install" &&
php $(which composer) install -n --no-dev --prefer-dist -o
if [ $? -eq 0 ]; then
echo "Composer install ran"
else
echo "Unable to run composer install"
exit 1
fi
# Install JavaScript dependencies
echo "Build assets"
cd ${PROJECT_DIR}/theme &&
CYPRESS_INSTALL_BINARY=0 yarn &&
yarn release
if [ $? -eq 0 ]; then
echo "Assets build"
else
echo "Unable to build assets"
exit 1
fi
# Tag release and remove unwanted files
echo "Tagging the release in RELEASE file" &&
COMMITHASH=`git rev-parse HEAD` &&
echo "Tag: ${TAG}" > ${PROJECT_DIR}/RELEASE &&
echo "Commit: ${COMMITHASH}" >> ${PROJECT_DIR}/RELEASE &&
echo "Updating asset_version in config" &&
sed -i s,#ASSET_VERSION#,${TAG},g ${PROJECT_DIR}/app/config/config.yml &&
echo "Cleaning build of dev files" &&
rm -rf ${PROJECT_DIR}/.idea &&
rm -rf ${PROJECT_DIR}/.git &&
rm -rf ${PROJECT_DIR}/.github &&
rm -f ${PROJECT_DIR}/.gitignore &&
rm -f ${PROJECT_DIR}/makeRelease.sh &&
rm -f ${PROJECT_DIR}/bin/composer.phar &&
rm -f ${PROJECT_DIR}/app_dev.php.dist &&
rm -rf ${PROJECT_DIR}/features &&
rm -rf ${PROJECT_DIR}/behat.yml &&
rm -rf ${PROJECT_DIR}/build.xml &&
rm -rf ${PROJECT_DIR}/tests &&
rm -rf ${PROJECT_DIR}/ci &&
rm -rf ${PROJECT_DIR}/theme/node_modules &&
rm -rf ${PROJECT_DIR}/theme/cypress &&
rm -rf ${PROJECT_DIR}/theme/.sass-cache
if [ $? -eq 0 ]; then
echo "Release buildd"
else
echo "Failed to build release"
exit 1
fi
# Create tarball
echo "Create tarball" &&
cd ${RELEASE_DIR} &&
tar -czf ${PROJECT_DIR_NAME}.tar.gz ${PROJECT_DIR_NAME}
if [ $? -eq 0 ]; then
echo "Tarball build"
else
echo "Unable to build tarball"
exit 1
fi
# Create checksum
echo "Create checksum file" &&
cd ${RELEASE_DIR} &&
if hash sha1sum 2>/dev/null; then
sha1sum ${PROJECT_DIR_NAME}.tar.gz > ${PROJECT_DIR_NAME}.sha
else
shasum ${PROJECT_DIR_NAME}.tar.gz > ${PROJECT_DIR_NAME}.sha
fi
if [ $? -eq 0 ]; then
echo "Checksum created"
else
echo "Unable to create checksum"
exit 1
fi
# Sign with GPG key
if [ -n "$2" ]
then
if [ "$2" == "sign" ]
then
echo "Signing build"
cd ${RELEASE_DIR}
gpg -o ${PROJECT_DIR_NAME}.sha.gpg --clearsign ${PROJECT_DIR_NAME}.sha
if [ $? -eq 0 ]; then
echo "Signed"
else
echo "Unable to sign tarball"
exit 1
fi
fi
fi
export SYMFONY_ENV=${PREVIOUS_SF_ENV}
export ENGINEBLOCK_ENV=${PREVIOUS_EB_ENV}