forked from Darklg/gitDeployer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
87 lines (74 loc) · 2.21 KB
/
deploy.sh
File metadata and controls
87 lines (74 loc) · 2.21 KB
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
#!/bin/bash
echo '################';
echo '# Git Deployer';
echo '# v 0.2.2';
echo '# By @Darklg';
echo '################';
echo '';
###################################
## Change config values here
###################################
# - Project name
PROJID='myprojectname';
# - Public subfolder ( usually www )
PRODDIR='wwwfoldername';
# - 1-step deploy ('y' to activate)
ONESTEPDEPLOY='n';
###################################
## Install
###################################
# Vars
MAINPATH="$(pwd)/";
GITPATH="${MAINPATH}${PROJID}.git/";
HOOKPATH="${GITPATH}hooks/post-receive";
SRCPATH="${MAINPATH}src/";
PRODPATH="${MAINPATH}${PRODDIR}/";
EXCLUDEFILENAME="exclude-list.txt";
EXCLUDEFILEPATH="${MAINPATH}${EXCLUDEFILENAME}";
# Install git repository if not available
cd "${MAINPATH}";
if [[ ! -d "${GITPATH}" ]]; then
mkdir "${GITPATH}";
cd "${GITPATH}";
git init --bare;
echo "- [${PROJID}] GIT Repository is initialized";
if [[ "${ONESTEPDEPLOY}" == 'y' ]]; then
touch "${HOOKPATH}";
chmod +x "${HOOKPATH}";
echo "#!/bin/sh" >> "${HOOKPATH}";
echo "GIT_DIR='${SRCPATH}.git';" >> "${HOOKPATH}";
echo "GIT_WORK_TREE='${SRCPATH}';" >> "${HOOKPATH}";
echo "cd ${MAINPATH}" >> "${HOOKPATH}";
echo "/bin/bash ${MAINPATH}deploy.sh" >> "${HOOKPATH}";
fi;
fi;
# Install src dir if not available
cd "${MAINPATH}";
if [[ ! -d "${SRCPATH}" ]]; then
git clone "${GITPATH}" src;
echo "- [${PROJID}] Source folder is initialized";
fi;
# Install exclude file
cd "${MAINPATH}";
if [[ ! -f "${EXCLUDEFILEPATH}" ]]; then
touch "${EXCLUDEFILEPATH}";
echo ".git" >> "${EXCLUDEFILEPATH}";
echo ".gitignore" >> "${EXCLUDEFILEPATH}";
echo ".gitmodules" >> "${EXCLUDEFILEPATH}";
echo "- [${PROJID}] Exclude file is initialized";
fi;
# Pull latest version
cd "${SRCPATH}";
git pull;
git submodule init;
git submodule update;
git pull;
echo "- [${PROJID}] Latest project files are pulled";
# Rsync to prod director
cd "${MAINPATH}";
rsync -ruv --exclude-from "${EXCLUDEFILENAME}" "${SRCPATH}" "${PRODPATH}";
echo "- [${PROJID}] Project is synchronized !";
# Scripts post deployment
if [[ -f "${MAINPATH}post-deploy.sh" ]]; then
. "${MAINPATH}post-deploy.sh";
fi;