forked from firefly-iii/firefly-iii
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpatch_docker.sh
More file actions
executable file
·114 lines (95 loc) · 3.12 KB
/
Copy pathpatch_docker.sh
File metadata and controls
executable file
·114 lines (95 loc) · 3.12 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
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
#!/bin/bash
### Edit these variables
DOCKER_CONTAINER="firefly_fireflyiii_1"
DOCKER_COMPOSE="/var/www/firefly/docker-compose.yml"
GITHUB_DOWNLOAD="https://github.com/cestpasphoto/firefly-iii/raw/main/"
SRC_PATCH="firefly_src.patch"
BIN_PATCH="firefly_bin.patch"
### Apply patch(es)
apply_patch () {
# Download remote patch if locally missing
[[ -f ${SRC_PATCH} ]] || wget ${GITHUB_DOWNLOAD}${SRC_PATCH}
cp ${SRC_PATCH} global.patch
if [[ "$1" == "src+bin" || "$1" == "" ]]; then
[[ -f ${BIN_PATCH} ]] || wget ${GITHUB_DOWNLOAD}${BIN_PATCH}
cat ${BIN_PATCH} >> global.patch
fi
sudo docker cp global.patch ${DOCKER_CONTAINER}:/var/www/html/
sudo docker exec -it ${DOCKER_CONTAINER} /bin/bash -c '
patch -s -p0 < global.patch
rm global.patch
'
rm global.patch
}
### Clean docker from previous patches (redownload image)
clean_docker () {
sudo docker container stop ${DOCKER_CONTAINER}
sudo docker container rm ${DOCKER_CONTAINER}
if [[ "$1" == "pull" ]]; then
sudo docker-compose pull
fi
sudo docker-compose -f ${DOCKER_COMPOSE} up -d
}
### Prepare environment to compile and generate patches
install_env () {
sudo docker exec -it ${DOCKER_CONTAINER} /bin/bash -c '
# backup stuff
cp -a public public.backup
cp -a resources resources.backup
cp -a app app.backup
# install nodejs and npm, and update to latest version, install laravel mix, and compile
apt-get update ; apt-get install -y npm nano ; npm cache clean -f ; npm install -g n ; n lts ; PATH="$PATH"
npm install
'
}
# Compile and generate patches
build () {
sudo docker exec -it ${DOCKER_CONTAINER} /bin/bash -c '
# Build v1 layout first
mv package.json package.new.json
mv package.old.json package.json
npm install laravel-mix
npx mix
# Fix some permissions and compile
mv package.json package.old.json
mv package.new.json package.json
npm install
npm run build
# Create patches
find ./ -iname "*.rej" -delete ; find ./ -iname "*.orig" -delete
diff -Naur -x reconcile.js public.backup/v1/ public/v1/ > firefly_bin.patch
'
# Get the patch on host
sudo docker cp ${DOCKER_CONTAINER}:/var/www/html/firefly_bin.patch .
}
###############################################################################
if [[ "$1" == "update" ]]; then
# Update docker based on firefly_src.patch
clean_docker "pull"
install_env
apply_patch "src"
echo -en "\n\n => check above and type 'build' if no conflict during patching: "
read userans
if [[ "$userans" == "build" ]]; then
build
else
echo "so, solve such conflicts and then run ./patch_docker.sh build"
fi
elif [[ "$1" == "build" ]]; then
# Just build and export firefly_bin.patch
build
elif [[ "$1" == "patch" ]]; then
# Patch using src.patch + bin.patch
clean_docker
apply_patch "src+bin"
elif [[ "$1" == "custom" ]]; then
clean_docker
install_env
apply_patch "src"
else
echo "\
Use one of these actions as argument:
update (update docker, apply firefly_src.patch, then ask to build)
build (build and export firefly_bin.patch)
patch (clean and apply src+bin patches)"
fi